16

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

Python のバージョンは、Solaris と Linux の両方で 2.6 であることに注意してください。

Python Linux を Python Solaris として動作させることは可能ですか?

4

4 に答える 4

29

ほとんどのUnixディストリビューションでは、通常、#!を使用するファイルでsetuidを使用することはできません。通訳者。Solarisは、他のほとんどのディストリビューションよりも安全な実装を使用しているため、たまたまそれを可能にするものです。

メカニズムが非常に危険である理由の詳細については、このFAQエントリを参照してください。setuidシェルスクリプトを機能させるにはどうすればよいですか。

詳細と、スクリプトを実行するsetuid実行可能ファイルをコンパイルする方法については、次のリンクを参照してください:シェルスクリプトでのsetuid

関連する部分:

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

   return 0;
}
于 2011-11-29T17:14:33.137 に答える
2

今日、2 つと 2 つを組み合わせて、別の解決策を思いつきましたcython --embed

上記のリンクの例に従うと、Python からバイナリ実行可能ファイルを取得して、ラッパー プログラムなしで円を完成chownさせることができます。chmod u+s

もちろん、(これまたはその他のsetuid使用の) リスクには注意してください。スクリプトにバグがあると、システムの特権が昇格される可能性があります。

于 2012-07-03T16:17:25.453 に答える
-2

sudo を使用して、目的を達成できる可能性があります。それは異なるユーザーとしてものを実行します:

 sudo -u otheruser command

アクセス許可は、visudo を使用して root によって設定されます。setuid/setguid のものは、Linux のスクリプトやシェルには適用されないようで、コンパイルされたコードのみに適用されます。

于 2015-05-12T23:42:05.180 に答える