useraddが/ etc / shadowのパスワードを暗号化しない


20

vsftpdの新しいFTPユーザーを作成しようとしたときに、この問題に遭遇しました。次のコマンドで新しいユーザーを作成し、FileZillaでログインしようとすると、「パスワードが正しくありません」というエラーが表示されます。

useradd f -p pass -d /home/f -s /bin/false

これを実行した後、/ etc / shadowには以下が含まれます

f:pass:1111:0:99:2:::

次のコマンドを実行して、同じパスパスを指定したら

passwd f

/ etc / shadowに含まれるもの

f:$1$U1c5vVwg$x5TVDDDmhi0a7RWFer6Jn1:1111:0:99:2:::

passwdを実行すると暗号化が発生するように見えますがuseraddは実行されません

重要なのは、これを行った後、まったく同じ資格情報でFTPにログインできることです。

CentOS 5.11、vsftpd for FTP、およびFileZilla for FTP Accessを使用しています

/ var / log / secureに含まれるもの:

Dec 17 useradd[644]: new group: name=f, GID=511
Dec 17 useradd[644]: new user: name=f, UID=511, GID=511, home=/home/f, shell=/bin/false

-p passuseradd に渡すと機能しないのはなぜですか?動作させるには何をする必要がありますか?


質問が表示されませんか?-そのようなものは、PAMを使用して管理し、一般的に記録されます/var/log/secure
HBruijn

私はに書かれているかを示すために私の答えを更新しました@HBruijn は/ var / log /安全な
BadToTheBone

2
本当に?関連するマニュアルページで明示的に回答されている質問の場合、+ 12
CVn 14

パスワードハッシュで$1$は、MD5が使用されていることを示していること注意してください。MD5は、パスワードについてはまったくひどいものではありませんが、最近ではむしろ弱い側面にあります。これはまったく別の質問ですが、強力なハッシュ関数への移行を検討することを強くお勧めします。
CVn 14

2
サイドノート:入力されたパスワード/etc/shadowは暗号化されず、ハッシュされます
トビアスキーンズラー14

回答:


43

それは意図したとおりに機能しています。useraddコマンドを使用してパスワードを設定する場合、パスワードのハッシュ化されたバージョンをに渡すことになっていますuseradd

文字列passはのハッシュ化されたパスワードフィールドの形式基準を満たし/etc/shadowますが、その文字列への実際のパスワードハッシュはありません。その結果、すべての意図と目的において、そのアカウントはパスワードを持つものとして動作しますが、アクセスに使用しようとするパスワードは正しいパスワードではないとして拒否されます。

man useraddまたはuseraddのドキュメントを参照してください:

-p--password パスワード

crypt(3)によって返される暗号化されたパスワード。デフォルトでは、パスワードは無効になっています。

注:パスワード(または暗号化されたパスワード)はプロセスをリストするユーザーに表示されるため、このオプションは推奨されません。

パスワードがシステムのパスワードポリシーに準拠していることを確認する必要があります。


32

manuseradd

   -p, --password PASSWORD
       The encrypted password, as returned by crypt(3). The default is to
       disable the password.

ハッシュ化されたパスワードを渡すことになっています。
平文パスワードではありません。


16

useraddパスワード自体ではなく、パスワードのハッシュを渡すことを期待しています。コマンドで次のバリエーションを使用して、コマンドにハッシュされたパスワードを提供できますuseradd

useradd f -p "$(mkpasswd --method=sha-512 'pass')" -d /home/f -s /bin/false

利用可能な方法を見つけるには、次を使用します。

mkpasswd --method=help

コマンドラインでパスワードを渡さないようにするには、パスワードをファイルに入れ(エディターを使用し、使用していない、echoまたは類似していない)、次のようにします。

useradd f -p "$(mkpasswd --method=sha-512 --password-fd=0 < filename)" -d /home/f -s /bin/false

これにより、コマンドラインでハッシュ化されたパスワードが渡されますが、プレーンテキストでは渡されません。

mkpasswdexpectパッケージに付属しています。


2
MD5を使用しないでください!使用SHA-2
ヨーゼフ・

9
これにより、さまざまなカーネルインターフェイスを介してパスワードが一時的に公開され(すべてのプロセスが他のプロセスのコマンドラインを読み取ることができます)、$ HISTORYまたは同様のメカニズムを介してプレーンテキストでディスクに保存される可能性があることに注意してください
CVn 14

@MichaelKjörling:非常に良い点です。編集した回答をご覧ください。
追って通知があるまで一時停止します。

1
もちろん、ディスク上にプレーンテキストパスワードを保存しています。少なくとも、これはsysadminに選択肢を与えます。おそらくこの時点で、最初はダミーのパスワードを使用し、すぐに別のパスワードpasswdに変更することを
お勧めし

2
絶対にデニス、それははるかに優れていますが、パスワードはディスク上にプレーンテキストのままです。状況によっては、特定の脅威モデルの下では、それは実際の問題になる可能性があります。そうである必要はありません。
CVn 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.