วิธีกำหนดค่า linux ให้บังคับผู้ใช้ใหม่ให้เปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งแรก


11

ฉันกำลังพยายามกำหนดค่านโยบายรหัสผ่านผู้ใช้บน RHEL 6.6 และฉันต้องการให้ระบบขอให้ผู้ใช้ที่เพิ่งสร้างใหม่เปลี่ยนรหัสผ่านเริ่มต้นเมื่อลงชื่อเข้าใช้ครั้งแรก

โปรดทราบว่าฉันพยายามตั้งค่าตัวแปร EXPIRE เป็น 0 และ INACTIVE เป็น -1 ใน / etc / default / useradd แต่มันนำไปสู่การหมดอายุบัญชีผู้ใช้ใหม่หลังจากการสร้าง เอาต์พุตของคำสั่ง chage หลังจากผู้ใช้สร้างด้วยตัวแปรเหล่านี้คือ:

 # chage -l foo
 Last password change                                : Feb 22, 2015
 Password expires                                    : May 23, 2015
 Password inactive                                   : never
 Account expires                                     : Feb 22, 2015
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

เมื่อฉันพยายามเข้าสู่ระบบภายใต้ผู้ใช้ foo ข้อความ "บัญชีของคุณหมดอายุโปรดติดต่อผู้ดูแลระบบของคุณ" จะปรากฏขึ้น

แต่ถ้าฉันเปิดหน้าต่าง 'คุณสมบัติของผู้ใช้' ให้เลือกแท็บ 'ข้อมูลรหัสผ่าน' และทำเครื่องหมาย 'บังคับเปลี่ยนรหัสผ่านในการเข้าสู่ระบบครั้งต่อไป' ผลลัพธ์จะเป็นสิ่งที่ฉันคาดหวัง ผู้ใช้ใหม่จะถูกขอให้เปลี่ยนรหัสผ่าน ผลลัพธ์ของคำสั่ง chage ในกรณีนี้จะเป็น:

 # chage -l foo2
 Last password change                                : password must be changed
 Password expires                                    : password must be changed
 Password inactive                                   : password must be changed
 Account expires                                     : never
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

เมื่อฉันเข้าสู่ระบบภายใต้ผู้ใช้ foo2 ระบบขอให้ฉันเปลี่ยนรหัสผ่าน

ดังนั้นมีวิธีการกำหนดค่าระบบเพื่อตั้งค่าพารามิเตอร์บัญชีผู้ใช้ในการสร้างเช่นในกรณีที่สอง?

UPD

 cat /etc/default/useradd
 # useradd defaults file
 GROUP=100
 HOME=/home
 INACTIVE=-1
 EXPIRE=0
 SHELL=/bin/bash
 SKEL=/etc/skel
 CREATE_MAIL_SPOOL=yes

แม้ว่าฉันจะแสดงความคิดเห็นไม่ใช้งานหรือตั้งค่าเป็นค่าบวกบัญชีจะหมดอายุ แต่ไม่ใช่รหัสผ่าน

นอกจากนี้ฉันกำหนดค่า PAM บนเครื่อง

อัปเดต 2

ฉันตรวจสอบสิ่งนี้บนเครื่องด้วย RHEL 6.2 และไม่มีการกำหนดค่า PAM เอฟเฟกต์เหมือนกัน


chage -d 0 {user-name}คุณควรลองใช้
Hastur

มีวิธีการทำโดยอัตโนมัติในระหว่างคำสั่ง useradd ไม่ใช่ด้วยคำสั่งหรือการกระทำเพิ่มเติม?
Mike_Lychkov

1
EXPIRE=0ใน/etc/default/useraddควรทำงาน ฉันอ่านคุณพยายาม คุณสามารถเพิ่มบรรทัดที่ไม่มีเครื่องหมายข้อคิดเห็นได้/etc/default/useraddหรือไม่ มันถูกล็อคแม้ว่าคุณจะไม่ได้ระบุ INACTIVE = -1 แต่เป็นค่าที่แตกต่างกันหรือหากคุณแสดงความคิดเห็นบรรทัดนั้น คุณสามารถระบุว่าบัญชีถูกล็อคแม้ว่าจะถูกสร้างโดยบรรทัดคำสั่ง และโปรดเมื่อคุณมีคำถามที่แตกต่างกันโพสต์ในหน้าแยกต่างหากถ้ามันจะมีคำตอบที่แตกต่างกัน
Hastur

1
ใช้adduserช่วยให้คุณใส่คำสั่งในchage /usr/local/sbin/adduser.localคุณยังสามารถตั้งค่าฟิลด์อายุใน / etc / shadow เป็น 0 ได้โดยตรง useraddเป็น "ยูทิลิตี้ระดับต่ำ" ที่ตั้งใจจะใช้ร่วมกับคำสั่งอื่น ๆ
mpez0

คำตอบ:


1

เมื่อคุณถามเกี่ยวกับ RHEL6 ฉันดูที่ซอร์สโค้ดสำหรับ useradd (ซึ่งจัดส่งเป็นส่วนหนึ่งของแพ็คเกจ 'shadow') ใน useradd.c เป็นฟังก์ชั่นที่เรียกว่า new_spent ซึ่งมันตั้งค่ารายการรหัสผ่านเงาใหม่ มีที่อยู่ "ปัญหารหัสผ่านหมดอายุในการสร้าง" ด้วยวิธีนี้:

