web-dev-qa-db-ja.com

パスワードをロックする方法は2つありますが、ロックを解除する方法は1つだけです

CentOS 6 Linuxには、パスワードをロックする2つの方法があります。

  1. passwd -l
  2. 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.)

バグや機能?

6
ceving

それは問題ではありません。あなたが見ている振る舞いは実装固有です。そのため、usermodは1つの処理を行い、passwdは別の処理を行います。それらは異なる実装です。 Solaris、AIX、HP-UX、True64、Xenixで何が起こるか確認してください...

パスワードフィールドは、暗号化またはハッシュされた文字列です。ユーザーがパスワードを指定すると、パスワードフィールドで指定されたアルゴリズムに従って暗号化またはハッシュされます。認証は、提供された形式と格納されている暗号化/ハッシュ形式の両方が一致する場合にのみ成功します。

単一の_!_または二重の_!!_は、暗号化されたパスワードと一致することはできません。つまり、結果値_!_または_!!_に暗号化される入力はありません。ハッシュ結果になり得ない文字列は、アカウントを「ロック」します。 fooまたは_Mr. Spock_の場合もあります。

Linuxのpasswd(1)の_--lock_フラグの下のこのコメントにも注意してください。

これによってアカウントが無効になるわけではないことに注意してください。ユーザーは、別の認証トークン(SSHキーなど)を使用してログインできる場合があります。アカウントを無効にするには、管理者は_usermod --expiredate 1_を使用する必要があります(これにより、アカウントの有効期限が1970年1月2日に設定されます)。

9
bahamat

これはバグのように聞こえますが、両方ではなくどちらかのツールを使用している限り、おそらく完全に表面的なものです。シャドウマンページ(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コマンドにあります。

5
slm

これについて説明させてください

違いは、Linuxにはユーザーのログインをロックする方法が2つあることです。

1-パスワードをロックする

2-ユーザー名をロックする

最初:

passwd -l test<これはユーザーのパスワードをロックします。

passwd -u test<ロックされたパスワードは、これによってのみロック解除できます。つまり、ユーザーのみがログインできます。

2番目:

usermod -L test<これはユーザーのユーザー名をロックします。

usermod -U test<ロックされたユーザー名は、これによってのみロック解除できます。つまり、ユーザーのみがログインできます。

注:

passwd」ユーティリティでロックされているユーザーのパスワードは、「usermod "ユーティリティおよびその逆。

2
Ashish Jullia

「「passmod」ユーティリティと「usermod」ユーティリティでロックされているユーザーのパスワードはロック解除できません。逆も同様です。」

上記の情報を誰かが投稿しました。

事実ではありません。usermodコマンドを使用してロックされたアカウントは、passwd -uコマンドを使用してロック解除できます。

passwd -lコマンドを使用してロックされたアカウントは、usermod -Uコマンドを使用してロック解除できます(2回実行する必要があります)。

0
Godwin

これはCentOS 7で修正されたようです。ロックの方法に関係なく、任意のコマンドを使用してロックを解除できます。

++誰かがこれら2つのコマンドが異なることを行うと述べました-1つはパスワードをロックしますが、他はユーザーアカウントをロックしますが、trueではありません:passwd -S(username)は両方のシナリオでLKを表示します(usermod -L(username)AND passwd -l(username) )

ユーザーアカウントの使用をロック:chage -E 0(ユーザー名)

0
Aditya Garg