2013-02-19 17 views
18

ドキュメントは言う:os.getuid()とos.geteuid()の違いは何ですか? <code>os.getuid()</code>ため

戻り、現在のプロセスのユーザID。

そしてos.geteuid()の言う:

は、現在のプロセスの実効ユーザIDを返します

のでユーザID実効ユーザIDの違いは何ですか?

どちらも同じです。(2.xと3.xの両方)スクリプトをrootとして実行しているかどうかを確認するために使用しています。

+0

これらはsetuidプログラムでは同じではありません(ルートとして実行していてseteuidを明示的に呼び出すプログラムでは異なる場合があります)。これは、あなたのスクリプトが起動するときに*同じ*であることを意味します。 –

答えて

40

os.getuidos.geteuidの違いを理解するには、Python固有の関数ではないことを理解する必要があります(osモジュールのプレフィックス以外)。これらの関数は基本的にすべてのUnixライクなオペレーティングシステムが提供するgetuidgeteuidシステムコールをラップしています。

したがって、Pythonのドキュメント(詳細はほとんど分かりません)を見るのではなく、オペレーティングシステムのドキュメントを参照する必要があります。 Hereは、例えば、Linux用の関連ドキュメントです。ウィキペディアにも良いarticle on Unix User IDsがあります。

通常のUIDと有効なUIDの違いは、特別なアクセス(ファイルの読み取りや書き込み、特定のシステムコールなど)が必要な場合に、EUIDのみがチェックされることです。 UIDはアクションを実行している実際のユーザーを示しますが、アクセス許可を調べるときは(通常)考慮されません。通常のプログラムでは、それらは同じになります。いくつかのプログラムはEUIDを変更して、許可されているアクションを追加または削除します。数字が小さいほど、UIDが変更され、効果的に別のユーザーになるようになります。

EUIDを変更するプログラムの例を次に示します。passwdプログラム(パスワードの変更に使用)は、rootユーザーが所有するシステムのパスワードファイルに書き込む必要があります。普通のユーザーはそのファイルに書き込むことはできません。可能であれば、他のユーザーのパスワードも変更する可能性があるからです。これを解決するには、passwdプログラムのファイルアクセス権(setuid bit)にビットが設定されています。これは、別のユーザーが起動してもプログラムの所有者のEUID(たとえばroot)で実行する必要があることをOSに示します。 。 passwdプログラムは起動ユーザーとしてUID、rootとしてEUIDを表示します。システムパスワードファイルに書き込むには、EUIDに特権が必要です。 passwdは、パスワードを変更するユーザーを知る必要があるため、UIDも便利です。

UIDとEUIDが一致しない場合がいくつかありますが、あまり一般的ではありません。たとえば、スーパーユーザーとして実行されているファイルサーバーは、ファイル操作を要求している特定のユーザーと一致するようにEUIDを変更する可能性があります。ユーザーのEUIDを使用すると、サーバーはユーザーが触れることができないものにアクセスすることを避けることができます。

6

機能os.getuid()は、プログラムを実行するユーザーのIDを返します。関数os.geteuid()あなたのプログラムは、のアクセス許可を使用しています。ほとんどの場合、これは同じになります。これらの値が異なることがよく知られているのは、プログラムの実行可能ファイルにsetuidビットが設定されていて、プログラムを実行するユーザーがプログラム実行可能ファイルのユーザーと異なる場合です。この場合、os.getuid()はプログラムを実行するユーザーのIDを返しますが、os.geteuid()はプログラム実行可能ユーザーのIDを返します。

+0

'os.geteuid()'部分を詳しく説明できますか?そして、両方が同じでないことを示すために例を挙げることができますか?* x *はgetuidでのみ実現でき、geteuidではなく、* y *はgeteuidでしかgetuidでは達成できません。 –

関連する問題