setuid root実行可能ファイルを作成し、ユーザーにパスワードを要求してスクリプトではなくユーザーを認証したいとします。 (もちろん、ユーザーは自分のパスワードを保存してスクリプトで使用できますが、そうではありません。これは私の仕事ではありません)。
これを行う良い方法は何ですか?携帯性が高いほど良いです。
ベストアンサー1
ほとんどの最新のUnixシステムではポリアクリルアミド認証を処理します。このモジュールはpam_unix
パスワードを確認するためのモジュールです。/etc/password
/etc/shadow
しかし、車輪を再発明してはいけません。ユーザーのパスワードを要求し、root として実行するのが基本構成です。Sudo、権限を高める事実上の標準的な方法です。権限を正しく上げるのは難しいことに注意してください。プログラムに影響を与える可能性のある環境変数をすべて消去しましたか?スードは安全を確保するために多くの努力をしてきました。
ユーザーがパスワードを入力した後に選択したパラメータを使用してrootとして実行できるようにするには、ファイルalice
(sudo設定ファイル)の/usr/local/bin/myprogram
次の行を使用します。sudoers
alice ALL = (root) /usr/local/bin/myprogram
ファイルを編集するには、sudoers
コマンドを実行しますvisudo
。
アリスは逃げなければならないでしょうsudo myprogram
。彼女がプログラム名だけを入力できるようにするには、ラッパースクリプトから名前を隠します。ただし、Aliceはgksudo myprogram
GUIプロンプトを取得するために同様のコマンドを実行することを好むかもしれません。
呼び出し元が引数を渡すのを防ぐなど、さまざまなバリエーションが可能です。
alice ALL = (root) /usr/local/bin/myprogram ""
または、グループに項目を適用します。
%mygroup ALL = (root) /usr/local/bin/myprogram
プログラムで誰が呼び出したかを知る必要がある場合は、sudoを環境変数SUDO_UID
とSUDO_USER
。