我在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工作?
答案 0 :(得分:23)
大多数Unix发行版通常不允许您在使用#的文件上使用setuid!翻译。 Solaris恰好是允许它使用的,因为它使用了比大多数其他发行版更安全的实现。
有关机制如此危险的更多背景信息,请参阅此FAQ条目: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;
}
答案 1 :(得分:2)
我今天只把两个和两个放在一起,然后提出了另一种解决方案:cython --embed
。
按照上面链接中的示例,您将从Python获得二进制可执行文件,您将能够chown
和chmod u+s
,在没有包装程序的情况下完成圆圈。
当然,请注意(在此脚本或任何其他setuid
使用中)的风险 - 脚本中的地址会导致系统权限提升。
答案 2 :(得分:0)
You could potentially use sudo to achieve what you want. It runs stuff as different users:
ggplot(data = df, aes(x = time, y = sc, group = cond, color = factor(cond))) +
geom_line() +
geom_point() +
facet_wrap(~cond) +
ylab("Switch Cost")
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.
答案 3 :(得分:0)
基于 David K. Hess 答案,但有参数:
#include <unistd.h>
int main(int argc, char **argv)
{
setuid(0);
execv("/path/to/script.sh", argv);
return 0;
}