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


69

Tôi thường nghe nói rằng nên tắt tài khoản người dùng bằng cách đặt shell của nó /bin/false. Nhưng, trên các hệ thống Linux hiện tại của tôi, tôi thấy rằng một số lượng lớn các tài khoản hiện có (tất cả đều là tài khoản dịch vụ) có vỏ /sbin/nologinthay thế.

Tôi thấy từ trang man /sbin/nologinin thông báo cho người dùng nói rằng tài khoản bị vô hiệu hóa, và sau đó thoát. Có lẽ /bin/falsesẽ không in bất cứ điều gì.

Tôi cũng thấy rằng /sbin/nologinđược liệt kê trong /etc/shells, trong khi /bin/falsekhông.

Trang hướng dẫn nói rằng FTP sẽ vô hiệu hóa quyền truy cập cho người dùng với vỏ không được liệt kê trong đó /etc/shellsvà ngụ ý rằng các chương trình khác có thể làm tương tự. Điều đó có nghĩa là ai đó có thể FTP với một tài khoản có /sbin/nologinvỏ như vậy không?

Sự khác biệt ở đây là gì? Tôi nên sử dụng một trong những thứ này để vô hiệu hóa tài khoản người dùng và trong trường hợp nào? Một danh sách /etc/shellscó ảnh hưởng gì khác ?



1
Như thông tin chung mà hoạt động. Tôi đang suy nghĩ cụ thể từ góc độ quản trị hệ thống.
Michael Hampton

Chỉ có nghĩa là một nền tảng.
dmourati

Câu trả lời:


70

/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/nologin/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ỏ.


9
Mặc dù câu trả lời này tóm tắt hoàn hảo các tùy chọn khác nhau (và trả lời câu hỏi), tôi cảm thấy cần phải chỉ ra một tài nguyên hữu ích cho trường hợp sử dụng này, có sẵn ít nhất trong kho lưu trữ Debian, trong titantoolsgói : noshell. Shell giả này cung cấp khả năng kiểm toán, đăng nhập vào syslog để sử dụng các tài khoản với noshelltư cách là vỏ của nó, trong khi vẫn không cho phép truy cập.
dawud

1
Nó không phải là apocryphal, nhưng thực tế khá phổ biến trong số các sysadins của một loại cổ điển nào đó (ho), để sử dụng /bin/falselàm vỏ đăng nhập cho những người không nên đăng nhập.
MadHatter

2
Apocryphal theo nghĩa đó không phải là mục đích sử dụng ban đầu. Tôi đã không nói lỗi thời; Tôi thấy nó mỗi ngày :)
Falcon Momot

1
Vô hiệu hóa tài khoản bằng mật khẩu không hợp lệ không hoạt động quá tốt với ssh. Nếu trước đây người dùng đã quản lý để thiết lập xác thực khóa công khai thì anh ta có thể vào được bằng mọi cách.
joshudson

3
sshd được ghi lại để kiểm tra xem các tài khoản bị khóa theo một số cách nhất định (băm mật khẩu bắt đầu bằng! được đề cập cụ thể) ngay cả với pubkey auth.
Falcon Momot

13

Sau khi thực hiện một số nghiên cứu về điều này, phương pháp bạn sử dụng phụ thuộc vào những gì bạn phải khóa. Nếu người dùng đăng nhập với bộ này vào shell thì họ sẽ nhận được thông báo hiển thị với hiệu ứng của This account is currently unavailable.Lưu ý rằng bạn có thể thay đổi điều này bằng cách tạo tệp /etc/nologin.txtít nhất trên các dẫn xuất của RHEL.

Như bạn biết /bin/falsekhông phải là một cái vỏ. Cách chúng hoạt động là nó trả về false, nó sẽ thoát ra ngay sau khi thoát nhị phân. Lưu ý rằng /bin/truesẽ đạt được hiệu quả tương tự.

Về câu hỏi FTP của bạn: Có, bạn đã đúng khi đặt shell /sbin/nologinsẽ cho phép người dùng đăng nhập vào FTP trong khi /bin/falsehoặc /bin/truesẽ hoàn toàn ngăn người dùng đăng nhập vào bất kỳ dịch vụ nào .

Do đó, /bin/falsehoặc /bin/truetốt nhất là ngăn người dùng đăng nhập vào bất kỳ dịch vụ nào, trong khi /sbin/nologinvẫn sẽ cho phép người dùng đăng nhập vào các dịch vụ khác ngoài SSH hoặc bảng điều khiển cục bộ trong khi cung cấp phản hồi cho người dùng rằng tài khoản không hoạt động và được sử dụng tốt nhất khi chỉ SSH / cục bộ giao diện điều khiển cần phải được khóa.


2

Ừm, có ai đã cố chứng minh rằng / bin / false sẽ không cho phép truy cập FTP không?

Tôi vừa thay đổi trình bao của người dùng thành / bin / false và có thể FTP tốt.

Tôi sử dụng / dev / null để khóa hoàn toàn người dùng (tốt, ngoại trừ email, họ vẫn có thể POP3).


Bạn đã có nó trong /etc/shells? Máy chủ FTP của bạn được cấu hình như thế nào?
Michael Hampton

không có quy tắc nào nói rằng người dùng cần shell để đăng nhập vào máy chủ FTP.
Petter H

Nó sẽ không cho phép nó trên một số daemon FTP, và không phải cái khác. Có khá nhiều phương sai về chức năng giữa những cái khác nhau. Việc triển khai cổ điển sẽ không cho phép truy cập vào bất kỳ ai không có vỏ, nhưng điều đó không có nghĩa là tất cả các triển khai đều phải.
Falcon Momot
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.