การสร้างนโยบายรหัสผ่านใน Linux

สวัสดีอีกครั้ง! ชั้นเรียนในกลุ่มหลักสูตรใหม่เริ่มพรุ่งนี้ "ผู้ดูแลระบบลินุกซ์"ในเรื่องนี้เรากำลังเผยแพร่บทความที่เป็นประโยชน์ในหัวข้อนี้

การสร้างนโยบายรหัสผ่านใน Linux

ในบทช่วยสอนก่อนหน้านี้ เราได้บอกคุณถึงวิธีการใช้งาน pam_cracklibเพื่อทำให้รหัสผ่านในระบบมีความซับซ้อนมากขึ้น หมวกแดง 6 หรือ CentOS ในเรดแฮท 7 pam_pwquality แทนที่ cracklib ในขณะที่ pam โมดูลเริ่มต้นสำหรับการตรวจสอบรหัสผ่าน โมดูล pam_pwquality ยังรองรับบน Ubuntu และ CentOS รวมถึงระบบปฏิบัติการอื่น ๆ อีกมากมาย โมดูลนี้ทำให้ง่ายต่อการสร้างนโยบายรหัสผ่านเพื่อให้แน่ใจว่าผู้ใช้ยอมรับมาตรฐานความแข็งแกร่งของรหัสผ่านของคุณ

เป็นเวลานานมาแล้วที่แนวทางทั่วไปในการใช้รหัสผ่านคือการบังคับให้ผู้ใช้ใช้ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข หรือสัญลักษณ์อื่นๆ กฎพื้นฐานสำหรับความซับซ้อนของรหัสผ่านเหล่านี้ได้รับการส่งเสริมอย่างกว้างขวางในช่วงสิบปีที่ผ่านมา มีการถกเถียงกันมากมายว่านี่เป็นแนวปฏิบัติที่ดีหรือไม่ ข้อโต้แย้งหลักที่ต่อต้านการตั้งค่าเงื่อนไขที่ซับซ้อนดังกล่าวก็คือ ผู้ใช้จดรหัสผ่านลงบนกระดาษและเก็บไว้อย่างไม่ปลอดภัย

นโยบายอื่นที่เพิ่งถูกตั้งคำถามบังคับให้ผู้ใช้เปลี่ยนรหัสผ่านทุกๆ x วัน มีการศึกษาบางชิ้นที่แสดงให้เห็นว่าสิ่งนี้เป็นอันตรายต่อความปลอดภัยด้วย

มีการเขียนบทความจำนวนมากเกี่ยวกับหัวข้อการสนทนาเหล่านี้ ซึ่งยืนยันมุมมองหนึ่งหรืออีกมุมมองหนึ่ง แต่นี่ไม่ใช่สิ่งที่เราจะพูดถึงในบทความนี้ บทความนี้จะพูดถึงวิธีตั้งค่าความซับซ้อนของรหัสผ่านอย่างถูกต้องแทนที่จะจัดการนโยบายความปลอดภัย

การตั้งค่านโยบายรหัสผ่าน

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

  • ฉันเสียใจ – จำนวนอักขระในรหัสผ่านใหม่ของคุณที่ไม่ควรปรากฏในรหัสผ่านเก่าของคุณ (ค่าเริ่มต้น 5)
  • มินเลน – ความยาวรหัสผ่านขั้นต่ำ (ค่าเริ่มต้น 9)
  • ยูเครดิต – จำนวนเครดิตสูงสุดสำหรับการใช้อักขระตัวพิมพ์ใหญ่ (หากพารามิเตอร์ > 0) หรือจำนวนอักขระตัวพิมพ์ใหญ่ขั้นต่ำที่ต้องการ (หากพารามิเตอร์ < 0) ค่าเริ่มต้นคือ 1
  • เครดิต — จำนวนเครดิตสูงสุดสำหรับการใช้อักขระตัวพิมพ์เล็ก (หากพารามิเตอร์ > 0) หรือจำนวนอักขระตัวพิมพ์เล็กขั้นต่ำที่ต้องการ (หากพารามิเตอร์ < 0) ค่าเริ่มต้นคือ 1
  • เครดิต — จำนวนเครดิตสูงสุดสำหรับการใช้ตัวเลข (หากพารามิเตอร์ > 0) หรือจำนวนหลักขั้นต่ำที่ต้องการ (หากพารามิเตอร์ < 0) ค่าเริ่มต้นคือ 1
  • เขาเชื่อ — จำนวนเครดิตสูงสุดสำหรับการใช้สัญลักษณ์อื่น ๆ (หากพารามิเตอร์ > 0) หรือจำนวนขั้นต่ำที่ต้องการของสัญลักษณ์อื่น ๆ (หากพารามิเตอร์ < 0) ค่าเริ่มต้นคือ 1
  • มินคลาส – กำหนดจำนวนคลาสที่ต้องการ คลาสประกอบด้วยพารามิเตอร์ข้างต้น (อักขระตัวพิมพ์ใหญ่ อักขระตัวพิมพ์เล็ก ตัวเลข และอักขระอื่นๆ) ค่าเริ่มต้นคือ 0
  • ทำซ้ำสูงสุด – จำนวนครั้งสูงสุดที่สามารถใส่อักขระซ้ำในรหัสผ่านได้ ค่าเริ่มต้นคือ 0
  • แม็กซ์คลาสทำซ้ำ — จำนวนอักขระต่อเนื่องสูงสุดในหนึ่งคลาส ค่าเริ่มต้นคือ 0
  • จีคอสเช็ค – ตรวจสอบว่ารหัสผ่านมีคำใด ๆ จากสตริง GECOS ของผู้ใช้หรือไม่ (ข้อมูลผู้ใช้ เช่น ชื่อจริง สถานที่ ฯลฯ) ค่าเริ่มต้นคือ 0 (ปิด)
  • เผด็จการ – ไปที่พจนานุกรม cracklib กันดีกว่า
  • คำพูดหยาบคาย – คำที่เว้นวรรคซึ่งห้ามใช้ในรหัสผ่าน (ชื่อบริษัท คำว่า “รหัสผ่าน” ฯลฯ)

