質問: パスワード設定していないユーザーのログイン いつもお世話になっております。 linuxで、useraddした後、passwdコマンドでパスワードを設定していないユーザーがいます。ここでは、postgresとします。 このユーザーに一般ユーザーからなるときに、 $su - postgres としますが、パスワードがきかれて、何も入力しないと、 invalidになります。(centos5) パスワードを設定しないと、一般ユーザーからログインできないのでしょうか。 ちなみに、rootからpostgresですと、ログインできます。 $su - $su - postgres お手数をおかけしますが、なにとぞご教授お願いいたします。
回答: 実際useraddしてみると分かりますが、useradd直後の状態では、パスワードは「設定されていません」。 設定しとらんのやけん設定はされとらんやろ何を言うてるんアホちゃうんと思うなかれ。パスワードが設定されていないとは、パスワードが空である(=初期値としてランダムパスワードが設定されている訳ではない)という事です。さて、ではどうして一般ユーザーからsuできないのでしょうか。rootになって # getent shadow postgres とすると、パスワードの欄が半角びっくりマーク2個のみが印字されたかと思います。この半角びっくりマーク2個というのがlinuxにおいて「アカウントがロックされている」という状態になります。 試しに/etc/shadowファイルをrootで直接書き換える(びっくり2つを削る)と、一般ユーザーからパスワードなしでsu - postgresできるようになります。もちろんこんな危険な操作(shadowの書き換え)は普通せずに、以下のようにします。 # passwd -u -f postgres passwd -uというのは、ロックアウトされているアカウントのロックを解除するものですが、現在postgresにはパスワードが設定されていないためpasswd -uだけだと「危険だべ」と拒否されます。ので、-fオプションをつけて強行します。すると先ほど/etc/shadowを直接書き換えたのと同じ状態に変わり、一般ユーザーからパスワードなしでsu - postgresする事ができるようになります。逆にロックする時は # passwd -l postgres です。詳しくはpasswd -hなどを参照の事。root(uid 0)はロックされているアカウントもおかまいなしに変身できるという凄い権利を持っています。