在Python脚本上的Setuid位:Linux与Solaris

我在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上,由于setuid位,所以设置了有效的uid:

 uid,euid = 10002 0 

但不是在Linux上:

 uid,euid = 10002 10002 

请注意,Solaris和Linux的python版本是2.6

让Python Linux能够像Python Solaris一样工作吗?

Solutions Collecting From Web of "在Python脚本上的Setuid位:Linux与Solaris"

大多数Unix发行版通常不允许你在使用#!的文件上使用setuid。 翻译。 由于使用比大多数其他发行版更安全的实施方式,Solaris正好是允许的。

关于为什么机制如此危险的更多背景信息,请参阅此FAQ条目: 如何获取setuid shell脚本?

看到这个链接更多的讨论,以及如何编译将运行你的脚本的setuid可执行文件: setuid在shell脚本

相关部分:

 int main() { setuid( 0 ); system( "/path/to/script.sh" ); return 0; } 

我只是把两个和两个在一起,并提出了一个替代解决方案: cython --embed

按照上面链接的例子,你将得到你的Python的二进制可执行文件,你将能够chownchmod u+s ,完成没有包装程序的圆。

当然,要注意脚本中的风险(这个或者其他setuid使用),可能会导致系统的特权提升。

你可以使用sudo来实现你想要的。 它运行不同的用户的东西:

  sudo -u otheruser command 

权限是由root用visudo设置的。 setuid / setguid的东西似乎不适用于脚本或在Linux中的shell,只有编译的代码。