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

21

Quero atribuir 2 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?

A razão pela qual eu quero fazer isso é porque atualmente estou ocupado com alguns testes locais e achei que seria conveniente em algumas situações específicas. Após algumas pesquisas, encontrei algo chamado PAM , mas estou tentando encontrar informações sobre como a instalação / configuração funciona.

Estou executando o Ubuntu 12.04.

agregate1166877
fonte
1
Eu provavelmente apenas configuraria sudopara permitir que o usuário1 execute comandos como usuário2. ( sudoNão é apenas para executar comandos como root, ele pode executar comandos como qualquer usuário.)
CJM

Respostas:

16

Sim, embora bastante incomum, isso é definitivamente factível.

Em vez de tentar implementá-lo você mesmo, pois o /etc/password /etc/shadowmétodo de autenticação baseado em padrão não tem provisão para essa configuração, a maneira mais simples é delegar a autenticação a um back-end que já suporta várias senhas para um usuário.

Um bem conhecido é o LDAP, queuserPassword atributo possui vários valores de acordo com o RFC4519 :

Um exemplo de necessidade de vários valores no atributo 'userPassword' é um ambiente em que todos os meses se espera que o usuário use uma senha diferente gerada por algum sistema automatizado. Durante períodos de transição, como o último e o primeiro dia dos períodos, pode ser necessário permitir que duas senhas para os dois períodos consecutivos sejam válidas no sistema.

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

No lado do Linux, nada proíbe fazê-lo (aqui uma conta denominada testuserrecebeu ambos pass1e pass2como userPasswordvalores de atributo):

$ 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 obviamente estará mais vulnerável a ataques, embora o que realmente importa 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 o usuário atualize individualmente uma das senhas. A alteração da senha provavelmente resultará em um único atributo de senha para o usuário.
  • se o objetivo é permitir que várias pessoas compartilhem a mesma conta usando cada uma com sua própria senha, não há mecanismo para identificar quem efetua login com base na senha usada.
jlliagre
fonte
1
Você pode explicar por que isso não tem implicações de segurança? Minha primeira impressão foi que aumentaria as chances de uma conta ser comprometida, especialmente se uma senha for significativamente mais fraca que a outra.
Joseph R.
1
@JosephR. Você está certo. Acabei de atualizar minha resposta depois de implementar o que sugeri e experimentar.
Jlliagre
Excelente resposta, funciona como um encanto agora. Obrigado :)
aggregate1166877
7

Eu apenas tentei criar 2 entradas para um usuário no /etc/shadowarquivo e ele não funcionou. Qual entrada foi a primeira foi a senha usada.

Exemplo

Criou um usuário de teste.

$ useradd -d /home/newuser newuser

Defina a senha como "super123":

$ passwd newuser

Edite manualmente o /etc/shadowarquivo 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 2 senhas.

su - newuser

A primeira entrada /etc/shadowé o que é usado, a entrada na segunda posição nunca funciona, se você virar assim:

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

Então a segunda senha funciona e a primeira não.

Use sudo

Essa abordagem é um hack total, eu usaria sudo, é parcialmente por issosudo 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
slm
fonte
Na verdade, eu esqueci que sudopode fazer isso .. +1
aggregate1166877
4

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

A configuração do PAM é um pouco complexa e existe 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 quase garante que, se você tentar mudar as coisas e não souber exatamente o que está fazendo, estragará tudo.

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

msw
fonte
+1 em "segurança sobre conveniência" (com a qual concordo plenamente), mas sou o tipo de pessoa que deseja testar tudo, mesmo que seja apenas pela experiência, portanto, não 100% da resposta que estou procurando.
aggregate1166877
2

Você pode definir dois nomes de usuário diferentes, cada um com sua senha, para a mesma conta. Execute vipwpara editar /etc/passwdmanualmente, duplique a linha existente da conta em que você está interessado e altere o nome de usuário (e se você gosta do campo Gecos , diretório inicial e shell). Execute vipw -se duplique a linha desse usuário em /etc/shadow. Efetue login com o novo nome de usuário e execute passwdpara 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).

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 confirmando e efetuando check-out no controle de versão.
  • Crie outra conta, crie um grupo ao qual ambas as contas de usuário pertencem e conceda acesso de gravação ao grupo aos arquivos que você deseja compartilhar.
  • Crie outra conta e dê à primeira conta o direito de executar comandos como essa conta no sudo:

    user1 ALL = (user2) ALL
    
  • Crie uma chave SSH para a conta que permita apenas executar um comando específico .
Gilles 'SO- parar de ser mau'
fonte
você se importaria de copiar isso para aquihttp: //askubuntu.com/questions/567139/2-password-1-account-login?
Rinzwind