ด้านล่างเป็นภาพของกระบวนการที่ฉันทำเพื่อสร้างผู้ใช้บน bash ใน Linux
ฉันเข้าใจว่ารหัสผ่านไม่ควรแสดงเพื่อความปลอดภัย แต่สิ่งที่ฉันหมายถึงคือทำไมเครื่องหมายดอกจัน (หรืออักขระที่ฉันป้อน) ไม่ปรากฏ
ด้านล่างเป็นภาพของกระบวนการที่ฉันทำเพื่อสร้างผู้ใช้บน bash ใน Linux
ฉันเข้าใจว่ารหัสผ่านไม่ควรแสดงเพื่อความปลอดภัย แต่สิ่งที่ฉันหมายถึงคือทำไมเครื่องหมายดอกจัน (หรืออักขระที่ฉันป้อน) ไม่ปรากฏ
คำตอบ:
เพราะนั่นคือวิธีที่เราทำสิ่งต่าง ๆ ในดินแดน * ระวัง :) ช่วยเพิ่มความปลอดภัยเล็กน้อยโดยไม่แสดงเครื่องหมายดอกจัน ด้วยวิธีนี้บางคนที่เห็นหน้าจอของคุณจะไม่สามารถเห็นความยาวของรหัสผ่านของคุณได้
แต่ฉันต้องยอมรับว่ามันน่ากลัวเล็กน้อยที่จะไม่ได้รับคำติชมใด ๆ เมื่อคุณป้อนรหัสผ่านโดยเฉพาะอย่างยิ่งถ้าคุณมีแป้นพิมพ์ที่ไม่ดี ดังนั้นกล่องโต้ตอบรหัสผ่าน GUI ส่วนใหญ่ในระบบ * nix จะให้ข้อเสนอแนะบางอย่างเช่นใช้เครื่องหมายดอกจันหรือโดยทั่วไป⬤ และบางคนถึงกับแสดงตัวละครแต่ละตัวในขณะที่คุณพิมพ์ แต่จากนั้นแทนที่มันด้วย a *
หรือ⬤ทันที แต่ก็ไม่ดีนักถ้ามีคนมองข้ามไหล่ของคุณ หรือถ้าพวกเขามีอุปกรณ์ที่สามารถรับและถอดรหัสสัญญาณวิดีโอที่ส่งจากคอมพิวเตอร์ของคุณไปยังจอภาพของคุณ
stty -echo
วิธีที่ง่ายที่สุดในการซ่อนการป้อนข้อมูลผู้ใช้คืออะไร
ไม่แสดง!
การซ่อนรหัสผ่านเมื่อพวกเขาถูกพิมพ์เป็นประเพณีเก่าแก่ หากพิจารณาจากมุมมองด้านความปลอดภัยในบริบทส่วนใหญ่: หากมีคนคอยดูแลไหล่ของคุณคุณไม่ต้องการให้ง่ายต่อการดูสิ่งที่คุณกำลังพิมพ์ (แนวทางการรักษาความปลอดภัยที่ทันสมัยบางอย่างเช่น1 2 3 4 5แนะนำให้มีตัวเลือกในการทำให้มองเห็นรหัสผ่านเนื่องจากช่วยให้ผู้ใช้สามารถเลือกรหัสผ่านที่ซับซ้อนมากขึ้นและมั่นใจว่าพวกเขาจะไม่ใช้เวลาในการแก้ไขที่มองไม่เห็น ความเสี่ยงที่ใหญ่ที่สุดไม่ใช่การท่องไหล่ แต่เป็นการคาดเดาที่ดุร้าย
หลังจากตัดสินใจแล้วว่าควรซ่อนรหัสผ่านผู้ดำเนินการต้องตัดสินใจว่าจะทำอย่างไร เทอร์มินัลมีโหมดที่อินพุตของผู้ใช้แสดงขึ้น (echo on) และโหมดที่อินพุตของผู้ใช้ไม่ปรากฏ (echo off) โหมด echo off นั้นมีอยู่จริงภายใน: นั่นคือโหมดที่เทอร์มินัลไม่ได้ทำงานพิเศษในการสะท้อนอินพุตของผู้ใช้ โหมดนี้ต้องมีอยู่สำหรับแอปพลิเคชันที่พิมพ์คีย์ไม่ได้แทรกอักขระนั้น แต่จะเรียกใช้ทางลัดบางแอปพลิเคชันที่ผูกไว้กับคีย์นั้นแทน ดังนั้นคำสั่งเช่นpasswd
ตั้งค่าเทอร์มินัลเป็น echo off mode ในขณะที่กำลังอ่านรหัสผ่าน
การพิมพ์เครื่องหมายดอกจันสำหรับอักขระแต่ละตัวจะต้องใช้งานเพิ่มเติมเพื่อผลประโยชน์เพียงเล็กน้อยเท่านั้นซึ่งผู้ดำเนินการของpasswd
คำสั่งไม่รู้สึกอยากทำ ไม่มีโหมดเทอร์มินัลสำหรับการพิมพ์เครื่องหมายดอกจันเพราะมันจะเป็นคุณสมบัติพิเศษที่มีประโยชน์เฉพาะเมื่อป้อนรหัสผ่าน
โดยวิธีการถ้าคุณต้องการที่จะเห็นรหัสผ่านของคุณเมื่อมีการเปลี่ยนแปลงคุณสามารถใช้cat | passwd
(อย่างน้อยในบางระบบ - บางรุ่นpasswd
ต้องมีตัวเลือกเช่นcat | passwd --stdin
และบางคนไม่ยอมรับมันเลย) (คุณสามารถทำได้{ echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
แต่อย่าทำอย่างนั้นมันจะบันทึกรหัสผ่านในประวัติเชลล์ซึ่งมีความเสี่ยงต่อการรั่วไหลได้มากขึ้น) การจัดการกับคำสั่งที่อ่านรหัสผ่านจากเทอร์มินัลแทนที่จะเป็นอะไรก็ตาม อินพุตมาตรฐานของพวกเขาเช่นsudo
หรือssh
มีความซับซ้อนมากขึ้น หากคุณมี GUI ที่พร้อมใช้งานคุณสามารถใช้ ssh-askpass ซึ่งจะแสดงจำนวนอักขระที่คุณพิมพ์ ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
สำหรับ sudo สำหรับ ssh นั้นซับซ้อนเมื่อคุณเรียกใช้จากเทอร์มินัล)
การทำให้มองไม่เห็นรหัสผ่านทำให้ปลอดภัยยิ่งขึ้นเนื่องจากผู้อื่นไม่เห็นความยาวของรหัสผ่าน วิธีนี้จะช่วยลดความเสี่ยงของผู้อื่นที่พยายามเดารหัสผ่านจากความยาวและเข้าสู่บัญชีของคุณ