17 junho, 2007
Passwords em Unix/Linux
No início dos tempos do Unix/Linux não havia shadowed passwords. Hoje em dia, qualquer distribuição Linux vem por default com shadowed passwords.
Basicamente significa que o ficheiro que guarda as passwords dos utilizadores, encriptadas (via crypt -- veja man 3 crypt), '/etc/passwd', por definição world-wide-readable, não as contém directamente. Em vez da password encriptada está apenas um caracter, 'x'. O ficheiro que realmente contém as passwords encriptadas é '/etc/shadow{,-}'.
Um exemplo de uma string de uma password guardada: '6Iz.AWMwalbdc'; esta string tem 13 caracteres. Os caracteres têm que pertencer ao conjunto '[a-zA-Z0-9./].' -- letras de A a Z, digitos, o ponto e a barra (dot and slash) -- perfazem uma base de 64. Os dois primeiros caracteres desta sequência de 13 digitos é denominada sal (do inglês, salt). Através desta string esquisita não é humanamente possível obter qual a password que lhe deu origem, sem ser por tentativas. Ainda que haja alguém que consiga, por acidente, ver esta sequência, terá que passar um bom bocado até ter a palavra que lhe deu origem!
Vejamos em detalhe como é o processo de geração desta string, denominada encriptação.
Em todos os sistemas Linux usa-se a função crypt, que gera uma chave assimétrica.
Para dar apenas dois exemplos: RedHat 7.2 usa como sal "$1", o Freesco "pB".
Vejamos um exemplo:
Basicamente significa que o ficheiro que guarda as passwords dos utilizadores, encriptadas (via crypt -- veja man 3 crypt), '/etc/passwd', por definição world-wide-readable, não as contém directamente. Em vez da password encriptada está apenas um caracter, 'x'. O ficheiro que realmente contém as passwords encriptadas é '/etc/shadow{,-}'.
% grep shadow /etc/*Vejamos melhor como as passwords são, de facto, guardadas.
...
/etc/pwdb.conf: unix+shadow
[root@fuji etc]# ls -l -d passwd* shadow*
-rw-r--r-- 1 root root 1944 Jun 17 16:01 passwd
-rw-r--r-- 1 root root 1944 Jun 17 12:35 passwd-
-rw-r--r-- 1 root root 1944 Jun 17 14:09 passwd.OLD
-r-------- 1 root root 1592 Jun 17 14:09 shadow
-r-------- 1 root root 1550 Jun 17 12:35 shadow-
-r-------- 1 root root 1592 Jun 17 13:32 shadow.OLD
% grep . /etc/shadow- | sed 's/^\([^:]*\):\([^:]*\).*/\1 \2/'
Um exemplo de uma string de uma password guardada: '6Iz.AWMwalbdc'; esta string tem 13 caracteres. Os caracteres têm que pertencer ao conjunto '[a-zA-Z0-9./].' -- letras de A a Z, digitos, o ponto e a barra (dot and slash) -- perfazem uma base de 64. Os dois primeiros caracteres desta sequência de 13 digitos é denominada sal (do inglês, salt). Através desta string esquisita não é humanamente possível obter qual a password que lhe deu origem, sem ser por tentativas. Ainda que haja alguém que consiga, por acidente, ver esta sequência, terá que passar um bom bocado até ter a palavra que lhe deu origem!
Vejamos em detalhe como é o processo de geração desta string, denominada encriptação.
Em todos os sistemas Linux usa-se a função crypt, que gera uma chave assimétrica.
- crypt (char* textPassword, char salt[2]) => outputs a 13 character base64 string
Para dar apenas dois exemplos: RedHat 7.2 usa como sal "$1", o Freesco "pB".
Vejamos um exemplo:
sal="6I"; crypt("x",sal) => 6Iz.AWMwalbdc
sal="$1"; crypt("vaca",sal) => $1vyWKSEliITE
Comments:
<< Home
Why the cyphered password has 34 bytes? I am still investigating why 'util-linux-2.12q' have 13 bytes, against the regular passwd 34...
Enviar um comentário
<< Home

