/bin/falselà một chương trình tiện ích, đồng hành với /bin/true, rất hữu ích trong một số ý nghĩa trừu tượng để đảm bảo rằng unix là tính năng đầy đủ. Tuy nhiên, mục đích nổi bật cho các chương trình này đã được tìm thấy; hãy xem xét câu lệnh BASH /some/program || /bin/true, sẽ luôn luôn đánh giá boolean thành true ( $? = 0) bất kể sự trở lại của /some/program.
Việc sử dụng khẩn cấp /bin/false, như bạn đã xác định, là shell null cho người dùng không được phép đăng nhập. Hệ thống trong trường hợp này sẽ hoạt động chính xác như thể shell không chạy được.
POSIX (mặc dù tôi có thể sai và có thể các SUS) ràng buộc cả hai lệnh này để thực hiện chính xác không gì khác hơn là trả về giá trị boolean thích hợp.
/sbin/nologinlà một tiện ích BSD có hành vi tương tự /bin/false(trả về boolean false), nhưng cũng in ra kết quả, cũng như /bin/falsebị cấm. Điều này được cho là để giúp người dùng hiểu những gì đã xảy ra, mặc dù trong thực tế, nhiều trình giả lập thiết bị đầu cuối sẽ đơn giản đóng lại khi shell kết thúc, hiển thị tất cả thông điệp nhưng không thể đọc được trong mọi trường hợp.
Có rất ít mục đích để liệt kê /sbin/nologintrong /etc/shells. Hiệu quả tiêu chuẩn của /etc/shellsviệc liệt kê các chương trình được phép sử dụng chshkhi người dùng thay đổi vỏ của chính họ (và không có lý do đáng tin cậy để thay đổi vỏ của bạn thành /sbin/nologin). Superuser có thể thay đổi vỏ của bất cứ ai. Tuy nhiên, bạn có thể muốn liệt kê cả /sbin/nologinvà /bin/falsetrong /etc/rsh, điều này sẽ cấm người dùng có các vỏ này thay đổi vỏ của họ bằng cách sử dụng chshtrong trường hợp không may là họ có được vỏ.
Daemon FTP có thể không cho phép truy cập vào người dùng có shell không nằm trong / etc / shell hoặc họ có thể sử dụng bất kỳ logic nào họ muốn. Chạy FTP là phải tránh trong mọi trường hợp vì sftp(cung cấp chức năng tương tự) tương tự nhưng an toàn. Một số trang web sử dụng /sbin/nologinđể vô hiệu hóa quyền truy cập shell trong khi cho phép truy cập sftp bằng cách đặt nó vào /etc/shells. Điều này có thể mở một cửa hậu nếu người dùng được phép tạo cronjobs.
Trong cả hai trường hợp, scpsẽ không hoạt động với một vỏ không hợp lệ. scponlycó thể được sử dụng như một vỏ trong trường hợp này.
Ngoài ra, sự lựa chọn vỏ ảnh hưởng đến hoạt động của su -(AKA su -l). Đặc biệt, đầu ra của /sbin/nologinsẽ được in ra thiết bị xuất chuẩn nếu là vỏ; đây không thể là trường hợp với /bin/false. Trong cả hai trường hợp lệnh chạy với su -clsẽ thất bại.
Cuối cùng, câu trả lời:
Để vô hiệu hóa một tài khoản, tùy thuộc vào một trong hai tài khoản này, nhưng đặt shell thành /sbin/nologincho mục đích thông tin (trừ khi /sbin/nologinở trong /etc/shellsthời điểm nào bạn nên sử dụng /bin/false, không nên sử dụng ). Thay vào đó, hãy đặt trường mật khẩu /etc/passwdthành !, được đảm bảo cryptlà hợp lệ vì không có mật khẩu. Xem xét việc thiết lập hàm băm theo /etc/shadowcùng một cách để tránh lỗi. passwd -lsẽ làm điều này cho bạn.
Cách thứ ba để vô hiệu hóa tài khoản là đặt trường ngày hết hạn tài khoản thành ngày cũ (ví dụ usermod --expiredate 1:). Điều này sẽ ngăn đăng nhập trong trường hợp thiết lập của bạn cho phép người dùng xác thực với tài khoản unix của họ mà không cần mật khẩu và dịch vụ họ đang sử dụng không yêu cầu phải có vỏ.