Apa perbedaan antara 'passwd' dan 'chpasswd'?

14

Saya membaca deskripsi perintah ini dari sebuah buku,
passwd:

Mengubah kata sandi untuk pengguna yang ada.

chpasswd:

Membaca file pasangan nama login dan kata sandi, dan memperbarui kata sandi.

Tampaknya perintah ini melakukan pekerjaan yang sama. Apakah ada perbedaan di antara mereka?

EDIT:

Saya ingin belajar ketika kita menggunakannya file mana yang berubah. Apakah mereka mengubah file yang sama atau file yang berbeda? Jika mereka mengubah file yang berbeda, apakah itu?

metarosa
sumber
2
/etc/passwordberisi informasi akun pengguna. /etc/shadowberisi kata sandi terenkripsi. Saya percaya itu adalah satu-satunya file yang relevan. Anda dapat mengubah kata sandi dengan mengedit file-file itu secara manual, tetapi itu akan sangat aneh.
SauceCode

Jawaban:

18

Dari man chpasswd:

'Perintah ini dimaksudkan untuk digunakan dalam lingkungan sistem besar di mana banyak akun dibuat pada satu waktu.'

passwd (menurut pengalaman saya) biasanya digunakan secara interaktif untuk satu pengguna.

Kode Saus
sumber
7

Lihat halaman manual untuk keduanya:

NAMA

    chpasswd - memperbarui kata sandi dalam mode batch

RINGKASAN

    chpasswd [pilihan]

DESKRIPSI

    The chpasswdperintah membaca daftar nama pengguna dan password pasangan dari input standar dan menggunakan informasi ini untuk memperbarui sekelompok pengguna yang ada. Setiap baris dalam format:

       nama_pengguna: kata sandi


NAMA

    passwd - ubah kata sandi pengguna

RINGKASAN

    passwd [opsi] [LOGIN]

DESKRIPSI

    The passwdperintah perubahan password untuk account pengguna. Pengguna normal hanya dapat mengubah kata sandi untuk akunnya sendiri, sedangkan pengguna super dapat mengubah kata sandi untuk akun apa pun.  passwdjuga mengubah akun atau masa berlaku kata sandi yang terkait.

MrRolling
sumber
7

Pendeknya:

  • passwdmemeriksa apakah STDIN (file descriptor 0) dilampirkan ke terminal, menggunakan isatty(0). Jika tidak, passwdakan bail out yaitu Anda hanya bisa bekerja dengan passwdinteraktif

  • chpasswd, di sisi lain, dirancang untuk membaca (nama pengguna dan) kata sandi dari STDIN, dan disebut mode batch (membuat / memperbarui beberapa kredensial pengguna sekaligus). Bunyinya password (s) (dalam bentuk teks secara default), dan nama pengguna (s) dari STDIN, diberikan dalam format user_name:password, dengan baris baru memisahkan entri

heemayl
sumber
0

Saya menemukan itu meskipun

echo user:password | chpasswd

berfungsi untuk beberapa OS, tetapi beberapa OS seperti debian9,10 akan menunjukkan kesalahan can not connect to /var/run/nscd/socketkarena menggunakan /etc/nsswitch.conf untuk menentukan di mana ia menyimpan kata sandi.

Di sisi lain, passwdperintah itu sepertinya tidak perlu shell interaktif,

(echo user; echo password) | passwd

bekerja untuk saya baik di host fisik dan wadah, untuk berbagai OS (ubuntu xenial-bionic, debian9-10, centos75-76, coreos1855-2135)

osexp2003
sumber