ทำไมรหัสผ่านที่ฉันป้อนไม่ปรากฏ


39

ด้านล่างเป็นภาพของกระบวนการที่ฉันทำเพื่อสร้างผู้ใช้บน bash ใน Linux

การสร้างผู้ใช้และการกำหนดรหัสผ่านใน bash

ฉันเข้าใจว่ารหัสผ่านไม่ควรแสดงเพื่อความปลอดภัย แต่สิ่งที่ฉันหมายถึงคือทำไมเครื่องหมายดอกจัน (หรืออักขระที่ฉันป้อน) ไม่ปรากฏ


4
เมื่อใดก็ตามที่คุณมีคำถามเกี่ยวกับ Linux คำตอบก็คือความปลอดภัย
Katz


IBM Notes ทำสิ่งประหลาดนี้ที่พวกเขาแสดงเครื่องหมายดอกจันแบบสุ่มสำหรับแต่ละอักขระที่คุณพิมพ์สำหรับรหัสผ่าน สับสนมาก

1
ล่อ cross-site: ux.stackexchange.com/q/39774/11086
Wim

1
นอกจากนี้ยังเกี่ยวข้องกับ: security.stackexchange.com/q/35133/3945
Wim

คำตอบ:


43

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

แต่ฉันต้องยอมรับว่ามันน่ากลัวเล็กน้อยที่จะไม่ได้รับคำติชมใด ๆ เมื่อคุณป้อนรหัสผ่านโดยเฉพาะอย่างยิ่งถ้าคุณมีแป้นพิมพ์ที่ไม่ดี ดังนั้นกล่องโต้ตอบรหัสผ่าน GUI ส่วนใหญ่ในระบบ * nix จะให้ข้อเสนอแนะบางอย่างเช่นใช้เครื่องหมายดอกจันหรือโดยทั่วไป⬤ และบางคนถึงกับแสดงตัวละครแต่ละตัวในขณะที่คุณพิมพ์ แต่จากนั้นแทนที่มันด้วย a *หรือ⬤ทันที แต่ก็ไม่ดีนักถ้ามีคนมองข้ามไหล่ของคุณ หรือถ้าพวกเขามีอุปกรณ์ที่สามารถรับและถอดรหัสสัญญาณวิดีโอที่ส่งจากคอมพิวเตอร์ของคุณไปยังจอภาพของคุณ


5
... ด้วยความช่วยเหลือของstty -echo
Jeff Schaller

7
คำตอบนี้ไม่เลว แต่ IMHO Gilles ให้คำตอบจริง เกือบจะแน่นอนผู้ใช้งานไม่ได้คิดถึง "ความปลอดภัยเพิ่มอีกนิดหน่อย" และไม่ได้นึกถึงประสบการณ์การใช้งานของผู้ใช้ พวกเขาทำตามวิธีที่พวกเขาทำเพราะราคาถูกและง่ายต่อการทำเช่นนั้น จากนั้นต่อมาเราก็คาดหวังว่ามันจะยังคงทำงานต่อไป ...
Celada

2
@Celada: จุดประสงค์ FWIW ฉันได้รับคำตอบที่ยอดเยี่ยมของ Gilles แล้ว
PM 2Ring

2
@Celada ความปลอดภัยที่เพิ่มเข้ามาอาจไม่ได้นำไปสู่การตัดสินใจเดิมที่จะไม่แสดงอะไรเลย แต่ฉันคิดว่ามันเป็นประโยชน์เสมอ
Monty Harder

1
ฉันคิดว่าการแสดง breif ของตัวอักษรตัวสุดท้ายที่พิมพ์นั้นส่วนใหญ่เป็นวิธีการใช้มือถืออาจเป็นเพราะการพิมพ์บนแป้นพิมพ์บนหน้าจอเล็ก ๆ นั้นมีข้อผิดพลาดมากกว่า ฉันไม่คิดว่าฉันเคยเห็นมันในแอปพลิเคชันบนเดสก์ท็อป
Barmar

82

วิธีที่ง่ายที่สุดในการซ่อนการป้อนข้อมูลผู้ใช้คืออะไร

ไม่แสดง!

