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


11

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

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

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

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

私の質問は:

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

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


2
私の意見では、ヒューマンエラーを防ぐためにシステムのこのようなコア動作を変更することは悪い考えです。長期的には、解決するよりも多くの問題をもたらす可能性があります。システムごとに異なるユーザーパスワードを保持すると、リスクが最小限に抑えられます(sudoが必要になるため)。特定のシステム変更に依存しない適切な習慣を開発する必要があります。はるかに頻繁に使用されるrm / cp / chmodを使用すると、より深刻な災害が頻繁に発生し、それらを無効にすることはないでしょう。
ジョアンピント

私はそれに同意しますが、間違いなく物事を行うための正しい方法ですが、これは、リスクなしで物事を試すことができるようにするために、デスクトップにある非公式のUbuntuイメージについて、その小さな状況を避けるためです私の雇用主のマシンをb0rkingの:)
リッチ

回答:


3

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


これは、習慣を中断しようとしている場合に最適な方法のように思えます。
エンドリューク

2
ただし、シェルエイリアス(alias shutdown=sl)を設定する明白な方法は、sudoの引数に影響を与えないことに注意してください。zshでは、引数と一致するエイリアスを定義できますが、bashではそうではないと思います。sudo最初の引数がの場合、何も実行しないシェルスクリプトにエイリアスを作成できますshutdown
-poolie

2
つまり、これは実際には機能しません。
-poolie

14

この問題に対するより良いアプローチは、シャットダウンしたくないボックスにmolly-guardプログラムをインストールすることです。シャットダウンを実行しないように自分を訓練しようとするのではありません。

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

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

に新しいスクリプトを追加することができ/etc/molly-guard/run.dます(マンページに記載されているように、スクリプトファイルはrun-parts

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

chmod 0 /sbin/shutdown

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


素晴らしいアイデアですが、悲しいことに、自分のソフトウェアをインストールできるようにシステムを十分に制御できないため、不可能です。悲しいことに、私はそれらをシャットダウンするのに十分なコントロールを持っています!
リッチ

4
真剣ですか?それは非常に奇妙です。シャットダウンのみを実行するsudoアクセスがある場合は、sudoを変更して大きなプロンプトを表示するか、常にパスワードを要求するように人々を説得することができます。誤ってそれらをシャットダウンするリスクがある場合、molly-guardをインストールすることは管理者の利益になります。
poolie

1

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

shutdownは、システムを適切なランレベルに下げるために、initデーモンに要求を送信します

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


1

shutdownコマンドがです/sbin/shutdown。これを行うことで無効にできます:

sudo mv /sbin/shutdown /sbin/really-do-shutdown

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

その後システムをシャットダウンしたい場合は、

sudo init 0

「無効化」シャットダウンは、コマンドを使用するあらゆるアプリケーションに影響します。以来init 0、システムをシャットダウンする方法としては推奨できません、持っているすべてのプログラムは、システムの使用シャットダウンしshutdown、それ以上は動作しませんそれのために、。

  • また、アプリケーションは原因の例外を投げることができる行方不明ファイル、またはファイルがされて実行可能ではない、潜在的にシャットダウンが必要ではないにもかかわらず、それらがクラッシュする原因となります。これは、バイナリ、理想的には実行可能なファイル(シェルスクリプトではなく-動作しない)をその場所に移動することで回避できるエッジケースです。例えば:

    sudo cp /bin/ps /sbin/shutdown
    

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

さて、これはすべて非常にハックです。JoãoPinto のコメントに概説されている理由により、私はそれに対してお勧めします。しかし、私はあなたにそれをやめさせません。:-)

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


0

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

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


0

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

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