Setuid位于python脚本:Linux vs Solaris

Eri*_*ric 12 python linux solaris setuid

作为一个没有特权的用户在linux和Solaris上运行这个小的python脚本:

#!/usr/bin/python
import os
print 'uid,euid =',os.getuid(),os.geteuid()
Run Code Online (Sandbox Code Playgroud)

在运行之前,setuid位在脚本上设置(而不是在python解释器上):

chown root:myusergrp getuid.py
chmod 4750 getuid.py
Run Code Online (Sandbox Code Playgroud)

在Solaris上,由于setuid位而设置了有效uid:

uid,euid = 10002 0
Run Code Online (Sandbox Code Playgroud)

但不是在Linux上:

uid,euid = 10002 10002
Run Code Online (Sandbox Code Playgroud)

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

是否可以让Python Linux作为Python Solaris运行?

Dav*_*ess 23

大多数Unix发行版通常不允许您在使用#的文件上使用setuid!翻译.Solaris恰好是允许它使用的,因为它使用比大多数其他发行版更安全的实现.

有关机制如此危险的原因的更多背景,请参阅此FAQ条目:如何使setuid shell脚本工作?

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

相关部分:

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

   return 0;
}
Run Code Online (Sandbox Code Playgroud)