ความแตกต่างระหว่าง / sbin / nologin และ / bin / false คืออะไร?


69

/bin/falseฉันมักจะเคยได้ยินมันแนะนำว่าบัญชีผู้ใช้ควรจะปิดการใช้งานโดยการตั้งค่าเปลือกไป แต่สำหรับระบบ Linux ที่มีอยู่ของฉันฉันเห็นว่ามีบัญชีจำนวนมาก (บัญชีบริการทั้งหมด) มีเชลล์/sbin/nologinแทน

ฉันเห็นจากหน้าคนที่/sbin/nologinพิมพ์ข้อความถึงผู้ใช้ว่าบัญชีถูกปิดใช้งานแล้วออกจาก คงจะ/bin/falseไม่พิมพ์อะไรเลย

ฉันยังเห็นว่า/sbin/nologinมีการระบุไว้ใน/etc/shellsขณะที่/bin/falseไม่

หน้าคนบอกว่า FTP จะปิดการใช้งานการเข้าถึงสำหรับผู้ใช้ที่มีเชลล์ที่ไม่อยู่ในรายการ/etc/shellsและบอกเป็นนัยว่าโปรแกรมอื่นอาจทำเช่นเดียวกัน นั่นหมายความว่าใครบางคนสามารถ FTP ด้วยบัญชีที่มี/sbin/nologinเปลือกของมันได้หรือไม่?

ความแตกต่างที่นี่คืออะไร? ฉันควรใช้อันใดในการปิดใช้งานบัญชีผู้ใช้และในสถานการณ์ใด รายชื่ออื่นมีผลกระทบ/etc/shellsอะไรบ้าง



1
เป็นข้อมูลทั่วไปที่ใช้งานได้ ฉันคิดโดยเฉพาะจากมุมมองของการบริหารระบบ
Michael Hampton

หมายถึงเพียงแค่ backgrounder
dmourati

คำตอบ:


70

/bin/falseเป็นโปรแกรมอรรถประโยชน์/bin/trueซึ่งเป็นประโยชน์ต่อในแง่นามธรรมเพื่อให้แน่ใจว่ายูนิกซ์เป็นคุณสมบัติที่สมบูรณ์ อย่างไรก็ตามมีการพบวัตถุประสงค์ที่เร่งด่วนสำหรับโปรแกรมเหล่านี้ พิจารณางบทุบตี/some/program || /bin/trueซึ่งจะเสมอบูลประเมินให้เป็นจริง ( $? = 0) /some/programไม่ว่าการกลับมาของ

การใช้งานฉุกเฉิน/bin/falseตามที่คุณระบุเป็นเปลือก null สำหรับผู้ใช้ที่ไม่ได้รับอนุญาตให้เข้าสู่ระบบระบบในกรณีนี้จะทำงานเหมือนกับว่าเชลล์ไม่สามารถทำงานได้

POSIX (แม้ว่าฉันอาจจะผิดและอาจ SUS) จำกัด ทั้งสองคำสั่งเหล่านี้เพื่อทำสิ่งอื่นนอกจากคืนค่าบูลีนที่เหมาะสม

/sbin/nologinเป็นยูทิลิตี้ BSD ซึ่งมีพฤติกรรมคล้ายกันกับ/bin/false(คืนค่าบูลีนเท็จ) แต่พิมพ์เอาต์พุตเช่นกันตามที่/bin/falseถูกห้ามไม่ให้ทำ นี่ควรจะช่วยให้ผู้ใช้เข้าใจสิ่งที่เกิดขึ้นแม้ว่าในทางปฏิบัติเทอร์มินัลอีมูเลเตอร์จำนวนมากจะปิดเมื่อเชลล์ยกเลิกการแสดงข้อความทั้งหมด แต่อ่านไม่ได้ในบางกรณี

