我编写了一个 python 脚本来启动几个 java 应用程序。我希望将他们的 PID 归档到/var/run/coma
.因此我写了剧本并给出了它第777章权限仅用于首先测试。
-rwxrwxrwx 1 root root 3575 Feb 12 18:20 coma-startup.py
当我启动这个脚本时另一个用户它执行代码以在提到的目录中创建一个文件我收到以下内容
PermissionError: [Errno 13] Permission denied: '/var/run/coma/coma-system.pid'
我不明白这个?我认为该脚本应该以 root 权限执行。我在这里不明白什么?
答案1
权限问题与脚本无关,而是与脚本所操作的文件有关:
/var/run/coma/coma-system.pid
尝试chmod 777 /var/run/coma/coma-system.pid
答案2
将脚本的所有者和组设置为root
并不意味着它将作为root
.当用户joe
运行可执行文件时,用于定义执行上下文权限的 UID 是 的 UID joe
,除非启用了 set UID ( suid
) 位。已suid
启用的可执行文件将使用文件所有者的 UID 运行。
但是,我认为您的方法必须非常仔细地考虑,因为suid root
可执行文件存在安全风险。恶意用户可以尝试利用它们来升级权限。如果这是您需要处理的唯一文件,您应该改为处理其权限,或者要求用户使用sudo
.suid root
可执行文件应该是非常特殊情况下的最后手段。
笔记:正如 @psusi 在评论中评论的那样,suid
不适用于脚本。这回答很好地描述了脚本的问题suid
,以及为什么它们在内核 3.x 上不起作用。因此,对于您的特定情况,您只能选择更改需要处理的文件/文件夹的权限,或使用sudo
(更建议使用第一个选项)。