ฉันควรจะลบรหัสผ่านของผู้ใช้เมื่อฉันตั้งค่าการตรวจสอบคีย์สาธารณะสำหรับ SSH หรือไม่


19

เป็นการดีที่สุดที่จะใช้กุญแจสาธารณะสำหรับ SSH ดังนั้นฉันมีsshd_configPasswordAuthentication no

ผู้ใช้บางคนไม่เคยเข้าสู่ระบบเช่น SFTP /usr/sbin/nologinผู้ใช้ที่มีเปลือก หรือบัญชีระบบ

adduser gary --shell /usr/sbin/nologin --disabled-passwordดังนั้นผมจึงสามารถสร้างผู้ใช้ดังกล่าวได้โดยไม่ต้องใช้รหัสผ่านด้วย

เป็นความคิดที่ดี / ไม่ดีใช่ไหม มีสิ่งแตกต่างที่ฉันไม่ได้พิจารณาหรือไม่?


3
ตราบใดที่บัญชีเหล่านี้ไม่ใช่บัญชีผู้ใช้จริงหรือพวกเขาไม่ต้องการรหัสผ่านสำหรับsudoการเข้าถึง (ไม่ว่าจะด้วยสิทธิ์ของ sudo เลยหรือด้วยสิทธิ์ sudo ด้วยNOPASSWD) คำตอบที่คุณเลือกควรเหมาะสม ฉันได้ส่งการแก้ไขคำตอบนั้นเพื่อรวมข้อกังวล sudo แต่คิดว่าฉันจะโทรหาคุณที่นี่ในระหว่างนี้
Doktor J

คำตอบ:


35

หากคุณมีสิทธิ์เข้าถึงรูทไปยังเซิร์ฟเวอร์และสามารถสร้างคีย์ ssh ใหม่สำหรับผู้ใช้ของคุณในกรณีที่พวกเขาทำหาย

และ

คุณแน่ใจว่าผู้ใช้ (ในฐานะบุคคล) จะไม่มีบัญชีผู้ใช้หลายบัญชีและพวกเขาจำเป็นต้องสลับระหว่างบัญชีเหล่านั้นในเซสชัน SSH (และพวกเขายังสามารถเปิดเซสชัน SSH หลายรายการได้หากจำเป็น)

และ

พวกเขาจะไม่ต้องการการเข้าถึงแบบ "กายภาพ" (ผ่านทางแป้นพิมพ์ + จอมอนิเตอร์หรือผ่านทางคอนโซลระยะไกลสำหรับ VM) เพื่อเข้าถึงเซิร์ฟเวอร์

และ

ไม่มีผู้ใช้ที่มีการsudoเข้าถึงด้วยรหัสผ่าน(เช่นพวกเขาไม่มีสิทธิ์เข้าถึง sudo เลยหรือเข้าถึง sudo ด้วยNOPASSWD)

ฉันคิดว่าคุณจะดี

เรามีเซิร์ฟเวอร์จำนวนมากในที่ทำงานที่ได้รับการกำหนดค่าเช่นนี้ (มีเพียงบางบัญชีเท่านั้นที่ต้องการเข้าถึง VM ผ่านคอนโซลระยะไกล vmware ส่วนอีกเซิร์ฟเวอร์หนึ่งเชื่อมต่อผ่าน SSH พร้อม pubkey auth เท่านั้น)


9
ฉันต้องการเพิ่ม "คุณรู้ว่าผู้ใช้จะไม่ต้องเข้าถึงระบบจากระบบระยะไกลที่ไม่มีคีย์ SSH ส่วนตัว" และ "คุณยินดีที่จะจัดการกับผู้ใช้ที่ประสบกับสถานการณ์ที่คุณไม่ได้คิดถึง"
Andrew Henle

7
เงื่อนไขแรกคือ IMO ไม่จำเป็น ผู้ใช้ของคุณควรสร้างกุญแจด้วยตนเอง คุณแค่ให้สิทธิ์กุญแจสาธารณะของพวกเขาเมื่อพวกเขามอบให้คุณ หากพวกเขาทำกุญแจหายพวกเขาจะสร้างขึ้นใหม่และคุณจะแทนที่กุญแจเก่าบนเซิร์ฟเวอร์
Christophe Drevet-Droguet

1
@AndrewHenle นั่นเป็นจุดที่ดี แต่ถ้า sshd มีอยู่ PasswordAuthentication noแล้วมันเป็นปัญหาที่แตกต่างกัน (ผู้ใช้จะไม่สามารถเข้าสู่ระบบได้)
lonix

1
"ไม่เคย" เป็นเช่นนี้มานานแล้ว ผู้ดูแลระบบสามารถเพิ่มการรับรองความถูกต้องรหัสผ่านกลับได้อย่างง่ายดายหากต้องการ
hyde

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

27

แต่เดิมคำถามนี้กล่าวถึงpasswd --delete <username> สิ่งที่ไม่ปลอดภัยโดยที่ฟิลด์รหัสผ่านที่เข้ารหัสใน/etc/shadowนั้นจะว่างเปล่า

username::...

หากคุณได้กำหนดค่าของคุณsshdจะปฏิเสธการตรวจสอบรหัสผ่านแล้วที่ปลอดภัยกับ SSH ... แต่ถ้าอื่น ๆ ที่ให้บริการในระบบการใช้ตรวจสอบรหัสผ่านของคุณและไม่ได้กำหนดค่าที่จะปฏิเสธรหัสผ่าน null นี้ช่วยให้สามารถเข้าถึงได้โดยไม่ต้องใช้รหัสผ่าน! คุณไม่ต้องการสิ่งนี้


