GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan perintah passwd dari dalam skrip shell

Satu-satunya solusi berfungsi di Ubuntu 12.04:

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

Namun opsi kedua hanya berfungsi saat saya mengubah dari:

echo "password:name" | chpasswd

Kepada:

echo "user:password" | chpasswd

Lihat penjelasannya di postingan asli:Mengubah kata sandi melalui skrip


Baca kata bijak dari:

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

Saya mengutip:

Tidak ada yang dapat Anda lakukan di bash yang mungkin berhasil. passwd(1) tidak membaca dari input standar. Ini disengaja. Ini untuk perlindungan Anda. Kata sandi tidak pernah dimaksudkan untuk dimasukkan ke dalam program, atau dihasilkan oleh program. Mereka dimaksudkan untuk dimasuki hanya dengan jari-jari manusia yang sebenarnya, dengan otak fungsional, dan tidak pernah ditulis di mana pun.

Meskipun demikian, kami mendapatkan banyak pengguna yang bertanya bagaimana mereka dapat menghindari keamanan Unix selama 35 tahun.

Selanjutnya menjelaskan bagaimana Anda dapat menyetel shadow(5) Anda sandi dengan benar, dan menampilkan GNU-Saya-hanya-peduli-tentang-keamanan-jika-itu-tidak-membuat-saya-berpikir-terlalu-banyak -cara menyalahgunakan passwd(1) .

Terakhir, jika Anda akan menggunakan ekstensi GNU passwd(1) konyol --stdin , jangan berikan kata sandi dengan meletakkannya di baris perintah.

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.

Yang terakhir adalah yang terbaik yang dapat Anda lakukan dengan GNU passwd . Meskipun saya tetap tidak akan merekomendasikannya.

Menempatkan kata sandi pada baris perintah berarti siapa pun yang memiliki petunjuk akses terjauh ke kotak dapat memantau ps atau semacamnya dan mencuri kata sandinya. Bahkan jika menurut Anda kotak Anda aman; itu sesuatu yang Anda harus benar-benar biasakan untuk menghindari biaya apa pun (ya, bahkan biaya untuk melakukan lebih banyak masalah dalam menyelesaikan pekerjaan).


dari "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.

Jadi dalam kasus Anda

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

[Perbarui ] beberapa masalah diangkat dalam komentar:

passwd Anda perintah mungkin tidak memiliki --stdin opsi:gunakan chpasswd utilitas sebagai gantinya, seperti yang disarankan oleh ashawley.

Jika Anda menggunakan shell selain bash, "echo" mungkin bukan perintah bawaan, dan shell akan memanggil /bin/echo . Ini tidak aman karena kata sandi akan muncul di tabel proses dan dapat dilihat dengan alat seperti ps .

Dalam hal ini, Anda harus menggunakan bahasa skrip lain. Berikut adalah contoh di Perl:

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

Saat ini, Anda dapat menggunakan perintah ini:

echo "user:pass" | chpasswd

Linux
  1. Bagaimana cara menginstal skrip untuk dijalankan di mana saja dari baris perintah?

  2. Bagaimana cara mengatur variabel lingkungan dalam GDB menggunakan perintah Shell?

  3. Jalankan skrip shell dari perintah docker-compose, di dalam container

  1. Menggunakan Stratis untuk mengelola penyimpanan Linux dari baris perintah

  2. Mengelola pengguna Linux dengan perintah passwd

  3. Melewati perintah/skrip yang ditentukan di /etc/passwd

  1. Menggunakan Google Drive dari Baris Perintah Linux

  2. Kirim email dari terminal atau skrip linux menggunakan perintah email

  3. Arti dari $? Dalam Skrip Shell?