รหัสผ่านหมดอายุและการเข้าสู่ระบบตามคีย์ SSH ด้วย UsePAM ใช่


12

มีเครื่อง SLES 11 อยู่ ผู้ใช้เข้าสู่ระบบผ่านทาง SSH และ pubkey (ผสมผู้ใช้บางคนใช้รหัสผ่านบางคนใช้คีย์ ssh)

sshd_config มี:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

ปัญหา: หากรหัสผ่านหมดอายุสำหรับผู้ใช้ที่ใช้การเข้าสู่ระบบ pubkey ผู้ใช้จะได้รับแจ้งให้เปลี่ยนรหัสผ่าน

คำถาม:เราจะตั้งค่า PAM หรือ sshd ให้ผู้ใช้เข้าสู่ระบบได้อย่างไรหากพวกเขามีคีย์ SSH ที่ถูกต้องและรหัสผ่านหมดอายุ - โดยไม่ต้องโผล่ "เปลี่ยนรหัสผ่าน"

อัปเดต # 1: วิธีแก้ปัญหาไม่สามารถเป็น: "UsePAM no"

SERVER:~ # cat /etc/pam.d/sshd 
#%PAM-1.0
auth        requisite   pam_nologin.so
auth        include     common-auth
account     requisite   pam_nologin.so
account     include     common-account
password    include     common-password
session     required    pam_loginuid.so
session     include     common-session
SERVER:~ # 

ปรับปรุง # 2: วิธีแก้ปัญหาไม่สามารถ: ตั้งรหัสผ่านผู้ใช้จะไม่มีวันหมดอายุ

UPDATE # 3:

SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required    pam_unix2.so    
account required    pam_tally.so
SERVER:/etc/pam.d # 

คุณอาจสามารถทำสิ่งนี้ได้โดยลบออกpam_unix.soจากsessionส่วนของ/etc/pam.d/sshd(และแทนที่ด้วยpam_lastlog.soถ้าไม่อยู่ที่นั่นฉันไม่แน่ใจว่าpam_unix.so/sessionเป็นคนที่ทำสิ่งนี้หรือไม่ แต่รู้สึกเหมือนถูกที่
Patrick

1
ตั้งค่าบัญชีผู้ใช้ที่ไม่มีวันหมดอายุ :)
Raza

