本番サーバ上で、sudo コマンド経由でスーパーユーザ権限で実行することはよくあります。
sudo コマンドはなくてはならないコマンドですが、同時に危険なコマンドでもあります。
今まで、ずっとデフォルトの sudo の設定で使っていたのですが、改めて設定を見直してみました。
sudo の公式ページをみてみると、頻繁にバージョンアップされているのがよく分かります。/etc/sudoers の設定方法も詳しいドキュメントがあっていい感じです。
次の2点ほど設定を見直しました。
- デフォルトのパスワードのキャッシュ時間を 0 にする
- パスワードプロンプトにホスト名を表示する
まず、最初の設定はデフォルトだと 5 分間、パスワードがキャッシュされます。そうすると、連続で sudo コマンドを実行するとき、パスワードを聞かれないためオペミスを起こしてしまう可能性が高まります。そこで、キャッシュ時間を 0 にすることにより、必ず毎回パスワードを聞くように設定します。この設定は、visudo コマンドを使って、次の行を追加します。
Defaults timestamp_timeout = 0
次にパスワードを聞かれるときのプロンプトにホスト名を表示して、念のためどのホストで sudo を実行しようとしているのか表示します。次の行を追加します。
Defaults passprompt = “%u@%h Password: “
この設定をすると、例えば hoge というユーザ名で、s1 というホスト名の場合、次のようなパスワードプロンプトになります。
hoge@s1 Password:
デフォルトのパスワードプロンプトに比べると、かなり分かりやすい表示になりました。
最新版の sudo バージョン 1.7.1 以降からは、次のような構文で別の設定ファイルも読み込めるようになっています。
これを使えば、ホストごとに異なった設定も管理しやすくなります。ただし、CentOS の場合、バージョン 1.6.8 なので対応していません。すこしはまってしまいました。。。
#includedir /etc/sudoers.d/hoge
最新版の sudo に入れ替えようと思いましたが、今のところそれほど困っていないので最新版は使っていません。
普段何気なく使っている sudo。もちろん、なるべく本番サーバ上では使わないのが賢明ですが、メンテナンスのときなど使う機会があるので、なるべくオペミスのリスクを減らしたいものです。
さらに、僕は sudo をコマンド補完履歴に追加しないようにしています。
# 2/5 追記
ちなみに、sudo のパスワードキャッシュをクリアするときは sudo -k あるいは -K オプションで行います。
Tags: sudo






