Pourquoi puis-je démarrer un shell racine avec sudo même avec un '! 'dans son entrée d'ombre?

9
$cat /etc/passwd |grep -i root
root:x:0:0:root:/root:/bin/bash

$sudo cat /etc/shadow |grep -i root
root:!:17179:0:99999:7:::

Dans le deuxième champ du fichier shadow, !signifie que l'utilisateur root ne peut pas se connecter mais pourquoi puis-je me connecter à l'utilisateur root par sudo su?

Pourquoi ne puis-je pas me connecter à l'utilisateur root avec su rootou su -?

Sinoosh
la source
1
"Dans le deuxième champ du fichier fantôme,! Signifie que l'utilisateur root ne peut pas se connecter" Non, ce n'est pas le cas. Où avez-vous entendu cela?
Courses de légèreté en orbite le
@LightnessRacesinOrbit, qu'est-ce que cela signifie?
George Udosen
@George: muru a cité le manuel dans sa réponse et l'a expliqué en détail. Vous devriez lire la documentation!
Courses de légèreté en orbite le

Réponses:

15

Un !dans le shadowchamp de mot de passe crypté de l' entrée signifie qu'aucun mot de passe ne peut s'authentifier. De man shadow:

If the password field contains some string that is not a valid
result of crypt(3), for instance ! or *, the user will not be able
to use a unix password to log in (but the user may log in the
system by other means).

Comme le dit le manuel, cela ne signifie pas que vous ne pouvez pas vous connecter en tant que root. Cela signifie simplement que vous ne pouvez pas vous connecter en tant que root en utilisant un mot de passe pour le compte root. (Vous pouvez vous connecter en tant que root via SSH à l'aide de clés SSH, par exemple, si vous l'avez configuré précédemment, même si le compte est verrouillé.)

sudos'authentifie normalement avec votre mot de passe, pas celui de root. Cela peut être modifié en réglant l' un des targetpw, rootpwou runaspwdans sudoers. Si vous définissez l'une de ces options et essayez d'utiliser un mot de passe lorsque le mot de passe est verrouillé, cela échouera .

muru
la source
Génial, cela signifie que je peux passer à n'importe quel utilisateur via sudo avec mon mot de passe, que ce soit un utilisateur actif ou un utilisateur verrouillé, non?
Sinoosh
1
@Sinoosh n'assumant aucune autre restriction, oui
muru
4

Voyons maintenant les commandes en conséquence:

  1. sudo su:

    • sudoexécute la commande su(utilisateur substitut) avec des privilèges root, donc même si le /etc/shadowdit ou l'a, root:!:17179:0:99999:7:::il exécutera toujours des commandes avec des privilèges root.
  2. su -ou su root:

    • Cela passe en fait à l' utilisateur root qui, à partir du /etc/shadowfichier, ne peut pas se connecter, l'utilisation de ces commandes ne fonctionnera donc pas. Si vous voulez qu'ils fonctionnent, le compte root doit être déverrouillé en lui donnant un mot de passe.

Sommaire:

su -0r su rootpasse à l'utilisateur root , n'existe pas, donc cela ne peut pas arriver, mais sudo suexécute la commande switch avec des rootprivilèges, donc dans ce cas, cela ira si vous êtes dans le sudogroupe. Dans ce cas, vous ne vous connectez pas réellement en tant que root, vous agissez simplement en tant que root pour que cela aille.

Source: Quelle est la différence entre «su -» et «su root»?

George Udosen
la source
Merci, cela signifie sudo suque les champs de passage ne s'affichent pas dans le fichier fantôme?
Sinoosh
1
@Sinoosh sudo suest la mauvaise façon d'exécuter sudo shou sudo bash.
Bakuriu