web-dev-qa-db-ja.com

怖い端末コマンドを無効にするにはどうすればいいですか?

どうやって怖い端末コマンドを無効にしますか?

私はSSHを使って物理サーバにアクセスせずにリモートUbuntuサーバにアクセスしていました。 Ubuntu OS上で実行されているNoSQLサーバーに「shutdown」と入力していると思いましたが、実際にはUbuntuサーバーにシャットダウンするように伝えました。それから私は彼が私のために物理的なサーバーを起動することができるように私がしたことをサーバー管理者に伝えなければなりませんでした。それは恥ずかしかったです!

これが二度と起こらないようにするにはどうすればよいですか。

82
MelodiousFires

標準的な答えは「rootとしてログインしない」です。 rootとして実行されるすべてのコマンドは怖いです。それが選択肢でない場合は、特に怖いコマンドを無効にするために.bashrcにエイリアスコマンドを追加することができます。例えば:

for scary in shutdown halt  reboot rm
do
    alias $scary="echo If you really want to do that, type: `which $scary`"
done

その後、shutdownと入力すると、次のメッセージが表示されます。

If you really want to do that, type: /sbin/shutdown

確認あなたの.bashrcが最初にロードされ、これを試す前に _)

現在のsshセッションを終了して再度ログインするか、. ~/.bashrcを使用すると、.bashrcがロード/実行されます。おそらく、引数なしでrmを実行して、ログイン時などにサーバが.bashrcの自動ロードを無効にしていないことを確認してください。

もしあなたが主に停止とシャットダウンに関心があるなら、 molly-guard をインストールすることを検討することができます。これは、コマンドラインでOS全体を定期的にシャットダウンしているが、正しいものをシャットダウンしていることを確認したい場合にもっと便利です。

Logoutやexitのようなそれほど怖くないコマンドでこれを試してみることもできます。

204
gmatht

Sudoは何らかの理由で存在します - それを使用してください。コマンド(この場合は対話式CLI)が完了すると、rootシェルではなくユーザーレベルのシェルに戻ります。ルートシェルに入るべき理由はほとんどありません。 (これはまだ答えではないことに驚きました...)

とは言っても、すべてSudoを使用するような人形になってはいけません。自分のしていることを理解し、なぜroot権限を必要とするのか、または必要としないのかを理解します。


さらに、あなたはroot /ユーザシェルのためのあなたのプロンプトを区別することができます。これはまた、シェルプロンプトに戻って "他のCLI"ではないことをより明確にします。私のものはとてもカラフルで、たくさんの役に立つ情報(ホスト名のような)を持っています。それはveryがどのホストでコマンドが実行されるのかを簡単にし、また振り返りやすくします。あなたの歴史を通して、プロンプトを探してください - ルートシェルはデフォルトのプロンプトを使います。

My PS1

これは "your"アカウントでの使用に適していますが、security/sysadminningを真剣に受け止めているのであれば、パスワード/アカウントを共有することはなく、座っていることもないでしょう完全に気付かずにルートシェルで。


人々が繰り返し言っているように、「安全な環境を作るためのエイリアスコマンドは悪い考えです」。あなたはあなたの安全な環境で快適になるでしょう、あなたがすべきでないところにそれらの「怖い」コマンドをタイプしてください。それからある日、あなたは仕事を変えるか、新しいマシンにログインして、そして "whoopsy、私はそうではありませんでした、すみません" ...

73
Attie

パッケージ 'molly-guard'(少なくともDebian派生システムの場合)は、シャットダウン、停止、電源切断、および再起動に関するラッパーをインストールします。端末がリモート端末であることを検出した場合は、ホスト名の入力を求めます。一致しない場合、コマンドはキャンセルされます。

44
CSM

私は私がとても好きだという答えを受け入れました、しかし、他の誰かが読んでいて、より単純な答えを望むならば、ここに私のものです。

.bashrcファイルを見つけて、最後の行に置きます。

alias shutdown=notforuse

それから、shutdownと入力すると~bash: notforuse is not a commandのようなものになります。

これはばかげているかもしれませんが、それは単純でそれは動作します。私はこれを行うより良い方法で答えをいただければ幸いです!

4
MelodiousFires

あなたはいくつかの新しいUbuntuの愚かさの犠牲になったかもしれません。

Ubuntuはかつては必須の時間引数をとる通常のshutdownコマンドを持っていました。

これはUbuntu 12で普通のユーザーでもshutdownと入力した場合に起こることです。

$ shutdown
shutdown: time expected
Try `shutdown --help' for more information.

それから

$ shutdown +100
shutdown: need to be root.

さて、ここでUbuntu 16.10です。私はrootではありません。

$ date ; /sbin/shutdown
Fri Jun 23 16:00:16 PDT 2017
Shutdown scheduled for Fri 2017-06-23 16:01:16 PDT, use 'shutdown -c' to   cancel.

引数を指定しないと、60秒後に、たとえあなたがrootでなくても - 単にadmin特権で作られたアカウントでシャットダウンをスケジュールします。

Canonicalのせいです。

1
Kaz

shutdownreboothalt、および関連)の場合:私は本当に確かなものかどうかを尋ねるコピーを持っています(とにかく何もしません)。そのようなスクリプトは/usr/local/sbinに格納します。 Debianでは、これは他の/sbinより優先されます(これはPATHの最初のディレクトリです)。

システムスクリプトはフルパスを使用するので、hackのようにローカルマシンではなくリモートサーバーを停止することはできません(AwesomeWMの悪い動作)他の間接的な効果はありません、そして本当に必要なときに私はまだ/ sbin/shutdownとしてそれらを使うことができます。

1

Sudoersファイルでは、* 'でSudo' *を使用するよりもはるかに細かいレベルの粒度を使用できます。特に、コマンドエイリアスを使用して、特定のユーザーまたはグループが制限されているコマンドのグループのホワイトリストを作成できます。私はSSHアクセスに制限され、パスワードなしのSudoを許可したリモートサーバーで作業しました(パスワードで保護されたSSHキーが必要でした)。これにはいくつかの理由がありますが、危険なので、コマンドエイリアスを使用して、必要でないことに対する特権を付与せずに必要なことへの無制限のアクセス(サーバーの再起動など)を許可します。

'このコマンドは実行できません'と言う構文もあります。それは回避することができます従って本当のセキュリティ対策として使用するべきではありませんがそれはあなたが説明したシナリオのためにはたらくでしょう。

Man sudoersはこれをすべて設定する方法についていくつかの良い例を持っています。

もちろんこれにはSudoを使う必要がありますが、言うまでもありません。

1
tallus

シャットダウンにはモリーガードがあります。あなたはただそれをインストールする必要があります、そしてあなたがsshでシャットダウンしようとするとき、それはあなたにホスト名をタイプするように頼みます。

ファイルを削除するには、LD_PRELOADライブラリを介してゴミ箱をエミュレートするlibtrashのような解決策があります。

また、 maybe プログラムを使用して、変更/削除/ ...しているファイルをテストできます。何かをテストするとき、それはかなりクールです。

0
allo