Você pode dar uma conta de usuário várias senhas?

20

Eu quero atribuir duas senhas a uma única conta. O que eu quero saber é 1) isso é possível, e 2) quais são as implicações de segurança disso?

O motivo pelo qual quero fazer isso é porque atualmente estou ocupado com alguns testes locais e achei que seria conveniente em algumas situações específicas. Depois de alguma pesquisa, encontrei algo chamado PAM , mas estou com dificuldades para encontrar informações sobre como funciona a instalação / configuração.

Estou executando o Ubuntu 12.04.

    
por aggregate1166877 15.09.2013 / 00:26

4 respostas

16

Sim, apesar de ser bastante incomum, isso é definitivamente factível.

Em vez de tentar implementá-lo por conta própria, como o método de autenticação padrão /etc/password /etc/shadow não tem provisão para tal configuração, a maneira mais simples é delegar autenticação a um back-end que já suporta várias senhas para um usuário .

Uma bem conhecida é LDAP cujo atributo userPassword é de valor múltiplo de acordo com RFC4519 :

Um exemplo de necessidade de múltiplos valores no 'userPassword'    atributo é um ambiente onde todo mês o usuário é esperado para    use uma senha diferente gerada por algum sistema automatizado. Durante    períodos de transição, como o último e primeiro dia dos períodos,    pode ser necessário permitir duas senhas para as duas    períodos válidos no sistema.

Apesar dessa RFC, você provavelmente precisará alterar a configuração da política de senha na maioria das implementações de servidor de diretório para que essa configuração seja realmente aceita.

No lado do Linux, nada proíbe isso (aqui uma conta chamada testuser recebeu os valores de atributo pass1 e pass2 as userPassword ):

$ uname -a
Linux lx-vb 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ grep VERSION /etc/os-release
VERSION="13.04, Raring Ringtail"
$ grep "^passwd" /etc/nsswitch.conf 
passwd: files ldap
$ ldapsearch -LLL -h localhost -p 1389 -D "cn=directory manager" -w xxxxxxxx "uid=testuser" userPassword
dn: uid=testuser,ou=People,dc=example,dc=com
userPassword:: e1NTSEF9b2JWYXFDcjhNQmNJVXZXVHMzbE40SFlReStldC9XNFZ0NU4yRmc9PQ==
userPassword:: e1NTSEF9eDlnRGZ5b0NhKzNROTIzOTFha1NiR2VTMFJabjNKSWYyNkN3cUE9PQ==
$ grep testuser /etc/passwd
$ getent passwd testuser
testuser:*:12345:12345:ldap test user:/home/testuser:/bin/sh
$ sshpass -p pass1 ssh testuser@localhost id
uid=12345(testuser) gid=12345 groups=12345
$ sshpass -p pass2 ssh testuser@localhost id
uid=12345(testuser) gid=12345 groups=12345
$ sshpass -p pass3 ssh testuser@localhost id
Permission denied, please try again.

Aqui estão algumas implicações técnicas e de segurança desse tipo de configuração:

  • a conta do usuário será obviamente mais vulnerável a ataques, embora o que realmente importe aqui seja a qualidade e a proteção das senhas mais do que seus números.
  • a maioria dos utilitários pressupõe que o usuário tenha uma única senha, portanto, não permitirá que um usuário atualize individualmente uma das senhas. A mudança de senha provavelmente resultará em um atributo de senha único para o usuário.
  • se o objetivo for permitir que várias pessoas compartilhem a mesma conta usando cada uma delas sua própria senha, não haverá mecanismo para identificar quem realmente faz login com base na senha usada.
por 15.09.2013 / 03:21
7

Eu apenas tentei criar duas entradas para um usuário no arquivo /etc/shadow e ele não funcionou. A primeira entrada que foi feita primeiro foi a entrada de senha usada.

Exemplo

Criado um usuário de teste.

$ useradd -d /home/newuser newuser

Defina a senha para "super123":

$ passwd newuser

Edite manualmente o arquivo /etc/shadow e faça uma segunda entrada:

newuser:$6$....password #1...:15963:0:99999:7:::
newuser:$6$....password #2...:15963:0:99999:7:::

Em seguida, tente fazer login com a conta usando as duas senhas.

su - newuser

A primeira entrada em /etc/shadow é o que get é usado, a entrada na segunda posição nunca funciona, se você inverter as seguintes coisas:

newuser:$6$....password #2...:15963:0:99999:7:::
newuser:$6$....password #1...:15963:0:99999:7:::

A segunda senha funciona e a primeira não.

Use o sudo

Essa abordagem é um hack total, eu usaria apenas o sudo , e parcialmente porque o sudo existe.

Você pode adicionar esta entrada ao seu arquivo sudoers ( /etc/sudoers ), o que permitiria ao usuário joe permissão para fazer qualquer coisa como você:

joe ALL=(yourusername) ALL
    
por 15.09.2013 / 04:25
4

Se você puder fazer isso, você provavelmente não deveria.

A configuração do PAM é um tanto complexa e há um truísmo sobre os mecanismos de autenticação: há um conjunto finito de configurações corretas, mas um conjunto infinito de configurações inseguras. Isso torna quase certo que, se você tentar mudar as coisas e não souber exatamente o que está fazendo, vai estragar tudo.

Se a escolha for entre segurança e "conveniente em algumas situações específicas", opte pelo primeiro.

    
por 15.09.2013 / 02:52
1

Você pode definir dois nomes de usuários diferentes, cada um com sua senha, para a mesma conta. Execute vipw para editar /etc/passwd manualmente, duplique a linha existente para a conta em que está interessado e altere o nome de usuário (e se você gostar do campo Gecos , diretório inicial e shell). Execute vipw -s e duplique a linha desse usuário em /etc/shadow . Faça o login com o novo nome de usuário e execute passwd para alterar a senha do novo nome de usuário. Agora você tem dois nomes de usuário diferentes, com senhas diferentes, para a mesma conta (o ID do usuário é o que determina a conta).

Esta provavelmente não é uma boa ideia. Dependendo do que você está tentando fazer, outras abordagens podem ser mais apropriadas:

  • Crie outra conta e compartilhe arquivos comprometendo e fazendo check-out do controle de versão.
  • Crie outra conta, crie um grupo ao qual ambas as contas de usuário pertençam e dê acesso de gravação de grupo aos arquivos que você deseja compartilhar.
  • Crie outra conta e conceda à primeira conta o direito de executar comandos como essa conta com o sudo:

    user1 ALL = (user2) ALL
    
  • Crie uma chave SSH para a conta que só permite executar um comando específico .
por 17.09.2013 / 01:32

Tags