オペミス防止の設定
先日、痛恨のオペミス(本番環境で間違えて poweroff
実行)をしてしまい、対策を講じることにしました。
sudo の設定
他サイトでも紹介されていますが、sudo
で reboot
や shutdown
などのコマンドを実行できなくする設定です。
Fedora では /etc/sudoers
を直接編集するのではなく、/etc/sudoers.d/
以下に新規にファイルを作る方が良いでしょう。
/etc/sudoers.d/
以下のファイルであっても、構文エラーがあると sudo
できなくなるので、必ず、編集後に構文チェックをしてくれる機能の付いた visudo
を使って編集します。
/etc/sudoers.d/alice
を以下のように設定します(ファイル名は何でもいいです)。
Cmnd_Alias SHUTDOWN = /sbin/shutdown,/sbin/halt,/sbin/reboot,/sbin/poweroff alice ALL=(ALL) NOPASSWD: ALL, !SHUTDOWN
この例では、ユーザ alice
は SHUTDOWN
に書いた 4つのコマンドは禁止、それ以外はパスワードなしで実行 OK という設定です。私の探し方が悪いのかもしれませんが、ネットでは SHUTDOWN
禁止の設定例はたくさん見つかるのですが、同時に「それ以外」は OK にする設定が見つからないです。これで所望の設定になりました。
禁止した 4つのコマンドは、sudo -s
でシェルを取得した後に実行します。
勘違いによるオペミスの防止
reboot
や shutdown
にガードを付けます。
元々、今回のきっかけの対策になったオペミスが、テスト環境だと思って poweroff
したところ、実際は本番環境だった、とかなので、前述の対策だけでは防ぎきれません。幸いなことに、私のサーバでは、再起動してよい条件が明確なので、ガードを書くことができました。
再起動と poweroff
が入り乱れてなんか訳分からん感じですが、本番環境は基本無停止(カーネルアップデート等、必要な場合に再起動のみ)、
テスト環境は必要時以外電源オフなので、こんな文章になってしまい、申し訳ありません。
本番環境の /root/.bashrc
にエイリアスを追加します。
alias guard='/path/to/condition' alias halt='guard && halt' alias poweroff='guard && poweroff' alias reboot='guard && reboot' alias shutdown='guard && shutdown'
/path/to/condition
はガード条件で、再起動や電源断などが可能な場合は、終了コード 0
を返すようなコマンドです。この部分は各自適切なものをご用意ください。
この設定であれば、再起動可能な条件が整っていない状態で、テスト環境だと思い込んで、本番環境で reboot
しようが poweroff
しようが、ガードが防いでくれます。
元々、/root/.bashrc
には rm
などにエイリアスが定義されていて、確認する設定(-i
オプション)になっていますので、今回の対策は、それに倣ったものです。
まとめ
オペミスを防ぐ、ちょっとしたアイデアの紹介でした。オペミスには気をつけましょう、では限界があるので、オペミスが起きない設定にしておけば安心です。