มีจุดประสงค์เพียงเล็กน้อย/sbin/nologinในการแสดง/etc/shellsรายการ ผลมาตรฐาน/etc/shellsคือการแสดงรายการโปรแกรมที่อนุญาตให้ใช้chshเมื่อผู้ใช้เปลี่ยนเชลล์ของตนเอง (และไม่มีเหตุผลที่น่าเชื่อถือในการเปลี่ยนเชลล์ของคุณเอง/sbin/nologin) superuser สามารถเปลี่ยนเชลล์ของใครก็ได้เป็นอะไรก็ได้ อย่างไรก็ตามคุณอาจต้องการแสดงรายการทั้งสอง/sbin/nologinและ/bin/falseใน/etc/rshซึ่งจะห้ามผู้ใช้ที่มีเปลือกเหล่านี้จากการเปลี่ยนเปลือกของพวกเขาโดยใช้chshในเหตุการณ์ที่โชคร้ายที่พวกเขาได้รับเปลือก

FTP daemons อาจไม่อนุญาตการเข้าถึงผู้ใช้ที่มีเชลล์ที่ไม่ได้อยู่ใน / etc / shells หรือพวกเขาอาจใช้ตรรกะอื่น ๆ ที่พวกเขาต้องการ หลีกเลี่ยงการเรียกใช้ FTP ในทุกกรณีเพราะsftp(ซึ่งมีฟังก์ชันการทำงานที่คล้ายกัน) นั้นคล้ายกัน แต่มีความปลอดภัย เว็บไซต์บางแห่งใช้/sbin/nologinการปิดใช้งานการเข้าถึงเปลือกขณะที่ช่วยให้การเข้าถึง SFTP /etc/shellsโดยวางไว้ใน นี่อาจเป็นการเปิดลับๆถ้าผู้ใช้ได้รับอนุญาตให้สร้าง cronjobs

ในทั้งสองกรณีscpจะไม่ทำงานกับเชลล์ที่ไม่ถูกต้อง scponlyสามารถใช้เป็นเชลล์ในอินสแตนซ์นี้

นอกจากนี้ตัวเลือกของเชลล์จะมีผลกับการทำงานของsu -(AKA su -l) โดยเฉพาะอย่างยิ่งการส่งออกของ/sbin/nologinจะถูกพิมพ์ไปยัง stdout ถ้ามันเป็นเปลือก; กรณีนี้ไม่สามารถเกิด/bin/falseขึ้นได้ ในทั้งสองกรณีคำสั่งที่รันด้วยsu -clจะล้มเหลว

ในที่สุดคำตอบ:

หากต้องการปิดใช้งานบัญชีขึ้นอยู่กับสิ่งเหล่านี้ แต่ตั้งค่าเชลล์เป็นเพื่อ/sbin/nologinให้ข้อมูล (เว้นแต่/sbin/nologinจะอยู่ใน/etc/shellsจุดที่คุณควรใช้/bin/falseซึ่งไม่ควรเป็น) แต่ตั้งค่าเขตข้อมูลรหัสผ่านใน/etc/passwdการ!ซึ่งมีการประกันโดยcryptถูกต้องสำหรับรหัสผ่านที่ไม่มี พิจารณาการตั้งค่าแฮชใน/etc/shadowวิธีเดียวกันเพื่อหลีกเลี่ยงข้อบกพร่อง passwd -lจะทำสิ่งนี้เพื่อคุณ

วิธีที่สามในการปิดการใช้งานบัญชีคือการตั้งค่าฟิลด์วันหมดอายุของบัญชีเป็นวันที่โบราณ (เช่นusermod --expiredate 1) วิธีนี้จะป้องกันการลงชื่อเข้าใช้ในกรณีที่การตั้งค่าของคุณอนุญาตให้ผู้ใช้รับรองความถูกต้องกับบัญชี unix ของพวกเขาโดยไม่ต้องใช้รหัสผ่านและบริการที่พวกเขาใช้นั้นไม่จำเป็นต้องใช้เชลล์


9
ในขณะที่คำตอบนี้สรุปได้อย่างสมบูรณ์แบบในตัวเลือกที่แตกต่างกัน (และตอบคำถามได้) ผมรู้สึกว่าจำเป็นต้องให้ชี้ไปที่ทรัพยากรที่มีประโยชน์สำหรับกรณีการใช้งานนี้ซึ่งมีอยู่อย่างน้อยในหุ้นที่เก็บ Debian ในที่แพคเกจ:titantools noshellpseudo-shell นี้ให้ความสามารถในการตรวจสอบการเข้าสู่ระบบ syslog พยายามใช้บัญชีที่noshellเป็นเชลล์ในขณะที่ยังคงไม่อนุญาตการเข้าถึง
dawud

