我编写了一个 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 权限执行。我在这里不明白什么?
权限问题与脚本无关,而是与它所作用的文件有关:
/var/run/coma/coma-system.pid
尝试
chmod 777 /var/run/coma/coma-system.pid
将脚本的所有者和组设置为
root
并不意味着它将以root
. 当用户joe
运行可执行文件时,用于定义执行上下文权限的 UID 是 的 UIDjoe
,除非您suid
启用了 set UID ( ) 位。已suid
启用的可执行文件将使用文件所有者的 UID 运行。但是,我认为您的方法必须非常仔细地考虑,因为
suid root
可执行文件存在安全风险。恶意用户可以尝试通过利用它们来提升权限。如果这是您需要处理的唯一文件,则应改为使用其权限,或要求用户使用sudo
.suid root
在非常特殊的情况下,可执行文件应该是最后的手段。注意:正如@psusi 在评论中所说,
suid
不适用于脚本。这个答案很好地描述了suid
脚本的问题,以及为什么它们不能从内核 3.x 开始工作。因此,对于您的特定情况,您只能选择更改您需要处理的文件/文件夹的权限,或者使用sudo
(更建议使用第一个选项)。