Nội dung bài viết này tạo ra
Một nút lưu trữ chạy qBittorrent như một dịch vụ không đặc quyền: dữ liệu chưa hoàn chỉnh được ghi vào tầng NVMe, dữ liệu hoàn chỉnh được chuyển sang tầng dung lượng năm mươi terabyte, mọi thứ thuộc sở hữu của một nhóm dùng chung để tài khoản thứ hai có thể đọc qua SFTP mà không cần phải sửa quyền thủ công, và giao diện web chỉ có thể truy cập thông qua proxy xác thực.
Cách tiếp cận hiển nhiên là cài đặt gói, nhấp qua giao diện và tiếp tục công việc. Cách đó hiệu quả trong khoảng hai tuần, cho đến khi tệp đầu tiên đến với nhóm sai và người dùng đồng bộ không thể đọc được, và lúc đó đã có bốn mươi nghìn tệp với nhóm sai.
Trước khi bắt đầu
- Một S-50: năm mươi terabyte dung lượng phía sau tầng NVMe một terabyte, trên cổng mười gigabit. Lưu lượng không bị giới hạn theo mức sử dụng hợp lý, và chính sách sử dụng chấp nhận được ngắn gọn và cụ thể về những gì có thể vượt qua. Quyền phân phối là vấn đề của bạn, không phải chú thích.
- Debian 13, quyền root, và tên máy chủ như
box.example.com.
1. Người dùng, nhóm, cấu trúc thư mục
apt update && apt install -y qbittorrent-nox nginx apache2-utils acl
groupadd -g 3000 media
useradd -r -g media -u 3000 -d /srv/qbt -m -s /usr/sbin/nologin qbt
useradd -m -G media syncHai tài khoản, một nhóm. Daemon chạy với tên qbt và không bao giờ đăng nhập; sync là tài khoản bạn kéo tệp và không thể ghi gì. Bây giờ đến thư mục và hai cờ làm cho việc này hoạt động vĩnh viễn:
install -d -o qbt -g media -m 2775 /srv/nvme/incomplete
install -d -o qbt -g media -m 2775 /srv/bulk/complete
setfacl -d -m g:media:rwx /srv/bulk/complete
setfacl -d -m g:media:rwx /srv/nvme/incompleteChế độ 2775 đặt bit setgid, vì vậy mọi tệp được tạo bên trong sẽ kế thừa nhóm media thay vì nhóm chính của người dùng tạo. ACL mặc định sau đó cấp cho nhóm đó quyền đọc và ghi trên các mục mới bất kể umask của tiến trình. Cùng nhau, chúng có nghĩa là câu hỏi về quyền được trả lời một lần thay vì sau mỗi lần tải xuống.
Trên S-50, tầng dung lượng và NVMe là các thiết bị khối riêng biệt. Xác nhận cái nào trước khi bạn cam kết với đường dẫn:
lsblk -o NAME,SIZE,ROTA,MOUNTPOINT2. Daemon
Khởi động nó một lần để nó ghi tệp cấu hình, sau đó dừng nó và chỉnh sửa tệp đó. Đấu tranh với giao diện cho các cài đặt nằm trong tệp văn bản là lãng phí một buổi chiều.
sudo -u qbt qbittorrent-nox --webui-port=8080 &
sleep 5 && pkill -u qbt qbittorrent-noxChỉnh sửa /srv/qbt/.config/qBittorrent/qBittorrent.conf để các phần [BitTorrent] và [Preferences] chứa:
[BitTorrent]
Session\DefaultSavePath=/srv/bulk/complete
Session\TempPath=/srv/nvme/incomplete
Session\TempPathEnabled=true
Session\Port=51413
Session\DiskCacheSize=2048
Session\MaxConnections=800
Session\MaxUploads=40
Session\GlobalMaxSeedingMinutes=-1
Session\Preallocation=true
[Preferences]
WebUI\Address=127.0.0.1
WebUI\Port=8080
WebUI\LocalHostAuth=false
WebUI\CSRFProtection=true
Downloads\UseIncompleteExtension=trueViệc tạm thời trên NVMe là toàn bộ thủ thuật. Ghi torrent là nhỏ và rải rác, đó là mẫu tồi tệ nhất cho tầng dung lượng; NVMe hấp thụ chúng, và tệp hoàn chỉnh được di chuyển qua như một bản sao tuần tự duy nhất. Phân bổ trước ngăn phân mảnh trên đường vào.
3. Một đơn vị không thể đi lang thang
/etc/systemd/system/qbittorrent.service:
[Unit]
Description=qBittorrent
After=network-online.target
Wants=network-online.target
[Service]
User=qbt
Group=media
UMask=0002
ExecStart=/usr/bin/qbittorrent-nox
Restart=on-failure
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=strict
ProtectHome=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
ReadWritePaths=/srv/qbt /srv/nvme/incomplete /srv/bulk/complete
LimitNOFILE=65535
[Install]
WantedBy=multi-user.targetUMask=0002 và Group=media là những thứ giữ cho tệp mới có thể ghi được cho nhóm. Nếu không có cái đầu tiên, setgid cung cấp cho bạn nhóm đúng trên các tệp mà không ai trong nhóm đó có thể ghi, đó là một nửa thành công tinh tế và khó chịu.
systemctl daemon-reload && systemctl enable --now qbittorrent4. Kernel và tường lửa
Mười gigabit với vài trăm đồng nghiệp cần bộ đệm socket lớn hơn và bảng kết nối không bị đầy:
cat > /etc/sysctl.d/70-seedbox.conf <<EOF
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.netfilter.nf_conntrack_max = 524288
EOF
sysctl --systemTường lửa: cổng torrent mở trên cả hai gia đình, SSH và HTTPS mở, giao diện web bị ràng buộc với loopback và do đó không cần gì.
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
iif lo accept
ip6 nexthdr icmpv6 accept
ip protocol icmp accept
tcp dport { 22, 443 } accept
tcp dport 51413 accept
udp dport 51413 accept
}
}5. Giao diện, phía sau proxy
certbot certonly --standalone -d box.example.com
htpasswd -c /etc/nginx/qbt.htpasswd youserver {
listen 443 ssl;
server_name box.example.com;
ssl_certificate /etc/letsencrypt/live/box.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/box.example.com/privkey.pem;
client_max_body_size 100m;
location / {
auth_basic "closed";
auth_basic_user_file /etc/nginx/qbt.htpasswd;
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-Host $http_host;
proxy_http_version 1.1;
}
}Xác minh nó
Sử dụng một thứ gì đó có bầy đàn lớn, được gieo hạt tốt và giấy phép rõ ràng. Hình ảnh cài đặt Debian hiện tại là lựa chọn truyền thống và bão hòa cổng mười gigabit thuyết phục hơn bất cứ thứ gì khác bạn có thể kiểm tra hợp pháp.
Thêm torrent qua giao diện, sau đó xem tầng tạm thời đầy:
watch -n2 "du -sh /srv/nvme/incomplete /srv/bulk/complete"Trong khi nó chạy, xác nhận cổng thực sự có thể truy cập thay vì chỉ mở trong tường lửa của bạn, vì cổng không thể truy cập tạo ra seedbox tải xuống chấp nhận được và gieo hạt cho không ai:
ss -tn state established sport = :51413 | wc -lCác kết nối đến trên cổng đó có nghĩa là các đồng nghiệp tìm thấy bạn. Không, với nhiều kết nối đi, có nghĩa là chỉ bạn đang quay số.
Khi tải xuống hoàn tất, kiểm tra ba điều mà bản dựng này tồn tại để làm:
ls -l /srv/nvme/incomplete
ls -ln /srv/bulk/complete
sudo -u sync cat /srv/bulk/complete/*.iso > /dev/null && echo "sync can read"Thư mục tạm thời trống, các tệp hoàn chỉnh hiển thị nhóm 3000 với quyền đọc và ghi của nhóm, và tài khoản sync có thể đọc chúng mà không cần sửa quyền thủ công. Lệnh thứ ba đó là lệnh chứng minh rằng công việc setgid và ACL đã được đền đáp.
Cuối cùng, chứng minh giao diện không bị lộ:
curl -m5 http://box.example.com:8080/ ; echo "exit $?"
curl -sI https://box.example.com/ | head -1Điều đầu tiên nên thất bại khi kết nối, điều thứ hai nên trả về 401. Bất cứ điều gì khác có nghĩa là ràng buộc địa chỉ trong bước hai không thành công.
Sau đó
Đặt tỷ lệ gieo hạt toàn cầu hoặc giới hạn thời gian chia sẻ trừ khi bạn có ý định gieo hạt mọi thứ mãi mãi, vì năm mươi terabyte đầy nhanh hơn bất cứ ai mong đợi. Nếu khiếu nại đến chúng tôi về lưu lượng từ phiên bản của bạn, quy trình được mô tả trên trang lạm dụng: nó được chuyển tiếp cho bạn, và chúng tôi không tìm kiếm qua đĩa của bạn.