it-swarm-vi.com

Sự khác biệt giữa / sbin / nologin và / bin / false

Về mặt kỹ thuật, trừ khi pam được thiết lập để kiểm tra Shell của bạn với pam_shells không ai trong số này thực sự có thể ngăn đăng nhập của bạn, nếu bạn không ở trên Shell. Trên hệ thống của tôi, chúng thậm chí có kích thước khác nhau, vì vậy tôi nghi ngờ chúng thực sự làm gì đó. Vậy sự khác biệt là gì? Tại sao cả hai tồn tại? Tại sao tôi lại dùng cái này?

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin
185
xenoterracide

Khi nào /sbin/nologin được đặt là Shell, nếu người dùng có Shell đó đăng nhập, họ sẽ nhận được một thông báo lịch sự với nội dung 'Tài khoản này hiện không khả dụng.' Thông báo này có thể được thay đổi với tệp /etc/nologin.txt.

/bin/false chỉ là một nhị phân ngay lập tức thoát ra, trả về false, khi nó được gọi, vì vậy khi ai đó có false khi Shell đăng nhập, chúng sẽ đăng xuất ngay lập tức khi false thoát. Đặt Shell thành /bin/true có tác dụng tương tự là không cho phép ai đó đăng nhập nhưng false có thể được sử dụng như một quy ước đối với true vì việc truyền đạt khái niệm người đó không có Shell tốt hơn nhiều.

Nhìn vào trang man của nologin, nó nói rằng nó được tạo ra trong 4.4 BSD (đầu những năm 1990) vì vậy nó đã xuất hiện rất lâu sau khi false được tạo. Việc sử dụng false làm Shell có lẽ chỉ là một quy ước được thực hiện từ những ngày đầu của UNIX.

nologin là tùy chọn thân thiện hơn với người dùng, với một thông báo có thể tùy chỉnh được cung cấp cho người dùng đang cố gắng đăng nhập, vì vậy về mặt lý thuyết bạn sẽ muốn sử dụng nó; nhưng cả nologinfalse sẽ có cùng kết quả là ai đó không có Shell và không thể ssh in.

212
Mark McKinstry

Một số máy chủ FTP sẽ cho phép bạn truy cập FTP chỉ khi bạn có Shell hợp lệ. /sbin/nologin được coi là Shell hợp lệ, trong khi /bin/false không phải.

(Tôi nghĩ "hợp lệ" có nghĩa là trạng thái thoát của nó là 0, nhưng /etc/shells cũng có thể đi vào nó, nó có thể phụ thuộc vào hệ thống, phần mềm FTP và cấu hình của bạn.)

29
Mikel

/bin/false là một lệnh hệ thống được sử dụng bất cứ lúc nào bạn cần truyền lệnh cho một chương trình không nên làm gì hơn là thoát với một lỗi. Đó là người bạn đồng hành với /bin/true. Cả hai đều là các tiện ích POSIX rất cũ và tiêu chuẩn và không tạo ra bất kỳ đầu ra nào theo định nghĩa. true đôi khi được sử dụng cho tập lệnh Shell sẽ lặp vô hạn, như:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologin được thiết kế đặc biệt để thay thế Shell và tạo đầu ra phàn nàn rằng bạn không thể đăng nhập. Trước khi nó tồn tại, người ta thường sử dụng /bin/false cho người dùng giả, nhưng có thể gây nhầm lẫn vì người dùng không biết tại sao họ lại khởi động.

14
penguin359

Trên máy của tôi, nologin luôn hiển thị cùng một thông báo, bằng tiếng Anh, bỏ qua các đối số. /bin/false đáp ứng --version--help trong ngôn ngữ được chỉ định bởi $LC_CTYPE. Khác với những khác biệt mỹ phẩm, chúng có tác dụng tương tự.

Khả năng sử dụng, nologin sẽ tốt hơn nếu nó được sử dụng trên tài khoản của một người thực sự nói tiếng Anh. An ninh-khôn ngoan, không có sự khác biệt.

/ bin/false chỉ công việc là thoát với mã thoát khác không.

Hãy thử nó tại dòng lệnh:

$:> /bin/false
$:> echo $?
1
$:>

Một số tổ chức sử dụng/bin/false trong trường Shell của tệp mật khẩu. Nếu người dùng cố gắng đăng nhập, Shell là/bin/false, vì vậy họ sẽ thoát ngay lập tức

3
shellter

Trên linux, /sbin/nologin xuất phát từ dự án produc-linux , trong khi /bin/false là một phần của GNU Coreutils . Chúng phục vụ các vai trò khác nhau và nologin có tùy chọn in một tin nhắn cho những người có nó là Shell của họ đang đăng nhập. Các lệnh linux đến từ BSD, nơi họ dường như có một lịch sử lâu dài khác nhau. FreeBSD false chỉ trả về 1 , trong khi nologin kiểm tra để đảm bảo rằng nó chạy trên TTY và gửi tin nhắn tới syslog trong các lần thử đăng nhập. Các phiên bản linux phức tạp hơn một chút (false thực hiện tất cả các loại công cụ thú vị với quốc tế hóa cho đầu ra của --help, tôi giả sử) nhưng về cơ bản thực hiện theo cách tương tự.

3
jsbillings

Chúng có thể là cùng một chương trình, nhưng chúng có ý nghĩa khác nhau. Tên chương trình nói lên tất cả.

  • / bin/false được dùng để trả về giá trị sai. Nó được chạy như chương trình.
  • / bin/nologin được dự định cho người dùng biết rằng không được phép đăng nhập vào tài khoản. (Nó được sử dụng Shell đăng nhập.)
1
BillThor