Làm cách nào để ngăn người dùng đăng nhập, nhưng cho phép, su su - người dùng trong Linux?


93

Làm thế nào để bạn cho phép người dùng đăng nhập bằng " su - người dùng " nhưng ngăn người dùng đăng nhập bằng SSH?

Tôi đã cố gắng đặt shell thành /bin/falsenhưng khi tôi cố gắng suthì nó không hoạt động.

Có một số cách chỉ cho phép đăng nhập bằng cách su?

SSH có phải là AllowUsercon đường để đi? (tôi sẽ làm điều này như thế nào nếu đó là cách để đi)

Câu trả lời:


113

Bạn có thể sử dụng AllowUsers / Allowgroup nếu bạn chỉ có một vài người dùng / nhóm được phép đăng nhập thông qua ssh hoặc DenyUsers / Denygroup nếu bạn chỉ có một vài người dùng / nhóm không được phép đăng nhập. Lưu ý rằng điều này chỉ hạn chế đăng nhập qua ssh, các cách đăng nhập khác (console, ftp, ...) vẫn có thể. Bạn cần thêm các tùy chọn này vào tệp / etc / ssh / sshd_config cho hầu hết các cài đặt ssh.

Nếu bạn đã đặt shell đăng nhập thành / bin / false, bạn có thể sử dụng su -s /bin/bash user(thay thế / bin / bash bằng shell bạn chọn)


cảm ơn rất nhiều Tôi không mong đợi nhận được hơn 2 lượt upvote cho câu hỏi của mình :) Tôi thích cấu trúc "su -s ..." rất nhiều và giao diện điều khiển / ftp là một điểm tốt. Tôi đã thực sự sau một cái gì đó như "su -s".
NoozNooz42

3
Thủ thuật su -s là vàng. Tôi sử dụng tất cả thời gian cho các tài khoản hệ thống mà tôi cần để kiểm tra các quyền, ví dụ: apache, none, v.v. Tôi thường làm su - user -s / bin / bash. Đối số tùy chọn - có thể được sử dụng để cung cấp một môi trường tương tự như những gì người dùng mong đợi nếu người dùng đăng nhập trực tiếp.
dmourati

2
Nếu bạn cần tải các biến môi trường (ví dụ từ / etc / profile), vượt qua dấu gạch ngang bổ sung sẽ thực hiện:su - -s /bin/bash user
Leons

13

Nếu bạn vẫn muốn su hoạt động, bạn có thể sử dụng sudo -u [username]hoặc chuyển -s /bin/bashsang su làm vỏ tạm thời. Cả hai đều làm như vậy trong trường hợp không có vỏ trong /etc/passwd.


7

Nếu tài khoản không có mật khẩu ( tên người dùng passwd -d ), họ không thể đăng nhập tương tác (bảng điều khiển, SSH, v.v.). Nếu họ có vỏ hợp lệ, su vẫn sẽ hoạt động. Lưu ý "tương tác", mặc dù; nếu ai đó quyết định thiết lập một khóa SSH cho tài khoản, nó sẽ hoạt động!


người dùng có cần phải có vỏ hợp lệ để su không? Tôi khá chắc chắn rằng bạn vẫn ở trong cùng một vỏ ban đầu sau khi bạn gửi cho người dùng khác ... bạn thực sự không đăng nhập với tư cách người dùng khác ... Vì vậy, chỉ cần đặt vỏ thành / dev / null có thể hoạt động cũng.
Brian Postow

Đúng, nó vẫn cần một vỏ hợp lệ: [root @ localhost ~] # su daemon Tài khoản này hiện không có sẵn. [root @ localhost ~] # su - daemon Tài khoản này hiện không khả dụng. (Hệ thống RHEL, vỏ của daemon là / sbin / nologin)
astrostl

3

Trong sshd_config thêm một dòng DenyUser [username]

Lưu ý rằng điều này sẽ không ngăn người dùng đó đăng nhập thông qua bảng điều khiển.


1
Điều đó nên DenyUsers, với một 's'.
David G

2

Ngoài những gì đã được đề cập ở trên (vô hiệu hóa và / hoặc không thiết lập mật khẩu người dùng), mô-đun pam_access (tra cứu trang man trên pam_access và access.conf) có thể được sử dụng để kiểm soát quyền truy cập đăng nhập.


1

như những người khác đã nói;

DenyUser usernamehoặc DenyGroup groupnametrong sshd_configsẽ ngăn chặn đăng nhập khóa / mật khẩu thông qua ssh.

mặc dù tôi thường làm một cái gì đó như AllowGroup sshhoặc một cái gì đó dọc theo những dòng đó, và rõ ràng thêm những người cần ssh truy cập vào nhóm đó.

sau đó, bạn có thể làm như những gì người khác đã nói: passwd -d usernamexóa mật khẩu người dùng để họ không thể đăng nhập tại bảng điều khiển hoặc một số cách khác. hoặc tốt hơn passwd -l usernamelà 'khóa' tài khoản. có thể ssh sẽ từ chối quyền truy cập vào tài khoản bị khóa, ngay cả với các khóa, nhưng tôi không tích cực.


1
Trên thực tế, ssh sẽ cho phép bạn đăng nhập bằng xác thực khóa ngay cả khi mật khẩu tài khoản bị khóa.
Richard Holloway

1

Như tôi đã đề cập trong một bình luận, tôi nghĩ rằng bạn vẫn có thể đăng nhập vào một tài khoản có vỏ không hợp lệ. Vì vậy, nếu bạn đặt shell của người dùng thành / dev / null hoặc bất kỳ shell bin nào, bạn vẫn có thể gửi đơn đến người dùng đó ... nhưng mọi nỗ lực đăng nhập bằng mọi cách sẽ khiến bạn thoát ra ...


1

chỉnh sửa / etc / bóng bằng cách thêm! đến đầu băm mật khẩu.

username:!<hash>:#####:#:#####:#:::

Khi bảo mật cài đặt mới, đây là điều đầu tiên tôi làm sau khi cài đặt sudo, vì vậy không ai có thể sử dụng người dùng root để đăng nhập hoặc ssh vào hệ thống, người dùng sudo vẫn có thể thực thi với tư cách là người dùng root.


0

Không chỉ định mật khẩu cho người dùng không được phép đăng nhập hoặc xóa nó.

# passwd -d myuser

0

Giả sử bạn chỉ muốn kiện người dùng từ tài khoản root và vô hiệu hóa tất cả các quyền truy cập khác:

Sử dụng cái này (chạy như root):

usermod -e 1 -L user

Điều này vô hiệu hóa đăng nhập mật khẩu (như nhiều câu trả lời khác đã khuyên), nhưng nó cũng hết hạn tài khoản . Bạn không thể đăng nhập vào tài khoản đã hết hạn, ví dụ như bằng các khóa SSH. Bạn vẫn có thể su user, mặc dù nó sẽ hiển thị thông báo rằng tài khoản đã hết hạn.


0

Biết cơ chế nào là tốt nhất phụ thuộc vào yêu cầu. Nếu bạn biết các yêu cầu, bạn có thể chọn cơ chế thích hợp. Tất cả các câu trả lời trên là hợp lệ cho một số yêu cầu.

Bạn chỉ muốn hạn chế quyền truy cập SSH? Bạn có cần truy cập cho các phương thức mail hoặc ssh? Là chỉ truy cập từ root?

su - usersẽ yêu cầu mật khẩu cho người dùng nếu nó được chạy là người dùng khác ngoài root. Tuy nhiên, sudo -u user -ikhông yêu cầu mật khẩu cho người dùng.

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.