PermitRootLogin dựa trên UID hoặc tên người dùng?


17

Trang người đàn ông nói rằng PermitRootLogin

Chỉ định xem root có thể đăng nhập bằng cách sử dụng ssh(1).

Tuy nhiên, không rõ liệu kiểm tra này dựa trên tên người dùng ( "root") hoặc UID ( 0).

Điều gì xảy ra nếu tài khoản root được đổi tên thành "admin"? Sẽ "admin"có thể đăng nhập khi PermitRootLogin=nonào?

Điều gì xảy ra nếu có hai tài khoản có UID = 0, nghĩa là "root""admin"? Một trong số họ sẽ có thể đăng nhập?

Câu trả lời:


16

Có vẻ như kiểm tra được thực hiện trên UID (đã thử nghiệm OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

Đặt PermitRootLogin tắt:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no

Đảm bảo rằng người dùng có tên adminđược tạo bằng UID 0:

mtak@pdv1:~$ sudo grep admin /etc/passwd
admin:x:0:0:Root User:/root:/bin/bash

Đảm bảo người dùng có thể được sử dụng để đăng nhập vào hệ thống:

mtak@pdv1:~$ su - admin
Password: 
root@pdv1:~# 

Kiểm tra xem chúng tôi có thể đăng nhập vào hệ thống bằng SSH không:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Permission denied, please try again.

Nếu chúng tôi bật PermitRootLogin:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin yes

Và cố gắng đăng nhập:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Linux pdv1 4.4.8-1-pve #1 SMP Tue May 17 16:14:08 CEST 2016 x86_64
Last login: Wed Aug 24 12:05:28 2016 from xxx
root@pdv1:~# 

Điều thú vị là mặc dù UID 0 có quản trị viên tên người dùng, nó vẫn hiển thị như root@pdv1trong vỏ
Dezza

1
@Dezza Có thể phụ thuộc vào các dòng thứ tự được liệt kê trong / etc / passwd (như trong: tìm mục nhập đầu tiên với UID = 0).
TripeHound

19

Tôi đánh giá cao cách tiếp cận của @mtak trong câu trả lời khác, nhưng câu trả lời là rõ ràng ngay cả khi không có thử nghiệm này.

Nó dựa trên UID, như bạn có thể thấy trong mã nguồn của openssh:

if (authctxt->pw->pw_uid == 0 &&
            !auth_root_allowed(auth_method))
authenticated = 0;

Ngoài ra mọi phương thức xác thực đều hiển thị một cái gì đó như

if (pw->pw_uid == 0 && options.permit_root_login != PERMIT_YES)
    ok = 0;

grep-có thêm trong mã, bạn có thể nhận thấy, không có strcmp('root', pw->pw_name)hoặc một số thay thế, nếu nó sẽ là đủ cho bạn.


Làm thế nào để bạn biết sshd kiểm tra UID 0? Bạn không sử dụng bất kỳ đối số để hỗ trợ tuyên bố của bạn.
mtak

2
Unix định nghĩa một siêu người dùng bằng UID = 0. Như một ví dụ khác có thể là một mã nguồn của openssh.
Jakuje

Hạt nhân có, nhưng bạn đã giả sử OpenSSH cũng làm như vậy. Ví dụ, xác thực cơ bản Apache cũng không cho phép đăng nhập root, phải không? Cảm ơn bạn đã liên kết, tôi đã sửa đổi câu trả lời của bạn để bao gồm điều đó.
mtak

1
Nếu nó làm theo cách khác, nó sẽ là một rủi ro bảo mật tiềm ẩn.
Jakuje

3
@Bakuriu và tại sao nó sẽ tạo ra pwbối cảnh từ một thứ khác. Các opensshcode đang mã nguồn mở và độc giả quan tâm có thể đi qua toàn bộ mã. Các cấu trúc tương tự là tất cả các mã cho mọi phương thức xác thực. Nếu bạn grepthông qua mã, bạn sẽ không bao giờ tìm thấy strcmp('root', pw->pw_name), nếu nó sẽ làm cho nó đáng tin cậy hơn cho bạn.
Jakuje
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.