たとえば、プログラムが root ユーザーによって *nix 環境で実行されているが、プログラムの所有者が root 以外のユーザーである場合、そのプログラムは root 権限でアクションを実行できますか?
3 に答える
アプリケーションの権限は、プログラムを実行したユーザーによって決定されます。
たとえば、所有者の権限が必要な場合、sudo
コマンドは何の効果もありません。さらに、/bin
(または他のシステムの場所) のほとんどのアプリケーションは root ユーザーによって所有されています (そのため、(簡単に) 変更することはできません) が、ユーザーのアクセス許可で実行されます。
プログラムにsetuid
またはsetgid
ビットが設定されている場合、アプリケーションはそれぞれユーザーまたはグループのアクセス許可で開始されることに注意してください。これにより、通常のユーザーは、root アカウントにアクセスしなくても、通常は root 権限が必要なアクションを実行できます。
setuid
ビットを設定するには:
chmod u+s /path/to/application
setgid
ビットについても同じことが言えますが、g+s
代わりにu+s
.
デフォルトでは、プロセスはプログラム所有者 ID ではなく、プロセスを開始したユーザーの ID と権限で実行されます。したがってroot
、一般ユーザーが所有するプログラムからプロセスを開始すると、そのプロセスは ID=0 で実行されます。
Johnsyweb
コメントで言及されているように、プログラムにビットが設定されている場合、setuid
所有者として実行されます。つまり、setuid
set user IDです。通常、これは通常のユーザーping
がスーパーユーザー権限を必要とするようなプログラムを実行できるようにするために行われます。
ただし、たとえば Linux には、完全な setuid の代わりに特定の選択パーミッションを付与できる" Linux Capabilities " の形式の優れたメカニズムがあることに注意してください。
プログラムを開始するユーザーが、その実行の権限を決定します。別のユーザーの権限でプログラムを実行する場合は、プログラムのビットを使用su
またはsudo
設定できますsetuid
chown user program
chmod u+s program
user
これにより、プログラムを実行するユーザーに関係なく、アクセス許可が強制的に使用されます。