วิธีที่ไม่ปลอดภัยน้อยที่สุดในการจัดเก็บรหัสผ่านที่สคริปต์ใช้คืออะไร


13

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

ฉันควรใช้ความระมัดระวังอย่างไรในการจัดเก็บข้อมูลรับรองเหล่านี้อย่างปลอดภัยที่สุดในขณะที่ยังอนุญาตให้เข้าถึงสคริปต์ได้

จุดชี้แจง:

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

2
ไม่จัดเก็บส่วนรหัสผ่านของข้อมูลรับรองใช่ไหม
Thomas Ward

จะใช้การเข้าถึง GNOME Keyring ไม่ได้หรือไม่
ผจญเพลิง

บางทีถ้าคุณสามารถเก็บมันไว้เป็นแฮชการเข้ารหัสลับ (เช่น SHA-1) ก็คงจะดี
ไม่ระบุชื่อ

ROT13 จะปิดบัง แต่จะไม่ปลอดภัยในทางใดทางหนึ่ง
ไม่ระบุชื่อ

@ ไม่ระบุชื่อหากรหัสผ่านถูกจัดเก็บเป็นแฮชการเข้ารหัสลับคุณจะแนะนำให้ดึงข้อมูลได้อย่างไร
ændrük

คำตอบ:


8

บริการแบบไหน บริการบางอย่างมีวิธีอื่นในการตรวจสอบสิทธิ์เช่นคีย์ SSH สำหรับ SSH ร่วมกับตัวแทน SSH

ฉันจะเก็บรหัสผ่านแยกต่างหากจากสคริปต์และตรวจสอบให้แน่ใจว่าส่วนประกอบของเส้นทางทั้งหมดมีการตั้งค่าการอนุญาตที่ถูกต้อง เช่นให้แน่ใจว่าในเส้นทาง/path/to/file, /, /pathและ/path/toเป็นเจ้าของโดยผู้ใช้ที่คุณไว้วางใจ (กroot) และว่าสิ่งเหล่านี้ไม่สามารถเขียนโดยคนที่ไม่ได้รับอนุญาตให้ดูไฟล์ของคุณ ในที่สุดการอนุญาตที่แนะนำสำหรับfileคือ 600 หรือ 400

ที่fileอาจมีลักษณะเช่นนี้:

PASSWORD='something that you cannot remember'

ในสคริปต์ของคุณใช้รหัสด้านล่างเพื่อนำเข้าตัวแปร:

. /path/to/file

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

สำหรับการป้องกันรหัสผ่านของคุณคุณไม่สามารถทำได้ ต้องมีให้บริการอื่น คุณสามารถเข้ารหัสไฟล์ / สคริปต์ที่มีรหัสผ่านโดยใช้opensslหรือgpgดังนั้นคุณต้องป้อนรหัสผ่านก่อนที่จะปลดล็อคข้อมูลรับรอง สิ่งนี้มีประโยชน์อย่างยิ่งหากรหัสผ่านบริการของคุณจำได้ยาก


14

แทนที่จะเข้ารหัสรหัสผ่านในไฟล์ให้เก็บรหัสผ่านไว้ในไฟล์แยกต่างหากและป้องกันไฟล์ ( chmod 700หรือchmod 500) เพื่อให้ผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่สามารถเข้าถึงได้

ดึงรหัสผ่านด้วยcat /dir/to/file/with/.passwordแทนที่จะอ่านไฟล์และเก็บเนื้อหาไว้ในตัวแปร


เครื่องมือบางตัวมีตัวเลือกในการอ่านรหัสผ่านจากไฟล์โดยตรงด้วยเหตุผลนี้เช่น--passphrase-fileตัวเลือกของ gpg

2
... และทำให้เป็น. dotfile (/dir/to/file/with/.password)
knb

2
chmod 400สำหรับไฟล์ (อ่านอย่างเดียว) แน่นอนคุณต้องรักษาความปลอดภัยไดเรกทอรีชั้นนำ (700 หรือ 500 หรือ 100 ถ้าคุณหวาดระแวง) โปรดทราบว่า 400 (หรือ 500 สำหรับไดเรกทอรี) เพียงพอโหมดอื่น ๆ (100) อาจถือได้ว่าเป็นการรักษาความปลอดภัยผ่านความสับสนเช่นเดียวกับการซ่อนไฟล์โดยการใส่จุดไว้ด้านหน้าชื่อ
Lekensteyn

1

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันพบปัญหาที่คล้ายกันนี้และฉันใช้พวงกุญแจของ Ubuntu เพื่อแก้ปัญหา นี่คือทางออกสำหรับ Ubuntu 18.04LTS เปิดเทอร์มินัลจดบันทึกkeyring set {{service}} {{username}} ตัวอย่างเช่นถ้าคุณใช้สิ่งนี้สำหรับการบันทึกรหัสผ่านของโรงเรียน:

keyring set school mohamed

มันจะเข้าสู่ระบบคุณรหัสผ่านป้อนรหัสผ่าน ตอนนี้รหัสผ่านที่คุณป้อนจะถูกเก็บไว้ในพวงกุญแจ Ubuntu

เพื่อรับรหัสผ่านนี้เขียนใน terminal:

keyring get school mohamed

เพื่อใช้สิ่งนี้ในบริบทของสคริปต์:

password=$(keyring get school mohamed)

ตอนนี้รหัสผ่านจะใช้รหัสผ่านที่คุณป้อนก่อนหน้านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.