ถ้าแนวคิดเรื่องเงินกู้ฟังดูแปลกๆ ก็ไม่เป็นไร เป็นเรื่องปกติ เราจะพูดถึงเรื่องนี้เพิ่มเติมในส่วนต่อไปนี้

การกำหนดค่านโยบายรหัสผ่าน

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

  • รหัสผ่านต้องมีความยาวอย่างน้อย 15 ตัวอักษร
  • อักขระเดียวกันไม่ควรซ้ำกันเกินสองครั้งในรหัสผ่าน
  • คลาสอักขระสามารถทำซ้ำได้สูงสุดสี่ครั้งด้วยรหัสผ่าน
  • รหัสผ่านจะต้องมีอักขระจากแต่ละคลาส
  • รหัสผ่านใหม่จะต้องมีอักขระใหม่ 5 ตัวเมื่อเทียบกับรหัสผ่านเก่า
  • เปิดใช้งานการตรวจสอบ GECOS
  • ห้ามใช้คำว่า “รหัสผ่าน,รหัสผ่าน,คำ,รหัสผ่าน”

หลังจากที่เราได้วางนโยบายแล้ว เราก็สามารถแก้ไขไฟล์ได้ /etc/security/pwquality.confเพื่อเพิ่มข้อกำหนดความซับซ้อนของรหัสผ่าน ด้านล่างนี้เป็นไฟล์ตัวอย่างพร้อมความคิดเห็นเพื่อความเข้าใจที่ดีขึ้น

# Make sure 5 characters in new password are new compared to old password
difok = 5
# Set the minimum length acceptable for new passwords
minlen = 15
# Require at least 2 digits
dcredit = -2
# Require at least 2 upper case letters
ucredit = -2
# Require at least 2 lower case letters
lcredit = -2
# Require at least 2 special characters (non-alphanumeric)
ocredit = -2
# Require a character from every class (upper, lower, digit, other)
minclass = 4
# Only allow each character to be repeated twice, avoid things like LLL
maxrepeat = 2
# Only allow a class to be repeated 4 times
maxclassrepeat = 4
# Check user information (Real name, etc) to ensure it is not used in password
gecoscheck = 1
# Leave default dictionary path
dictpath =
# Forbid the following words in passwords
badwords = password pass word putorius

ดังที่คุณอาจสังเกตเห็นว่าพารามิเตอร์บางตัวในไฟล์ของเราซ้ำซ้อน ตัวอย่างเช่น พารามิเตอร์ minclass ซ้ำซ้อนเนื่องจากเราใช้อักขระอย่างน้อยสองตัวจากคลาสที่ใช้ฟิลด์แล้ว [u,l,d,o]credit. รายการคำที่ไม่สามารถใช้ได้ของเรานั้นซ้ำซ้อน เนื่องจากเราห้ามไม่ให้เรียนซ้ำคลาสใดๆ 4 ครั้ง (คำทั้งหมดในรายการของเราเขียนด้วยอักขระตัวพิมพ์เล็ก) ฉันได้รวมตัวเลือกเหล่านี้ไว้เพื่อสาธิตวิธีใช้เพื่อกำหนดค่านโยบายรหัสผ่านของคุณเท่านั้น
เมื่อคุณสร้างนโยบายแล้ว คุณสามารถบังคับให้ผู้ใช้เปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งถัดไปได้ ระบบ.

สิ่งแปลก ๆ อีกประการหนึ่งที่คุณอาจสังเกตเห็นก็คือทุ่งนา [u,l,d,o]credit มีจำนวนลบ เนื่องจากตัวเลขที่มากกว่าหรือเท่ากับ 0 จะให้เครดิตสำหรับการใช้อักขระในรหัสผ่านของคุณ หากฟิลด์มีจำนวนลบ แสดงว่าต้องมีปริมาณที่แน่นอน

