Skip to content

Commit 195eb62

Browse files
committed
qbittorrent: enable local host auth.
1 parent a3b1593 commit 195eb62

File tree

7 files changed

+115
-48
lines changed

7 files changed

+115
-48
lines changed

qbittorrent/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ ENV QBT_PROFILE=/home/qbittorrent \
4646
PGID=100 \
4747
WEBUI_PORT=8080 \
4848
BT_PORT=34567 \
49+
QB_USERNAME=admin \
50+
QB_PASSWORD=adminadmin \
4951
LANG=zh_CN.UTF-8 \
5052
SHELL=/bin/bash \
5153
PS1="\u@\h:\w \$ "
@@ -56,6 +58,7 @@ RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.bfsu.edu.cn/g' /etc/apk/repositorie
5658
curl \
5759
jq \
5860
openssl \
61+
python3 \
5962
qt6-qtbase \
6063
qt6-qtbase-sqlite \
6164
shadow \

qbittorrent/readme.md

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
| 20230529 | 4.5.3 | 2.0.9 | 3.18.0 | 1. 再一次优化`report-seed-files`减少70%时长;</br>2. `dl-finish`不再使用`%I`传参,而使用`%K`,已经部署好的使用`%I`也没有问题(除非会有混合种子或v2种子);3. 增加`gen-dup`脚本,详见“命令”章节。 |
5757
| 20230619 | 4.5.4 | 2.0.9 | 3.18.2 | `gen-dup`脚本增加总计输出。 |
5858
| 20230830 | 4.5.5 | 2.0.9 | 3.18.3 | 抛弃`s6-overlay`,直接交给`tini`来捕获退出信号,在退出/停止容器时qB会自动保存配置和种子进度。定时任务改由低权限运行,日志记录在容器内的`/data/diy/crond.log`,不再输出到容器控制台。 |
59+
| 20230906 | 4.5.5 | 2.0.9 | 3.18.3 | 为保证用户安全,防止用户因使用反代并代理了127.0.0.1这种情况导致安全性降低,从2023年9月5日更新的镜像开始,创建容器需要新增设置两个环境变量:QB_USERNAME(登陆qBittorrent的用户名)和QB_PASSWORD(登陆qBittorrent的密码)。容器将在创建时使用这两个环境变量去设置(如已存在配置文件则是修改)登陆qBittorent的用户名和密码。如未设置这两个环境变量,或者保持为qBittorrent的默认值(默认用户名:admin,默认密码:adminadmin),则本容器附加的所有脚本、定时任务将无法继续使用。[详情](https://github.com/devome/dockerfiles/issues/101)。也因此镜像默认即安装好python,不再需要设置`INSTALL_PYTHON`这个环境变量。 |
5960

6061
## 环境变量清单
6162

@@ -80,33 +81,35 @@
8081
| 3 | PGID | 100 | 用户的gid,输入命令`id -g`可以查到,以该用户运行qbittorrent-nox,群晖用户必须改。 |
8182
| 4 | WEBUI_PORT | 8080 | WebUI访问端口,建议自定义,如需公网访问,需要将qBittorrent和公网之间所有网关设备上都设置端口转发。 |
8283
| 5 | BT_PORT | 34567 | BT监听端口,建议自定义,如需达到`可连接`状态,需要将qBittorrent和公网之间所有网关设备上都设置端口转发。 |
83-
| 6 | TZ | Asia/Shanghai | 时区,可填内容详见:https://meetingplanner.io/zh-cn/timezone/cities |
84-
| 7 | INSTALL_PYTHON | false | 默认不安装python,如需要python(qBittorrent的搜索功能必须安装python),请设置为`true`,设置后将在首次启动容器时自动安装好。 |
85-
| 8 | ENABLE_AUTO_CATEGORY | true | 4.3.7+可用。是否自动按tracker进行分类,默认为`true`开启,如需关闭,请设置为`false`|
86-
| 9 | CATEGORY_OR_TAG | category | 4.3.9及4.5.0+可用,当`ENABLE_AUTO_CATEGORY=true`时,控制自动分类是qBittorrent中的“分类”还是“标签”。设置为`category`(默认值)为“分类”,设置为`tag`为“标签”。当设置为`tag`时,由于标签不是唯一的,无法筛选出没有打上tracker标签的种子,所以运行`auto-cat -a``auto-cat -A`都将对全部种子按tracker打标签,种子多时比较耗时;而当设置为`category`时,运行`auto-cat -a`就只对未分类种子进行分类。 |
87-
| 10 | DL_FINISH_NOTIFY | true | 默认会在下载完成时向设定的通知渠道发送种子下载完成的通知消息,如不想收此类通知,则设置为`false`|
88-
| 11 | TRACKER_ERROR_COUNT_MIN | 3 | 4.3.7+可用。可以设置的值:正整数。在检测到tracker出错的种子数量超过这个阈值时,给设置的通知渠道发送通知。 |
89-
| 12 | UMASK_SET | 000 | 权限掩码`umask`,指定qBittorrent在建立文件时预设的权限掩码,可以设置为`022`|
90-
| 13 | TG_USER_ID | | 通知渠道telegram,如需使用需要和 TG_BOT_TOKEN 同时赋值,私聊 @getuseridbot 获取。 |
91-
| 14 | TG_BOT_TOKEN | | 通知渠道telegram,如需使用需要和 TG_USER_ID 同时赋值,私聊 @BotFather 获取。 |
92-
| 15 | TG_PROXY_ADDRESS | | 4.3.7+可用。给TG机器人发送消息的代理地址,当设置了`TG_USER_ID``TG_BOT_TOKEN`后可以设置此值,形如:`http://192.168.1.1:7890`,也可以不设置。 |
93-
| 16 | TG_PROXY_USER | | 4.3.7+可用。给TG机器人发送消息的代理的用户名和密码,当设置了`TG_PROXY_ADDRESS`后可以设置此值,格式为:`<用户名>:<密码>`,形如:`admin:password`,如没有可不设置。 |
94-
| 17 | DD_BOT_TOKEN | | 通知渠道钉钉,如需使用需要和 DD_BOT_SECRET 同时赋值,机器人设置中webhook链接`access_token=`后面的字符串(不含`=`以及`=`之前的字符)。 |
95-
| 18 | DD_BOT_SECRET | | 通知渠道钉钉,如需使用需要和 DD_BOT_TOKEN 同时赋值,机器人设置中**只启用**`加签`,加签的秘钥,形如:`SEC1234567890abcdefg`|
96-
| 19 | IYUU_TOKEN | | 通知渠道爱语飞飞,通过 [这里](http://iyuu.cn) 获取,爱语飞飞的TOKEN。 |
97-
| 20 | SCKEY | | 通知渠道ServerChan,通过 [这里](http://sc.ftqq.com/3.version) 获取。 |
98-
| 21 | PUSHPLUS_TOKEN | | 4.3.7+可用。通知渠道PUSH PLUS,填入其token,详见 [这里](http://www.pushplus.plus)|
99-
| 22 | WORK_WECHAT_BOT_KEY | | 4.3.9及4.4.3+可用。通知渠道企业微信群机器人,填入机器人设置webhook链接中`key=`后面的字符串,不含`key=`|
100-
| 23 | GOTIFY_URL | | 4.3.9及4.4.4+可用。通知渠道Gotify,填入其通知网址,需要和`GOTIFY_APP_TOKEN`同时赋值。 |
101-
| 24 | GOTIFY_APP_TOKEN | | 4.3.9及4.4.4+可用。通知渠道Gotify,填入其TOKEN,需要和`GOTIFY_URL`同时赋值。 |
102-
| 25 | GOTIFY_PRIORITY | 5 | 4.3.9及4.4.4+可用。通知渠道Gotify,发送消息的优先级。 |
103-
| 26 | CRON_HEALTH_CHECK | 12 * * * * | 宕机检查的cron,在设定的cron运行时如发现qbittorrent-nox宕机了,则向设置的通知渠道发送通知。 |
104-
| 27 | CRON_AUTO_CATEGORY | 32 */2 * * * | 自动分类的cron,在设定的cron运行`auto-cat -a`命令,将所有**未分类**种子按tracker分类(当`CATEGORY_OR_TAG=category`时),或将所有种子按tracker打标签(当`CATEGORY_OR_TAG=tag`时)。对于种子很多的大户人家,建议把cron频率修改低一些,一天一次即可。此cron可以由`ENABLE_AUTO_CATEGORY`关闭,关闭后不生效。虽然本变量是全版本有效,但控制采用“分类”还是“标签”的变量`CATEGORY_OR_TAG`仅4.3.9和4.5.0+有效。 |
105-
| 28 | CRON_TRACKER_ERROR | 52 */4 * * * | 检查tracker状态是否健康的cron,在设定的cron将检查所有种子的tracker状态,如果有问题就打上`TrackerError`的标签。在运行的时候比较吃资源,所以对于种子很多的大户人家,或者是对此不那么敏感的用户,建议把cron频率修改低一些,一天一次即可。 |
106-
| 29 | MONITOR_IP | | 4.3.8+可用。可设置为局域网设备的ip,多个ip以半角空格分隔,形如:`192.168.1.5 192.168.1.9 192.168.1.20`。本变量作用:当检测到这些设置的ip中有任何一个ip在线时(检测频率为每分钟),自动启用qbittorent客户端的“备用速度限制”,如果都不在线就关闭“备用速度限制”。“备用速度限制”需要事先设置好限制速率,建议在路由器上给需要设置的设备固定ip。在docker cli中请使用一对双引号引起来,在docker-compose中不要使用引用。 |
107-
| 30 | CRON_ALTER_LIMITS | | 4.3.8+可用。启动和关闭“备用速度限制“的cron,主要针对多时段限速场景,当设置了`MONITOR_IP`时本变量的cron不生效(因为会冲突)。详见 [相关问题](#相关问题) 问题13。 |
108-
| 31 | CRON_IYUU_HELP | | 4.3.8+可用。IYUUPlus辅助任务的cron,自动重校验、自动恢复做种,详见 [相关问题](#相关问题) 问题14。 |
109-
| 32 | EXTRA_PACKAGES | | 4.3.9+可用。你需要安装的其他软件包,形如`htop nano nodejs`,多个软件包用半角空格分开,在docker cli中请用一对双引号引起来,在docker-compose中不要增加引号。 |
84+
| 6 | QB_USERNAME | admin | 4.5.5+必须设置此环境变量,登陆qBittorrent的用户名,**请务必不要使用默认值**|
85+
| 7 | QB_PASSWORD | adminadmin | 4.5.5+必须设置此环境变量,登陆qBittorrent的密码,**请务必不要使用默认值**|
86+
| 8 | TZ | Asia/Shanghai | 时区,可填内容详见:https://meetingplanner.io/zh-cn/timezone/cities |
87+
| 9 | INSTALL_PYTHON | false | **从4.5.5起,默认安装好python,不再需要设置这个环境变量。**默认不安装python,如需要python(qBittorrent的搜索功能必须安装python),请设置为`true`,设置后将在首次启动容器时自动安装好。 |
88+
| 10 | ENABLE_AUTO_CATEGORY | true | 4.3.7+可用。是否自动按tracker进行分类,默认为`true`开启,如需关闭,请设置为`false`|
89+
| 11 | CATEGORY_OR_TAG | category | 4.3.9及4.5.0+可用,当`ENABLE_AUTO_CATEGORY=true`时,控制自动分类是qBittorrent中的“分类”还是“标签”。设置为`category`(默认值)为“分类”,设置为`tag`为“标签”。当设置为`tag`时,由于标签不是唯一的,无法筛选出没有打上tracker标签的种子,所以运行`auto-cat -a``auto-cat -A`都将对全部种子按tracker打标签,种子多时比较耗时;而当设置为`category`时,运行`auto-cat -a`就只对未分类种子进行分类。 |
90+
| 12 | DL_FINISH_NOTIFY | true | 默认会在下载完成时向设定的通知渠道发送种子下载完成的通知消息,如不想收此类通知,则设置为`false`|
91+
| 13 | TRACKER_ERROR_COUNT_MIN | 3 | 4.3.7+可用。可以设置的值:正整数。在检测到tracker出错的种子数量超过这个阈值时,给设置的通知渠道发送通知。 |
92+
| 14 | UMASK_SET | 000 | 权限掩码`umask`,指定qBittorrent在建立文件时预设的权限掩码,可以设置为`022`|
93+
| 15 | TG_USER_ID | | 通知渠道telegram,如需使用需要和 TG_BOT_TOKEN 同时赋值,私聊 @getuseridbot 获取。 |
94+
| 16 | TG_BOT_TOKEN | | 通知渠道telegram,如需使用需要和 TG_USER_ID 同时赋值,私聊 @BotFather 获取。 |
95+
| 17 | TG_PROXY_ADDRESS | | 4.3.7+可用。给TG机器人发送消息的代理地址,当设置了`TG_USER_ID``TG_BOT_TOKEN`后可以设置此值,形如:`http://192.168.1.1:7890`,也可以不设置。 |
96+
| 18 | TG_PROXY_USER | | 4.3.7+可用。给TG机器人发送消息的代理的用户名和密码,当设置了`TG_PROXY_ADDRESS`后可以设置此值,格式为:`<用户名>:<密码>`,形如:`admin:password`,如没有可不设置。 |
97+
| 19 | DD_BOT_TOKEN | | 通知渠道钉钉,如需使用需要和 DD_BOT_SECRET 同时赋值,机器人设置中webhook链接`access_token=`后面的字符串(不含`=`以及`=`之前的字符)。 |
98+
| 20 | DD_BOT_SECRET | | 通知渠道钉钉,如需使用需要和 DD_BOT_TOKEN 同时赋值,机器人设置中**只启用**`加签`,加签的秘钥,形如:`SEC1234567890abcdefg`|
99+
| 21 | IYUU_TOKEN | | 通知渠道爱语飞飞,通过 [这里](http://iyuu.cn) 获取,爱语飞飞的TOKEN。 |
100+
| 22 | SCKEY | | 通知渠道ServerChan,通过 [这里](http://sc.ftqq.com/3.version) 获取。 |
101+
| 23 | PUSHPLUS_TOKEN | | 4.3.7+可用。通知渠道PUSH PLUS,填入其token,详见 [这里](http://www.pushplus.plus)|
102+
| 24 | WORK_WECHAT_BOT_KEY | | 4.3.9及4.4.3+可用。通知渠道企业微信群机器人,填入机器人设置webhook链接中`key=`后面的字符串,不含`key=`|
103+
| 25 | GOTIFY_URL | | 4.3.9及4.4.4+可用。通知渠道Gotify,填入其通知网址,需要和`GOTIFY_APP_TOKEN`同时赋值。 |
104+
| 26 | GOTIFY_APP_TOKEN | | 4.3.9及4.4.4+可用。通知渠道Gotify,填入其TOKEN,需要和`GOTIFY_URL`同时赋值。 |
105+
| 27 | GOTIFY_PRIORITY | 5 | 4.3.9及4.4.4+可用。通知渠道Gotify,发送消息的优先级。 |
106+
| 28 | CRON_HEALTH_CHECK | 12 * * * * | 宕机检查的cron,在设定的cron运行时如发现qbittorrent-nox宕机了,则向设置的通知渠道发送通知。 |
107+
| 29 | CRON_AUTO_CATEGORY | 32 */2 * * * | 自动分类的cron,在设定的cron运行`auto-cat -a`命令,将所有**未分类**种子按tracker分类(当`CATEGORY_OR_TAG=category`时),或将所有种子按tracker打标签(当`CATEGORY_OR_TAG=tag`时)。对于种子很多的大户人家,建议把cron频率修改低一些,一天一次即可。此cron可以由`ENABLE_AUTO_CATEGORY`关闭,关闭后不生效。虽然本变量是全版本有效,但控制采用“分类”还是“标签”的变量`CATEGORY_OR_TAG`仅4.3.9和4.5.0+有效。 |
108+
| 30 | CRON_TRACKER_ERROR | 52 */4 * * * | 检查tracker状态是否健康的cron,在设定的cron将检查所有种子的tracker状态,如果有问题就打上`TrackerError`的标签。在运行的时候比较吃资源,所以对于种子很多的大户人家,或者是对此不那么敏感的用户,建议把cron频率修改低一些,一天一次即可。 |
109+
| 31 | MONITOR_IP | | 4.3.8+可用。可设置为局域网设备的ip,多个ip以半角空格分隔,形如:`192.168.1.5 192.168.1.9 192.168.1.20`。本变量作用:当检测到这些设置的ip中有任何一个ip在线时(检测频率为每分钟),自动启用qbittorent客户端的“备用速度限制”,如果都不在线就关闭“备用速度限制”。“备用速度限制”需要事先设置好限制速率,建议在路由器上给需要设置的设备固定ip。在docker cli中请使用一对双引号引起来,在docker-compose中不要使用引用。 |
110+
| 32 | CRON_ALTER_LIMITS | | 4.3.8+可用。启动和关闭“备用速度限制“的cron,主要针对多时段限速场景,当设置了`MONITOR_IP`时本变量的cron不生效(因为会冲突)。详见 [相关问题](#相关问题) 问题13。 |
111+
| 33 | CRON_IYUU_HELP | | 4.3.8+可用。IYUUPlus辅助任务的cron,自动重校验、自动恢复做种,详见 [相关问题](#相关问题) 问题14。 |
112+
| 34 | EXTRA_PACKAGES | | 4.3.9+可用。你需要安装的其他软件包,形如`htop nano nodejs`,多个软件包用半角空格分开,在docker cli中请用一对双引号引起来,在docker-compose中不要增加引号。 |
110113

111114
**以下是仅`iyuu`标签额外可用的环境变量:**
112115

qbittorrent/root/etc/entrypoint.d/10-add-pkg.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
1-
if [[ $INSTALL_PYTHON == true ]]; then
2-
echo "Install python3 ..."
3-
apk add --update --no-cache python3
4-
fi
5-
61
if [[ $EXTRA_PACKAGES ]]; then
72
echo "Install $EXTRA_PACKAGES ..."
83
apk add --update --no-cache $EXTRA_PACKAGES

qbittorrent/root/etc/entrypoint.d/30-config.sh

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
QB_CONF_FILE="/data/config/qBittorrent.conf"
2-
2+
QB_PASSWD_HASH=$(gen-qb-passwd "$QB_PASSWORD")
33
BT_PORT=${BT_PORT:-34567}
44
WEBUI_PORT=${WEBUI_PORT:-8080}
5+
56
if [ ! -s $QB_CONF_FILE ]; then
67
echo "Initializing qBittorrent configuration..."
78
cat > $QB_CONF_FILE << EOF
@@ -19,18 +20,29 @@ Accepted=true
1920
2021
[Preferences]
2122
General\Locale=zh_CN
22-
WebUI\LocalHostAuth=false
23+
WebUI\Password_PBKDF2=\"@ByteArray($QB_PASSWD_HASH)\"
2324
WebUI\Port=${WEBUI_PORT}
25+
WebUI\Username=${QB_USERNAME}
2426
EOF
2527
fi
2628

2729
echo "Overriding required parameters..."
2830
sed -i "{
2931
s!Session\\\Port=.*!Session\\\Port=${BT_PORT}!g;
3032
s!WebUI\\\Port=.*!WebUI\\\Port=${WEBUI_PORT}!g;
31-
s!WebUI\\\LocalHostAuth=.*!WebUI\\\LocalHostAuth=false!g;
33+
s!WebUI\\\LocalHostAuth=.*!WebUI\\\LocalHostAuth=true!g;
3234
}" $QB_CONF_FILE
3335

36+
if [[ ${QB_USERNAME} == admin && $QB_PASSWORD == adminadmin ]]; then
37+
echo "Please set env QB_USERNAME and QB_PASSWORD to your own, do not set 'QB_USERNAME=admin' and 'QB_PASSWORD=adminadmin' ..."
38+
notify "nevinee/qbittorrent镜像重要更新说明" "为保证用户安全,防止用户因使用反代并代理了127.0.0.1这种情况导致安全性降低,从2023年9月6日更新的镜像开始,创建容器需要新增设置两个环境变量:\n\nQB_USERNAME(登陆qBittorrent的用户名)\nQB_PASSWORD(登陆qBittorrent的密码)\n\n容器将在创建时使用这两个环境变量去设置(如已存在配置文件则是修改)登陆qBittorent的用户名和密码。\n\n如未设置这两个环境变量,或者保持为qBittorrent的默认值(默认用户名:admin,默认密码:adminadmin),则本容器附加的所有脚本、定时任务将无法继续使用。\n\n详情:https://github.com/devome/dockerfiles/issues/101 \n\n本消息只在设置了有效的通知渠道,并且未设置有效的 QB_USERNAME 和 QB_PASSWORD 这两个环境变量时,在创建容器时自动发送一次。"
39+
else
40+
sed -i "{
41+
s!WebUI\\\Username=.*!WebUI\\\Username=${QB_USERNAME}!;
42+
s!WebUI\\\Password_PBKDF2=.*!WebUI\\\Password_PBKDF2=\"@ByteArray($QB_PASSWD_HASH)\"!;
43+
}" $QB_CONF_FILE
44+
fi
45+
3446
major_ver=$(qbittorrent-nox --version | sed 's|qBittorrent v||' | awk -F. '{print $1}')
3547
minor_ver=$(qbittorrent-nox --version | sed 's|qBittorrent v||' | awk -F. '{print $2}')
3648

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/usr/bin/env python3
2+
3+
## https://github.com/swizzin/swizzin/blob/master/scripts/qbittorrent.Userpass.py
4+
5+
import sys
6+
import hashlib
7+
import base64
8+
import uuid
9+
10+
password = sys.argv[1]
11+
salt = uuid.uuid4()
12+
salt_bytes = salt.bytes
13+
14+
password = str.encode(password)
15+
hashed_password = hashlib.pbkdf2_hmac('sha512', password, salt_bytes, 100000, dklen=64)
16+
b64_salt = base64.b64encode(salt_bytes).decode("utf-8")
17+
b64_password = base64.b64encode(hashed_password).decode("utf-8")
18+
password_string = "{salt}:{password}".format(salt=b64_salt,password=b64_password)
19+
print(password_string)

qbittorrent/root/usr/local/bin/share

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,28 @@
1-
is_ssl=$(grep -i "WebUI\\\HTTPS\\\Enabled=" /data/config/qBittorrent.conf | awk -F "=" '{print $2}')
1+
WEBUI_PORT=${WEBUI_PORT:-34567}
2+
3+
get_qb_url() {
4+
local is_ssl=$(grep -i "WebUI\\\HTTPS\\\Enabled=" /data/config/qBittorrent.conf | awk -F "=" '{print $2}')
5+
local url_prefix
26

3-
if [[ $is_ssl == true ]]; then
4-
cmd_curl="curl -sk"
5-
url_prefix="https://"
6-
else
7-
cmd_curl="curl -s"
8-
url_prefix="http://"
9-
fi
7+
if [[ $is_ssl == true ]]; then
8+
url_prefix="https://"
9+
else
10+
url_prefix="http://"
11+
fi
1012

13+
local qb_url="${url_prefix}127.0.0.1:${WEBUI_PORT}"
14+
echo "$qb_url"
15+
}
16+
17+
get_qb_ck() {
18+
local info=$(curl -iksS -H "Referer: $qb_url" -d "username=${QB_USERNAME}&password=${QB_PASSWORD}" $api_url_base/auth/login)
19+
local qb_cookie=$(echo "$info" | awk '/set-cookie/{print $2}')
20+
if [[ -n $qb_cookie ]]; then
21+
echo $qb_cookie
22+
fi
23+
}
24+
25+
qb_url=$(get_qb_url)
26+
api_url_base="$qb_url/api/v2"
27+
cmd_curl="curl -sk -b \"$(get_qb_ck)\""
1128
cmd_curl_post="$cmd_curl -X POST"
12-
api_url_base="${url_prefix}127.0.0.1:${WEBUI_PORT:-34567}/api/v2"

0 commit comments

Comments
 (0)