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