Bagaimana saya bisa menetapkan kata sandi awal / default untuk pengguna di Linux?

10

Saya menemukan panduan yang menjelaskan cara mengatur kata sandi pengguna . Saya mencoba mengotomatiskannya dan mengirim email ke pengguna seperti:

userid created with password XYZ.
request to change the initial password.

Menurut dokumen di atas, kata sandi terenkripsi perlu dibuat menggunakan Python dan diumpankan ke usermodperintah seperti ini:

 usermod -p "<encrypted-password>" <username>

Apakah ada cara lain yang lebih sederhana untuk melakukan ini? Saya tidak ingin mengunduh utilitas khusus untuk melakukannya; itu harus digeneralisasikan sebanyak mungkin.


Sunting : Bahkan metode yang diberikan dalam tautan di atas sepertinya tidak berfungsi untuk saya:

bash-3.00# python
Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt; print crypt.crypt("<password>","<salt>")
<sOMrcxm7pCPI
>>> ^D
bash-3.00# useradd -g other -p "sOMrcxm7pCPI" -G bin,sys -m -s /usr/bin/bash mukesh2
UX: useradd: ERROR: project sOMrcxm7pCPI does not exist.  Choose another.
UX: useradd: sOMrcxm7pCPI name should be all lower case or numeric.
munish
sumber
Berikut adalah satu lagi tautan yang saya temukan tetapi tampaknya ada masalah keamanan juga dengan menggunakan opsi -p usermodketika seseorang menggunakan psuntuk melihat proses daftar kata sandi terlihat
munish

Jawaban:

13

Anda dapat menggunakannya chpasswduntuk melakukannya, seperti ini:

echo "username:newpassword" | chpasswd

Anda dapat menyambungkan ke chpasswddari program selain echo, jika nyaman, tetapi ini akan membantu.

Sunting: Untuk membuat kata sandi di dalam skrip shell dan kemudian mengaturnya, Anda dapat melakukan sesuatu seperti ini:

# Change username to the correct user:
USR=username
# This will generate a random, 8-character password:
PASS=`tr -dc A-Za-z0-9_ < /dev/urandom | head -c8`
# This will actually set the password:
echo "$USR:$PASS" | chpasswd

Untuk informasi lebih lanjut tentang chpasswd, lihat http://linux.die.net/man/8/chpasswd

(Perintah untuk menghasilkan kata sandi berasal dari http://nixcraft.com/shell-scripting/13454-command-generate-random-password-string.html )

Dominick Pastore
sumber
terima kasih @Dominick hmm, chpasswd mungkin di AIX ... saya belum menggunakannya. dan evrytime saya harus menulis kata sandi ... tidak dapat dihasilkan oleh skrip seperti di tautan pertanyaan ... sayangnya bahkan itu tidak berhasil untuk saya
munish
@munish Saya tidak yakin apa yang Anda maksud dengan menghasilkan dalam skrip, tapi saya memperbarui jawaban saya semoga lebih bermanfaat.
Dominick Pastore
Tidak bekerja. "Kesalahan manipulasi token otentikasi"
Cerin
@ Cerin Mungkinkah Anda melakukan sesuatu seperti sudo echo "username:newpass" | chpasswd? Karena izin yang ditinggikan dari sudotidak melewati pipa, jadi chpasswdakan berjalan sebagai pengguna biasa. Itu dapat diperbaiki dengan memindahkan sudo, seperti pada echo "username:newpass" | sudo chpasswd. Ada juga masalah lain yang dapat menyebabkan pesan kesalahan itu, tetapi kesalahan izin seperti ini mungkin yang paling umum.
Dominick Pastore
1
Kata sandi pada baris perintah dapat terlihat oleh pengguna lain yang login pada mesin yang sama menggunakan w, ps, atau perintah lain yang menampilkan info tentang proses lain. Kata sandi yang diatur dengan cara ini harus diubah oleh pengguna sesegera mungkin.
Mnebuerquo
3

Anda dapat menggunakan OpenSSL untuk menghasilkan kata sandi acak (16 karakter, dalam hal ini):

# 1000 bytes should be enough to give us 16 alphanumeric ones
p=$(openssl rand 1000 | strings | grep -io [[:alnum:]] | head -n 16 | tr -d '\n')

Kemudian masukkan kata sandi hash ke useraddatauusermod

# omit the "-1" if you want traditional crypt()
usermod -p $(openssl passwd -1 "$p") <username>

Kredit yang jatuh tempo: Pembuatan kata sandi diadaptasi dari metode serupa yang menggunakan /dev/urandomalih-alih openssl.

James Sneeringer
sumber
2

useradd harus bekerja (saya sudah melakukannya di Ubuntu). Mungkin periksa bahwa masing-masing argumen Anda benar (grup Anda ada, jalannya tepat untuk bash). Anda dapat menjalankan perintah hanya dengan kata sandi dan pengguna, dan kemudian menggunakan userdel untuk menghapus dan kemudian coba lagi dengan lebih banyak parameter, untuk melihat apa yang menyebabkan masalah (pendekatan brute force).

Ada juga pengguna baru (lihat halaman manual), setidaknya di bawah Ubuntu, di mana Anda memberikan file dengan file passwd seperti info, termasuk kata sandi teks biasa dan itu akan membuat pengguna tersebut. Cara yang bagus untuk melakukan banyak pengguna sekaligus.

pcm
sumber
+1 untuk menyebutkan newusersperintah untuk Ubuntu
Levon
1

cara paling sederhana yang saya temukan:


PASSWD="mySeCr3t-default-pa55" 
echo ${PASSWD} | passwd --stdin username_here
MelBurslan
sumber
Apakah Anda bahkan menguji ini? passwd: unrecognized option '--stdin'
Cerin
Ya, saya menggunakan ini berkali-kali tetapi, karena dengan hampir semua perintah lain, itu bukan solusi defacto untuk masalah yang dihadapi. Beberapa variasi passwd binary, tidak mendukung saklar --stdin.
MelBurslan