การซ่อนรหัสผ่านเมื่อพวกเขาถูกพิมพ์เป็นประเพณีเก่าแก่ หากพิจารณาจากมุมมองด้านความปลอดภัยในบริบทส่วนใหญ่: หากมีคนคอยดูแลไหล่ของคุณคุณไม่ต้องการให้ง่ายต่อการดูสิ่งที่คุณกำลังพิมพ์ (แนวทางการรักษาความปลอดภัยที่ทันสมัยบางอย่างเช่น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 นั้นซับซ้อนเมื่อคุณเรียกใช้จากเทอร์มินัล)


1
นี่คือคำตอบที่ดีที่สุดเท่าที่เป็นจริงและเป็นประโยชน์อย่างมาก ขอบคุณสำหรับการชี้แจงความเชื่อของฉันและขยาย ^, ^ สมควรได้รับการโหวต!
DankyNanky

4
เครื่องมือจัดการเทอร์มินัลจะดูแลคุณสมบัติการแก้ไขอย่างง่าย (เช่นแบ็คสเปซ) และการบัฟเฟอร์บรรทัด บรรทัดที่อ่านโดยใช้ fgets () จะไม่กลับมาจนกว่าจะกด Enter เพื่อให้การพิมพ์ดอกจันยุ่งยาก หากคุณต้องอ่านครั้งละหนึ่งตัวอักษรและเครื่องหมายดอกจันคุณจะสูญเสียฟังก์ชันแบ็คสเปซหรือต้องการความพยายามพิเศษในการสนับสนุน
Jasen

1
เมื่อจะเข้าสู่มุมประวัติศาสตร์ในเรื่องนี้ผมสงสัยว่านี้เกี่ยวข้องกับเวลาเมื่อ TTY จริงเรียก teletypewriter ...
แจสเปอร์

1
มีวิธีเรียกใช้งานคำสั่งโดยไม่เก็บข้อมูลไว้ในประวัติคำสั่ง ดูตัวอย่างดำเนินการคำสั่งโดยไม่ต้องเก็บรักษาไว้ในประวัติศาสตร์
CVn

2
ภาคผนวก: เทอร์มินัลที่ "ทำงานพิเศษ" เพื่อป้อนข้อมูลผู้ใช้ echo เรียกว่า "full duplex" ใน Ye Olde Days มีเทอร์มินัล "half duplex" ซึ่งตัวละครถูกแสดงโดยเทอร์มินัลทันทีที่พิมพ์และระบบปฏิบัติการไม่ได้ส่งมันกลับไปที่เทอร์มินัลเพื่อแสดง ถ้าฉันจำได้อย่างถูกต้องอาคารเหล่านี้ไม่มีทางที่จะปิดเสียงสะท้อน
alexis

3

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


แป้นพิมพ์มีแนวโน้มที่จะทำให้เกิดเสียงดังตามที่ใช้ซึ่งสามารถได้ยินหรือบันทึกเพื่อการวิเคราะห์ในภายหลังเพื่อกำหนดความยาวของรหัสผ่าน บางรุ่นแป้นพิมพ์เงียบกว่าคนอื่น ๆ นอกจากนี้ปุ่มบางปุ่มมักทำให้เกิดเสียงที่ค่อนข้างชัดเจน (คิดว่า space bar, Enter และอื่น ๆ ) ในบริบทนี้ให้คำนึงถึงความสำคัญของการรักษาความยาวรหัสผ่านของคุณด้วยหรือไม่ เกี่ยวกับความปลอดภัยของข้อมูล
CVn

@ Michael Kjörling: สิ่งที่คุณพูดคือความปลอดภัยระดับสูงและเป็นจุดที่ถูกต้องที่จะพิจารณา (โดยเฉพาะอย่างยิ่งสำหรับคนที่มีพลังการได้ยินดีจริงๆที่สามารถรับความยาวของรหัสผ่านผ่านเสียงคีย์บอร์ด) แต่มันเป็นปัญหาฮาร์ดแวร์ซึ่งจำเป็นต้องพิจารณาในระดับฮาร์ดแวร์และตอนนี้เรามีสิ่งอำนวยความสะดวกของคีย์บอร์ดหน้าจอสัมผัสซึ่งไม่สร้างเสียงรบกวน
Coder AP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.