Usuários comuns são capazes de ler / etc / passwd, isso é uma falha de segurança?

19
ls -l /etc/passwd

$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1862 2011-06-15 21:59 /etc/passwd

Assim, um usuário comum pode ler o arquivo. Isso é uma brecha na segurança?

Ankur Agarwal
fonte

Respostas:

49

Os hashes de senha reais são armazenados /etc/shadow, o que não é legível por usuários regulares. /etc/passwdcontém outras informações sobre IDs de usuário e shells que devem ser legíveis por todos os usuários para que o sistema funcione.

Michael
fonte
3
Na verdade, não - historicamente, as senhas foram mantidas em / etc / passwd - mas isso tornou a correspondência de força bruta direta - portanto, sistemas modernos usando / etc / shadon com pam_unix e similares.
symcbean
4
Usos modernos do Linux/etc/shadow . Os BSDs usam /etc/master.passwd. Solaris usa /etc/security/passwd. Usos HP-UX /.secure/etc/passwde a lista continua ...
Chris S
16

Normalmente, as senhas com hash são armazenadas na /etc/shadowmaioria dos sistemas Linux:

-rw-r----- 1 root shadow 1349 2011-07-03 03:54 /etc/shadow

(Eles são armazenados em /etc/master.passwdem sistemas BSD .)

Os programas que precisam executar autenticação ainda precisam ser executados com rootprivilégios:

-rwsr-xr-x 1 root root 42792 2011-02-14 14:13 /usr/bin/passwd

Se você não gostar dos setuid rootprogramas e de um único arquivo contendo todas as senhas com hash do sistema, poderá substituí-lo pelo módulo Openwall TCB PAM . Isso fornece a cada usuário seu próprio arquivo para armazenar sua senha com hash - como resultado, o número de setuid rootprogramas no sistema pode ser drasticamente reduzido.

sarnold
fonte
13

As senhas não são armazenadas /etc/passwdhá anos; o nome é herdado, a função de ser o banco de dados local do usuário permanece e deve ser legível por todos para esse fim.

geekosaur
fonte
2
legibilidade mundo é uma decisão de projeto, não uma necessidade
Ben Voigt
@ Ben: então é razoável que ninguém possa identificar arquivos que pertencem a outra pessoa? Hoje é a loja local do NSS, não do PAM, apesar do nome.
Geekosaur
1
É perfeitamente possível que um serviço privilegiado faça uid -> tradução de nomes, sem permitir que usuários sem privilégios enumere toda a lista de usuários. Alguns sistemas operacionais escolhem essa opção.
Ben Voigt
1
@joechip Os SOs atuais não foram projetados para ocultar os usuários um do outro. Todos os usuários podem ser enumerados de muitas outras maneiras que / etc / passwd. ls -la / home no Linux, ls -la / Usuários no MacOS X, diretório C: \ Usuários no Windows 7, ps -afux nos sistemas Unix. Alterar a opção de design que Ben Voigt mencionou apenas dificulta a vida sem alterar a segurança.
Magicianeer
1
@ Magicianeer - Apenas dizendo que o exemplo do Windows não está certo. Você pode obter os usuários por outros métodos, mas olhar para a pasta C: \ users listará apenas os usuários que efetuaram login; nenhum usuário do sistema.
Burnt_hand
6

Até certo ponto, é possível identificar usuários. No passado, você também pode pegar suas senhas. No entanto, aquele que realmente vale a pena quebrar é rootconhecido sem o arquivo de senhas.

A utilidade de ter o mundo dos arquivos de senhas legível geralmente supera em muito o risco. Mesmo que não fosse legível pelo mundo, um getent passwdcomando em funcionamento tornaria o ganho de segurança nulo.

A capacidade de usuários não raiz identificarem arquivos pertencentes a terceiros desapareceria. Ser capaz de identificar arquivos pertencentes (usuário no arquivo passwd) e não proprietário (usuário não no arquivo passwd) pode ser útil na revisão do conteúdo de um sistema de arquivos. Embora fosse possível resolver isso com setuidprogramas apropriados , isso adicionaria um enorme vetor de ataque por meio desses programas.

No final, é uma questão de equilíbrio e, neste caso, eu diria que o equilíbrio está firmemente em ter a senha do mundo legível.

BillThor
fonte