どうやって怖い端末コマンドを無効にしますか?
私はSSHを使って物理サーバにアクセスせずにリモートUbuntuサーバにアクセスしていました。 Ubuntu OS上で実行されているNoSQLサーバーに「shutdown
」と入力していると思いましたが、実際にはUbuntuサーバーにシャットダウンするように伝えました。それから私は彼が私のために物理的なサーバーを起動することができるように私がしたことをサーバー管理者に伝えなければなりませんでした。それは恥ずかしかったです!
これが二度と起こらないようにするにはどうすればよいですか。
標準的な答えは「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のようなそれほど怖くないコマンドでこれを試してみることもできます。
Sudo
は何らかの理由で存在します - それを使用してください。コマンド(この場合は対話式CLI)が完了すると、rootシェルではなくユーザーレベルのシェルに戻ります。ルートシェルに入るべき理由はほとんどありません。 (これはまだ答えではないことに驚きました...)
とは言っても、すべてにSudo
を使用するような人形になってはいけません。自分のしていることを理解し、なぜroot権限を必要とするのか、または必要としないのかを理解します。
さらに、あなたはroot /ユーザシェルのためのあなたのプロンプトを区別することができます。これはまた、シェルプロンプトに戻って "他のCLI"ではないことをより明確にします。私のものはとてもカラフルで、たくさんの役に立つ情報(ホスト名のような)を持っています。それはveryがどのホストでコマンドが実行されるのかを簡単にし、また振り返りやすくします。あなたの歴史を通して、プロンプトを探してください - ルートシェルはデフォルトのプロンプトを使います。
これは "your"アカウントでの使用に適していますが、security/sysadminningを真剣に受け止めているのであれば、パスワード/アカウントを共有することはなく、座っていることもないでしょう完全に気付かずにルートシェルで。
人々が繰り返し言っているように、「安全な環境を作るためのエイリアスコマンドは悪い考えです」。あなたはあなたの安全な環境で快適になるでしょう、あなたがすべきでないところにそれらの「怖い」コマンドをタイプしてください。それからある日、あなたは仕事を変えるか、新しいマシンにログインして、そして "whoopsy、私はそうではありませんでした、すみません" ...
パッケージ 'molly-guard'(少なくともDebian派生システムの場合)は、シャットダウン、停止、電源切断、および再起動に関するラッパーをインストールします。端末がリモート端末であることを検出した場合は、ホスト名の入力を求めます。一致しない場合、コマンドはキャンセルされます。
私は私がとても好きだという答えを受け入れました、しかし、他の誰かが読んでいて、より単純な答えを望むならば、ここに私のものです。
.bashrcファイルを見つけて、最後の行に置きます。
alias shutdown=notforuse
それから、shutdownと入力すると~bash: notforuse is not a command
のようなものになります。
これはばかげているかもしれませんが、それは単純でそれは動作します。私はこれを行うより良い方法で答えをいただければ幸いです!
あなたはいくつかの新しい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のせいです。
shutdown
(reboot
、halt
、および関連)の場合:私は本当に確かなものかどうかを尋ねるコピーを持っています(とにかく何もしません)。そのようなスクリプトは/usr/local/sbin
に格納します。 Debianでは、これは他の/sbin
より優先されます(これはPATHの最初のディレクトリです)。
システムスクリプトはフルパスを使用するので、hackのようにローカルマシンではなくリモートサーバーを停止することはできません(AwesomeWMの悪い動作)他の間接的な効果はありません、そして本当に必要なときに私はまだ/ sbin/shutdownとしてそれらを使うことができます。
Sudoersファイルでは、* 'でSudo' *を使用するよりもはるかに細かいレベルの粒度を使用できます。特に、コマンドエイリアスを使用して、特定のユーザーまたはグループが制限されているコマンドのグループのホワイトリストを作成できます。私はSSHアクセスに制限され、パスワードなしのSudoを許可したリモートサーバーで作業しました(パスワードで保護されたSSHキーが必要でした)。これにはいくつかの理由がありますが、危険なので、コマンドエイリアスを使用して、必要でないことに対する特権を付与せずに必要なことへの無制限のアクセス(サーバーの再起動など)を許可します。
'このコマンドは実行できません'と言う構文もあります。それは回避することができます従って本当のセキュリティ対策として使用するべきではありませんがそれはあなたが説明したシナリオのためにはたらくでしょう。
Man sudoersはこれをすべて設定する方法についていくつかの良い例を持っています。
もちろんこれにはSudoを使う必要がありますが、言うまでもありません。
シャットダウンにはモリーガードがあります。あなたはただそれをインストールする必要があります、そしてあなたがsshでシャットダウンしようとするとき、それはあなたにホスト名をタイプするように頼みます。
ファイルを削除するには、LD_PRELOAD
ライブラリを介してゴミ箱をエミュレートするlibtrashのような解決策があります。
また、 maybe プログラムを使用して、変更/削除/ ...しているファイルをテストできます。何かをテストするとき、それはかなりクールです。