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.