สินเชื่อคืออะไร?

ฉันเรียกพวกเขาว่าสินเชื่อเพราะมันสื่อถึงวัตถุประสงค์ของพวกเขาได้แม่นยำที่สุด หากค่าพารามิเตอร์มากกว่า 0 คุณจะต้องเพิ่ม "เครดิตอักขระ" จำนวนเท่ากับ "x" ให้กับความยาวของรหัสผ่าน เช่นถ้าพารามิเตอร์ทั้งหมด (u,l,d,o)credit ตั้งค่าเป็น 1 และรหัสผ่านที่ต้องการคือ 6 จากนั้นคุณจะต้องมีอักขระ 6 ตัวเพื่อให้เป็นไปตามข้อกำหนดด้านความยาว เนื่องจากตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข หรืออักขระอื่นๆ แต่ละตัวจะให้เครดิตแก่คุณหนึ่งเครดิต

หากคุณติดตั้ง dcredit ที่ 2 ตามทฤษฎีแล้ว คุณสามารถใช้รหัสผ่านที่มีความยาว 9 ตัวอักษรและได้รับเครดิต 2 ตัวอักษรสำหรับตัวเลข จากนั้นความยาวของรหัสผ่านก็อาจเป็น 10 อยู่แล้ว

ดูตัวอย่างนี้ ฉันตั้งค่าความยาวรหัสผ่านเป็น 13 ตั้งค่า dcredit เป็น 2 และตั้งค่าอื่นๆ เป็น 0

$ pwscore
 Thisistwelve
 Password quality check failed:
  The password is shorter than 13 characters

$ pwscore
 Th1sistwelve
 18

การตรวจสอบครั้งแรกของฉันล้มเหลวเนื่องจากรหัสผ่านมีความยาวน้อยกว่า 13 ตัวอักษร ครั้งต่อไปฉันเปลี่ยนตัวอักษร "I" เป็นตัวเลข "1" และได้รับสองเครดิตสำหรับตัวเลขซึ่งทำให้รหัสผ่านเท่ากับ 13

การทดสอบรหัสผ่าน

บรรจุภัณฑ์ libpwquality มีฟังก์ชันการทำงานที่อธิบายไว้ในบทความ มันมาพร้อมกับโปรแกรมด้วย pwscoreซึ่งออกแบบมาเพื่อตรวจสอบความซับซ้อนของรหัสผ่าน เราใช้มันด้านบนเพื่อตรวจสอบสินเชื่อ
คุณประโยชน์ pwscore อ่านจาก สเตดิน. เพียงเรียกใช้ยูทิลิตี้และเขียนรหัสผ่านของคุณ มันจะแสดงข้อผิดพลาดหรือค่าตั้งแต่ 0 ถึง 100

คะแนนคุณภาพรหัสผ่านสัมพันธ์กับพารามิเตอร์ minlen ในไฟล์กำหนดค่า โดยทั่วไป คะแนนที่ต่ำกว่า 50 ถือเป็น “รหัสผ่านปกติ” และคะแนนที่สูงกว่านั้นถือเป็น “รหัสผ่านที่รัดกุม” รหัสผ่านใดๆ ที่ผ่านการตรวจสอบคุณภาพ (โดยเฉพาะอย่างยิ่งการบังคับตรวจสอบ) cracklib) จะต้องทนต่อการโจมตีจากพจนานุกรม และรหัสผ่านที่มีคะแนนมากกว่า 50 เมื่อตั้งค่าไว้ minlen แม้โดยค่าเริ่มต้นก็ตาม brute force การโจมตี

ข้อสรุป

การตั้งค่า pwquality – ง่ายและสะดวกเมื่อเทียบกับความไม่สะดวกในการใช้งาน cracklib ด้วยการแก้ไขไฟล์โดยตรง pam. ในคู่มือนี้ เราได้ครอบคลุมทุกสิ่งที่คุณต้องการเมื่อตั้งค่านโยบายรหัสผ่านบน Red Hat 7, CentOS 7 และแม้แต่ระบบ Ubuntu นอกจากนี้เรายังพูดถึงแนวคิดเรื่องสินเชื่อซึ่งไม่ค่อยได้เขียนโดยละเอียด ดังนั้นหัวข้อนี้จึงมักไม่ค่อยชัดเจนสำหรับผู้ที่ไม่เคยพบมาก่อน

แหล่งที่มา:

หน้าคนที่มีคุณภาพ
pam_pwquality หน้าคน
หน้าคน pwscore

ลิงค์ที่เป็นประโยชน์

การเลือกรหัสผ่านที่ปลอดภัย – Bruce Schneier
Lorrie Faith Cranor พูดคุยเกี่ยวกับการศึกษารหัสผ่านของเธอที่ CMU
การ์ตูน xkcd ที่น่าอับอายเกี่ยวกับเอนโทรปี

ที่มา: will.com

เพิ่มความคิดเห็น