我创建了一个 systemd 服务来运行 deluged (v2.1.1)。 deluged 在写入任何文件时将权限设置为无权限,但 UMask 设置为 777。因此,它在运行时写入的配置和会话状态文件会更改为无权限。停止服务时,它尝试写入会话状态并失败(如您在日志中看到的),因此不会保存会话状态和任何配置更改。
这种行为在 Linux Mint 21.3 和 Ubuntu Server 22.04.4 的多个全新安装中是一致的,尽管我在创建此服务时遵循了 deluge 的文档,但我还没有看到任何有关此问题的报告。我究竟做错了什么?
/etc/systemd/system/deluged.service 的内容:
[Unit]
Description=Deluge Bittorrent Client Daemon
Documentation=man:deluged
# Start after network and specified mounts are available, see mount UNIT names in sudo systemctl -t>
After=network-online.target
# Won't start if these mount points are not connected
Requires=mnt-one.mount mnt-two.mount
# Stops service if mount points disconnect
BindsTo=mnt-one.mount mnt-two.mount
[Service]
Type=simple
User=deluge
Group=deluge
UMask=777
#with the custom logging
ExecStart=/usr/bin/deluged -d -l /var/log/deluge/daemon.log -L warning
# Time to wait before forcefully stopped.
TimeoutStopSec=300
[Install]
# Start the service when the mount points come back online
WantedBy=multi-user.target mnt-one.mount mnt-two.mount
deluged 的工作目录(即 deluge 用户的主目录)示例显示会话停止后文件 session.state 没有权限(如果我在运行时编辑配置,conf 文件也将具有相同的权限):
ls -al /var/lib/deluge/.config/deluge
total 3848
drwxrwxrwx 7 deluge deluge 4096 Feb 23 08:41 ./
drwxr-x--- 4 deluge deluge 4096 Feb 20 21:08 ../
drwxrwxrwx 2 deluge deluge 4096 Feb 23 08:41 archive/
-rwxrwxrwx 1 deluge deluge 56 Jan 28 00:05 auth*
-rwxrwxrwx 1 deluge deluge 75 Feb 23 08:08 autoadd.conf*
-rwxrwxrwx 1 deluge deluge 75 Feb 22 16:59 autoadd.conf.bak*
-rwxrwxrwx 1 deluge deluge 367 Feb 23 08:08 blocklist.conf*
-rwxrwxrwx 1 deluge deluge 367 Feb 22 17:12 blocklist.conf.bak*
-rwxrwxrwx 1 deluge deluge 3653994 Feb 22 17:12 blocklist.download*
-rwxrwxrwx 1 deluge deluge 2807 Feb 23 08:08 core.conf*
-rwxrwxrwx 1 deluge deluge 2806 Feb 23 08:08 core.conf.bak*
-rwxrwxrwx 1 deluge deluge 0 Jan 28 00:10 deluged.log*
---------- 1 deluge deluge 11 Feb 23 08:41 deluged.pid
-rwxrwxrwx 1 deluge deluge 56 Feb 23 08:08 execute.conf*
-rwxrwxrwx 1 deluge deluge 112 Feb 22 17:17 extractor.conf*
-rwxrwxrwx 1 deluge deluge 112 Feb 22 17:17 extractor.conf.bak*
-rwxrwxrwx 1 deluge deluge 252 Feb 21 07:20 hostlist.conf*
-rwxrwxrwx 1 deluge deluge 252 Jan 28 00:05 hostlist.conf.bak*
drwxrwxrwx 2 deluge deluge 4096 Jan 28 00:05 icons/
drwxrwxrwx 2 deluge deluge 4096 Jan 28 00:05 plugins/
-rwxrwxrwx 1 deluge deluge 3183 Feb 22 17:17 scheduler.conf*
-rwxrwxrwx 1 deluge deluge 3183 Feb 22 17:17 scheduler.conf.bak*
---------- 1 deluge deluge 3658 Feb 23 08:34 session.state
-rwxrwxrwx 1 deluge deluge 4386 Feb 22 16:41 session.state.bak*
drwxrwxrwx 2 deluge deluge 4096 Feb 22 16:33 ssl/
drwxrwxrwx 2 deluge deluge 4096 Feb 23 08:44 state/
-rwxrwxrwx 1 deluge deluge 84806 Feb 23 08:08 stats.totals*
-rwxrwxrwx 1 deluge deluge 84810 Feb 23 08:07 stats.totals.bak*
-rw------- 1 deluge deluge 1323 Feb 23 08:41 web.conf
-rw------- 1 deluge deluge 1323 Feb 23 08:34 web.conf.bak
我的问题:
- 我究竟做错了什么?我使用 systemd 已经很多年了,但从未见过任何程序可以做到这一点。我按照文档创建服务并设置系统,但找不到遇到同样问题的人。在我突然开始遇到这个问题之前,我也已经工作了很长一段时间,以及如何在我测试过的所有系统上实现 100% 可重复性。
- 有没有一个 Linux 工具可以让我了解哪个程序更改了文件的权限以及何时更改?
答案1
解决方案:我忘记了UMask和权限是不一样的,而是一个不允许你做的事情的列表,而权限是一个允许你做的事情的列表。我使用 deluge.sessions 中更正的 UMask 构建了一个新系统至 007,问题得到了解决。