web-dev-qa-db-ja.com

暗号パスワード生成を使用したUseradd

'useradd'を使用してFTPユーザーを動的に作成するための非常に単純なスクリプトだと思っていたものに取り組んでいます。このプロセスにはなじみのない部分がいくつかあり、1日の調査ではそれほど遠くはありません。これが私が持っているものです:

password="pass"
pass=$(Perl -e 'print crypt($ARGV[0], "wtf")' $password)
useradd -d HOME_DIR -s /bin/bash -g GROUP -p $pass -f -1 testing

ノート

  1. HOME_DIRとGROUPはプレースホルダーです
  2. 'useradd'のhome/base_dir(-d、-b)またはgroup(-g)機能に問題はありません。

トピック:

  1. パスワード生成の取り組みが機能しないのはなぜですか?
  2. / bin/bashは純粋なFTPユーザーに使用する正しいシェルですか、それとも/ bin/falseまたは別のシェルを使用しますか?
  3. デフォルトでは、useraddは独自のパスワードを提供するまでアカウントを無効にしますが、これをバイパスするにはどうすればよいですか?
  4. FTPアカウントを自動的に生成する機能が損なわれるため、passwdユーティリティを使用したくありません。これに対する解決策を見つけました ここ ですが、解決策がわかりません

私がこれについてすべて間違っているのか、私がやろうとしていることが不可能なのか、または私がここに述べたことについて誤った情報を与えられているのかを知らせてください。あなたが提供できるどんな助けにも感謝します。 :D

16
Sandwich

パスワード生成について:

2.3パスワードの暗号化

  • 関数:char *cryptconst char * key、c​​onst char * salt

    crypt関数は、パスワードkeyを文字列として受け取り、以下で説明するsalt文字配列を受け取り、印刷可能なASCII別のソルトで始まる文字列。関数の出力を考えると、その出力を生成するkeyを見つける最良の方法は、-の元の値までkeyの値を推測することであると考えられています。 keyが見つかりました。

    saltパラメータは2つのことを行います。まず、使用するアルゴリズム、MD5ベースのアルゴリズムまたはDESベースのアルゴリズムを選択します。第二に、多くのパスワードを含むファイルに対してパスワードを推測しようとする人の生活が困難になります。 saltがないと、侵入者は推測を行い、cryptを1回実行して、結果をすべてのパスワードと比較できます。 saltの場合、侵入者は異なるソルトごとにcryptを1回実行する必要があります。

    MD5ベースのアルゴリズムの場合、saltは文字列$1$で構成され、その後に最大8文字が続き、別の$または文字列の末尾で終了します。 cryptの結果は、salt、saltが1で終わっていない場合は$、アルファベットの22文字./0-9A-Za-z、最大34文字になります。合計文字数。 keyのすべての文字が重要です。

    DESベースのアルゴリズムの場合、saltはアルファベット./0-9A-Za-zの2文字で構成されている必要があり、cryptの結果は、これらの2文字の後に11文字が続きます。同じアルファベット、合計13。 keyの最初の8文字だけが重要です。

    MD5ベースのアルゴリズムでは、使用するパスワードの有効な長さに制限はなく、少し安全です。したがって、DESベースのアルゴリズムよりも優先されます。

    ユーザーが初めてパスワードを入力するときは、ソルトを適度にランダムな新しい文字列に設定する必要があります。以前のcrypt呼び出しの結果に対してパスワードを検証するには、前回の呼び出しの結果をソルトとして渡します。

システムによっては、BlowfishまたはSHA-2ファミリーcryptsも存在する可能性があり、セキュリティのために従来のDESが無効になっている可能性があります。 PAMは、ここにも独自の問題を追加できます。

 ID |メソッド
 ------------------------------- 
 1 | MD5(Linux、BSD)
 2a |フグ(OpenBSD)
 md5 | Sun MD5 
 5 | SHA-256(Linux、glibc 2.7以降)
 6 | SHA-512(Linux、glibc 2.7以降)

そうは言っても、

 root#useradd -d/-g users -p $(Perl -e'print crypt( "foo"、 "aa") ')-M -N foo 
 user $ su --foo 
パスワード:foo 
 foo $ ^ D 
 root#userdel foo 

私のシステムでは問題なく動作します。


シェルについて:

/sbin/nologinは、ログインが無効なユーザーにとっては伝統的なものです。 FTPデーモンの構成を再確認して、FTPデーモンがFTPアクセスから除外されているかどうかを確認する必要があります。


無効にされたアカウントについて:

上で見たように、有効なパスワードが与えられれば、期待通りに私のために働きます。


他の解決策について:

代替ソリューションについて何がわかりませんか?それは私には非常に明白に思えます。

username:password」を「chpasswd」にパイプするだけです。


FTPのみのユーザーが必要な場合は、 glftpdPure-FTPdProFTPD 、-などの仮想ユーザーをサポートするFTPデーモンを使用することをお勧めします。 vsftpd 、...実際にはすべての一般的なものがそうしているようです。このように、FTPアカウントは実際のシステムアカウントを必要としません。

26
ephemient

「FTPのみ」のユーザーを作成する場合は、 rssh ディストリビューションにrsshをインストールし、「FTPのみ」のユーザーのシェルを「/ usr/bin/rssh」に設定する必要があります。

非常にうまく機能します

1
Mandar Vaze