Vô hiệu hóa vỏ người dùng vì lý do bảo mật


58

Chúng tôi có một số tài khoản người dùng mà chúng tôi tạo cho các tác vụ tự động yêu cầu quyền truy cập chi tiết, chẳng hạn như chuyển tệp qua các hệ thống, giám sát, v.v.

Làm cách nào để chúng tôi khóa các tài khoản người dùng này để những "người dùng" này không có vỏ và không thể đăng nhập? Chúng tôi muốn ngăn khả năng ai đó có thể SSH vào một trong những tài khoản người dùng này.

Câu trả lời:


63

Bạn có thể sử dụng usermodlệnh để thay đổi vỏ đăng nhập của người dùng.

usermod -s /sbin/nologin myuser

hoặc là

usermod -s /usr/sbin/nologin myuser

Nếu hệ điều hành của bạn không cung cấp / sbin / nologin, bạn có thể đặt shell thành lệnh NOOP, chẳng hạn như / bin / false:

usermod -s /bin/false myuser

1
/bin/falsecó vẻ phổ biến hơn /bin/true.
jw013

@ jw013 Tôi cập nhật câu trả lời của mình, nhưng cả hai sẽ hoạt động tốt.
jordanm

1
Lưu ý rằng trên Debians, nologinthực sự phải được tìm thấy tại/usr/sbin/nologin
xebeche

đây là ý tưởng đầu tiên của tôi, thật không may, việc sử dụng 'hợp lệ' một số tài khoản người dùng bị vô hiệu hóa khi cài đặtnologin
Javier

2
@ jw013 Thật ra tôi có /usr/local/bin/maybecái /dev/urandomly nào chọn giữa hai cái đó. Có lẽ tôi nên sử dụng nó: D
hegez

21

Thay đổi vỏ đăng nhập không nhất thiết ngăn người dùng xác thực (ngoại trừ trong một số dịch vụ kiểm tra xem vỏ của người dùng có được đề cập đến không /etc/shells).

Mọi người vẫn có thể xác thực các dịch vụ khác nhau mà hệ thống của bạn cung cấp cho người dùng unix và vẫn có thể được phép thực hiện một số hành động mặc dù có thể không chạy trực tiếp các lệnh tùy ý.

Thay đổi shell thành /bin/falsehoặc /usr/sbin/nologinsẽ chỉ ngăn chúng chạy các lệnh trên các dịch vụ có thể được sử dụng để chạy các lệnh (đăng nhập bảng điều khiển, ssh, telnet, rlogin, rexec ...), do đó chỉ ảnh hưởng đến ủy quyền cho một số dịch vụ.

Chẳng sshhạn, điều đó vẫn cho phép họ thực hiện chuyển tiếp cổng.

passwd -lsẽ vô hiệu hóa xác thực mật khẩu, nhưng người dùng vẫn có thể được phép sử dụng các phương thức xác thực khác (như authorized_keysvới ssh).

Với pamLinux, ít nhất, bạn có thể sử dụng pam_shellsmô-đun để hạn chế xác thực hoặc ủy quyền cho người dùng có vỏ được phép (những thứ được đề cập trong /etc/shells). Đối với ssh, bạn sẽ muốn thực hiện ở cấp ủy quyền ( account) như để sshdsử dụng xác thực pam cùng với các phương thức xác thực khác (như authorized_keys) hoặc bạn có thể thực hiện với các sshd_configchỉ thị trong /etc/ssh/sshd_config(như AllowUsersvà bạn bè).

Coi chừng rằng việc thêm một số hạn chế trong ủy quyền pam toàn cầu sẽ có khả năng ngăn croncông việc chạy như những người dùng đó.


Cảm ơn bạn. Sau đó, bạn muốn giới thiệu lược đồ nào sau đây: Tôi cần tạo một người dùng cần truy cập vào thư mục nhà của mình thông qua sftp hoặc sshfs, nhưng anh ta không thể đăng nhập bằng shell. Điều đó thậm chí có thể? Tôi cảm thấy như các mô-đun PAM có thể là giải pháp goto nhưng tôi không hiểu tất cả:|
Stphane 7/12/2016


4

Bạn chỉnh sửa các /etc/passwdtập tin và thay đổi người dùng shell từ /bin/bash, hoặc /bin/shđể/sbin/nologin


8
Câu trả lời là chính xác, nhưng không bao giờ nên chỉnh sửa bằng tay / etc / passwd.
jordanm

3
Tại sao? Đây là điều chúng tôi đã làm miễn là tôi là một quản trị viên hệ thống chuyên nghiệp. (khoảng 20 năm nay) Trên thực tế, không phải tất cả các bản phân phối linux / unix đều có các công cụ để sửa đổi / etc / passwd hoặc / etc / group .. Trừ khi bạn sử dụng một cái gì đó như Yast hoặc Smit, đó là những công cụ lưu trữ cài đặt và ghi đè chúng không có hại trong việc chỉnh sửa tay.
Mark Cohen

6
Dễ dàng hơn nhiều để thực hiện một lỗi "phá vỡ đăng nhập của mọi người" bằng cách chỉnh sửa bằng tay, thay vì một người dùng.
jordanm

2
@jordanm: có vipwloại ngăn ngừa sai lầm đó.
eudoxos

4

Đầu tiên, vô hiệu hóa mật khẩu, sử dụng passwd -l username.

Cũng lưu ý trong mantrang passwdcho tùy chọn -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

1
Điều này có thể không được mong muốn. Họ có thể cần một mật khẩu trên tài khoản hệ thống của họ để truy cập email chẳng hạn.
jordanm

1
Một số hệ thống email cho phép sử dụng các cơ chế mật khẩu của riêng họ. Tôi sử dụng Dovecot và Exim với mật khẩu chỉ email. Điều này cho phép sử dụng webmail trên các máy chủ Tôi sẽ không sử dụng mật khẩu hệ thống của mình. Tên miền email ảo yêu cầu mật khẩu của riêng họ vì chúng không được kết nối với hệ thống mật khẩu máy chủ.
BillThor

2

Bạn có thể sử dụng lệnh chsh:

~# chsh myuser

Nhập chi tiết vỏ mới khi được yêu cầu:

Login Shell [/bin/sh]: /bin/nologin

Hoặc phiên bản ngắn hơn:

~# chsh myuser -s /bin/nologin

0

Để ngăn người dùng đăng nhập và thậm chí xác thực qua ssh cho phép chuyển tiếp cổng (như được mô tả ở đây Stephane), tôi sửa đổi người dùng tương tự như nobodyngười dùng của hệ thống :

  • xác thực mật khẩu bị chặn trong /etc/shadow(có *hoặc !!tại trường thích hợp)
  • vỏ bị vô hiệu hóa trong /etc/passwd(ví dụ /sbin/nologintại trường thích hợp)
  • thư mục chỉ đọc tại nhà /etc/passwd(ví dụ: /tại trường thích hợp)
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.