if (0 == spent->sp_lstchg) {
/* Better disable aging than requiring a password change */
spent->sp_lstchg = -1;

Soooo ... ถ้าคุณตั้งค่าเป็นศูนย์มันจะทำให้มันเป็น -1

ผู้เขียนของโปรแกรมได้เขียนโค้ดเฉพาะเพื่อต่อต้านการตั้งค่าอายุเป็น 0 ดังนั้นมันจะไม่สำคัญถ้าคุณตั้งค่าเป็น 0 ในพารามิเตอร์ / etc / default / useradd สำหรับ EXPIRE (ถ้าฉันทำรหัสนั้นฉันจะต้องดูว่าผู้ใช้ตั้งรหัสผ่านในคำสั่งแล้วอนุญาตให้หมดอายุ แต่ไม่ใช่ฉัน ... )

นอกจากนี้ยังมีการแนะนำข้างต้นว่าคุณสามารถวางสคริปต์ลงใน /usr/local/sbin/adduser.local เพื่อทำคำสั่ง 'chage' นี่เป็นคำแนะนำที่ดีสำหรับระบบ Debian / Ubuntu โดยที่ useradd เป็นสคริปต์ Perl ซึ่งจะเรียกใช้ไฟล์นั้นหากพบไฟล์นั้น แต่ใน RHEL คำสั่ง useradd คือ C binary

ถ้าฉันเป็นคุณและฉันตั้งใจที่จะรับพฤติกรรมนั้นใน user6 ของ RHEL6 ฉันจะได้รับ SRPM สำหรับชุดเงาให้แสดงความคิดเห็นในบรรทัดข้างต้นและทำ rpm build บนแพ็คเกจและ rockaway ชนะ!


1

ทำไมไม่เพิ่มสิ่งนี้ลงในสคริปต์?

passwd -e username

หากคุณเป็นผู้เข้าสู่ระบบครั้งแรกสิ่งนี้จะได้ผล -eหมดอายุรหัสผ่านของบัญชีทันทีเพื่อเข้าสู่ระบบต่อไปผู้ใช้ถูกบังคับให้ต้องปรับปรุงรหัสผ่านของพวกเขา? (ดูman passwd)


และหากคุณกำลังมองหาวิธีแก้ปัญหาแบบเฉพาะเจาะจงลองใช้สวิตช์ "-M / - maxdays" ด้วยค่า '0' ฉันไม่คุ้นเคยกับ chage จริง ๆ แต่จากหน้าคนนี้ดูสมเหตุสมผล
tniles

-1

อัตโนมัติ:

อัปเดตไฟล์นี้:

/etc/default/useradd

ไฟล์นี้มีรายละเอียดสิ่งที่การตั้งค่าทั้งหมดจะนำไปใช้กับผู้ใช้ใหม่ที่สร้างขึ้นในระบบด้วยคำสั่ง useradd

เพียงตั้งค่า EXPIRE = 0 ในไฟล์นี้และหลังจากนั้นทุกครั้งที่มีการสร้างผู้ใช้ใหม่พวกเขาจะถูกบังคับให้เปลี่ยนรหัสผ่านในการเข้าสู่ระบบครั้งต่อไป

ที่มา: GeekRide

ตอนนี้การแก้ไขไฟล์ในเทอร์มินัลนั้นยาก ดังนั้นฉันเปลี่ยนการอนุญาตของไฟล์เป็น 777 โดยใช้:

chmod 777 /etc/default/useradd

และแก้ไขเป็นด้วง

(ขอบคุณLinux Command )

ตรวจสอบใน Ubuntu 12.04.5 VM ของฉัน

คู่มือ:

ใช้ไวยากรณ์ต่อไปนี้เพื่อบังคับให้ผู้ใช้เปลี่ยนรหัสผ่านในการเข้าสู่ระบบครั้งต่อไปบน Linux:

# chage -d 0 {user-name}

ในตัวอย่างนี้บังคับให้ทอมเปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งถัดไปให้ป้อน:

# chage -d 0 tom

-d 0: ตั้งค่าจำนวนวันตั้งแต่วันที่ 1 มกราคม 1970 เมื่อรหัสผ่านถูกเปลี่ยนครั้งล่าสุด วันที่อาจแสดงในรูปแบบ YYYY-MM-DD เมื่อตั้งค่าเป็นศูนย์คุณจะบังคับให้ผู้ใช้เปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งแรก

ที่มา: nixCraft

คัดลอกวางบริสุทธิ์ อย่างแท้จริง ;)
ตรวจสอบบน Ubuntu 12.04.5 VM ของฉัน


OP ต้องการทำสิ่งนี้โดยอัตโนมัติในระหว่างคำสั่ง useradd หากคุณอ่านความคิดเห็นด้านบน
บ้า

จะไม่แสดงความคิดเห็นใด ๆ แต่chmod -R 777 /เป็นสิ่งที่โง่มากที่จะทำ!
PulseJet

@PulseJet ใช่ฉันรู้ว่าในการหวนกลับและคำตอบนี้เป็นเวลานานแล้วโปรดเพียงแค่ปล่อยให้มัน
Varad Mahashabde

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