@ Raza: ขอบคุณ :) ความคิดที่ดี แต่ไม่สามารถแก้ปัญหา :(
thequestionthequestion

ลองใช้ForcedPasswdChange Noสำหรับ SSH1
Raza

1
ฉันรู้ว่าForcedPasswdChange Noจะไม่ทำงานหลังจากหมดอายุ คุณกำลังมองหาทางออกที่จะทำให้ผู้ใช้ที่หมดอายุสามารถเข้าสู่ระบบได้
Raza

คำตอบ:


10

ลำดับของการดำเนินการที่ทำให้พรอมต์รหัสผ่านหมดอายุมีดังนี้:

  • SSH เรียกใช้accountขั้นตอนPAM ซึ่งตรวจสอบว่าบัญชีมีอยู่และถูกต้อง accountประกาศบนเวทีว่ารหัสผ่านได้หมดอายุแล้วและช่วยให้ SSH รู้
  • SSH ดำเนินการตรวจสอบตามคีย์ ไม่จำเป็นต้องใช้ PAM สำหรับสิ่งนี้ดังนั้นจึงไม่สามารถใช้งานauthบนเวทีได้ จากนั้นตั้งค่าเซสชันการเข้าสู่ระบบ SSH และเรียกใช้sessionขั้นตอนPAM
  • ถัดไป SSH จำได้ว่า PAM บอกรหัสผ่านหมดอายุพิมพ์ข้อความเตือนและขอให้ PAM ให้ผู้ใช้เปลี่ยนรหัสผ่าน SSH จะยกเลิกการเชื่อมต่อ

ทั้งหมดนี้เป็นการกระทำของ SSH และฉันไม่เห็นตัวเลือก SSH ใด ๆ เพื่อกำหนดค่าพฤติกรรมนี้ ดังนั้นหากคุณต้องการสร้าง SSH และ / หรือ PAM รุ่นที่กำหนดเองตัวเลือกเดียวที่ฉันเห็นคือการป้องกัน PAM ไม่ให้รายงานรหัสผ่านที่หมดอายุไปยัง SSH หากคุณทำสิ่งนี้จะเป็นการปิดการใช้งานการตรวจสอบรหัสผ่านที่หมดอายุผ่าน SSH ทั้งหมดแม้ว่าผู้ใช้จะล็อกอินผ่าน SSH ด้วยรหัสผ่านก็ตาม วิธีการเข้าสู่ระบบอื่น ๆ (ไม่ใช่ SSH) จะยังคงตรวจสอบการหมดอายุรหัสผ่าน

pam.d/sshdไฟล์ปัจจุบันของคุณมีaccount include common-accountรายการ ผมเข้าใจว่ามีไฟล์ที่มีการอ้างอิงถึงcommon-account pam_unix.soนี่คือบรรทัดที่ตรวจสอบรหัสผ่านที่หมดอายุ

คุณอาจไม่ต้องการสัมผัสcommon-accountไฟล์ด้วยตัวเองเนื่องจากมันถูกใช้สำหรับวิธีการเข้าสู่ระบบอื่น ๆ คุณต้องการลบออกincludeจากpam.d/sshdไฟล์ของคุณแทน หากมีฟังก์ชั่นอื่น ๆcommon-accountที่นอกเหนือจากที่คุณอาจต้องการที่จะนำพวกเขาโดยตรงในpam_unix.sopam.d/sshd

สุดท้ายโปรดจำไว้ว่านี่เป็นการแก้ไขความปลอดภัยของระบบของคุณและคุณไม่ควรเชื่อใจฉันในการให้คำแนะนำที่ดีแก่คุณ อ่านวิธีการทำงานของ PAM หากคุณไม่คุ้นเคย บางสถานที่อาจจะเริ่มต้นman 7 PAM, และman 5 pam.confman 8 pam_unix


คำอธิบายที่ดีของคำสั่งของการดำเนินการขอบคุณ
M_dk

3

เพิ่มตัวเลือกใน pam_unix.so (ประมาณ ก.พ. -2016) เรียกว่า no_pass_expiry ( เปลี่ยนรหัสต้นฉบับที่นี่หรือหน้าคนที่นี่ ) โดยพื้นฐานแล้วจะบอก pam_unix ให้เพิกเฉยรหัสผ่านที่หมดอายุหากมีสิ่งอื่นที่ไม่ใช่ pam_unix ใช้สำหรับรับรองความถูกต้องเช่นถ้า sshd ดำเนินการตรวจสอบ

ดังนั้นหากคุณมีเวอร์ชันของ pam_unix.so ที่มีตัวเลือกนั้นคุณควรจะสามารถกำหนดค่า PAM ให้กับ:

  1. ยังคงเตือน แต่ไม่ต้องการการเปลี่ยนแปลงรหัสผ่านที่หมดอายุหากใช้คีย์ SSH เพื่อตรวจสอบสิทธิ์ผ่านทาง ssh
  2. ต้องการเปลี่ยนรหัสผ่านของรหัสผ่านที่หมดอายุหากเข้าสู่ระบบ / รหัสผ่านผ่าน pam_unix.so ถูกนำมาใช้ในการตรวจสอบผ่านทาง ssh
  3. ไม่ส่งผลต่อลำดับการตรวจสอบอื่น ๆ (เช่นผ่านบริการการเข้าสู่ระบบ)

ตัวอย่างเช่นฉันกำหนดค่าเซิร์ฟเวอร์ RHEL 7 ให้ทำดังกล่าวข้างต้นเพียงแค่อัปเดต /etc/pam.d/sshd และเพิ่ม pam_unix.so no_pass_expiry ให้กับทั้งบัญชีและรหัสผ่านเช่น

account    required    pam_nologin.so
account    sufficient  pam_unix.so no_pass_expiry
account    include     password-auth
password   sufficient  pam_unix.so no_pass_expiry
password   include     password-auth

1
เพิ่งลองสิ่งนี้และใช้งานได้ คุณสามารถตรวจสอบว่า PAM ของคุณรองรับตัวเลือกนี้หรือไม่โดยการค้นหา "no_pass_expiry" มีอยู่หรือไม่อยู่ในหน้า "man 8 pam_unix"
Tomofumi

การเปลี่ยนรหัสจาก 2016 ยังคงไม่ปรากฏใน Ubuntu 18.04 ... :(
ColinM

0
  • คุณอาจไม่ต้องการเปลี่ยน PAM หรือ sshd_config ของคุณด้วยเหตุผลด้านความสอดคล้อง
  • คุณอาจใช้PasswordAuthentication noใน sshd_config
  • คุณอาจมีรหัสผ่านแบบสุ่ม
  • คุณอาจใช้การปฏิบัติตาม CIS
  • ผู้ใช้ของคุณยังคงได้รับพรอมต์

จากนั้นรากสามารถปรับเปลี่ยนรหัสผ่านวันที่เปลี่ยน:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.