我的要求
我的 python 服务器在 RHEL 上作为普通用户运行,但它需要在它无法访问的地方创建文件/目录。还需要使用随机 UID/GID 对那些文件进行 chown
我的方法
在仅功能环境中尝试此操作,没有 setuid。我正在尝试利用 cap_chown 和 cap_dac_override 功能。但是我完全不知道如何让它在 systemctl 那种环境中工作
目前我在服务文件中有以下内容:
#cat /usr/lib/systemd/system/my_server.service
[Service]
Type=simple
SecureBits=keep-caps
User=testuser
CapabilityBoundingSet=~
Capabilities=cap_dac_override,cap_chown=eip
ExecStart=/usr/bin/linux_capability_test.py
并遵循二进制本身:
# getcap /usr/bin/linux_capability_test.py
/usr/bin/linux_capability_test.py = cap_chown,cap_dac_override+ei
但是这里说,它永远不会在脚本上工作: 有没有办法让非 root 进程绑定到 Linux 上的“特权”端口?
在当前设置下,我对运行进程的能力是:
# ps -ef | grep lin
testuser 28268 1 0 22:31 ? 00:00:00 python /usr/bin/linux_capability_test.py
# getpcaps 28268
Capabilities for `28268': = cap_chown,cap_dac_override+i
但是,如果我尝试从该脚本中在 /etc/ 中创建文件:
try:
file_name = '/etc/junk'
with open(file_name, 'w') as f:
os.utime(file_name,None)
它因“权限被拒绝”而失败
对我来说,它不起作用是同样的情况吗?我可以在这里使用 python-prctl 模块让它工作吗?