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


169

Về mặt kỹ thuật, trừ khi pamđược thiết lập để kiểm tra vỏ của bạn với pam_shellscả hai thứ này thực sự không thể ngăn chặn đăng nhập của bạn, nếu bạn không ở trên vỏ. 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


Đường dẫn /bin/falsenên tồn tại ở mọi nơi nhưng không phải /sbin/nologin: '/ sbin / nologin': Không có tệp hoặc thư mục như vậy. Có ai biết tại sao nó lại /usr/sbin/nologinthay vì /sbin/nologintrên Debian và Ubuntu không?
baptx

4
Tôi tò mò tại sao / bin / false mất 21k mã để trả về mã trả về "1"! (và / sbin / nologin chỉ mất 4,7k)
Mark Stewart


1
@nxnev Vâng, tôi đã không nghĩ về chi phí hoạt động của ELF. Và từ thời IBM cũ của tôi, có một chương trình IEFBR14 là một hướng dẫn lắp ráp mã op đơn giản: BR 14 - Chi nhánh để đăng ký 14, sẽ chấm dứt chương trình với mã trả về được đặt thành bất cứ điều gì trong đăng ký 14!
Mark Stewart

Câu trả lời:


198

Khi /sbin/nologinđược đặt làm vỏ, nếu người dùng có vỏ đó đă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 các tập tin /etc/nologin.txt.

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

Nhìn vào nologintrang người đàn ông, 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 falseđó. Việc sử dụng falsenhư một vỏ có lẽ chỉ là một quy ước được thực hiện từ những ngày đầu của UNIX.

nologinlà 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ả hai nologinfalsesẽ có kết quả cuối cùng giống nhau của một người không có vỏ và không thể ssh in.


10
/usr/sbin/nologincho các bản phân phối dựa trên Debian.
Diemo

3
Ít nhất việc triển khai BSD cũng ghi lại các lần thử đăng nhập vào syslog như đã thấy trong opensource.apple.com/source/system_cmds/system_cmds-735/ , trong khi / bin / false sẽ không đăng nhập bất cứ điều gì
Sergiy Kolodyazhnyy

28

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

(Tôi nghĩ "hợp lệ" có nghĩa là trạng thái thoát của nó là 0, nhưng /etc/shellscũ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.)


1
vâng, đó có lẽ là một phần của chương trình ftp sử dụng pam và pam sử dụng pam_shells mà như bạn đã nói, kiểm tra /etc/shells. Chỉ là một phỏng đoán ... tôi có thể sai.
xenoterracide

4
Tôi vừa kiểm tra cả Ubuntu 8.04 và 14.04. Lệnh nologin thoát với trạng thái 1 tương tự sai và không có lệnh true, false hoặc nologin nào được bao gồm trong / etc / shell. Nếu có, một người dùng có thể sử dụng chsh để chọn một vỏ như vậy và tự khóa tài khoản của mình.
chim cánh cụt359 21/07/2015

12

/bin/falselà một lệnh hệ thống được sử dụng bất cứ lúc nào bạn cần chuyển một lệnh đến 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 /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 một 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ế một vỏ và tạo ra đầu ra phàn nàn rằng bạn không thể đăng nhập. Trước khi nó tồn tại, nó thường được sử dụng /bin/falsecho 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.


4
đáng lưu ý rằng /bin/true/bin/falsekhông phải lúc nào cũng là những gì bạn sẽ nhận được trong một kịch bản shell. Trong zsh truefalseđược tích hợp sẵn, trong đó bashsử dụng các /bin/*phiên bản
xenoterracide

4

Trên máy của tôi, nologinhiển thị luôn cùng một thông báo, bằng tiếng Anh, bỏ qua các đối số. /bin/falseđáp ứng --version--helptrong 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, nologinsẽ 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.


4
có vẻ như có lẽ falsenhiều hơn cho các tài khoản hệ thống không có người dùng thực và nologindành cho các tài khoản bị vô hiệu hóa.
xenoterracide

1
HĐH của bạn là gì? nologinPhiên bản Centos không có đối số, nhưng có thể đọc tin nhắn từ /etc/nologin.txt.
Alexander Gonchiy

3

/ 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


2

Trên linux, /sbin/nologinxuất phát từ dự án linux-linux , trong khi /bin/falselà 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ó vỏ bọc của họ đang đăng nhập. Các lệnh linux đến từ BSD, nơi chúng dường như có một lịch sử lâu dài khác nhau. FreeBSD falsechỉ cần trả về 1 , trong khi nologinkiểm tra để đảm bảo rằng nó đang chạy trên TTY và gửi một thông báo 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 ( falsethự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ự.


1

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ự định 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 cho một tài khoản. (Nó được sử dụng một vỏ đăng nhập.)

-4

Cả hai đều thực hiện ít nhiều cùng một công việc nhưng /bin/falseđều hữu ích cho người dùng không có đặc quyền. Mặt khác, /sbin/nologindành cho người dùng đặc quyền.


4
Oh, làm thế nào bạn đi đến kết luận đó?
fpmurphy

Có lẽ anh ta đã nhìn vào /etc/passwd. Tôi vừa mới xem xét /etc/passwdmột bản Debian mới cài đặt. Trên hộp này, gần như tất cả các tài khoản hệ thống (id người dùng <1000) đều có /usr/sbin/nologinvỏ, với một vài ngoại lệ. Xin lưu ý rằng tôi không đồng ý với câu trả lời của @ pythondetective. Tôi chỉ đang suy đoán những gì có thể đã dẫn anh ta đến kết luận này. Nhận xét của tôi là một chút muộn, mặc dù.
Binarus

Không! shell đăng nhập mặc định không giống như đặc quyền.
MUY Bỉ

không phải là một "thám tử" vĩ đại
Emobe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.