Sim, embora bastante incomum, isso é definitivamente factível.
Em vez de tentar implementá-lo você mesmo, pois o /etc/password
/etc/shadow
mé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 testuser
recebeu ambos pass1
e pass2
como userPassword
valores 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.
sudo
para permitir que o usuário1 execute comandos como usuário2. (sudo
Não é apenas para executar comandos como root, ele pode executar comandos como qualquer usuário.)