CentOS 6 Linuxには、パスワードをロックする2つの方法があります。
passwd -l
usermod -L
今日、私は彼らが違うことをしていることを知りました。
passwd
は、2つの感嘆符をシャドウファイルに書き込みます。
#passwd -d test1 ユーザーtest1のパスワードを削除しています。 passwd:Success #passwd -l test1 ユーザーtest1のパスワードをロックしています。 passwd:Success #passwd -S test1 test1 LK 2014-01-14 0 99999 7 -1(パスワードがロックされています。) #grep test1/etc /shadow test1:!!:16084:0:99999:7:::
しかし、usermod
は1つしか書き込みません。
#passwd -d test1 ユーザーtest1のパスワードを削除しています。 passwd:Success #usermod -L test1 #passwd -S test1 test1 LK 2014-01-14 0 99999 7 -1(パスワードがロックされています。) #grep test1 /etc/shadow test1:!:16084:0:99999:7: ::
これは表面的な不一致だけですか、それともさまざまなロックインジケータに意味がありますか?
2つのコマンドを混在させると、おかしなことが起こります。
passwd
でアカウントをロック:
# passwd -l test1
Locking password for user test1.
passwd: Success
usermod
でロックを解除します。
# usermod -U test1
そして驚いたことに、まだロックされています。
# passwd -S test1
test1 LK 2014-01-14 0 99999 7 -1 (Password locked.)
バグや機能?
それは問題ではありません。あなたが見ている振る舞いは実装固有です。そのため、usermod
は1つの処理を行い、passwd
は別の処理を行います。それらは異なる実装です。 Solaris、AIX、HP-UX、True64、Xenixで何が起こるか確認してください...
パスワードフィールドは、暗号化またはハッシュされた文字列です。ユーザーがパスワードを指定すると、パスワードフィールドで指定されたアルゴリズムに従って暗号化またはハッシュされます。認証は、提供された形式と格納されている暗号化/ハッシュ形式の両方が一致する場合にのみ成功します。
単一の_!
_または二重の_!!
_は、暗号化されたパスワードと一致することはできません。つまり、結果値_!
_または_!!
_に暗号化される入力はありません。ハッシュ結果になり得ない文字列は、アカウントを「ロック」します。 foo
または_Mr. Spock
_の場合もあります。
Linuxのpasswd(1)
の_--lock
_フラグの下のこのコメントにも注意してください。
これによってアカウントが無効になるわけではないことに注意してください。ユーザーは、別の認証トークン(SSHキーなど)を使用してログインできる場合があります。アカウントを無効にするには、管理者は_
usermod --expiredate 1
_を使用する必要があります(これにより、アカウントの有効期限が1970年1月2日に設定されます)。
これはバグのように聞こえますが、両方ではなくどちらかのツールを使用している限り、おそらく完全に表面的なものです。シャドウマンページ(man 5 shadow
)を見ると、パスワードフィールド(CentOSの場合)についての説明があります。
encrypted password
Refer to crypt(3) for details on how this string is interpreted.
If the password field contains some string that is not a valid result
of crypt(3), for instance ! or *, the user will not be able to use a
unix password to log in (but the user may log in the system by other
means).
This field may be empty, in which case no passwords are required to
authenticate as the specified login name. However, some applications
which read the /etc/shadow file may decide not to permit any access
at all if the password field is empty.
A password field which starts with a exclamation mark means that the
password is locked. The remaining characters on the line represent
the password field before the password was locked.
この最後の段落では、passwd
コマンドの実装のバグのように問題が聞こえます。これは、パスワードをロックするために必要なのは1つの(!
)だけだからです。
これがバグであるという上記の可能性に私を悩ませた1つのことは、それがこれほど長く続くとは思えないことです。これに私を悩ませたもう1つのことは、私の/etc/shadow
ファイルに次のような行があることです。
abrt:!!:16047::::::
openvpn:!!:16047::::::
unbound:!!:16047::::::
したがって、もう少し検索すると、このタイトルの記事 / etc/shadow fileの理解 が見つかりました。この記事のコメントセクションには、次のビットがあります。
lesca September 23, 2010 at 4:29 am
!! means user account has not been initialed or has not been locked.
! means group password is not available.
* means login disabled.
この最後のビットは、あまりにも遠くない過去には、グループパスワードとユーザーパスワードがあったことを思い出すのに十分なほど、私の記憶を揺さぶった。それらの詳細については、次のタイトルのブログ投稿を参照してください。 Linux Set or Change User Password と置き換えられた機能gpasswd
このタイトルのブログ投稿: Linuxのグループパスワード 。
とにかくバグを発見したと思います!バグはpasswd
コマンドにあります。
これについて説明させてください
違いは、Linuxにはユーザーのログインをロックする方法が2つあることです。
1-パスワードをロックする
2-ユーザー名をロックする
最初:
passwd -l test<これはユーザーのパスワードをロックします。
passwd -u test<ロックされたパスワードは、これによってのみロック解除できます。つまり、ユーザーのみがログインできます。
2番目:
usermod -L test<これはユーザーのユーザー名をロックします。
usermod -U test<ロックされたユーザー名は、これによってのみロック解除できます。つまり、ユーザーのみがログインできます。
注:
「passwd」ユーティリティでロックされているユーザーのパスワードは、「usermod "ユーティリティおよびその逆。
「「passmod」ユーティリティと「usermod」ユーティリティでロックされているユーザーのパスワードはロック解除できません。逆も同様です。」
上記の情報を誰かが投稿しました。
事実ではありません。usermodコマンドを使用してロックされたアカウントは、passwd -u
コマンドを使用してロック解除できます。
passwd -l
コマンドを使用してロックされたアカウントは、usermod -U
コマンドを使用してロック解除できます(2回実行する必要があります)。
これはCentOS 7で修正されたようです。ロックの方法に関係なく、任意のコマンドを使用してロックを解除できます。
++誰かがこれら2つのコマンドが異なることを行うと述べました-1つはパスワードをロックしますが、他はユーザーアカウントをロックしますが、trueではありません:passwd -S(username)は両方のシナリオでLKを表示します(usermod -L(username)AND passwd -l(username) )
ユーザーアカウントの使用をロック:chage -E 0(ユーザー名)