useradd tidak mengenkripsi kata sandi di / etc / shadow

20

Saya sengaja menemukan masalah ini ketika mencoba membuat pengguna FTP baru untuk vsftpd. Setelah membuat pengguna baru dengan perintah berikut dan mencoba masuk dengan FileZilla, saya akan mendapatkan kesalahan "kata sandi salah".

useradd f -p pass -d /home/f -s /bin/false

Setelah melakukan ini, / etc / shadow mengandung

f:pass:1111:0:99:2:::

Setelah saya menjalankan perintah berikut dan memberikan pass pass yang sama

passwd f

/ etc / shadow mengandung

f:$1$U1c5vVwg$x5TVDDDmhi0a7RWFer6Jn1:1111:0:99:2:::

Tampaknya enkripsi terjadi ketika saya menjalankan passwd , tetapi tidak pada useradd

Yang penting setelah melakukan ini, saya bisa masuk ke FTP dengan kredensial yang sama persis.

Saya menggunakan CentOS 5.11, vsftpd untuk FTP, dan FileZilla untuk Akses FTP

/ var / log / secure berisi:

Dec 17 useradd[644]: new group: name=f, GID=511
Dec 17 useradd[644]: new user: name=f, UID=511, GID=511, home=/home/f, shell=/bin/false

Mengapa tidak berfungsi saat saya beralih -p passke useradd? Apa yang harus saya lakukan untuk membuatnya bekerja?

Buruk untuk Tulang
sumber
Saya tidak melihat pertanyaan di sana? - Hal-hal seperti itu dikelola melalui PAM dan biasanya masuk/var/log/secure
HBruijn
@HBruijn Saya telah memperbarui jawaban saya untuk menunjukkan apa yang ditulis ke / var / log / secure
BadToTheBone
2
Sangat? +12 untuk pertanyaan yang dijawab secara eksplisit oleh halaman manual yang relevan?
CVn
Perhatikan bahwa dalam hash kata sandi, $1$menunjukkan MD5 digunakan . MD5, meskipun tidak terlalu buruk untuk kata sandi, agak lemah saat ini. Ini adalah pertanyaan yang sepenuhnya terpisah, tetapi saya benar-benar mendesak Anda untuk mempertimbangkan bermigrasi ke fungsi hash yang lebih kuat.
CVn
2
Catatan: kata sandi /etc/shadowtidak dienkripsi tetapi di-hash
Tobias Kienzler

Jawaban:

43

Itu berfungsi sebagaimana dimaksud. Jika Anda ingin mengatur kata sandi menggunakan useraddperintah, Anda harus memberikan versi kata sandi yang di-hash useradd.

String passmemang memenuhi kriteria format untuk bidang kata sandi hash /etc/shadow, tetapi tidak ada kata sandi yang sebenarnya hash ke string itu. Hasilnya adalah bahwa untuk semua maksud dan tujuan, akun itu akan berperilaku seperti memiliki kata sandi, tetapi kata sandi apa pun yang Anda coba gunakan untuk mengaksesnya akan ditolak karena bukan kata sandi yang benar.

Lihat man useraddatau dokumentasi useradd :

-p, --password SANDI

Kata sandi terenkripsi, sebagaimana dikembalikan oleh crypt (3) . Standarnya adalah menonaktifkan kata sandi.

Catatan: Opsi ini tidak disarankan karena kata sandi (atau kata sandi terenkripsi) akan terlihat oleh pengguna yang mendaftar proses.

Anda harus memastikan kata sandi menghormati kebijakan kata sandi sistem.

kasperd
sumber
32

manuseradd :

   -p, --password PASSWORD
       The encrypted password, as returned by crypt(3). The default is to
       disable the password.

Anda seharusnya memberikan kata sandi yang hash.
Bukan kata sandi plaintext.

pemalsu
sumber
16

useraddmengharapkan Anda untuk memberikannya kata sandi, bukan kata sandi itu sendiri. Anda dapat menggunakan variasi berikut pada perintah Anda untuk memberikan kata sandi hash ke useraddperintah:

useradd f -p "$(mkpasswd --method=sha-512 'pass')" -d /home/f -s /bin/false

Untuk mengetahui metode yang tersedia, gunakan:

mkpasswd --method=help

Untuk menghindari melewatkan kata sandi pada baris perintah, masukkan kata sandi dalam file (menggunakan editor dan tidak menggunakan echoatau serupa) dan lakukan ini:

useradd f -p "$(mkpasswd --method=sha-512 --password-fd=0 < filename)" -d /home/f -s /bin/false

Ini akan melewatkan kata sandi hash di baris perintah, tetapi bukan yang plaintext.

mkpasswddatang dengan expectpaket.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
2
Jangan gunakan MD5! Gunakan SHA-2
Josef
9
Apakah catatan bahwa ini sementara mengekspos password melalui berbagai antarmuka kernel (proses apapun diperbolehkan untuk membaca baris perintah dari proses lainnya) dan dapat mengakibatkan hal yang disimpan dalam teks biasa ke disk melalui $ SEJARAH atau mekanisme serupa.
CVn
@ MichaelKjörling: Poin yang sangat bagus. Silakan lihat jawaban saya yang diedit.
Dijeda sampai pemberitahuan lebih lanjut.
1
Tentu saja, Anda masih menyimpan kata sandi teks biasa pada disk. Setidaknya, ini memberi sysadmin pilihan. Mungkin pada titik ini kita lebih baik hanya menggunakan sandi tiruan pada awalnya dan segera berlari passwduntuk mengubahnya menjadi sesuatu yang lain ......
a CVn
2
Tentu saja Dennis, ini jauh lebih baik, tetapi kata sandi masih berakhir pada disk dengan teks biasa. Dalam beberapa situasi dan di bawah model ancaman tertentu, itu bisa menjadi masalah nyata. Tidak harus menjadi.
CVn