Linuxシャットダウン許可


8

ubuntuやdebianなどのデスクトップ環境をインストールするとします。システムメニューのどこかで通常のユーザーとしてボタンをクリックすると、システムをシャットダウンできます。そのためにスーパーユーザーに切り替える必要はありません。

ただし、同じデスクトップ環境で、通常のユーザーとしてターミナル(たとえば、gnome-terminal)を開いて、

shutdown -h now

私はによって促されます

shutdown: need to be root

シャットダウンする唯一の方法は、コマンドの先頭にsudoを付けることです。

これがなぜそうであるのか誰かが説明できますか?

ありがとうKC


回答:


8

K.Chenが尋ねた質問は次のとおりです。CLIから実行するときにsudo特権が必要なのに、GUIから実行するときにそのような特権は必要ないのですが。

答えの最初の部分は、Gnome、KDE、Xfce、Mate、Cinnamonなどのデスクトップ環境を設計するユーザーがユーザーの作業を簡略化しようとし、sudo資格情報を必要とせずにシャットダウンと再起動を構成することです。これは、偶然にも、sudo特権を必要としない(それを回避する方法ではない)プログラムのシャットダウンを含まないシャットダウンシーケンスが必要であることを意味します。

各DEがどのように実行するかは詳しくは知りませんが、システムを停止または再起動/シャットダウン/休止状態にする穏やかな方法があり、ルート権限は必要ありません。元の投稿はArch Linuxフォーラムの投稿にあります。本質的には、次のコマンドを発行することになります。

止める

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

リブート

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus-suspend

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

休止状態

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

私の推測では、GUIボタンはおおよそこれらのコマンドを使用しています。確かに、コードを調べる必要がありますが、これは安全な賭けだと思います。


1
デスクトップ環境も稼働しているマシンに誰かがリモートログインした場合、その人はこれらのコマンドを発行して正常にシャットダウン/再起動/一時停止/休止状態にすることができますか?
gerrit 2013年

この質問には悪意のある側面があります。ある程度の裁量を行使する必要があると思います。
MariusMatutiae 2013年

1
なぜ悪意があるのですか?それが悪用される可能性がある場合、sysopはそれを知ってから、それから保護する方法を知っている必要があります。
gerrit 2013年

悪意があると言っているのではありませんが、この情報が悪用される可能性があります。私はすでに、おそらく、私が@Matteoのように行っている必要があります...それを共有した後悔しています
MariusMatutiae

5

この設計決定の背後にある理由は技術的なものではありません(非特権shutdownコマンドを使用したり、GUIでパスワードを要求したりする可能性があります)。

  • デスクトップ環境を使用する場合、ユーザーはマシンに物理的にアクセスできるはずです。次に、ユーザーが電源ボタンを押したり、電源コードを抜いたりするよりも、完全にシャットダウンできるようにします。

  • シェルを使用する場合、ユーザーはリモートユーザーである可能性があり、リモートシャットダウンを回避するために、より多くの権限が要求されます。

これらはルールではなく、単に仮定に基づくデフォルトです。シェルにローカルユーザーを、デスクトップ環境にリモートユーザーを置くことができます。デフォルトの動作を選択する場合は、それに応じてシステムを構成できます。


@Matteo、私はあなたのポイントを理解しています。しかし、MariusMatutiaeが言ったように、内部的には、DEはスーパーユーザー特権なしでシャットダウンするために、「シャットダウン」以外のプログラムを呼び出したに違いありません。何か手がかりはありますか?
K.Chen 2013年

1

Sudo(スーパーユーザーが行う)を使用すると、システム管理者は、特定のユーザー(またはユーザーのグループ)に、すべてのコマンドと引数をログに記録しながら、一部(またはすべて)のコマンドをrootとして実行する権限を与えることができます。shutdown -hコマンドまたはinit 0コマンドを使用して、マシンの電源を切ることができます。ただし、両方のコマンドを実行するにはroot権限が必要です。

/ sbinにあるコマンドを実行するには、root権限が必要です。シャットダウンコマンドの場所を見つけるには、

端末でシャットダウンするタイプ。

今あなたの疑問が明確であることを願っています:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.