web-dev-qa-db-ja.com

rootを含むすべてのユーザーに対してシャットダウンコマンドを無効にする-結果は?

Ubuntu Serverインストールで、rootを含むすべてのユーザーに対してshutdownコマンドを無効にしたいと思います。

私がこれをやりたい理由は、この方法でマシンをシャットダウンする習慣にならないようにするためです。これと同時に多くの本番マシンにSSH接続しますが、間違ったウィンドウにコマンドを入力して、他のマシンの1つを誤ってシャットダウンしたい。

シャットダウンを無効にするサーバーは、WindowsデスクトップのVirtualBox内でのみ実行され、ローカルテストにのみ使用するため、コマンドラインからシャットダウンできない場合は問題ありません。

VirtualBoxイメージに別のパスワードを設定することで問題を少し緩和しましたが、実稼働マシンのSudo 'window'内にいる場合、明らかに誤ってシャットダウンする可能性があります。

私の質問は:

  1. シャットダウンコマンドを無効にするにはどうすればよいですか?
  2. シャットダウンコマンドを無効にした場合、注意すべき結果はありますか?最も具体的には、ACPIシャットダウンのサポートを無効にしますこれは物理マシンの電源ボタンを押すのと同等ですか?他の汎用アプリケーションに影響しますか?

詳しくは、このVirtualBoxイメージを使用して、シェルスクリプトを試したり、TomcatとJavaを実行したりするだけです。

11
Rich

通常、コマンドをSudo shutdownではなくSudo /sbin/shutdownとして実行する場合は、「シャットダウン」のグローバルシェルエイリアスを設定するだけで、代わりに端末にメッセージをエコーできます。実際の実行可能ファイルは、他のすべての目的のために引き続き存在します。

3
Dave Jennings

この問題へのより良いアプローチは、ボックスに molly-guard programをインストールすることですシャットダウンしないように自分を訓練しようとするのではなく、シャットダウンしたくない.

molly-guardは、誤ってマシンをシャットダウンまたは再起動することを防ぎます。これは、既存のコマンド(停止、再起動、シャットダウン、および電源オフ)の前にいくつかのチェックを挿入することによって行われます。

典型的な設定では、マシンのホスト名を入力して、正しいホスト名であることを確認するように求められます。

新しいスクリプトを/etc/molly-guard/run.dに追加することができます( manpage に記載されているように、スクリプトファイルは run-parts で期待される命名に従う必要があります)。

本当にshutdownを無効にしたい場合(これはとても奇妙なアイデアです)、ただ

chmod 0 /sbin/shutdown

それを使用する必要がある場合は、chmodで0755に戻します。

13
poolie

シャットダウンコマンドを無効にするには、バイナリを実行不可能にするだけです。つまり、Sudo chmod a-x /sbin/shutdownまた、shutdownのmanエントリにあるように、他のシャットダウン方法に影響を与えるとは思いません。

shutdownはinitデーモンに要求を送信して、システムを適切なランレベルにダウンさせます

したがって、シャットダウンコマンドを無効にした後でも、他のコマンド/スクリプトでこれを実行できます。たとえば、GNOMEメニューからシャットダウンを使用してシステムをシャットダウンできます。また、再起動コマンドを使用してコマンドラインからコンピューターを再起動することもできます

1
binW

shutdownコマンドは/sbin/shutdownにあります。これを無効にすることができます:

Sudo mv /sbin/shutdown /sbin/really-do-shutdown

But:これは、システムをシャットダウンする通常の方法がほとんど機能しないことを意味します。この答えのために私のテストマシンでgnomeをシャットダウンすると、ログアウトしてGDMに戻ります。

後でシステムをシャットダウンする場合は、次の操作を行う必要があります

Sudo init 0

「無効化」シャットダウンは、コマンドを使用するあらゆるアプリケーションに影響します。 init 0はシステムをシャットダウンするための推奨される方法ではないため、システムをシャットダウンする必要のあるすべてのプログラムはshutdownを使用しますが、これは機能しなくなります。

  • また、アプリケーションはmissing file、またはnot executableのために例外をスローする可能性があり、シャットダウンが不要な場合でもクラッシュする可能性があります。これはエッジケースであり、バイナリ、理想的には実行可能なファイル(シェルスクリプトではなく-動作しない)をその場所に移動することで回避できます。例えば:

    Sudo cp /bin/ps /sbin/shutdown
    

    これはafterで、元のファイルを安全に移動しました。

ジョアンピントのコメントに概説されている理由により、これはすべて非常にハッキーですおよびこれに反対することをお勧めします。しかし、私はあなたがそれをするのを止めません。 :-)

/ sbin/shutdownのバックアップを作成するだけでなく、トラブルが発生した場合に備えて、復旧計画を用意してください。たとえば、アクセスできないサーバーではこれを行わないでください。そして、システムがまったく起動しないと仮定して、事前に回復計画をテストします(もちろん起動します-私はそれをテストしました-しかしplease安全な側にあります)。

1
Stefano Palazzo

shutdownコマンドを無効にします。

cp/sbin/shutdown/sbin/shutdown-backup

rm/sbin/shutdown

これは、誰かがこのコマンドを強制的に使用したい場合、彼もできないからです。

誰もシャットダウンコマンドを使用できなくなります。

インストールが見つからないというメッセージコマンドが表示されます。

vim /etc/bash.bashrc

Bash.bashrcの最後に行を追加します

alias shutdown = "echo 'このコマンドの使用は許可されていません" "

戻したい場合(有効)。コピーして戻す

cp/sbin/shutdown-backup/sbin/shutdown

0
Dishank Jindal

私はそれが他の解決策を取る必要があると思う、サーバーはsshポリシーをシャットダウンしてssh経由でinit 0を無効にするか、Windowsのようにコンソールに「理由」と特別な「シャットダウンパスワード」を入力する特別なダイアログが表示される必要があります。これには、サーバーの使用時に電源ボタンをパスワードで保護する必要があります。

現時点では、プッシュボタンの代わりに「物理キースイッチ= 4ユーロ」を使用しています。

0
user12646