一尘不染

python脚本上的setuid位:Linux vs Solaris

linux

以非特权用户身份 在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?


阅读 306

收藏
2020-06-03

共1个答案

一尘不染

大多数Unix发行版通常不允许您在使用#!的文件上使用setuid。口译员。由于Solaris使用的是比大多数其他发行版更安全的实现,因此Solaris恰恰是允许它的一种。

有关此机制为何如此危险的更多背景信息,请参见此常见问题解答条目:如何使setuid
shell脚本起作用?

请参阅此链接以获取更多讨论以及如何编译将运行脚本的setuid可执行文件:shell脚本上的setuid

相关部分:

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

   return 0;
}
2020-06-03