1
มันไม่ได้เป็นหลักฐาน แต่ในความเป็นจริงค่อนข้างบ่อยในหมู่ผู้ดูแลระบบของวินเทจ (ไอ) เพื่อใช้/bin/falseเป็นเปลือกเข้าสู่ระบบสำหรับผู้ที่ไม่ควรเข้าสู่ระบบ
MadHatter

2
Apocryphal ในแง่ที่ว่ามันไม่ได้เป็นความตั้งใจเดิมที่ใช้ ฉันไม่ได้พูดสมัย ฉันเห็นมันทุกวัน :)
เหยี่ยว Momot

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

3
sshd มีการบันทึกไว้เพื่อตรวจสอบว่าบัญชีที่ถูกล็อคด้วยวิธีการบางอย่าง (แฮชรหัสผ่านเริ่มต้นด้วย! จะกล่าวถึงเฉพาะ) แม้จะมี pubkey auth
Falcon Momot

13

หลังจากทำการวิจัยเกี่ยวกับเรื่องนี้แล้ววิธีการที่คุณใช้ขึ้นอยู่กับสิ่งที่คุณต้องล็อค หากผู้ใช้ล็อกอินด้วยชุดนี้ไปที่เชลล์พวกเขาจะได้รับข้อความแสดงผลของThis account is currently unavailable.หมายเหตุว่าคุณสามารถเปลี่ยนแปลงได้โดยการสร้างไฟล์/etc/nologin.txtอย่างน้อยในอนุพันธ์ของ RHEL

อย่างที่คุณทราบ/bin/falseไม่ใช่เปลือก วิธีการทำงานคือส่งคืนค่าเท็จซึ่งล็อกเอาต์ทันทีหลังจากออกจากไบนารี โปรดทราบว่า/bin/trueจะบรรลุผลเช่นเดียวกัน

เกี่ยวกับคำถาม FTP ของคุณ: ใช่คุณถูกต้องในการมีชุดเชลล์ที่/sbin/nologinจะช่วยให้ผู้ใช้สามารถเข้าสู่ระบบ FTP ในขณะที่/bin/falseหรือ/bin/trueจะป้องกันไม่ให้ผู้ใช้เข้าสู่บริการใด ๆ

ดังนั้น/bin/falseหรือ/bin/trueดีที่สุดเพื่อป้องกันผู้ใช้จากการเข้าสู่บริการใด ๆ ในขณะที่/sbin/nologinยังคงให้ผู้ใช้เข้าสู่บริการอื่น ๆ นอกเหนือจาก SSH หรือคอนโซลท้องถิ่นในขณะที่ให้ข้อเสนอแนะกับผู้ใช้ว่าบัญชีไม่ได้ใช้งานและจะใช้ดีที่สุดเมื่อ SSH / ท้องถิ่นเท่านั้น คอนโซลจะต้องถูกล็อคออก


2

อืมมีใครพยายามที่จะพิสูจน์ว่า / bin / false จะไม่อนุญาตให้เข้าถึง FTP หรือไม่

ฉันเพิ่งเปลี่ยนเชลล์ผู้ใช้เป็น / bin / false และสามารถใช้งาน FTP ได้อย่างดี

ฉันใช้ / dev / null เพื่อปิดกั้นผู้ใช้อย่างสมบูรณ์ (ดียกเว้นอีเมลพวกเขายังคงสามารถใช้ POP3 ได้)


คุณมีมัน/etc/shellsหรือไม่? เซิร์ฟเวอร์ FTP ของคุณมีการกำหนดค่าอย่างไร?
Michael Hampton

ไม่มีกฎที่บอกว่าผู้ใช้ต้องการเชลล์เพื่อเข้าสู่ FTP เซิร์ฟเวอร์
Petter H

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