อ่าน 4 นาที
รหัสผ่าน
passwd เป็น คำสั่ง ใน ระบบปฏิบัติการ Unix , Plan 9 , Inferno และ ระบบปฏิบัติการ ที่คล้าย Unix ส่วนใหญ่ ใช้สำหรับเปลี่ยน รหัสผ่าน ของผู้ใช้ รหัสผ่านที่ผู้ใช้ป้อนจะถูกนำไปผ่าน...
รหัสผ่าน
passwdเป็นคำสั่งใน ระบบปฏิบัติการ Unix , Plan 9 , Infernoและระบบปฏิบัติการที่คล้าย Unix ส่วนใหญ่ ใช้สำหรับเปลี่ยนรหัสผ่าน ของผู้ใช้ รหัสผ่านที่ผู้ใช้ป้อนจะถูกนำไปผ่านฟังก์ชันสร้างคีย์เพื่อสร้างเวอร์ชันแฮชของรหัสผ่านใหม่ ซึ่งจะถูกบันทึกไว้ เฉพาะเวอร์ชันแฮชเท่านั้นที่จะถูกเก็บไว้ รหัสผ่านที่ป้อนจะไม่ถูกบันทึกไว้ด้วยเหตุผลด้านความปลอดภัย
เมื่อผู้ใช้ล็อกอิน รหัสผ่านที่ผู้ใช้ป้อนระหว่างกระบวนการล็อกอินจะถูกประมวลผลผ่านฟังก์ชันการสร้างคีย์เดียวกัน และเวอร์ชันแฮชที่ได้จะถูกเปรียบเทียบกับเวอร์ชันที่บันทึกไว้ หากแฮชเหมือนกัน รหัสผ่านที่ป้อนจะถือว่าถูกต้อง และผู้ใช้จะได้รับการยืนยันตัวตน ในทางทฤษฎี เป็นไปได้ที่รหัสผ่านสองรหัสที่แตกต่างกันจะสร้างแฮชเดียวกันได้อย่างไรก็ตามฟังก์ชันแฮชเข้ารหัสลับได้รับการออกแบบในลักษณะที่การค้นหารหัสผ่านใด ๆ ที่สร้างแฮชเดียวกันนั้นยากมากและในทางปฏิบัติเป็นไปไม่ได้ ดังนั้นหากแฮชที่ได้ตรงกับแฮชที่จัดเก็บไว้ ผู้ใช้จะได้รับการยืนยันตัวตน[ 1 ]
คำสั่ง passwd สามารถใช้เพื่อเปลี่ยนรหัสผ่านสำหรับบัญชีภายในเครื่อง และในระบบส่วนใหญ่ ยังสามารถใช้เพื่อเปลี่ยนรหัสผ่านที่จัดการในกลไกการตรวจสอบสิทธิ์แบบกระจาย เช่นNIS , KerberosหรือLDAP ได้ อีก ด้วย
ไฟล์รหัสผ่าน
ไฟล์ นี้/etc/passwdเป็นฐานข้อมูลข้อความที่เก็บข้อมูลเกี่ยวกับผู้ใช้ที่อาจล็อกอินเข้าสู่ระบบ หรือข้อมูลประจำตัวผู้ใช้ระบบปฏิบัติการอื่นๆ ที่เป็นเจ้าของกระบวนการที่กำลังทำงานอยู่
ในระบบปฏิบัติการหลายๆ ระบบ ไฟล์นี้เป็นเพียงหนึ่งในหลาย ๆ ตัวเลือกสำหรับบริการตั้งชื่อไฟล์ passwdทั่วไป
ชื่อไฟล์มีที่มาจากหน้าที่ดั้งเดิมอย่างหนึ่งของไฟล์นั้น คือการเก็บรวบรวมข้อมูลที่ใช้ในการตรวจสอบรหัสผ่านของบัญชีผู้ใช้ อย่างไรก็ตาม ใน ระบบ Unix สมัยใหม่ ข้อมูลรหัสผ่านที่มีความสำคัญด้านความปลอดภัยมักจะถูกเก็บไว้ในไฟล์อื่นโดยใช้รหัสผ่านเงา หรือการใช้งานฐานข้อมูลแบบอื่นแทน
โดยทั่วไป ไฟล์/etc/passwdจะมีสิทธิ์การเข้าถึงระบบไฟล์ที่อนุญาตให้ผู้ใช้ทุกคนในระบบสามารถอ่านได้ ( อ่านได้โดยทุกคน ) แม้ว่าอาจจะแก้ไขได้เฉพาะผู้ใช้ระดับสูงสุดหรือโดยใช้คำสั่งพิเศษบางคำสั่งเท่านั้น
ไฟล์ นี้/etc/passwdเป็นไฟล์ข้อความที่มีหนึ่งระเบียนต่อบรรทัดแต่ละระเบียนอธิบายบัญชีผู้ใช้แต่ละรายการประกอบด้วยเจ็ดฟิลด์คั่นด้วยเครื่องหมายโคลอนลำดับของระเบียนภายในไฟล์โดยทั่วไปไม่สำคัญ
ตัวอย่างบันทึกอาจเป็นดังนี้:
jdoe : x : 1001 : 1000 : John Doe,Room 1007,(234)555-8910,(234)555-0044,email : /home/jdoe : /bin/shฟิลด์ต่างๆ เรียงจากซ้ายไปขวา ได้แก่: [ 2 ]
jdoeชื่อผู้ใช้: ข้อความที่ผู้ใช้จะพิมพ์เมื่อเข้าสู่ระบบระบบปฏิบัติการ; ชื่อผู้ใช้ใน การเข้าสู่ระบบ ต้องไม่ซ้ำกันในบรรดาผู้ใช้ที่ระบุไว้ในไฟล์x: ข้อมูลที่ใช้ในการตรวจสอบ รหัสผ่านของผู้ใช้รูปแบบจะเหมือนกับฟิลด์ที่คล้ายคลึงกันใน ไฟล์ รหัสผ่านเงาโดยมีข้อกำหนดเพิ่มเติมว่าการตั้งค่าเป็น "x" หมายความว่าพบรหัสผ่านจริงในไฟล์เงา ซึ่งเป็นสิ่งที่เกิดขึ้นทั่วไปในระบบสมัยใหม่[ 3 ]1001: หมายเลข ประจำตัวผู้ใช้ซึ่งระบบปฏิบัติการใช้เพื่อวัตถุประสงค์ภายในเท่านั้น หมายเลขนี้ต้องไม่ซ้ำกัน เนื่องจากใช้ระบุผู้ใช้แต่ละคนได้อย่างเฉพาะเจาะจง1000: หมายเลข ระบุกลุ่มซึ่งระบุกลุ่มหลักของผู้ใช้ ไฟล์ทั้งหมดที่สร้างโดยผู้ใช้รายนี้ อาจเข้าถึงได้เฉพาะกลุ่มนี้ในเบื้องต้นJohn Doe,Room 1007...: ฟิลด์ Gecosคำอธิบายที่อธิบายถึงบุคคลหรือบัญชี โดยทั่วไปจะเป็นชุดค่าที่คั่นด้วยเครื่องหมายจุลภาค ซึ่งรวมถึงชื่อเต็มและรายละเอียดการติดต่อของผู้ใช้[ 4 ]/home/jdoe: เส้นทางไปยัง ไดเร็กทอรีโฮมของผู้ใช้/bin/sh: โปรแกรมที่จะเริ่มต้นทำงานทุกครั้งที่ผู้ใช้ล็อกอินเข้าสู่ระบบ สำหรับผู้ใช้แบบโต้ตอบ โปรแกรมนี้มักจะเป็นหนึ่งในตัวแปลคำสั่งบรรทัดคำสั่ง ( เชลล์ ) ของระบบ
ไฟล์เงา
/etc/shadowใช้เพื่อเพิ่มระดับความปลอดภัยของรหัสผ่านโดยจำกัดการเข้าถึงข้อมูลรหัสผ่านที่เข้ารหัสไว้เฉพาะผู้ใช้ที่มีสิทธิ์สูงเท่านั้น โดยทั่วไป ข้อมูลดังกล่าวจะถูกเก็บไว้ในไฟล์ที่เป็นของและเข้าถึงได้เฉพาะ ผู้ใช้ ระดับสูงสุด เท่านั้น [ 5 ]
ผู้ดูแลระบบสามารถลดโอกาสการโจมตีแบบเดาแบบสุ่ม (brute-force attack) ได้โดยทำให้รายการรหัสผ่านที่เข้ารหัสแล้วอ่านไม่ได้สำหรับผู้ใช้ที่ไม่มีสิทธิ์ วิธีที่ชัดเจนที่สุดคือการทำให้passwdฐานข้อมูลนั้นอ่านได้เฉพาะผู้ใช้ root เท่านั้น อย่างไรก็ตาม วิธีนี้จะจำกัดการเข้าถึงข้อมูลอื่นๆ ในไฟล์ เช่น การจับคู่ชื่อผู้ใช้กับรหัสผู้ใช้ ซึ่งจะทำให้ยูทิลิตี้และฟังก์ชันที่มีอยู่หลายอย่างใช้งานไม่ได้ วิธีแก้ปัญหาอย่างหนึ่งคือการสร้างไฟล์รหัสผ่าน "เงา" (shadow password file) เพื่อเก็บรหัสผ่านที่เข้ารหัสแล้วแยกต่างหากจากข้อมูลอื่นๆ ใน ไฟล์ passwd ที่ทุกคนสามารถอ่านได้ สำหรับไฟล์ในเครื่อง มักจะใช้/etc/shadowใน ระบบ Linuxและ Unix หรือ/etc/master.passwdใน ระบบ BSDซึ่งแต่ละไฟล์จะอ่านได้เฉพาะroot เท่านั้น (การเข้าถึงข้อมูลโดย root ถือว่ายอมรับได้ เนื่องจากในระบบที่มีโมเดลความปลอดภัยแบบ "root ที่มีอำนาจทุกอย่าง" แบบดั้งเดิม ผู้ใช้ root จะสามารถเข้าถึงข้อมูลได้ด้วยวิธีอื่นๆ อยู่แล้ว) ระบบปฏิบัติการ ที่คล้าย Unix ในปัจจุบันเกือบทั้งหมดใช้รหัสผ่านแบบเงา
ไฟล์รหัสผ่านเงาไม่ได้แก้ปัญหาการเข้าถึงรหัสผ่านที่เข้ารหัสโดยผู้โจมตีได้อย่างสมบูรณ์ เนื่องจากระบบการตรวจสอบสิทธิ์เครือข่ายบางระบบทำงานโดยการส่งรหัสผ่านที่เข้ารหัสผ่านเครือข่าย (บางครั้งในรูปแบบข้อความธรรมดาเช่นTelnet [ 6 ] ) ทำให้เสี่ยงต่อการถูกดักฟัง สำเนาข้อมูลระบบ เช่น การสำรองข้อมูลระบบที่เขียนลงในเทปหรือสื่อออปติคัล ก็สามารถกลายเป็นวิธีการในการได้มาซึ่งรหัสผ่านที่เข้ารหัสอย่างผิดกฎหมายได้เช่นกัน นอกจากนี้ ฟังก์ชันที่ใช้โดยโปรแกรมตรวจสอบรหัสผ่านที่ถูกต้องจะต้องเขียนในลักษณะที่โปรแกรมที่เป็นอันตรายไม่สามารถตรวจสอบความถูกต้องได้อย่างรวดเร็ว
ไม่ว่าระบบจะมีการใช้การซ่อนรหัสผ่านหรือไม่ก็ตาม ไฟล์ passwd สามารถอ่านได้โดยผู้ใช้ทุกคน เพื่อให้ยูทิลิตี้ต่างๆ ของระบบ (เช่นgrep ) สามารถทำงานได้ (เช่น เพื่อตรวจสอบว่าชื่อผู้ใช้ที่มีอยู่ในระบบสามารถพบได้ในไฟล์) ในขณะที่เฉพาะผู้ใช้ root เท่านั้นที่สามารถเขียนลงในไฟล์ได้ หากไม่มีการใช้การซ่อนรหัสผ่าน นั่นหมายความว่าผู้โจมตีที่เข้าถึงระบบโดยไม่มีสิทธิ์พิเศษสามารถรับรหัสผ่านที่เข้ารหัสแล้วของผู้ใช้ทุกคนได้ ค่าเหล่านั้นสามารถนำไปใช้ในการโจมตีแบบ Brute Forceแบบออฟไลน์ โดยการทดสอบรหัสผ่านที่เป็นไปได้กับรหัสผ่านที่เข้ารหัสแล้วได้อย่างรวดเร็วโดยไม่แจ้งเตือนระบบรักษาความปลอดภัยที่ออกแบบมาเพื่อตรวจจับจำนวน การพยายาม เข้าสู่ ระบบล้มเหลวที่ผิดปกติ โดยเฉพาะอย่างยิ่งเมื่อไม่ได้ใช้ Salt ในการแฮช ก็ยังเป็นไปได้ที่จะค้นหารหัสผ่านที่เข้ารหัสแล้วเหล่านี้ในRainbow Tableซึ่งเป็นฐานข้อมูลที่สร้างขึ้นเป็นพิเศษสำหรับการค้นหารหัสผ่านโดยใช้ค่าแฮชที่ไม่ซ้ำกัน
เมื่อใช้ระบบรหัสผ่านแบบซ่อนเร้น/etc/passwdไฟล์ดังกล่าวโดยทั่วไปจะแสดงอักขระ เช่น ' *' หรือ ' x' ในช่องรหัสผ่านสำหรับผู้ใช้แต่ละราย แทนที่จะเป็นรหัสผ่านที่เข้ารหัสแล้ว และ/etc/shadowโดยปกติจะประกอบด้วยข้อมูลผู้ใช้ดังต่อไปนี้:
- ชื่อผู้ใช้ในการเข้าสู่ระบบ
- เกลือและรหัสผ่านที่เข้ารหัส หรือค่าข้อยกเว้นสถานะ เช่น:
$id$salt$hashedรูปแบบที่พิมพ์ได้ของแฮชรหัสผ่านที่สร้างโดยcrypt (C)โดยที่$idคืออัลกอริทึมที่ใช้ ระบบที่คล้าย Unix อื่นๆ อาจมีค่าที่แตกต่างกัน เช่นNetBSD การยืดคีย์ใช้เพื่อเพิ่ม ความยาก ในการถอดรหัสรหัสผ่านโดยค่าเริ่มต้นจะใช้ MD5 ที่แก้ไขแล้ว 1,000 รอบ[ 7 ] Blowfish 64 รอบ, SHA-256 หรือ SHA-512 5,000 รอบ[ 8 ]จำนวนรอบอาจแตกต่างกันสำหรับBlowfishหรือสำหรับ SHA-256 และ SHA-512 โดยใช้$A$rounds=X$โดยที่ "A" และ "X" คือรหัสอัลกอริทึมและจำนวนรอบ ค่ารหัสทั่วไป ได้แก่: [ 9 ]- สตริงว่าง – ไม่มีรหัสผ่าน บัญชีไม่มีรหัสผ่าน (รายงานโดย passwd บน Solaris ด้วย "NP") [ 10 ]
- "!", "*" – บัญชีถูกล็อกด้วยรหัสผ่าน ผู้ใช้จะไม่สามารถเข้าสู่ระบบผ่านการยืนยันตัวตนด้วยรหัสผ่านได้ แต่อาจยังคงอนุญาตให้ใช้วิธีการอื่น ๆ (เช่น คีย์ SSH, การเข้าสู่ระบบในฐานะ root)
- "*LK*" – บัญชีถูกล็อก ผู้ใช้จะไม่สามารถเข้าสู่ระบบได้
- "*NP*", "!!" – รหัสผ่านไม่เคยถูกตั้งไว้[ 11 ]
- จำนวนวันนับตั้งแต่การเปลี่ยนรหัสผ่านครั้ง ล่าสุด
- เหลืออีกกี่วันจึงจะอนุญาตให้เปลี่ยนแปลงได้
- วันก่อนที่ต้องมีการเปลี่ยนแปลง
- แจ้งเตือนล่วงหน้าก่อนหมดอายุ
- บัญชีจะถูกล็อกหลังจากไม่ได้เข้าสู่ระบบเป็นเวลาหลายวัน
- จำนวนวันนับตั้งแต่ยุคเริ่มต้นที่บัญชีหมดอายุ
- จองไว้แล้วแต่ไม่ได้ใช้งาน
รูปแบบของไฟล์เงา (shadow file) นั้นเรียบง่าย และโดยพื้นฐานแล้วเหมือนกับไฟล์รหัสผ่าน กล่าวคือ หนึ่งบรรทัดต่อผู้ใช้หนึ่งคน โดยมีฟิลด์เรียงลำดับในแต่ละบรรทัด และคั่นด้วยเครื่องหมายโคลอน ระบบหลายระบบกำหนดให้ลำดับของบรรทัดผู้ใช้ในไฟล์เงาต้องเหมือนกับลำดับของผู้ใช้ที่เกี่ยวข้องในไฟล์รหัสผ่าน
ประวัติศาสตร์
ก่อนที่จะมีการใช้เทคนิคการเข้ารหัสรหัสผ่าน (password shadowing) รหัสผ่านที่เข้ารหัสแล้วของผู้ใช้ Unix จะถูกจัดเก็บไว้ในฟิลด์ที่สองของระเบียนใน/etc/passwdไฟล์ (ภายในรูปแบบเจ็ดฟิลด์ตามที่อธิบายไว้ข้างต้น)
การซ่อนรหัสผ่านปรากฏขึ้นครั้งแรกในระบบ Unix พร้อมกับการพัฒนาSunOSในช่วงกลางทศวรรษ 1980 [ 12 ] System V Release 3.2 ในปี 1988 และBSD 4.3 Reno ในปี 1990 แต่ผู้จำหน่ายที่ทำการพอร์ตจาก UNIX รุ่นก่อนหน้าไม่ได้รวมคุณสมบัติการซ่อนรหัสผ่านใหม่ไว้ในเวอร์ชันของตนเสมอไป ทำให้ผู้ใช้ระบบเหล่านั้นเสี่ยงต่อการโจมตีไฟล์รหัสผ่าน
ผู้ดูแลระบบอาจจัดให้มีการจัดเก็บรหัสผ่านในฐานข้อมูลแบบกระจาย เช่นNISและLDAPแทนที่จะจัดเก็บไว้ในไฟล์บนแต่ละระบบที่เชื่อมต่อ ในกรณีของ NIS กลไกการใช้รหัสผ่านสำรองมักยังคงถูกใช้บนเซิร์ฟเวอร์ NIS ในขณะที่กลไกแบบกระจายอื่นๆ ปัญหาการเข้าถึงส่วนประกอบการตรวจสอบสิทธิ์ผู้ใช้ต่างๆ จะได้รับการจัดการโดยกลไกความปลอดภัยของที่เก็บข้อมูลพื้นฐาน
ในปี 1987 จูลี ฮอฟ ผู้เขียนชุดโปรแกรม Shadow Password Suite ฉบับดั้งเดิม ประสบเหตุการณ์คอมพิวเตอร์ถูกแฮ็ก และได้เขียนชุดโปรแกรม Shadow Suite เวอร์ชันแรก ซึ่งประกอบด้วย คำสั่ง login`index.php` passwdและsu`index.php` เวอร์ชันดั้งเดิมนี้เขียนขึ้นสำหรับระบบปฏิบัติการ SCO Xenixและถูกพอร์ตไปยังแพลตฟอร์มอื่น ๆ อย่างรวดเร็ว ชุดโปรแกรม Shadow Suite ถูกพอร์ตไปยังLinux ในปี 1992 หนึ่งปีหลังจากประกาศโครงการ Linux ครั้งแรก และถูกรวมอยู่ในระบบปฏิบัติการ Linux รุ่นแรก ๆ หลายรุ่น และยังคงรวมอยู่ใน ระบบปฏิบัติการ Linuxรุ่นปัจจุบันหลายรุ่นจนถึงปัจจุบัน
ในอดีต จำเป็นต้องใช้คำสั่งที่แตกต่างกันในการเปลี่ยนรหัสผ่านสำหรับระบบการตรวจสอบสิทธิ์ที่แตกต่างกัน ตัวอย่างเช่น คำสั่งในการเปลี่ยนรหัสผ่าน NIS คือyppasswdซึ่งทำให้ผู้ใช้ต้องทราบวิธีการเปลี่ยนรหัสผ่านที่แตกต่างกันสำหรับระบบต่างๆ และยังส่งผลให้เกิดการเขียนโค้ดซ้ำซ้อนโดยไม่จำเป็นในโปรแกรมต่างๆ ที่ทำหน้าที่เดียวกันแต่ใช้ระบบแบ็กเอนด์ ต่างกัน ปัจจุบันในระบบส่วนใหญ่มีคำสั่ง passwd เพียงคำสั่งเดียว และการควบคุมว่าควรเปลี่ยนรหัสผ่านที่ใดนั้นจะถูกจัดการอย่างโปร่งใสสำหรับผู้ใช้ผ่านโมดูลการตรวจสอบสิทธิ์แบบเสียบปลั๊กได้ (PAMs) ตัวอย่างเช่น ประเภทของแฮชที่ใช้จะถูกกำหนดโดยการกำหนดค่าของpam_unix.soโมดูล โดยค่าเริ่มต้น จะใช้แฮช MD5ในขณะที่โมดูลปัจจุบันสามารถใช้แฮชที่แข็งแกร่งกว่า เช่นblowfish , SHA256และSHA512ได้
ดูเพิ่มเติม
- ชช
- Crypt (C) (ฟังก์ชันในไลบรารี) และCrypt (Unix) (ยูทิลิตี้)
- เกเทนต์
- โปรแกรมจัดการบัญชีความปลอดภัย ( เทียบเท่ากับไฟล์รหัสผ่านใน ระบบปฏิบัติการ Microsoft Windows )
- ความปลอดภัยของ Unix
- วีไอพี
ลิงก์ภายนอก
- หน้าคู่มือจาก Unix First Edition ที่อธิบายเกี่ยวกับ /etc/passwd
- : อัปเดตโทเค็นการตรวจสอบสิทธิ์ของผู้ใช้ – คู่มือคำสั่งทั่วไปของ FreeBSD
- – คู่มือโปรแกรมเมอร์Plan 9 เล่ม 1
- – คู่มือคำสั่งทั่วไปของเกม Inferno
- authconfigเป็นเครื่องมือแบบบรรทัดคำสั่งสำหรับควบคุมการใช้รหัสผ่านเงา
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ รหัสผ่าน
passwd เป็น คำสั่ง ใน ระบบปฏิบัติการ Unix , Plan 9 , Inferno และ ระบบปฏิบัติการ ที่คล้าย Unix ส่วนใหญ่ ใช้สำหรับเปลี่ยน รหัสผ่าน ของผู้ใช้ รหัสผ่านที่ผู้ใช้ป้อนจะถูกนำไปผ่าน...
ไฟล์รหัสผ่าน
ไฟล์ นี้ /etc/passwd เป็นฐานข้อมูลข้อความที่เก็บข้อมูลเกี่ยวกับ ผู้ใช้ ที่อาจ ล็อกอินเข้าสู่ ระบบ หรือข้อมูลประจำตัวผู้ใช้ระบบปฏิบัติการอื่นๆ ที่เป็นเจ้าของกระบวนการที่กำลังทำงานอยู่
ไฟล์เงา
/etc/shadow ใช้เพื่อเพิ่มระดับความปลอดภัยของรหัสผ่านโดยจำกัดการเข้าถึงข้อมูลรหัสผ่านที่เข้ารหัสไว้เฉพาะผู้ใช้ที่มีสิทธิ์สูงเท่านั้น โดยทั่วไป ข้อมูลดังกล่าวจะถูกเก็บไว้ในไฟล์ที่เป็นของและเข้าถึงได้เฉพาะ ผู้ใช้ ระดับ สูงสุด เท่านั้น [ 5 ]
ประวัติศาสตร์
ก่อนที่จะมีการใช้เทคนิคการเข้ารหัสรหัสผ่าน (password shadowing) รหัสผ่านที่เข้ารหัสแล้วของผู้ใช้ Unix จะถูกจัดเก็บไว้ในฟิลด์ที่สองของระเบียนใน /etc/passwd ไฟล์ (ภายในรูปแบบเจ็ดฟิลด์ตามที่อธิบายไว้ข้างต้น)