時々、それはコードにあります。たとえば、の途中でhwclock.c
、次のことがわかります。
if (getuid() == 0)
permitted = TRUE;
else {
/* program is designed to run setuid (in some situations) */
if (set || systohc || adjust) {
warnx(_("Sorry, only the superuser can change "
"the Hardware Clock."));
[...]
rootであるかどうかにかかわらず、プログラムの動作を変更します。
他のほとんどの場合、それは暗黙的です。カーネルに委任されました。たとえば、プログラムがシステムコールを呼び出してシステムを再起動できる場合、プログラムはrootである場合にのみ機能します。rootでない場合は、「許可が拒否されました」というエラーが発生し、アプリケーション(適切に記述されている場合)から報告されます。または、ファイルを削除しようとしています。ファイルに対してそれを行うための適切な権限があれば、成功します。ない場合は、rootまたはされていない場合とき、それは---依存rm
呼び出すunlink()
カーネルが権限をチェックします。
したがって、プログラムがroot権限を必要とするかどうかにかかわらず、原則として、実行可能ファイルの権限だけを見ているとは言えません。多くのプログラムでは、一部の操作でのみ必要になるため、そのようなことを行うのは非常に困難です。以下の場合はhwclock
1(誰でもクロックを読み取ることができますが、rootだけがそれを設定することができます)ですが、そのうちの何百もあります(kill
、rm
、cat
...)
次に、setuidプログラムの関連する興味深い世界があります...
/bin
または/sbin
ディレクトリから任意のプログラムを実行できます。問題は、これらのプログラムのいくつかは、実行するユーザーに応じて実行が異なることです。