/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 ของพวกเขาโดยไม่ต้องใช้รหัสผ่านและบริการที่พวกเขาใช้นั้นไม่จำเป็นต้องใช้เชลล์