先日久々に勉強会に参加してみた浅見です。
その勉強会で、おもしろい対策方法が話題に上がったのでご紹介しようと思います。
目次
よくある対策方法
「検証用サーバを再起動したつもりが本番サーバを再起動してしまった」 あってはならないミスの「サーバ取り違え」。
サーバ取り違え対策として、良くある方法は次の4つくらいではないでしょうか?
- 指さし確認
- プロンプトの色を変える
- ペア作業を行う
- rootログインを禁止する
指さし確認
重要なコマンドを実行するときに、対象サーバやIPアドレスに間違えがないかを確実に確認させるようなルールで運用します。
対象を目で見て、指で確認して、「○○、良し」と声を出し、その声を自分で聞くことで一連の注意を払って、事故発生率を下げることが可能です。
プロンプトの色を変える
直観的な方法としては、コンソール背景やBashプロンプトの色を変更することがあります。
本番環境は「赤」、それ以外の環境は「緑」など全社的にルールを統一しておくと良いでしょう。
ペア作業を行う
いくらルールを引いても一人作業では注意力等に限界があります。
重要な操作を行うときは作業者と確認者のペアで作業を行うことも効果的です。作業中はどうしても視野が狭くなりがちなので、確認者がサポートすることで取り違いやオペレーションミスを未然に防ぐことが可能です。
事故防止以外にも、自分以外の技術者のオペレーションを見ることで、技術力向上を期待することも可能です。
他の技術者のコマンド操作を見る機会は以外と少ないものです。自分が知らない素敵なコマンドの使い方を知る機会になるかもしれません。
rootログインを禁止する
ルールや複数人作業をしても間違えてしまうときは間違えてしまうものです。
当たり前のことかもしれませんが、自身が操作可能な権限について理解し、必要最低限の権限で作業するようにしましょう。
一般ユーザで充分な作業をroot権限で作業していませんか?参照権限だけ付与してもらえれば充分ではありませんか?
利用するユーザ権限の整理をすることで、誤ってコマンド実行してもOSレベルで実行が拒否されます。
作業者に対象サーバを確認させる
よくある4つの対策にプラスして、勉強会で聞いた方法を一つご紹介します。
それは、作業者に対象サーバを確認させるという方法です。
指さし確認と何が違うの?
指さし確認はあくまでも自分の意識の中での確認でした。
この方法では「対象サーバを識別する情報を自らの手で入力」させます。
# shutdown -r now
再起動したいホスト名を入力してください >
対象サーバに対して自分の認識しているサーバ名やIPアドレスを入力し、合致した場合のみ実際のコマンドを発行させます。
gitリポジトリの削除をする際に、削除対象リポジトリ名を入力する必要がありますが、それと同様の考え方です。
実装方法
.bashrcに以下のような記載を行うことで実装ができました。
# vi ~/.bashrc
alias shutdown='shutdown2'
function shutdown2() {
read -p "再起動したいホスト名を入力してください > " input;
if [ hostname
== $input ]; then
\shutdown $@;
else
echo "対象サーバが異なります";
fi
}
設定が完了したら、.bashrcを有効にします。
# source ~/.bashrc
実行結果
実行すると次のような結果となります。
対象サーバが異なる場合
# shutdown -r now
再起動したいホスト名を入力してください > test-server.com
対象サーバが異なります
対象サーバが一致する場合
# shutdown -r now
再起動したいホスト名を入力してください > honban-server.com
Broadcast message from root@kenshiro
(/dev/pts/0) at 13:41 ...
The system is going down for reboot NOW!
まとめ
サーバ取り違えを防ぐ方法をまとめてみました。
それぞれの環境にあったやり方があると思いますので、自分達にあったやり方を取り入れてもらえれば良いかと思います。