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 上,有效的 uid 是由于 setuid 位而设置:
uid,euid = 10002 0
但不是在 Linux 上:
uid,euid = 10002 10002
注意 Solaris 和 Linux 的 python 版本都是 2.6
是否可以让 Python Linux 作为 Python Solaris 工作?
I am running this small python script on both linux and Solaris as a not privileged user :
#!/usr/bin/python
import os
print 'uid,euid =',os.getuid(),os.geteuid()
Before running, the setuid bit is set on the script (not on python interpreter) :
chown root:myusergrp getuid.py
chmod 4750 getuid.py
On Solaris, the effective uid is set because of the setuid bit :
uid,euid = 10002 0
But not on Linux :
uid,euid = 10002 10002
Note the python version is 2.6 for both Solaris and Linux
Is it possibe to have Python Linux working as Python Solaris ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
大多数 Unix 发行版通常不允许您在使用 #! 的文件上使用 setuid。口译员。 Solaris 恰好是允许这样做的一个,因为它使用了比大多数其他发行版更安全的实现。
请参阅此常见问题解答条目,了解有关该机制为何如此危险的更多背景信息:如何让 setuid shell 脚本工作?
请参阅此链接以获取更多讨论以及如何编译将运行脚本的 setuid 可执行文件:shell 脚本上的 setuid
相关部分:
Most Unix distributions normally don't allow you to use setuid on a file that uses a #! interpreter. Solaris happens to be one that allows it due to its use of a more secure implementation than most other distributions.
See this FAQ entry for more background about why the mechanism is so dangerous: How can I get setuid shell scripts to work?
See this link for more discussion and how to compile a setuid executable that will run your script: setuid on shell scripts
The pertinent part:
我今天只是将两个和两个放在一起,并提出了一个替代解决方案:
cython --embed
。按照上面链接中的示例操作,您将从 Python 中获得二进制可执行文件,您可以对其进行
chown
和chmod u+s
,从而无需包装程序。当然,请注意风险(此操作或任何其他
setuid
使用)——脚本中的错误可能会导致系统权限提升。I just put two and two together today and came up with an alternative solution:
cython --embed
.Follow the examples at the link above and you'll get binary executables from your Python that you'll be able to
chown
andchmod u+s
, completing the circle without a wrapper program.Of course, beware the risks (of this or any other
setuid
use)—bugs in your script can result in elevated privileges on the system.基于 David K. Hess 答案,但有参数:
Based on David K. Hess answer, but with arguments:
您可以使用 sudo 来实现您想要的。它以不同的用户身份运行内容:
权限由 root 使用 visudo 设置。 setuid/setguid 的东西似乎不适用于 Linux 中的脚本或 shell,仅适用于编译后的代码。
You could potentially use sudo to achieve what you want. It runs stuff as different users:
Permissions are set by root using visudo. The setuid/setguid stuff doesn't appear to apply to scripts or the shell in linux, only compiled code.