SUIDビットのセマンティクスを理解するのに問題があるようです。おそらく誰かが状況を明確にするのを手伝ってくれるでしょう。
SUIDビットのセマンティクスについての私の理解は次のとおりです。ファイルでSUIDビットを設定すると、ファイルはファイルの呼び出し元ではなく、ファイルの所有者として実行されます。したがって、この動作をテストするために、次のPythonスクリプトを作成しました。
#!/usr/bin/python3 -O
import os
def main():
print('Real UserID: %d' % os.getuid())
print('Effective UserID: %d' % os.geteuid())
if __name__ == '__main__':
main()
その後、対応するグループ「testuser」で「testuser」という名前のユーザーを作成し、ファイルのアクセス許可(chown testuserファイル、chgrp testuserファイル、chmod u + s、g + xファイル)を調整しました。次に、メインユーザーを「testuser」グループに追加して、グループのメンバーとしてファイルを実行できるようにしました。結局のところ、ファイルのアクセス許可は次のようになりました。
-rwsr-xr-- 1 testuser testuser 168 2011-04-02 13:35 procred.py*
したがって、テストユーザーとしてログインすると、スクリプトによって次の出力が生成されます。
Real UserID: 1001
Effective UserID: 1001
...そして、メインユーザーとしてスクリプトを実行すると、スクリプトは次のように出力します。
Real UserID: 1000
Effective UserID: 1000
私の理解では、スクリプトは、後者の実行でuid 1001(ファイルの所有者)を持つユーザーとして実行されているはずです。コンセプト全体が間違っているのでしょうか、それともどこが間違っているのでしょうか。