もうrootのパスワードを潰すとか潰さないとか (ry

ウノウさんの「ウノウラボ Unoh Labs: 専用サーバを構築するときにまず行う4つの設定」に対して「rootを潰すなんてとんでもない」とかそういう話が盛り上がっているようですね。けっこう言いたいことの半分はこちらとかで言ってもらえているので安心ですが、でも PAM についてもっと知ろうよというのはありますなあ。

たとえば単に su を ssh など仮想端末上から利用することを拒否したいだけなら、pam_securetty を使えばいいです。これは、/etc/securetty に列挙した端末デバイスからのアクセスだけを許可するための PAM モジュールです。

使い方は簡単で、

auth          required  pam_securetty.so

を /etc/pam.d/su (アーキテクチャによって異なるかもしれない) のエントリとして追加するだけです。

/etc/securetty に仮想端末を列挙しなければ (多くのディストロで標準の状態)、仮想端末からの利用があれば syslog を通じて次のような内容が記載されます。

Jan 1 00:00:00  roadrunner su[0]: (pam_securetty) access denied: tty 'pts/0' is not secure !
Jan 1 00:00:00  roadrunner su[0]: pam_authenticate: Authentication failure
Jan 1 00:00:00  roadrunner su[0]: FAILED su for root by moriyoshi

パッケージによっては su を init スクリプトの中で使っているものがあります。その場合 securetty が邪魔になることがありますので、pam_rootok を一番上に追加しておきましょう。

auth          sufficient pam_rootok.so