ssh経由でパスワードを持つユーザーを作成できない[終了]


13

私は次のように(root権限で)ssh経由でパスワードを持つユーザーを作成しようとしました:

ssh root@123.45.6.7 useradd -p $(openssl passwd -1 1234) newuser

そうすることで、という名前のアカウントを正常に作成できましたnewuserが、予想されるパスワード(1234)でログインできませんでした

二重引用符を追加しても違いはありません。

ssh root@123.45.6.7 "useradd -p $(openssl passwd -1 1234) newuser"

そして、ハッシュされたパスワードを生成し、それを変数としてローカルに保存できるが、それでも運がないのではないかと思っていました。

password=$(openssl passwd -1 1234)
ssh root@123.45.6.7 "useradd -p $password newuser"

見逃しているものはありますか?前もって感謝します!


他のユーザーがコマンドライン引数を見る可能性があるため、コマンドラインでパスワードを渡すことは悪い考えです。そのためのheemaylの答えをご覧ください。それを超えて、これはXY問題のように聞こえます。実際に何を達成しようとしていますか?誰も知らない(または知っているはずの)アカウントパスワードのポイントは何ですか?パスワードによるログインを受け入れないアカウントを作成することがポイントである場合、パスワードをまったく設定しないだけで、Ubuntuのデフォルトポリシーとしてパスワードベースのログインが無効のままになります。
デビッドフォースター

回答:


22

これは古典的な引用の問題です。

問題:コマンド置換($())および変数展開($によって返されるハッシュ化されたパスワードのsは、openssl変数インジケーターとして扱われます)は、リモートシェルではなくローカル環境で実行されます。

解決策:で使用するuseraddコマンドを単一引用符で囲みますsshローカルシェルでローカル環境でのコマンドの置換と変数の展開を防止し、リモートの非ログイン、非インタラクティブシェルで展開を実行します。

ssh root@123.45.6.7 'useradd -p "$(openssl passwd -1 1234)" newuser'

引用に注意してください。

セキュリティ上の問題:

  • SSH rootログインを無効にする必要があります。有効にする必要がある場合は、キーベースの認証のみを許可する必要があります。

  • MD5はすでに壊れており、ソルトがないと、単純なレインボーテーブル攻撃を受けます(ブルートフォース/辞書攻撃さえ必要ありません)。openssl passwdただし、ランダムソルトは生成されます。とにかく、あなたは本当に塩漬けでSHA-2を使用することを考慮すべきです

  • コマンドに引数として渡されたパスワードは、(リモート)システム内の他のプロセスから見える場合があります。これは、どのようにprocfsマウントされているかに依存し(を見てhidepid)、コマンドがそれ自体を書き換えているかどうか(この場合はおそらくそうではない)


1
魅力のように機能し、追加情報をありがとうございます!
amigcamel

1
md5cryptパスワードハッシュには塩があります
...-ilkkachu

@ilkkachu MD5は安全なハッシュではありません。興味のある方は、情報セキュリティの検索を実行してください。本当にあなたは、配合アルゴリズムや暗号化ライブラリを使用する必要がありますが、SHA-2は、MD5よりも有意に良好です。
wizzwizz4

1
@ wizzwizz4はい、それはよく知られていますが、この回答の情報が間違っているという事実は変わりません。:)
ホッブズ

2
@ wizzwizz4、パスワードハッシュ(crypt(3) Linuxでサポートされ、$1$識別子でマークされ md5crypt)は、プレーンMD5ハッシュアルゴリズムと同じではありません。$5$また、$6$ パスワードハッシュがプレーンSHA-256およびSHA-512でもないのと同じです。。MD5ベースの方法には、反復回数が固定されており、これが最大の問題です。
-ilkkachu

7

@heemaylが指摘したように、MD5パスワードハッシュアルゴリズムは古くなっており、現在のシステムは、カスタマイズ可能な作業要素を持つ新しいSHA-2ベースのパスワードハッシュです。しかし、OpenSSLコマンドラインツールはそれらをサポートしていないようです。

chpasswdユーティリティ、しかし、あなたはシステムの設定に応じて、ユーザーのパスワードを変更することができます。

これにより、リモートエンドで新しいユーザーを作成し、パスワードを変更できるようになります。

echo "newuser:newpass" | ssh root@123.45.6.7 'useradd newuser; chpasswd' 

chpasswdコマンドラインではなく、stdinからユーザー名とパスワードを取得します。コマンドライン引数はシステム上の他のすべてのプロセスに表示されるため、これは実際には利点です。openssl passwd、リモートですると、パスワードはシステム上のすべてのプロセスに対して一時的に表示されます。

システムcrypt(3)機能が知っているパスワードハッシュを生成するための既製のコマンドラインユーティリティがあるかどうかはわかりません。Perlにはcrypt関数が組み込まれていますが、適切なソルトを生成する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.