Чи PermitRootLogin заснований на UID або імені користувача?


17

Сторінка man говорить про це PermitRootLogin

Визначає , буде чи корінь може увійти , використовуючи ssh(1).

Однак не ясно, чи базується ця перевірка на основі імені користувача ( "root") або UID ( 0).

Що станеться, якщо кореневий обліковий запис буде перейменований на "admin"? Чи "admin"зможете увійти, коли PermitRootLogin=no?

Що станеться, якщо є два рахунки з UID = 0, тобто "root"і "admin"? Чи зможе кожен із них увійти?

Відповіді:


16

Здається, перевірка робиться на UID (тестується на OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

Вимкнути PermitRootLogin:

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

Переконайтеся, що adminстворено UID 0 користувача:

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

Переконайтеся, що користувач може використовуватись для входу в систему:

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

Перевірте, чи можемо ми увійти в систему за допомогою SSH:

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

Якщо ми включимо PermitRootLogin:

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

І спробуйте увійти:

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:~# 

Цікаво, що незважаючи на те, що в UID 0 є адміністратор імені користувача, він все ще відображається як root@pdv1в оболонці
Dezza

1
@Dezza Можливо, залежить від рядків замовлення, перелічених у / etc / passwd (як у: знайдіть перший запис з UID = 0).
TripeHound

19

Я оцінюю підхід @mtak в іншій відповіді, але відповідь очевидна навіть без цього випробування.

Він заснований на UID, як ви бачите у вихідному коді openssh:

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

Також кожен метод аутентифікації показує щось подібне

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

grep-далі в коді, можливо, ви помітите, що немає жодної strcmp('root', pw->pw_name)або іншої альтернативи, якщо вам це буде достатньо.


Як ви знаєте sshd перевірки на UID 0? Ви не використовуєте жодних аргументацій для підтримки вашої заяви.
mtak

2
Unix визначає суперпользователь за його UID = 0. В якості іншого прикладу може бути вихідний код з openssh.
Jakuje

Ядро робить, але ви припускали, що OpenSSH так само зробив. Наприклад, основна автентифікація Apache не дозволяє також входити в систему, чи не так? Дякую за посилання, я змінив вашу відповідь, щоб включити її.
mtak

1
Якщо це буде зроблено по-іншому, це було б потенційним ризиком для безпеки.
Jakuje

3
@Bakuriu і чому це створить pwконтекст із чогось іншого. opensshКод є відкритим вихідним кодом і зацікавлені читачі можуть пройти через весь код. Подібні конструкції містяться в коді для кожного методу аутентифікації. Якщо ви grepза допомогою коду, ви ніколи не знайдете strcmp('root', pw->pw_name), якщо він зробить його більш надійним для вас.
Якує
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.