systemd服务无法访问用户主页

systemd服务无法访问用户主页

我正在尝试在 Ubuntu 15.04(和 Debian 8)上设置 systemd 服务。我有一个程序/home/testuser/server/prrserver。我的 systemd 服务配置prrserver为以testuser:testuser.它的prrserver作用是启动一个新进程/home/testuser/server/prrproc来读取/home/testuser/server/data.有趣的是,prrserver启动正常,prrproc启动正常,但prrproc抱怨不存在这样的文件/home/testuser/server/data/foo。如果我从命令行启动服务器,它会找到该文件。知道可能出什么问题吗?也许当prrserver分叉一个新进程时,新进程不再运行testuser,并且由于某种原因无法访问 testuser 目录(即使它的权限允许这样做)?

[Unit]
Description=PRR Server

[Service]
Type=simple
User=testuser
Group=testuser
ExecStart=/home/testuser/server/prrserver

[Install]
WantedBy=multi-user.target

状态是这样的:

systemctl status prrserver.service
    â prrserver.service - PRR Server
   Loaded: loaded (/lib/systemd/system/prrserver.service; enabled; vendor preset: enabled)
   Active: active (running) since mån 2015-05-25 14:50:42 CEST; 1min 2s ago
 Main PID: 21205 (prrserver)
   CGroup: /system.slice/prrserver.service
           ââ21205 /bin/sh /home/testuser/server/prrserver
           ââ22101 /bin/sh /home/testuser/server/prrproc

maj 25 14:50:42 ubuntu-dev systemd[1]: Started PRR Server.
maj 25 14:50:42 ubuntu-dev systemd[1]: Starting PRR Server...
maj 25 14:50:53 ubuntu-dev prrserver[21205]: PRR Server started listening on port 10239

请注意,主进程prrserver启动了prrproc进程,并且问题出在进程上,prrproc因此服务的状态为绿色。

答案1

理论上它可能是私有挂载命名空间。这是一项安全功能。我想你可以尝试排除它

ProtectHome=off

答案2

我也偶然发现了这个问题,但没有找到答案。这是我能够实现的目标,但如果可以的话,请提出更好的替代方案。

我在这里描述的方法并不完全适合 @RegedUser00x 的用例,但可能会引导您走向正确的方向。 尤其,我的解决方案不会尊重文件系统权限,这可能是不可取的

我能够使其工作的唯一方法是添加功能:CAP_DAC_READ_SEARCH (参考)

CAP_DAC_READ_SEARCH绕过文件读取权限检查和目录读取和执行权限检查”。

[Unit]
# ...

[Service]
# ...

# Disallow system modification
ProtectSystem=true

# Restrict access to the home folder while only allowing certain folders
ProtectHome=tmpfs
BindPaths=/home/myuser/useful_folder /home/myuser/useful_file

# CAP_DAC_READ_SEARCH Bypass file read permission checks and directory
# read and execute permission checks;
CapabilityBoundingSet= CAP_DAC_READ_SEARCH

[Install]
WantedBy=multi-user.target
# ...

相关内容