パーミッションがrwxr-xr-xのときにシャットダウンを実行できないのはなぜですか?


34

私がいる/sbinと私はそれshutdownが許可を持っていることがわかりrwxr-xr-xます。これは誰でも実行できるという意味ではありませんか?


1
実行したコマンドは何ですか?エラーは何ですか?
slayedbylucifer

彼はshutdownコマンドについて話していると思います。
ビンツ

./shutdown +30を実行しました。「シャットダウン:ルートになる必要があります」というメッセージが表示されます。しかし、アクセス許可で誰でも実行できると言われている場合、なぜrootになる必要があるのですか?
コーガンリベラ

誰でもマシンをシャットダウンできると思います。GUIの場合と同様に、誰でもシャットダウンできます。しかし、rootになる必要があると言っているのなら、私にはわかりません。いい質問ですね。
Kevdog777

4
@ Kevdog777:GUIでPolicyKitがこれを管理します。これは、使用できるかどうかを確認するルート権限を持つデーモンですshutdown
ビンツ

回答:


76

誰でも実行できますshutdownが、システムのシャットダウンをトリガーするにはルート権限が必要です。ただしshutdown、setuidではないため、rootのみが正常に実行できます。このshutdownプログラムは特権をチェックして問題があるかどうかを知らせるのに十分ですが、システムのシャットダウンを単純に試みても何も起こりません。

GLENDOWER:私は精霊を広大な深層から呼ぶことができます。
HOTSPUR:なぜそうなのか、私もそうなのか。しかし、あなたが彼らを呼ぶとき、彼らは来ますか?
(ヘンリー4世から)

shutdownと違いはありません/bin/rm。誰でも実行できますが、通常のユーザーは/etc、または別のユーザーのホームディレクトリを削除できません。

具体的には、root権限(有効なUID 0)で実行されているプロセスのみが、システムサービスを停止し、すべてのユーザープロセスを終了し、実際にマシンを停止するシステムコールを発行するようにinitシステムに指示できます。(setuidの場合、誰が呼び出してもrootとして実行されますが、そうではありません。)shutdown

shutdowncontrol-alt-delなどのGUIからの呼び出しはどうですか?その場合、shutdown直接起動されinitroot権限で実行されることに注意することが重要です。 そのため、コンソールに近づいた全員がシャットダウンする可能性があります。これが望ましくない場合、実際にはcontrol-alt-deleteが実行されshutdown -aます。(回答で@ some1が引用したドキュメントを参照してください)。これはshutdown、現在ログインしているユーザーがその実行を許可されているかどうかを確認するように指示します。ただしshutdown、このシナリオではrootとして実行されているため、これは関係があります。


2
明確化:誰でもプログラムを実行できますが、現在のユーザーにルート権限がない限り、shutdownそのプログラム実際にシステムのシャットダウンをトリガーできません。右?
LarsH

1
それはほとんどそれです。プログラムは、setuidでない限り、呼び出し元ユーザーの特権で実行されます。システムをシャットダウンするにはルート権限が必要です。そのため、独自のプログラムを作成することもできません(セキュリティホールの悪用などを除く)。
アレクシス

「shutdown is not setuid」とはどういう意味ですか?
イアンサミュエルマクリーン長老

1
@Iain、プログラムは通常、それらを呼び出すユーザーの権限で実行されます。これもの場合shutdownです。setuidプログラムは、実行可能ファイルを所有するユーザーの権限で実行されます。たとえば、/etc/passwdroot権限で実行して、パスワードファイルを変更できるようにします。のマンページを参照してくださいchmod
アレクシス

これは「/usr/bin/passwdroot権限で実行する」はずです!/etc/passwd実行可能ではありません(変更される「パスワードファイル」です)。
アレクシス

15

バイナリ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)                           = ?

4
straceの使用を示すための+1 ...これは便利です。しかし、私は表示されませんどのようにこのトレースが表示されていることshutdown、あなたのUIDが0のチェックであること
LarsH

1
システムコールのみを報告するため、straceの出力には表示されません。getuidの直後に、コードがに似ているというエラーメッセージを書くと推測できますif(getuid() != 0) printf("Need to be root");。実際、ソースコードはそれを示しています。
msw

5

はい !誰でもそのコマンドを実行できます。あなたが言ったように、あなたはそれを実行することができますが、あなたは「ルートである必要があります」メッセージではなく、直面していますpermission denied。このshutdownコマンドは、UIDあなたがrootかどうかを確認します。


-1

-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 権限(initcontrol-alt-delで提供)で実行する必要があります。
アレクシス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.