sudo 実行可能ファイルには、root が所有する setuid ビットがあります。実行ファイルは2つのことを行います。
- ユーザーが許可されていることを確認する
execve argv[1]
(医師コード)
通常、これにより一般ユーザーはrootとしてプログラムを実行できます。問題は、setuidが起動時にルートであるため、ユーザーが誰であるかわからないため、ユーザーが許可されていることを確認する方法です。
答え1
問題は、setuidが起動時にルートであるため、ユーザーが誰であるかわからないため、ユーザーが許可されていることを確認する方法です。
ここでは、uidとEffective uidの概念が登場します。 setuidプログラムを実行すると、getuid
それでも「実際の」ユーザーのuidを返します。 setuid ビットは有効 uid を変更します。バラよりman getuid
および関連文書の詳細。
答え2
あなたが提案したのはまさにsudoがどのように機能するかです...少なくともそれが始まりです。
実際に動作するには多くのことが必要であり、sudoはセキュリティを維持し、イベントを記録するためにかなり複雑な作業を行います。実行してはいけない場合や、ユーザーが権限を持っていない場合でも実行するように欺くことができる素朴なバージョンを作成するのは簡単です。