adduser --disabled-passwdจะสร้าง/etc/shadowรายการที่ช่องรหัสผ่านที่เข้ารหัสเป็นเพียงเครื่องหมายดอกจัน

username:*:...

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

วิธีการรับรองความถูกต้องที่ใช้อย่างอื่นที่ไม่ใช่รหัสผ่านบัญชีมาตรฐาน (เช่นคีย์ SSH) จะใช้ได้กับผู้ใช้รายนี้สำหรับบริการใด ๆ ที่ใช้ไฟล์รหัสผ่านระบบในระบบนี้ เมื่อคุณต้องการผู้ใช้ที่สามารถเข้าสู่ระบบด้วยปุ่ม SSH เท่านั้นนี่คือสิ่งที่คุณต้องการ

หากคุณต้องการตั้งค่าบัญชีที่มีอยู่เป็นสถานะนี้คุณสามารถใช้คำสั่งนี้:

echo 'username:*' | chpasswd -e

มีค่าพิเศษที่สามสำหรับฟิลด์รหัสผ่านที่เข้ารหัส: adduser --disabled-loginจากนั้นฟิลด์จะมีเครื่องหมายอัศเจรีย์เพียงอันเดียว

username:!:...

เช่นเดียวกับเครื่องหมายดอกจันสิ่งนี้ทำให้การตรวจสอบรหัสผ่านเป็นไปไม่ได้ที่จะประสบความสำเร็จ แต่ก็มีความหมายเพิ่มเติม: มันทำเครื่องหมายรหัสผ่านว่า "ล็อค" สำหรับเครื่องมือการดูแลระบบบางอย่าง passwd -lมีผลเหมือนกันมากโดยการเติมแฮชรหัสผ่านที่มีอยู่ด้วยเครื่องหมายอัศเจรีย์ซึ่งทำให้การตรวจสอบรหัสผ่านอีกครั้งเป็นไปไม่ได้ที่จะใช้

แต่นี่คือกับดักสำหรับเลินเล่อ: ในปี 2008 รุ่นpasswdคำสั่งที่มาจากshadowแพคเกจเก่าถูกเปลี่ยนเป็น re-define passwd -lจาก "ล็อคบัญชี" เป็นเพียง "ล็อครหัสผ่าน" เหตุผลที่ระบุคือ "เพื่อความเข้ากันได้กับรุ่น passwd อื่น"

หากคุณ (เช่นฉัน) เรียนรู้สิ่งนี้มานานอาจเป็นเซอร์ไพรส์ที่น่ารังเกียจ มันไม่ได้ช่วยเรื่องที่adduser(8)เห็นได้ชัดว่ายังไม่ได้ตระหนักถึงความแตกต่างนี้เช่นกัน

ส่วนที่ปิดการใช้งานบัญชีสำหรับวิธีการทั้งหมดของการตรวจสอบที่เป็นจริงการตั้งค่าวันหมดอายุของ 1 usermod --expiredate 1 <username>สำหรับบัญชี: ก่อนปี 2551 passwd -lนั้นมีต้นกำเนิดมาจากshadowชุดแหล่งข้อมูลที่ใช้ในการทำสิ่งนี้นอกเหนือจากการใส่รหัสผ่านด้วยเครื่องหมายอัศเจรีย์ - แต่ไม่ได้ทำเช่นนั้นอีกต่อไป

แพคเกจการเปลี่ยนแปลงเดเบียนพูดว่า:

  • debian / patches / 494_passwd_lock-no_account_lock: คืนค่าลักษณะการทำงานก่อนหน้าของ passwd -l (ซึ่งเปลี่ยนแปลงใน # 389183): ล็อครหัสผ่านของผู้ใช้ไม่ใช่บัญชีผู้ใช้ บันทึกความแตกต่างอย่างชัดเจน สิ่งนี้จะคืนค่าพฤติกรรมที่พบได้ทั่วไปกับ passwd รุ่นก่อนหน้าและกับการใช้งานอื่น ๆ ปิด: # 492307

ประวัติข้อผิดพลาดสำหรับDebian bug 492307และbug 389183อาจมีประโยชน์ในการทำความเข้าใจความคิดเบื้องหลัง


ขอบคุณสำหรับคำเตือน ... ฉันจะแก้ไขคำถามดังนั้นจึงไม่มีใครทำผิดพลาด!
lonix

คำเตือนของคุณมีผลกับกรณีที่ฉันใช้หรือไม่ adduser --disabled-passwd- ดังนั้นหากบริการอื่น ๆ อนุญาตให้ใช้การพิสูจน์ตัวตนด้วยรหัสผ่านผู้ใช้สามารถเข้าสู่ระบบโดยไม่มีรหัสผ่านได้หรือไม่?
lonix

1
ไม่adduser --disabled-passwordทำให้การตรวจสอบรหัสผ่านโดยเฉพาะเป็นไปไม่ได้สำหรับบัญชีดังกล่าว
telcoM

เนื่องจากการลบรหัสผ่านนั้นดูไร้เดียงสา แต่อันตรายมากฉันขอแนะนำให้สลับย่อหน้าเกี่ยวกับเรื่องนี้กับย่อหน้าเกี่ยวกับการใช้*ดังนั้นจึงเป็นสิ่งแรกที่ผู้คนอ่าน
Captain Man

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