私がいる/sbin
と私はそれshutdown
が許可を持っていることがわかりrwxr-xr-x
ます。これは誰でも実行できるという意味ではありませんか?
shutdown
コマンドについて話していると思います。
shutdown
。
私がいる/sbin
と私はそれshutdown
が許可を持っていることがわかりrwxr-xr-x
ます。これは誰でも実行できるという意味ではありませんか?
shutdown
コマンドについて話していると思います。
shutdown
。
回答:
誰でも実行できますshutdown
が、システムのシャットダウンをトリガーするにはルート権限が必要です。ただしshutdown
、setuidではないため、rootのみが正常に実行できます。このshutdown
プログラムは特権をチェックして問題があるかどうかを知らせるのに十分ですが、システムのシャットダウンを単純に試みても何も起こりません。
GLENDOWER:私は精霊を広大な深層から呼ぶことができます。
HOTSPUR:なぜそうなのか、私もそうなのか。しかし、あなたが彼らを呼ぶとき、彼らは来ますか?
(ヘンリー4世から)
shutdown
と違いはありません/bin/rm
。誰でも実行できますが、通常のユーザーは/etc
、または別のユーザーのホームディレクトリを削除できません。
具体的には、root権限(有効なUID 0)で実行されているプロセスのみが、システムサービスを停止し、すべてのユーザープロセスを終了し、実際にマシンを停止するシステムコールを発行するようにinitシステムに指示できます。(setuidの場合、誰が呼び出してもrootとして実行されますが、そうではありません。)shutdown
shutdown
control-alt-delなどのGUIからの呼び出しはどうですか?その場合、shutdown
直接起動されinit
、root権限で実行されることに注意することが重要です。 そのため、コンソールに近づいた全員がシャットダウンする可能性があります。これが望ましくない場合、実際にはcontrol-alt-deleteが実行されshutdown -a
ます。(回答で@ some1が引用したドキュメントを参照してください)。これはshutdown
、現在ログインしているユーザーがその実行を許可されているかどうかを確認するように指示します。ただしshutdown
、このシナリオではrootとして実行されているため、これは関係があります。
shutdown
そのプログラムは実際にシステムのシャットダウンをトリガーできません。右?
shutdown
です。setuidプログラムは、実行可能ファイルを所有するユーザーの権限で実行されます。たとえば、/etc/passwd
root権限で実行して、パスワードファイルを変更できるようにします。のマンページを参照してくださいchmod
。
/usr/bin/passwd
root権限で実行する」はずです!/etc/passwd
実行可能ではありません(変更される「パスワードファイル」です)。
バイナリshutdown
自体は、UIDが0かどうかを確認します。
以下のstrace出力を参照してください。
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
shutdown
、あなたのUIDが0のチェックであること
if(getuid() != 0) printf("Need to be root");
。実際、ソースコードはそれを示しています。
-aでフラグを設定すると、シャットダウンはアクセスリストをチェックするようです:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
現在-aフラグなしで呼び出しているため、デフォルトではルートのシャットダウンのみが許可されます。
追加のユーザーがコマンドを実行できるようにする場合は、そのファイルを構成し、フラグを使用します。
Why can't I execute shutdown when the permission is rwxr-xr-x?
許可ビットは、ユーザーまたはグループに基づいたアクセス制御を必ずしも除外しません。
-a
コマンドラインからを呼び出しても違いshutdown -a
はありません。root 権限(init
control-alt-delで提供)で実行する必要があります。