GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプト内から passwd コマンドを使用する

唯一の解決策は Ubuntu 12.04 で動作します:

echo -e "new_password\nnew_password" | (passwd user)

しかし、2 番目のオプションは、以下から変更した場合にのみ機能します:

echo "password:name" | chpasswd

宛先:

echo "user:password" | chpasswd

元の投稿の説明を参照してください:スクリプトによるパスワードの変更


以下の賢明な言葉を読んでください:

  • http://mywiki.wooledge.org/BashFAQ/078

引用します:

<ブロック引用>

bash でできることは、おそらく機能しません。 passwd(1) は標準入力から読み取りません。これは意図的なものです。それはあなたの保護のためです。パスワードは、プログラムに入れたり、プログラムによって生成されたりすることを意図したものではありません。それらは、機能する脳を備えた実際の人間の指によってのみ入力されることを意図しており、決してどこにも書き留められることはありませんでした。

それにもかかわらず、35 年にわたる Unix のセキュリティを回避する方法について多くのユーザーから問い合わせが寄せられています。

shadow(5) を設定する方法を説明します パスワードを適切に設定し、GNU-I-only-care-about-security-if-it-doesn't-make-me-think-to-much を表示します - passwd(1) を悪用する方法 .

最後に、ばかげた GNU passwd(1) 拡張機能 --stdin を使用する場合は、 、しない コマンドラインに入力してパスワードを渡します。

echo $mypassword | passwd --stdin # Eternal Sin.
echo "$mypassword" | passwd --stdin # Eternal Sin, but at least you remembered to quote your PE.
passwd --stdin <<< "$mypassword" # A little less insecure, still pretty insecure, though.
passwd --stdin < "passwordfile" # With a password file that was created with a secure `umask(1)`, a little bit secure.

最後は GNU passwd でできる最善のことです .それでもお勧めしませんが。

コマンドラインにパスワードを入力するということは、ボックスへのアクセスのほんのわずかなヒントさえあれば、誰もが監視できることを意味します ps などでパスワードを盗みます。あなたの箱は安全だと思っていても。それはあなたが本当にすべきことです どんな犠牲を払っても避ける習慣を身につけてください (そうです、仕事を成し遂げるのにもう少し面倒なことをする犠牲さえも)。


man 1 passwd から ":

   --stdin
          This option is used to indicate that passwd should read the new
          password from standard input, which can be a pipe.

だからあなたの場合

adduser "$1"
echo "$2" | passwd "$1" --stdin

[更新 ] コメントでいくつかの問題が提起されました:

あなたの passwd コマンドに --stdin がない可能性があります オプション:chpasswd を使用します ashawley が提案するように、代わりにユーティリティを使用してください。

bash 以外のシェルを使用している場合、"echo" は組み込みコマンドではない可能性があり、シェルは /bin/echo を呼び出します。 .パスワードはプロセス テーブルに表示され、ps などのツールで確認できるため、これは安全ではありません。 .

この場合、別のスクリプト言語を使用する必要があります。以下は Perl での例です:

#!/usr/bin/perl -w
open my $pipe, '|chpasswd' or die "can't open pipe: $!";
print {$pipe} "$username:$password";
close $pipe

現在、このコマンドを使用できます:

echo "user:pass" | chpasswd

Linux
  1. passwdコマンドを使用したLinuxユーザーの管理

  2. LinuxコマンドラインからのGoogleドライブの使用

  3. mailコマンドを使用してLinuxターミナルまたはスクリプトから電子メールを送信する

  1. Suコマンドはどのようにパスワードを画面に表示されないようにマスキング/保護していますか?

  2. $の意味は?シェルスクリプトでは?

  3. passwd:コマンドが見つかりません

  1. コマンド ラインから任意の場所で実行するスクリプトをインストールするにはどうすればよいですか?

  2. シェルコマンドを使用してGDB内で環境変数を設定するには?

  3. /etc/passwd で指定されたコマンド/スクリプトをバイパスする