Por que o 'su' não pode ser usado para alternar para usuários com senha vazia?

2

Crie uma nova conta chamada test :

$ sudo useradd test

test não tem uma senha agora. Então

$ su test

não funciona. Se você tentar, será solicitada a senha de test . Não tem um. Isso não é o mesmo que a senha estar vazia, então se você digitar uma senha vazia pressionando enter, você receberá a mensagem "su: Falha de autenticação".

O mesmo acontece se você mudar para um tty e tentar fazer o login como test : uma senha vazia não é aceita.

Agora atribua test uma senha vazia:

$ sudo passwd -d test

Agora você pode efetuar login como test em um tty fornecendo a string vazia como a senha. No entanto, se você tentar

$ su test

novamente, você ainda recebe a mensagem "su: falha de autenticação", a sessão não muda para o usuário test .

Por que isso acontece?

    
por UTF-8 16.10.2016 / 01:16

2 respostas

2

A partir da saída de ldd /bin/su , o binário su é compilado com as bibliotecas pam ( libpam* ), portanto a autenticação, gerenciamento de conta, material de iniciação de sessão etc serão gerenciados por pam . / p>

O seguinte é como um su típico do sistema Ubuntu é gerenciado por pam , você deve encontrar uma abordagem similar se estiver usando outra distro.

As regras pam para su estão definidas no arquivo /etc/pam.d/su . Esse arquivo também inclui os arquivos common-auth , common-passwd , common-session do mesmo diretório dos modelos comuns para cobrir as tarefas sugeridas pelo seu nome (e usados em outros serviços pam enabled).

No meu sistema, na parte inferior de /etc/pam.d/su i:

@include common-auth
@include common-account
@include common-session

As linhas anteriores não lidam com a verificação de senha nula, é principalmente o trabalho de pam_unix module.

Agora /etc/pam.d/common-auth tem:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure

De man pam_unix :

nullok

The default action of this module is to not permit the user access to a service if their official password is blank. The nullok argument overrides this default and allows any user with a blank password to access the service.

nullok_secure

The default action of this module is to not permit the user access to a service if their official password is blank. The nullok_secure argument overrides this default and allows any user with a blank password to access the service as long as the value of PAM_TTY is set to one of the values found in /etc/securetty.

Como você pode ver se a opção nullok_secure está definida, a menos que a variável de ambiente PAM_TTY esteja definida da maneira mencionada, o usuário com a senha nula não terá permissão para efetuar login usando su .

Portanto, para permitir que qualquer usuário com senha nula execute su , você precisa ter o argumento nullok no módulo pam_unix :

auth    [success=1 default=ignore]      pam_unix.so nullok

isso é inseguro, pois o arquivo common-auth é usado por muitos outros serviços, mesmo por apenas su , isso não deve ser feito. (Para testar você pode configurá-lo uma vez e voltar ao original. Embora se você quiser fazer o teste, é melhor incorporar todas as lógicas no arquivo /etc/pam.d/su , e emendar quaisquer alterações depois, em vez de mexer com qualquer common-* file)

    
por 16.10.2016 / 16:11
1

De man useradd :

-p, --password PASSWORD 
The encrypted password, as returned by crypt(3). The default is to disable the password.
Note: This option is not recommended because the password (or encrypted password) will be visible by users listing the processes. 

Você não usou --password , então o ID do usuário recebeu uma senha especial "desativada". Não é o mesmo que uma senha vazia.

Seria um buraco de segurança para o outro lado.

    
por 16.10.2016 / 03:07