/bin/false
là 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/nologin
là 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/false
bị 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/nologin
trong /etc/shells
. Hiệu quả tiêu chuẩn của /etc/shells
việc liệt kê các chương trình được phép sử dụng chsh
khi 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/nologin
và /bin/false
trong /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 chsh
trong 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, scp
sẽ không hoạt động với một vỏ không hợp lệ. scponly
có 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/nologin
sẽ đượ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 -cl
sẽ 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/nologin
cho mục đích thông tin (trừ khi /sbin/nologin
ở trong /etc/shells
thờ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/passwd
thành !
, được đảm bảo crypt
là 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/shadow
cùng một cách để tránh lỗi. passwd -l
sẽ 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ỏ.