useradd ไม่ได้เข้ารหัสรหัสผ่านใน / etc / shadow


20

ฉันสะดุดกับปัญหานี้เมื่อพยายามสร้างผู้ใช้ FTP ใหม่สำหรับ vsftpd เมื่อสร้างผู้ใช้ใหม่ด้วยคำสั่งต่อไปนี้และพยายามเข้าสู่ระบบด้วย FileZilla ฉันจะได้รับข้อผิดพลาด "รหัสผ่านไม่ถูกต้อง"

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

หลังจากทำเช่นนี้แล้ว/ etc / shadowจะมี

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

เมื่อฉันเรียกใช้คำสั่งต่อไปนี้และให้ผ่านเดียวกันผ่าน

passwd f

/ etc / shadowประกอบด้วย

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

ดูเหมือนว่าการเข้ารหัสเกิดขึ้นเมื่อฉันเรียกใช้passwdแต่ไม่ได้อยู่ที่useradd

ที่สำคัญหลังจากทำเช่นนี้ฉันสามารถเข้าสู่ FTP ด้วยข้อมูลประจำตัวที่แน่นอน

ฉันใช้ CentOS 5.11, vsftpd สำหรับ FTP และ FileZilla สำหรับ FTP Access

/ var / log / secureประกอบด้วย:

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

ทำไมมันไม่ทำงานเมื่อฉันส่งผ่าน-p passไปยัง useradd? ฉันต้องทำอะไรเพื่อให้มันใช้งานได้


ฉันไม่เห็นคำถามใช่ไหม - สิ่งต่าง ๆ ได้รับการจัดการผ่าน PAM และโดยทั่วไปแล้วจะเข้าสู่ระบบ/var/log/secure
HBruijn

@HBruijn ฉันได้อัปเดตคำตอบของฉันเพื่อแสดงสิ่งที่เขียนไปยัง/ var / log / secure
BadToTheBone

2
จริงๆ? +12 สำหรับคำถามที่ตอบโดยหน้าคนที่เกี่ยวข้องอย่างชัดเจนหรือไม่
CVn

โปรดทราบว่าในกัญชารหัสผ่าน$1$บ่งชี้ MD5 ถูกนำมาใช้ MD5 ในขณะที่รหัสผ่านไม่น่ากลัวแต่ค่อนข้างอ่อนแอในทุกวันนี้ มันเป็นคำถามที่แยกจากกันอย่างสิ้นเชิง แต่ฉันอยากจะแนะนำให้คุณลองพิจารณาการโยกย้ายไปยังฟังก์ชันแฮชที่แข็งแกร่งกว่า
CVn

2
หมายเหตุด้านข้าง: รหัสผ่านใน/etc/shadowไม่ได้เข้ารหัส แต่ถูกแฮช
Tobias Kienzler

คำตอบ:


43

ที่ทำงานตามที่ตั้งใจไว้ หากคุณต้องการที่จะตั้งรหัสผ่านโดยใช้คำสั่งที่คุณควรจะให้รุ่นแฮชของรหัสผ่านuseradduseradd

สตริงpassไม่ตรงตามเกณฑ์การจัดรูปแบบสำหรับฟิลด์รหัสผ่านที่แฮช/etc/shadowแต่ไม่มีรหัสผ่านจริงแฮชกับสตริงนั้น ผลที่ได้คือว่าสำหรับทุกเจตนาและวัตถุประสงค์บัญชีนั้นจะทำงานเป็นรหัสผ่าน แต่รหัสผ่านใด ๆ ที่คุณพยายามใช้เพื่อเข้าถึงมันจะถูกปฏิเสธว่าไม่ใช่รหัสผ่านที่ถูกต้อง

ดูman useraddหรือเอกสารประกอบของผู้ใช้ :

-p, --password รหัสผ่าน

รหัสผ่านที่เข้ารหัสที่ส่งกลับโดยฝังศพใต้ถุนโบสถ์ (3) ค่าเริ่มต้นคือการปิดการใช้งานรหัสผ่าน

หมายเหตุ: ไม่แนะนำให้ใช้ตัวเลือกนี้เนื่องจากรหัสผ่าน (หรือรหัสผ่านที่เข้ารหัส) จะมองเห็นได้โดยผู้ใช้ที่แสดงรายการกระบวนการ

คุณควรตรวจสอบให้แน่ใจว่ารหัสผ่านเป็นไปตามนโยบายรหัสผ่านของระบบ



16

useraddคาดหวังให้คุณส่งรหัสแฮชของรหัสผ่านไม่ใช่รหัสผ่านเอง คุณสามารถใช้รูปแบบต่อไปนี้ในคำสั่งของคุณเพื่อให้รหัสผ่านที่แฮชให้กับuseraddคำสั่ง:

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

เพื่อหาวิธีการที่มีให้ใช้:

mkpasswd --method=help

เพื่อหลีกเลี่ยงการส่งรหัสผ่านในบรรทัดคำสั่งให้ใส่รหัสผ่านในไฟล์ (ใช้โปรแกรมแก้ไขและไม่ใช้echoหรือคล้ายกัน) และทำสิ่งนี้:

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

นี่จะส่งรหัสผ่านที่แฮชบนบรรทัดคำสั่ง แต่ไม่ใช่รหัสผ่านธรรมดา

mkpasswdมาพร้อมกับexpectแพ็คเกจ


2
อย่าใช้ MD5! ใช้ SHA-2
Josef

9
ทำบันทึกที่ว่านี้ชั่วคราว exposes รหัสผ่านผ่านอินเตอร์เฟซเคอร์เนลต่างๆ (กระบวนการใด ๆ ที่ได้รับอนุญาตในการอ่านบรรทัดคำสั่งของกระบวนการอื่น ๆ ) และอาจส่งผลให้มันถูกบันทึกไว้ในข้อความธรรมดาไปยังดิสก์ผ่าน $ ประวัติศาสตร์หรือคล้ายกันกลไก
CVN

@ MichaelKjörling: เป็นจุดที่ดีมาก โปรดดูคำตอบที่แก้ไขของฉัน
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1
แน่นอนคุณยังคงเก็บรหัสผ่านข้อความธรรมดาไว้ในดิสก์ อย่างน้อยก็ให้ทางเลือกระบบ บางที ณ จุดนี้เราก็ควรจะใช้รหัสผ่านpasswd
แบบสุ่ม

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