我正在 linux 和 Solaris 上运行这个小的 python 脚本作为非特权用户:
#!/usr/bin/python
import os
print 'uid,euid =',os.getuid(),os.geteuid()
在运行之前,setuid 位在脚本上设置(不是在 python 解释器上):
chown root:myusergrp getuid.py
chmod 4750 getuid.py
在 Solaris 上,有效的 uid 是由于 setuid 位而设置的:
uid,euid = 10002 0
但不是在 Linux 上:
uid,euid = 10002 10002
注意 Solaris 和 Linux 的 python 版本都是 2.6
是否可以让 Python Linux 像 Python Solaris 一样工作?
最佳答案
大多数 Unix 发行版通常不允许您在使用 #!口译员。 Solaris 恰好是一个允许它的发行版,因为它使用了比大多数其他发行版更安全的实现。
有关该机制为何如此危险的更多背景信息,请参阅此常见问题条目:How can I get setuid shell scripts to work?
有关更多讨论以及如何编译将运行您的脚本的 setuid 可执行文件,请参阅此链接:setuid on shell scripts
相关部分:
int main()
{
setuid( 0 );
system( "/path/to/script.sh" );
return 0;
}
关于python - python 脚本 : Linux vs Solaris 上的 Setuid 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314012/