ความแตกต่างระหว่าง 'passwd' และ 'chpasswd' คืออะไร?


14

ฉันอ่านคำอธิบายของคำสั่งเหล่านี้จากหนังสือ
passwd:

เปลี่ยนรหัสผ่านสำหรับผู้ใช้ที่มีอยู่

chpasswd:

อ่านไฟล์ชื่อล็อกอินและคู่รหัสผ่านและอัพเดตรหัสผ่าน

ดูเหมือนว่าคำสั่งเหล่านี้ทำงานเดียวกัน มีความแตกต่างระหว่างพวกเขาหรือไม่?

แก้ไข:

ฉันต้องการเรียนรู้เมื่อเราใช้ไฟล์ที่เปลี่ยนแปลง พวกเขาเปลี่ยนไฟล์เดียวกันหรือไฟล์อื่นหรือไม่? หากพวกเขาเปลี่ยนไฟล์ที่แตกต่างกันพวกเขาคืออะไร?


2
/etc/passwordมีข้อมูลบัญชีผู้ใช้ /etc/shadowมีรหัสผ่านที่เข้ารหัส ฉันเชื่อว่าไฟล์เหล่านี้เป็นไฟล์เดียวที่เกี่ยวข้อง คุณสามารถเปลี่ยนรหัสผ่านได้ด้วยการแก้ไขไฟล์เหล่านั้นด้วยตนเอง แต่มันจะน่าอึดอัดใจมาก
SauceCode

คำตอบ:


18

จากman chpasswd:

'คำสั่งนี้มีวัตถุประสงค์เพื่อใช้ในสภาพแวดล้อมระบบขนาดใหญ่ที่มีการสร้างบัญชีหลายบัญชีพร้อมกัน'

passwd คือ (จากประสบการณ์ของฉัน) โดยปกติจะใช้แบบโต้ตอบสำหรับผู้ใช้คนเดียว


7

ดู man pages สำหรับทั้งคู่:

ชื่อ

    chpasswd - อัปเดตรหัสผ่านในโหมดแบทช์

สรุป

    chpasswd [ตัวเลือก]

รายละเอียด

    chpasswdคำสั่งอ่านรายชื่อของชื่อและรหัสผ่านผู้ใช้คู่จากอินพุตมาตรฐานและใช้ข้อมูลนี้เพื่อปรับปรุงกลุ่มของผู้ใช้ที่มีอยู่ แต่ละบรรทัดมีรูปแบบ:

       ชื่อผู้ใช้รหัสผ่าน


ชื่อ

    passwd - เปลี่ยนรหัสผ่านผู้ใช้

สรุป

    passwd [ตัวเลือก] [เข้าสู่ระบบ]

รายละเอียด

    passwdคำสั่งเปลี่ยนแปลงรหัสผ่านสำหรับบัญชีผู้ใช้ ผู้ใช้ปกติสามารถเปลี่ยนรหัสผ่านสำหรับบัญชีของตนเองในขณะที่ superuser อาจเปลี่ยนรหัสผ่านสำหรับบัญชีใด ๆ  passwdนอกจากนี้ยังเปลี่ยนบัญชีหรือระยะเวลาการใช้รหัสผ่านที่เกี่ยวข้อง


7

โดยสังเขป:

  • passwdการตรวจสอบถ้า STDIN (ไฟล์อธิบาย 0) isatty(0)อยู่ติดกับสถานีที่ใช้ ถ้าไม่เช่นpasswdนั้นก็จะประกันตัวเช่นคุณสามารถทำงานได้passwdแบบโต้ตอบเท่านั้น

  • chpasswdในทางกลับกันถูกออกแบบมาเพื่ออ่าน (ชื่อผู้ใช้และ) รหัสผ่านจาก STDIN และเรียกว่าโหมดแบทช์ (สร้าง / อัปเดตข้อมูลรับรองผู้ใช้หลายรายการพร้อมกัน) มันอ่านรหัสผ่าน (ในข้อความที่ชัดเจนโดยค่าเริ่มต้น) และชื่อผู้ใช้จาก STDIN ให้ในรูปแบบที่user_name:passwordมีการขึ้นบรรทัดใหม่คั่นรายการ


0

ฉันพบว่าแม้ว่า

echo user:password | chpasswd

ใช้งานได้กับระบบปฏิบัติการบางระบบ แต่ระบบปฏิบัติการบางอย่างเช่น debian9,10 จะแสดงข้อผิดพลาดcan not connect to /var/run/nscd/socketเนื่องจากใช้ /etc/nsswitch.conf เพื่อกำหนดว่าจะเก็บรหัสผ่านไว้ที่ไหน

ในอีกด้านหนึ่งpasswdดูเหมือนว่าคำสั่งไม่จำเป็นต้องมีเชลล์แบบโต้ตอบ

(echo user; echo password) | passwd

ใช้ได้ทั้งฉันในโฮสต์กายภาพและคอนเทนเนอร์สำหรับ OS ต่าง ๆ (Ubuntu xenial-bionic, debian9-10, centos75-76, coreos1855-2135)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.