จำกัดจำนวนครั้งในการป้อนรหัสผ่านใน Linux นี่ไม่ใช่แค่ความคิดฟุ้งซ่านของเหล่าผู้ดูแลระบบที่หวาดระแวงเท่านั้น แต่เป็นหนึ่งในมาตรการที่มีประสิทธิภาพที่สุดในการหยุดยั้งการโจมตีแบบเดาพาสเวิร์ดและการเข้าถึงโดยไม่ได้รับอนุญาต ทั้งในสภาพแวดล้อมเดสก์ท็อปและเซิร์ฟเวอร์ หากคอมพิวเตอร์ของคุณมีข้อมูลที่สำคัญหรือเชื่อมต่อกับอินเทอร์เน็ต คุณควรจะรักษาความปลอดภัยส่วนนี้ของระบบ ตรวจสอบเครือข่ายท้องถิ่นของคุณ.
นอกจากการตั้งรหัสผ่านที่ปลอดภัยแล้ว ตั้งค่าการล็อกชั่วคราวหรือถาวรหลังจากเกิดความล้มเหลวหลายครั้ง นี่คือประเด็นสำคัญ: มันช่วยชะลอการโจมตีของผู้บุกรุก สร้างบันทึกข้อมูลเพิ่มเติมสำหรับการตรวจสอบ และช่วยให้คุณสามารถผสานการป้องกันนี้เข้ากับนโยบายรหัสผ่านอื่นๆ (การหมดอายุ ความซับซ้อน การใช้ซ้ำ ฯลฯ) เรามาดูกันอย่างละเอียดว่าวิธีการนี้ดำเนินการอย่างไรในระบบปฏิบัติการต่างๆ และในระดับต่างๆ ของระบบ
บัญชีถูกล็อกเนื่องจากพยายามเข้าสู่ระบบล้มเหลวหลายครั้งบน Red Hat, CentOS และระบบปฏิบัติการที่พัฒนาต่อยอดจาก Red Hat
ในการแจกแจง อิงตาม Red Hat (RHEL, CentOS, Rocky, AlmaLinux…)การบล็อกบัญชีเนื่องจากการเข้าสู่ระบบล้มเหลวหลายครั้งจะถูกจัดการด้วยโมดูล PAM แพม_เฟลล็อคโมดูลนี้ควบคุมจำนวนครั้งที่อนุญาตให้เข้าสู่ระบบล้มเหลว ระยะเวลาที่บัญชีถูกล็อก และผู้ใช้ที่จะได้รับผลกระทบ (รวมถึงผู้ใช้ระดับสูงสุด หากคุณต้องการ)
ในการใช้นโยบายนี้ คุณต้องแก้ไขไฟล์ PAM ทั่วโลกตามปกติ /etc/pam.d/system-auth และในบางเวอร์ชันก็เช่นกัน /etc/pam.d/password-authไฟล์เหล่านี้ทำหน้าที่เป็นแม่แบบสำหรับบริการตรวจสอบสิทธิ์ส่วนใหญ่ในระบบ (การเข้าสู่ระบบคอนโซล, sudo, SSH เป็นต้น)
ไฟล์เหล่านี้มีบรรทัดที่คล้ายกับบรรทัดเหล่านี้ ภายในส่วนของ รับรองความถูกต้อง y บัญชี:
auth required pam_faillock.so preauth silent audit deny=2 unlock_time=120
auth pam_faillock.so authfail audit deny=2 unlock_time=120
account required pam_faillock.so
บทแรกแสดง ก่อนการตรวจสอบสิทธิ์จริง (preauth)ส่วนที่สองจะทำงานเมื่อการตรวจสอบสิทธิ์ล้มเหลว และส่วนที่สามมีหน้าที่ตรวจสอบสถานะการล็อกบัญชีในระหว่างขั้นตอนดังกล่าว บัญชีโดยการแก้ไขพารามิเตอร์ คุณสามารถปรับนโยบายให้เหมาะสมกับความต้องการของคุณได้
พารามิเตอร์ที่พบได้บ่อยที่สุดของ แพม_เฟลล็อค เสียง:
- การตรวจสอบบัญชี: เปิดใช้งานการบันทึกรายละเอียดของการพยายามเข้าสู่ระบบ เพื่อให้มีการบันทึกร่องรอยไว้ในบันทึกของระบบ (ตัวอย่างเช่น ใน / var / log / ปลอดภัย).
- ปฏิเสธ=2การตั้งค่านี้จะกำหนดจำนวนครั้งสูงสุดในการป้อนรหัสผ่านผิดก่อนที่บัญชีจะถูกล็อก ในตัวอย่างนี้คือ 2 ครั้ง แต่คุณสามารถเพิ่มได้ (3, 5, 10 ครั้ง…)
- เวลาปลดล็อก=120: ระบุระยะเวลาการบล็อกเป็นวินาที ในที่นี้คือ 120 วินาที (2 นาที) ก่อนที่บัญชีจะเปิดใช้งานโดยอัตโนมัติ
- เงียบหากมีอยู่ ระบบจะไม่แสดงให้ผู้ใช้เห็นว่าพวกเขาถูกบล็อกระบบจะหยุดรับการล็อกอินโดยอัตโนมัติ ทำให้ระบบ "แสดงข้อมูล" น้อยลงสำหรับผู้โจมตี
รายละเอียดที่สำคัญอย่างหนึ่งก็คือ โดยค่าเริ่มต้นแล้ว รากถูกยกเว้นจากบล็อกนี้หากคุณต้องการใช้กฎเดียวกันนี้กับส่วนนั้นด้วย คุณต้องเพิ่มพารามิเตอร์ แม้แต่ปฏิเสธสิทธิ์รูท ในบรรทัด pam_faillock ของส่วนการตรวจสอบสิทธิ์ การทำเช่นนี้จะช่วยเพิ่มความปลอดภัย แต่คุณควรพิจารณาความเสี่ยงที่จะสูญเสียการเข้าถึงหากคุณทำผิดพลาดมากเกินไป
เมื่อบัญชีถูกล็อกและคุณไม่ได้ใช้พารามิเตอร์ เงียบระบบสามารถแสดงข้อความเตือนอย่างชัดเจนว่าผู้ใช้ได้พยายามเกินจำนวนครั้งที่อนุญาตแล้ว ซึ่งมีประโยชน์ในสภาพแวดล้อมการทดสอบเพื่อตรวจสอบการกำหนดค่า แต่ในสภาพแวดล้อมการใช้งานจริงมักจะดีที่สุดที่จะไม่ให้ข้อมูลมากเกินไป
หากต้องการดูจำนวนครั้งที่ผู้ใช้รายใดรายหนึ่งพยายามเข้าสู่ระบบไม่สำเร็จ บนระบบ Red Hat คุณสามารถใช้คำสั่งต่อไปนี้ได้ เฟลล็อก ชี้ไปยังบัญชีที่คุณสนใจ:
faillock --user lionel
คำสั่งนี้จะแสดง ผู้ใช้รายนี้พยายามเข้าสู่ระบบไม่สำเร็จมาแล้วกี่ครั้ง?รวมถึงที่อยู่ IP ที่ใช้ในกรณีของ SSH และรายละเอียดอื่นๆ ที่เกี่ยวข้องกับการตรวจสอบ นอกจากนี้ คุณยังสามารถตรวจสอบสิ่งที่ปรากฏในรายงานได้เสมอ / var / log / ปลอดภัยซึ่งเหตุการณ์ด้านความปลอดภัยเหล่านี้จะถูกบันทึกไว้

