O PermitRootLogin é baseado no UID ou no nome do usuário?


17

A página do manual afirma que PermitRootLogin

Especifica se o root pode efetuar login usando ssh(1).

No entanto, não está claro se essa verificação é baseada no nome de usuário ( "root") ou no UID ( 0).

O que acontece se a conta raiz for renomeada "admin"? Será "admin"capaz de fazer login quando PermitRootLogin=no?

O que acontece se houver duas contas com UID = 0, ie "root"e "admin"? Qualquer um deles poderá fazer login?

Respostas:


16

Parece que a verificação foi feita no UID (testado em OpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

Defina PermitRootLogin off:

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

Certifique-se de que um usuário chamado adminseja criado com o UID 0:

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

Verifique se o usuário pode ser usado para fazer logon no sistema:

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

Verifique se podemos fazer logon no sistema usando SSH:

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

Se ativarmos o PermitRootLogin:

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

E tente fazer logon:

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

Interessante que, embora o UID 0 tenha o nome de usuário admin, ele ainda aparece como root@pdv1no shell
Dezza

1
@Dezza Depende possivelmente da ordem das linhas listadas em / etc / passwd (como em: encontre a primeira entrada com UID = 0).
TripeHound 25/08

19

Agradeço a abordagem do @mtak na outra resposta, mas a resposta é óbvia mesmo sem esses testes.

É baseado em UID, como você pode ver no código fonte do openssh:

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

Além disso, todo método de autenticação mostra algo como

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

grep- ainda mais no código, você pode notar, não há nenhuma strcmp('root', pw->pw_name)alternativa, se for o suficiente para você.


Como você conhece as sshd verificações do UID 0? Você não está usando nenhuma argumentação para apoiar sua declaração.
mtak

2
O Unix define um superusuário pelo seu UID = 0. Como outro exemplo pode ser um código fonte de openssh.
Jakuje 24/08/16

O kernel funciona, mas você estava assumindo que o OpenSSH também funcionava. Por exemplo, a autenticação básica do Apache também não permite login raiz, não é? Obrigado pelo link, modifiquei sua resposta para incluir isso.
mtak

1
Se o fizesse de outra maneira, seria um risco potencial à segurança.
Jakuje

3
@Bakuriu e por que criaria o pwcontexto a partir de outra coisa. O opensshcódigo é de código aberto e os leitores interessados ​​podem passar por todo o código. Construções semelhantes estão por todo o código para todos os métodos de autenticação. Se você greppassar pelo código, nunca encontrará strcmp('root', pw->pw_name), se o tornará mais confiável para você.
Jakuje
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.