Sự khác biệt giữa 'passwd' và 'chpasswd' là gì?


14

Tôi đọc mô tả về các lệnh này từ một cuốn sách,
passwd:

Thay đổi mật khẩu cho một người dùng hiện có.

chpasswd:

Đọc một tập tin các cặp tên đăng nhập và mật khẩu, và cập nhật mật khẩu.

Có vẻ như các lệnh này làm công việc tương tự. Có sự khác biệt giữa chúng?

BIÊN TẬP:

Tôi muốn tìm hiểu khi chúng tôi sử dụng chúng mà tập tin thay đổi. Họ có thay đổi cùng một tập tin hoặc tập tin khác nhau? Nếu họ thay đổi (các) tệp khác nhau, họ là gì?


2
/etc/passwordchứa thông tin tài khoản người dùng. /etc/shadowchứa mật khẩu được mã hóa. Tôi tin rằng đó là những tập tin duy nhất có liên quan. Bạn có thể thay đổi mật khẩu bằng cách chỉnh sửa thủ công các tệp đó, nhưng sẽ rất khó xử.
SauceCode

Câu trả lời:


18

Từ man chpasswd:

'Lệnh này được dự định sẽ được sử dụng trong một môi trường hệ thống lớn, nơi nhiều tài khoản được tạo cùng một lúc.'

passwd là (theo kinh nghiệm của tôi) thường được sử dụng tương tác cho một người dùng.


7

Xem trang người đàn ông cho cả hai:

TÊN

    chpasswd - cập nhật mật khẩu trong chế độ hàng loạt

TÓM TẮC

    chpasswd [tùy chọn]

SỰ MIÊU TẢ

    Các chpasswdlệnh đọc một danh sách các tên người dùng và mật khẩu cặp từ đầu vào tiêu chuẩn và sử dụng thông tin này để cập nhật một nhóm người dùng hiện có. Mỗi dòng có định dạng:

       tên người dùng: mật khẩu


TÊN

    passwd - thay đổi mật khẩu người dùng

TÓM TẮC

    passwd [tùy chọn] [ĐĂNG NHẬP]

SỰ MIÊU TẢ

    Các passwdlệnh thay đổi mật khẩu cho tài khoản người dùng. Một người dùng bình thường chỉ có thể thay đổi mật khẩu cho tài khoản của chính họ, trong khi siêu người dùng có thể thay đổi mật khẩu cho bất kỳ tài khoản nào.  passwdcũng thay đổi thời gian hiệu lực của tài khoản hoặc mật khẩu liên quan.


7

Tóm lại:

  • passwdkiểm tra xem STDIN (mô tả tệp 0) có được gắn vào thiết bị đầu cuối không, bằng cách sử dụng isatty(0). Nếu không, passwdsẽ bảo lãnh, tức là bạn chỉ có thể làm việc với passwdtương tác

  • chpasswdmặt khác, được thiết kế để đọc (tên người dùng và) mật khẩu từ STDIN và được gọi là chế độ hàng loạt (tạo / cập nhật nhiều thông tin người dùng cùng một lúc). Nó đọc mật khẩu (theo văn bản rõ ràng theo mặc định) và tên người dùng từ STDIN, được cung cấp ở định dạng user_name:password, với dòng mới phân tách các mục


0

Tôi thấy rằng mặc dù

echo user:password | chpasswd

hoạt động đối với một số HĐH, nhưng một số HĐH như debian9,10 sẽ hiển thị lỗi can not connect to /var/run/nscd/socketdo nó sử dụng /etc/nsswitch.conf để xác định nơi lưu trữ mật khẩu.

Mặt khác, passwdlệnh dường như không cần shell tương tác,

(echo user; echo password) | passwd

hoạt động cho tôi cả trong máy chủ và bộ chứa vật lý, cho các hệ điều hành khác nhau (ubfox xenial-bionic, debian9-10, centos75-76, coreos1855-2135)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.