บัญชีถูกล็อกเนื่องจากพยายามเข้าสู่ระบบผิดพลาดในระบบ Debian และ Ubuntu
ในกรณีของ Debian, Ubuntu และอนุพันธ์หลักการทำงานคล้ายกัน แต่โมดูล PAM ที่ใช้มีการเปลี่ยนแปลง โดยปกติแล้วจะถูกนำมาใช้ในลักษณะนี้ แพม_ทัลลี่2 เพื่อนับจำนวนการพยายามเข้าสู่ระบบที่ล้มเหลวและบล็อกบัญชีโดยอัตโนมัติ แม้ว่าในเวอร์ชันที่ทันสมัยจะแนะนำให้ย้ายไปใช้ก็ตาม แพม_เฟลล็อคถึงกระนั้น pam_tally2 ก็ยังคงพบเห็นได้ทั่วไปในคู่มือและสภาพแวดล้อมต่างๆ มากมาย
ในระบบ Debian ทั่วไป หากต้องการล็อกระบบโดยอิงจากจำนวนครั้งที่ป้อนรหัสผิด คุณจะต้องแก้ไขไฟล์ /etc/pam.d/common-authซึ่งกำหนดนโยบายการตรวจสอบสิทธิ์มาตรฐานสำหรับบริการภายในส่วนใหญ่ คุณสามารถเพิ่มบรรทัดลักษณะนี้ลงไปได้:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=120 audit even_deny_root root_unlock_time=600
ด้วยการตั้งค่าแบบนี้ ระบบจะทำงานได้ บัญชีถูกบล็อกหลังจากพยายามเข้าสู่ระบบผิดพลาด 3 ครั้งระบบจะคงการล็อกไว้เป็นเวลา 120 วินาทีสำหรับผู้ใช้ทั่วไป และ 600 วินาทีสำหรับผู้ใช้ระดับรูท นอกจากนี้ หากเกิดข้อผิดพลาดใดๆ กับโมดูล (onerr=ล้มเหลว) ด้วยเหตุผลด้านความปลอดภัย การเข้าถึงจึงถูกปฏิเสธแทนที่จะได้รับอนุญาต
พารามิเตอร์หลักของ แพม_ทัลลี่2 เสียง:
- onerr=ล้มเหลวหากมีปัญหาในการอ่านหรืออัปเดตตัวนับการพยายามเข้าสู่ระบบ ระบบจะปฏิเสธการตรวจสอบสิทธิ์เพื่อป้องกันการเปิดประตูทิ้งไว้โดยไม่ได้ตั้งใจ
- ปฏิเสธ=3: จำนวนครั้งสูงสุดที่อนุญาตให้ป้อนรหัสผิดก่อนที่บัญชีจะถูกล็อก โดยปกติแล้วค่า 3 ถือว่าเหมาะสมในทางปฏิบัติ
- เวลาปลดล็อก=120: ระยะเวลาเป็นวินาทีที่บัญชีจะถูกล็อกสำหรับผู้ใช้ทั่วไป
- การตรวจสอบบัญชี: บันทึกข้อมูลความล้มเหลวในการตรวจสอบสิทธิ์ (ใน Debian มักจะเป็นแบบนี้) /var/log/auth.log).
- แม้แต่ปฏิเสธสิทธิ์รูท: บังคับให้สิทธิ์ root ถูกนับรวมในระบบล็อกนี้ด้วย ซึ่งควรใช้ด้วยความระมัดระวัง
- root_unlock_time=600: ระยะเวลาล็อกเฉพาะสำหรับบัญชี root ในหน่วยวินาที โดยไม่ขึ้นอยู่กับผู้ใช้รายอื่น
เมื่อระบบล็อกบัญชีทำงาน ผู้ใช้จะเห็นข้อความแจ้งว่าบัญชีของตนถูกระงับชั่วคราวเนื่องจากพยายามเข้าสู่ระบบผิดพลาดหลายครั้งเกินไป วิธีนี้ช่วยให้ผู้ดูแลระบบตรวจจับพฤติกรรมที่น่าสงสัยและแจ้งเตือนผู้ใช้ว่ามีบางอย่างผิดปกติเกิดขึ้น
เพื่อดูความพยายามที่ไม่สำเร็จที่บันทึกไว้โดย แพม_ทัลลี่2 สำหรับผู้ใช้เฉพาะราย (ตัวอย่างเช่น lionel) คุณสามารถใช้คำสั่งต่อไปนี้:
pam_tally2 -u lionel
คำสั่งนี้ แสดงจำนวนความล้มเหลวสะสม และยังช่วยให้คุณรีเซ็ตตัวนับด้วยตนเองได้หากจำเป็น พร้อมตัวเลือกเพิ่มเติม นอกจากนี้ เช่นเดียวกับใน Red Hat คุณยังมีตัวเลือกในการตรวจสอบอยู่เสมอ /var/log/auth.log เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้นในแต่ละครั้งที่พยายามยืนยันตัวตน
จำกัดจำนวนครั้งในการพยายามเชื่อมต่อ SSH ด้วย MaxAuthTries
หนึ่งในช่องทางเข้าใช้งานที่พบบ่อยที่สุดในเซิร์ฟเวอร์ Linux คือ SSHด้วยเหตุนี้ การควบคุมจำนวนครั้งที่อนุญาตให้ลองยืนยันตัวตนต่อการเชื่อมต่อแต่ละครั้งจึงมีความสำคัญอย่างยิ่ง และนี่คือจุดที่นโยบายเข้ามามีบทบาท MaxAuthTriesซึ่งกำหนดค่าไว้ในไฟล์ / etc / SSH / sshd_config จากเซิร์ฟเวอร์ OpenSSH
แนวคิดนี้เรียบง่าย: MaxAuthTries กำหนดจำนวนครั้งสูงสุดที่อนุญาตให้พยายามยืนยันตัวตนต่อการเชื่อมต่อ SSH หนึ่งครั้งหากเกินขีดจำกัดนี้ เซิร์ฟเวอร์จะตัดการเชื่อมต่อ ทำให้ผู้โจมตีต้องเริ่มเซสชันใหม่เพื่อลองชุดค่าผสมต่อไป ซึ่งจะทำให้การโจมตีแบบเดาแบบสุ่มอัตโนมัติช้าลงอย่างมาก
ในการตั้งค่า เพียงแค่แก้ไขไฟล์การตั้งค่า:
sudo nano /etc/ssh/sshd_config
ถัดไป ให้ค้นหาหรือเพิ่มบรรทัดลักษณะนี้:
MaxAuthTries 3
ด้วยค่านี้ อนุญาตให้ลองยืนยันตัวตนได้เพียงสามครั้งต่อการเชื่อมต่อ SSH เท่านั้นหากผู้ใช้ทำผิดพลาดซ้ำหลายครั้ง โปรแกรม sshd จะล็อกเอาต์ผู้ใช้คนนั้นออก การเปลี่ยนแปลงจะมีผลก็ต่อเมื่อต้องรีโหลดหรือรีสตาร์ทบริการ เช่น โดยใช้คำสั่ง:
sudo systemctl restart sshd
MaxAuthTries ไม่ได้มาแทนที่โมดูล PAM เช่น pam_tally2 หรือ pam_faillock แต่เป็นการทำงานเพิ่มเติมเพื่อทดแทนโมดูลเหล่านั้น ทำงานแบบขนานเซิร์ฟเวอร์ SSH จะควบคุมจำนวนครั้งที่อนุญาตให้พยายามเชื่อมต่อติดต่อกันในเซสชันเดียว ในขณะที่ PAM จะนับจำนวนครั้งโดยรวมต่อผู้ใช้แต่ละราย และสามารถบล็อกบัญชีของผู้ใช้ในระดับระบบได้
นอกเหนือจาก MaxAuthTries แล้ว แนะนำให้ใช้มาตรการรักษาความปลอดภัย SSH อื่นๆ ร่วมด้วยเพื่อให้บริการมีความแข็งแกร่งมากยิ่งขึ้น:
- เปลี่ยนพอร์ตเริ่มต้น: การหยุดใช้พอร์ต 22 และย้าย SSH ไปยังพอร์ตที่ไม่เด่นชัดจะช่วยกรองการสแกนอัตโนมัติพื้นฐานหลายอย่างได้
- ใช้คีย์สาธารณะแทนการใช้รหัสผ่านเพียงอย่างเดียวการตรวจสอบสิทธิ์โดยใช้คีย์ SSH ช่วยขจัดปัญหาเรื่องรหัสผ่านที่อ่อนแอ และมีความทนทานต่อการโจมตีแบบเดาแบบสุ่ม (brute-force attack) มากกว่า
- จำกัดแหล่งที่มาโดยใช้ไฟร์วอลล์หรือกำหนดค่า DMZการอนุญาตให้เข้าถึง SSH จากที่อยู่ IP หรือช่วงเครือข่ายที่กำหนดเท่านั้น ถือเป็นการสร้างกำแพงป้องกันที่มีประสิทธิภาพสูงในระดับเครือข่าย
จำกัดจำนวนครั้งในการพยายามยืนยันตัวตนในเครื่องด้วย PAM
นอกเหนือจาก SSH แล้ว... การตรวจสอบสิทธิ์ในพื้นที่ (คอนโซล, TTY, sudo, ตัวจัดการการแสดงผลแบบกราฟิก) ก็ได้รับการจัดการด้วย PAM เช่นกัน ใน Debian และ Ubuntu เป็นต้น ไฟล์ /etc/pam.d/common-auth มันคือหัวใจสำคัญของการกำหนดค่านี้ และในระบบของ Red Hat บทบาทของมันก็ถูกแสดงออกมาอย่างชัดเจน ระบบรับรองความถูกต้อง (และบางครั้งก็ต้องใช้การยืนยันตัวตนด้วยรหัสผ่าน)
นอกเหนือจากโมดูลการบล็อกเฉพาะ เช่น pam_faillock หรือ pam_tally2 แล้ว ดิสทริบิวชันบางตัวยังอนุญาตให้จำกัดจำนวนครั้งและเวลาในการเข้าสู่ระบบได้โดยตรงผ่านทางโมดูลนี้ ล็อกอิน.ดีเฟนส์ในไฟล์นี้ ซึ่งตั้งอยู่ใน /etc/login.defsมีการประกาศค่าต่างๆ เช่นค่าต่อไปนี้:
- LOGIN_RETIES: จำนวนครั้งสูงสุดที่อนุญาตให้ลองเข้าสู่ระบบใหม่ก่อนที่จะยกเลิกกระบวนการ
- LOGIN_TIMEOUT: ระยะเวลาสูงสุด (หน่วยเป็นวินาที) ที่เซสชันการเข้าสู่ระบบจะรอการป้อนข้อมูลจากผู้ใช้
ตัวอย่างเช่น หากคุณปรับเปลี่ยน LOGIN_RETIES ด้วยการจำกัดรหัสผ่านไว้ที่ 3 ชุด ผู้ใช้จะมีโอกาสป้อนรหัสผ่านได้เพียง 3 ครั้งในการเข้าสู่ระบบครั้งเดียว ก่อนที่ระบบจะปิดกั้นการพยายามนั้นและบังคับให้ผู้ใช้เริ่มต้นกระบวนการใหม่ ระบบไม่ได้ล็อกบัญชีโดยตรง แต่ก็เป็นการล็อกบัญชีนั่นเอง จำกัดจำนวนครั้งในการลองต่อเซสชัน.
ในไฟล์เดียวกัน ล็อกอิน.ดีเฟนส์ นอกจากนี้ คุณยังสามารถปรับพารามิเตอร์ด้านความปลอดภัยอื่นๆ ที่เกี่ยวข้องได้ เช่น:
- PASS_MAX_DAYS: จำนวนวันสูงสุดที่สามารถใช้รหัสผ่านได้ก่อนที่จะถูกบังคับให้เปลี่ยนรหัสผ่าน
- ผ่านไป 2 วัน: กำหนดจำนวนวันขั้นต่ำระหว่างการเปลี่ยนรหัสผ่าน เพื่อหลีกเลี่ยงการเปลี่ยนรหัสผ่านบ่อยเกินไปและแบบต่อเนื่อง
- รหัสผ่าน_คำเตือน_อายุ: แจ้งล่วงหน้าหลายวันก่อนที่รหัสผ่านจะหมดอายุ เพื่อให้ผู้ใช้มีเวลาเตรียมตัว
- ความยาวขั้นต่ำผ่าน y ความยาวสูงสุดผ่านความยาวรหัสผ่านขั้นต่ำและขั้นสูงสุด
- คำเตือนผ่านเสมอ: แจ้งเตือนเมื่อรหัสผ่านไม่ตรงตามเกณฑ์ความปลอดภัยที่กำหนด
- การเปลี่ยนรหัสผ่าน_ลอง: จำนวนครั้งสูงสุดที่สามารถลองเปลี่ยนรหัสผ่านได้ หากรหัสผ่านใหม่นั้นง่ายเกินไป
- เข้ารหัส_วิธีการ: อัลกอริทึมแฮชที่ใช้สำหรับรหัสผ่าน (โดยทั่วไปในปัจจุบันคือ...) SHA-512ระบุไว้ดังนี้ $ 6 $).
คำสั่งเหล่านี้ส่งผลกระทบเป็นหลัก ผู้ใช้ใหม่ ไฟล์เหล่านี้ถูกสร้างขึ้นหลังจากปรับแต่งไฟล์ login.defs แล้ว ดังนั้นจึงเป็นวิธีที่สะดวกในการกำหนดนโยบายพื้นฐานสำหรับทั้งองค์กร
การจัดการจำนวนครั้งที่พยายามและการหมดอายุด้วยไฟล์ /etc/shadow และคำสั่ง change
ไฟล์ / etc / shadow นี่คือที่ที่ระบบจัดเก็บรหัสผ่านที่เข้ารหัสไว้ของผู้ใช้ภายในระบบ พร้อมกับข้อมูลวันหมดอายุทั้งหมด แม้ว่าจะไม่ได้มีการเปลี่ยนแปลงด้วยตนเองทุกวัน แต่การทำความเข้าใจโครงสร้างของข้อมูลเหล่านี้จะช่วยอย่างมากในการตรวจสอบและปรับปรุงนโยบายความปลอดภัย
ในแต่ละบรรทัดของ / etc / shadow มีช่องข้อมูลหลายช่องปรากฏขึ้น โดยคั่นด้วยเครื่องหมายโคลอน ช่องข้อมูลที่เกี่ยวข้องกับนโยบายของเรามากที่สุด ได้แก่:
- ชื่อผู้ใช้: ระบุบัญชีที่ฟิลด์อื่นๆ เป็นของ
- รหัสผ่านที่เข้ารหัส: ถูกจัดเก็บเป็น $id$salt$hashedที่ไหน $id$ ระบุอัลกอริทึม (1 MD5, ปลาปักเป้า $2a$/$2y$, 5 ดอลลาร์ SHA-256, 6 ดอลลาร์ SHA-512ตามด้วยเกลือและกัญชา
- การเปลี่ยนรหัสผ่านครั้งล่าสุด: จำนวนวันนับตั้งแต่วันที่ 1 มกราคม 1970 (ยุคเริ่มต้น) เมื่อมีการแก้ไขครั้งล่าสุด
- จำนวนวันใช้งานขั้นต่ำและขั้นสูงสุดพวกเขาสามารถควบคุมได้ว่าเมื่อใดจึงจะสามารถเปลี่ยนรหัสผ่านได้อีกครั้ง และรหัสผ่านจะหมดอายุเมื่อใด
- วันแจ้งเตือนการหมดอายุระบบจะเริ่มแจ้งเตือนผู้ใช้กี่วันก่อนวันหมดอายุ
- จำนวนวันที่ไม่มีกิจกรรมเมื่อรหัสผ่านหมดอายุแล้ว บัญชีจะถูกปิดใช้งานโดยสมบูรณ์ภายในเวลานานเท่าใด?
- วันหมดอายุบัญชีที่แน่นอน: นอกจากนี้ยังแสดงในรูปแบบวันตั้งแต่ปี 1970 ซึ่งระบุช่วงเวลาที่ผู้ใช้รายนั้นไม่สามารถเข้าสู่ระบบได้อีกต่อไป
ในการจัดการพารามิเตอร์เหล่านี้โดยไม่ต้องแก้ไขไฟล์ /etc/shadow โดยตรง จะใช้คำสั่งต่อไปนี้: ความโกรธ (เปลี่ยนอายุซึ่งช่วยให้คุณสามารถปรับระยะเวลาหมดอายุของรหัสผ่านและบัญชีสำหรับผู้ใช้เฉพาะรายได้
ตัวเลือกทั่วไปบางประการสำหรับ ความโกรธ เสียง:
- -d, –วันสุดท้าย: กำหนดวันที่ของการเปลี่ยนรหัสผ่านครั้งล่าสุด (ในรูปแบบวันนับตั้งแต่ยุคเริ่มต้น หรือในรูปแบบวันที่ที่อ่านได้)
- -E, –วันหมดอายุ: กำหนดวันที่บัญชีจะหมดอายุ
- -ฉัน -ไม่ได้ใช้งาน: ตั้งค่าบัญชีเป็นสถานะไม่ใช้งานหลังจากผ่านไปหลายวันนับจากวันที่รหัสผ่านหมดอายุ
- -ม, –นาทีวัน: กำหนดจำนวนวันขั้นต่ำระหว่างการเปลี่ยนรหัสผ่าน
- -M, –maxdays: ระบุจำนวนวันสูงสุดที่รหัสผ่านยังคงใช้งานได้
- -W, –วันเตือน: กำหนดจำนวนวันก่อนหมดอายุที่จะเริ่มแจ้งเตือน
- -l, –รายการ: แสดงสถานะการหมดอายุปัจจุบันของผู้ใช้
ตัวอย่างเช่น เพื่อตรวจสอบข้อมูลวันหมดอายุของบัญชีผู้ใช้ Pepe สามารถดำเนินการได้ดังนี้:
chage -l pepe
ทางออกจะแสดงให้เห็น วันที่เปลี่ยนแปลงครั้งล่าสุด, รหัสผ่านหมดอายุหรือไม่, ระยะเวลาที่ไม่ใช้งาน และจำนวนวันขั้นต่ำและสูงสุด...รวมถึงข้อมูลอื่นๆ ด้วยเครื่องมือนี้ คุณสามารถใช้นโยบายทีละรายบุคคล หรือใช้สคริปต์ที่ประมวลผลกลุ่มบัญชีทั้งหมดได้
นโยบายความซับซ้อนของรหัสผ่านด้วย pam_cracklib และ pam_pwquality
การจำกัดจำนวนครั้งในการป้อนรหัสผ่านนั้นดี แต่ถ้าหากรหัสผ่านเป็นอะไรที่ยากๆ อย่างเช่น “123456” หรือ “qwerty” คุณก็คงไปต่อไม่ได้ไกลนัก นั่นเป็นเหตุผลว่าทำไมมันถึงสำคัญมาก บังคับใช้รหัสผ่านที่ปลอดภัย โดยใช้โมดูล PAM เช่น แพม_แคร็กลิบ และในเวอร์ชันที่ใหม่กว่านั้น คุณภาพแพม_พีดับ.
โมดูล คุณภาพแพม_พีดับ มันคือวิวัฒนาการของ cracklib และสามารถทำงานร่วมกับไลบรารีต่างๆ ได้ เช่น libpwคุณภาพ เพื่อตรวจสอบว่ารหัสผ่านไม่อยู่ในพจนานุกรม ไม่สั้นเกินไป และไม่ซ้ำกับรูปแบบง่ายๆ หรือข้อมูลส่วนตัวของผู้ใช้ ฟังก์ชันนี้มีอยู่ในระบบปฏิบัติการ RHEL อยู่แล้ว และสามารถติดตั้งใน Debian/Ubuntu ได้โดยใช้แพ็กเกจต่างๆ เช่น libpam-cracklib y libpam-pwquality.
เมื่อติดตั้งเสร็จแล้ว การตั้งค่าหลักมักจะทำในไฟล์ /etc/security/pwquality.confโดยคุณสามารถกำหนดพารามิเตอร์ความซับซ้อนได้ เช่น:
- ฉันเสียใจ: จำนวนอักขระที่ต้องแตกต่างจากรหัสผ่านเดิม
- มินเลนความยาวขั้นต่ำที่ยอมรับได้สำหรับรหัสผ่านใหม่
- เครดิต, ยูเครดิต, เครดิต, เขาเชื่อขอขอบคุณสำหรับการใส่ตัวเลข ตัวอักษรพิมพ์ใหญ่ ตัวอักษรพิมพ์เล็ก และอักขระอื่นๆ ลงไปในผลงานนี้
- มินคลาส: จำนวนขั้นต่ำของคลาสอักขระที่แตกต่างกันที่ต้องการ (ตัวพิมพ์เล็ก ตัวพิมพ์ใหญ่ ตัวเลข สัญลักษณ์)
- ทำซ้ำสูงสุด: จำนวนอักขระที่เหมือนกันติดต่อกันสูงสุดที่อนุญาต
- แม็กซ์คลาสทำซ้ำ: จำนวนอักขระติดกันสูงสุดของคลาสเดียวกัน
- จีคอสเช็ค: ตรวจสอบว่ารหัสผ่านไม่มีคำจากช่อง GECOS (ช่องแสดงความคิดเห็น) ของผู้ใช้ในไฟล์ /etc/passwd
- เผด็จการ: เส้นทางไปยังพจนานุกรมที่ใช้ตรวจสอบว่ารหัสผ่านเป็นส่วนหนึ่งของคำที่รู้จักหรือไม่
- คำพูดหยาบคาย: รายชื่อคำที่ถูกห้ามใช้โดยชัดเจน
ระบบ หน่วยกิต มันมีความยืดหยุ่นเป็นพิเศษ โดยพื้นฐานแล้ว รหัสผ่านจะได้รับคะแนนเพิ่มขึ้นหากมีอักขระหลากหลายชนิด คะแนนเหล่านั้นสามารถชดเชยความยาวที่สั้นลงเล็กน้อยได้ ตัวอย่างเช่น ด้วย minlen=10 y dcredit=2รหัสผ่าน 8 ตัวอักษรที่มีตัวเลข 2 หลัก อาจผ่านการตรวจสอบได้ เนื่องจากจะเพิ่มเครดิตพิเศษ 2 หน่วย อย่างไรก็ตาม หากคุณกำหนดเครดิตติดลบ คุณจะต้องมีอักขระติดลบอย่างน้อยหนึ่งตัว (ตัวอย่างเช่น dcredit=-1 (ต้องมีอย่างน้อยหนึ่งหลัก ไม่มีข้อยกเว้น)
กับ มินคลาส คุณสามารถกำหนดให้รหัสผ่านต้องประกอบด้วยคลาสที่แตกต่างกันหลายประเภท ตัวอย่างเช่น ค่า 2 ฟอร์ซ การผสมผสานระหว่างตัวอักษรและตัวเลข หรือตัวอักษรและสัญลักษณ์ เป็นต้น คลาสขั้นต่ำ=4 นั่นหมายถึงการใช้ตัวอักษรพิมพ์เล็ก ตัวอักษรพิมพ์ใหญ่ ตัวเลข และอักขระพิเศษพร้อมกัน ซึ่งเป็นเรื่องปกติมากในนโยบายองค์กรที่เข้มงวด
เครื่องมือเช่น คะแนน pwscore ระบบเหล่านี้ช่วยให้คุณทดสอบความแข็งแกร่งของรหัสผ่านเทียบกับนโยบายที่กำหนดไว้ เมื่อมีการป้อนรหัสผ่านผ่านระบบ คะแนน pwscoreสิ่งนี้จะบอกคุณว่ารหัสลับนั้นตรงตามข้อกำหนดหรือไม่ และหากไม่ตรงตามข้อกำหนด ก็ระบุว่าละเมิดกฎข้อใด (ความยาวไม่เพียงพอ ง่ายเกินไป คล้ายกับรหัสลับก่อนหน้ามากเกินไป เป็นต้น)
กำหนดค่านโยบายที่แข็งแกร่งบน Debian และ Ubuntu ด้วย pam_cracklib
ในระบบ Debian/Ubuntu การใช้งานแบบนี้เป็นเรื่องปกติมาก แพม_แคร็กลิบ (หรือ pwquality ผ่าน PAM) เพื่อบังคับใช้นโยบายรหัสผ่าน ไฟล์สำคัญในที่นี้คือ /etc/pam.d/common-รหัสผ่านซึ่งกำหนดวิธีการจัดการการเปลี่ยนแปลงรหัสผ่านสำหรับผู้ใช้ระบบ
ก่อนที่จะลงมือทำอะไร ควรสำรองข้อมูลไฟล์ไว้ก่อนเสมอ:
sudo cp /etc/pam.d/common-password /root/
จากนั้นคุณสามารถแก้ไขได้ด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ (nano, vim ฯลฯ) โดยใช้สิทธิ์ผู้ดูแลระบบ คุณจะพบบรรทัดที่คล้ายกับ:
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
ในที่นี้ จะมีการกำหนดพารามิเตอร์ต่างๆ ดังต่อไปนี้:
- ลองใหม่อีกครั้งจำนวนครั้งที่อนุญาตให้ผู้ใช้ลองเปลี่ยนรหัสผ่าน ก่อนที่การเปลี่ยนรหัสผ่านจะล้มเหลว
- มินเลนความยาวรหัสผ่านขั้นต่ำ
- ฉันเสียใจ: จำนวนอักขระที่ต้องแตกต่างจากรหัสผ่านเดิม
- ยูเครดิต, เครดิต, เครดิต, เขาเชื่อ: การให้เครดิตบวกหรือลบสำหรับตัวอักษรพิมพ์ใหญ่ ตัวอักษรพิมพ์เล็ก ตัวเลข และอักขระอื่นๆ
ตัวอย่างเช่น นโยบายที่ค่อนข้างเข้มงวดอาจเป็นดังนี้:
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-3 lcredit=-3 dcredit=-3 ocredit=-3
ด้วยการตั้งค่านี้ รหัสผ่านใหม่ทุกรหัสต้องมีความยาวอย่างน้อย 12 ตัวอักษรรหัสผ่านต้องแตกต่างจากรหัสผ่านก่อนหน้าอย่างน้อย 3 ตัวอักษร และต้องประกอบด้วยตัวอักษรพิมพ์ใหญ่ 3 ตัว ตัวอักษรพิมพ์เล็ก 3 ตัว ตัวเลข 3 ตัว และสัญลักษณ์ 3 ตัว นี่เป็นนโยบายที่เข้มงวดมาก แต่มีประสิทธิภาพอย่างยิ่งในการป้องกันรหัสผ่านที่ง่ายเกินไป
เมื่อคุณเปลี่ยนนโยบายเสร็จแล้ว คุณสามารถทดสอบได้โดยการเปลี่ยนรหัสผ่านของคุณเองด้วยคำสั่งต่อไปนี้:
sudo passwd
หากรหัสผ่านไม่ตรงตามข้อกำหนด ระบบจะแสดงข้อความแจ้งเหตุผล เช่น สั้นเกินไป คล้ายกับคำในพจนานุกรม มีตัวอักษรซ้ำกันมากเกินไป เป็นต้น เมื่อรหัสผ่านตรงตามนโยบายแล้ว การเปลี่ยนแปลงจะถูกนำไปใช้โดยไม่มีปัญหา
นอกเหนือจากการเข้มงวดนโยบายเกี่ยวกับการเปลี่ยนแปลงใหม่ ๆ แล้ว Debian และ Ubuntu ยังอนุญาตให้... บังคับให้ผู้ใช้ปัจจุบันเปลี่ยนรหัสผ่าน เพื่อปรับตัวให้เข้ากับกฎใหม่ โดยใช้คำสั่ง:
passwd -e USUARIO
รหัสผ่านของผู้ใช้รายนั้นถูกทำเครื่องหมายว่าหมดอายุแล้ว และในการเข้าสู่ระบบครั้งถัดไป ผู้ใช้จะต้องตั้งรหัสผ่านใหม่ที่สอดคล้องกับนโยบายปัจจุบัน นอกจากนี้ คุณยังสามารถควบคุมการหมดอายุของรหัสผ่านทั่วโลกได้ด้วย:
passwd -w 5 -x 30 USUARIO
ที่ไหน -x 30 กำหนดอายุการใช้งานสูงสุดของรหัสผ่านไว้ที่ 30 วัน และ -w5 ระบบจะเริ่มแจ้งเตือนคุณล่วงหน้า 5 วันก่อนวันหมดอายุ หากคุณเพิ่ม -ฉัน 1:
passwd -w 5 -x 30 -i 1 USUARIO
บัญชีจะถูกทำเครื่องหมายว่าไม่ใช้งานหากผู้ใช้ไม่เปลี่ยนรหัสผ่าน หนึ่งวันหลังจากหมดอายุทำให้ผู้ดูแลระบบต้องเข้ามาแทรกแซงเพื่อเปิดใช้งานอีกครั้ง
แม้ว่าการเปลี่ยนรหัสผ่านบ่อยๆ จะได้รับการแนะนำมานานแล้ว แต่แนวทางด้านความปลอดภัยสมัยใหม่ (เช่น จาก NIST) ได้กำหนดคุณสมบัติของแนวทางปฏิบัตินี้ไว้: ควรเลือกใช้รหัสผ่านที่ยาวและซับซ้อน รวมถึงระบบยืนยันตัวตนสองขั้นตอนจะดีกว่าแทนที่จะบังคับให้มีการเปลี่ยนแปลงบ่อยเกินไป ซึ่งจะทำให้เกิดคีย์ที่คาดเดาได้ในที่สุด
ตั้งค่าโมดูล PAM (pam_faillock, pam_tally2, pam_cracklib, pam_pwquality) และไฟล์สำคัญต่างๆ อย่างระมัดระวัง เช่น /etc/pam.d/common-auth, /etc/pam.d/common-รหัสผ่าน, /etc/login.defs, / etc / SSH / sshd_config และเข้าใจว่าการตัดสินใจเหล่านั้นสะท้อนออกมาอย่างไร / etc / shadowนี่คือความแตกต่างระหว่างระบบ "มาตรฐาน" กับสภาพแวดล้อมที่มีความแข็งแกร่งอย่างแท้จริงในการป้องกันการเข้าถึงโดยไม่ได้รับอนุญาตและการโจมตีแบบเดาสุ่ม
