6

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(ファイルの所有者)を持つユーザーとして実行されているはずです。コンセプト全体が間違っているのでしょうか、それともどこが間違っているのでしょうか。

4

3 に答える 3

8

* .pyファイルにSUIDビットを設定しても、スクリプトはPythonインタープリターによって実行されるため、ここではまったく役に立ちません。この場合、SUIDを設定する必要があります。ここでは、「sudo」を使用するのが親友です。

于 2011-04-02T13:02:54.117 に答える
4

カーネルが#!を認識しているため、SUIDの設定はスクリプトでは機能しません。(shebang-マジックナンバー0x23 0x21-man magic)そして、スクリプトを入力としてインタプリタ/ usr / bin / pythonを呼び出す前に、特権を削除します。回避策は、PythonインタープリターのSUIDルートを設定し、SUIDビットが設定されている場合に、スクリプトを実行する前にスクリプトを所有するユーザーに特権を変更する機能を追加することです。これを素朴な方法で行うと、セキュリティ上の問題が発生します。スマートな方法でそれを行う方法はここで見つけることができます:http://perldoc.perl.org/perlsec.html

追加のリンク:

于 2011-04-02T16:09:50.177 に答える
0

私はこのリンクをウェブで見つけました。このラッパーにSUIDを設定して、これを使用できます。しかし、個人的にはsudoソリューションを好みます。;)

于 2011-05-11T10:07:04.013 に答える