sudoers - explication simple demandée

24

Chaque fois que je veux être en mesure d'exécuter quelque chose qui m'oblige à être sudoertrop de fois, j'ai besoin de google pour le formatage de /etc/sudoersme rappeler à nouveau quelle est exactement la bonne façon de l'écrire.

Maintenant, je vois différents styles d'écriture dans mon sudoersfichier, ce qui est la conséquence de différents résultats de Google au fil des mois. J'ai également remarqué que le deuxième exemple (ci-dessous) semble fonctionner dans XFCE, mais pas dans Cinnamon (Gnome 3). Cela pourrait être totalement indépendant, mais néanmoins j'aimerais savoir une fois pour toutes, quelle est la grammaire correcte de la ligne sudoer, et quelle est la différence entre les exemples donnés?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

De plus, à quoi servent-ils ALL? Un utilisateur, une commande, mais dois-je utiliser le ALLmot - clé jusqu'à trois fois? Suis-je en train de faire ça mal?

Bien sûr, en omettant NOPASSWD:fait de vous entrez votre mot de passe avant que vous êtes autorisé à exécuter la commande, mais un point de confusion est l'utilisation =et :, pour la dernière commande qui fait l'objet de la ligne peut être préfixé soit =, :, ou ), grammaire confuse pour une sémantique similaire.

Redsandro
la source
3
Je me sens également très frustré par la sudoerssyntaxe. La lecture de la page de manuel était encore plus frustrante: elle décrit le soi-disant langage EBNF concis et exact, les exemples sont exhaustivement longs. Par conséquent, je ne suis pas surpris de trouver autant de fils ici concernant ce fichier.
m-ric
1
Merci pour cela. Je voulais poser cette question depuis que je suis tombé sur un fichier sudoers il y a quelques années :-)
vahidg

Réponses:

35

C'est plus qu'un simple utilisateur et une commande:


redsandro host=(user:group) tag:commands
  • hostspécifie les noms d'hôte pour lesquels cette ligne est valide. Sauf si vous partagez un fichier asudoers entre différents hôtes qui ont besoin de règles différentes, la valeur spéciale ALLsignifiant «tous les hôtes» est un bon choix.

  • userspécifie les utilisateurs que vous pouvez utiliser avec les -uoptions pour exécuter la commande. Si vous omettez cela, vous ne pouvez pas utiliser l' -uoption.

  • groupspécifie les groupes que vous pouvez utiliser avec les -goptions. Si vous l'omettez, vous ne pouvez pas utiliser l' -goption.

Les deux useret groupcomprenez la valeur spéciale en ALLtant que «tous les utilisateurs / groupes»

Si vous omettez tout (user:group)cela, vous ne pouvez pas l'utiliser -uet -gexécutez uniquement la commande en tant que root.

  • tag vous permet de spécifier certaines options, comme NOPASSWD

Ainsi, avec votre premier exemple, vous pouvez exécuter la commande en tant que root mais ne pouvez pas l'utiliser -uet l' -gexécuter en tant que tout autre utilisateur ou groupe.

Avec l'exemple 2. vous pouvez exécuter la commande en tant que root ou utiliser -upour l'exécuter comme n'importe quel autre utilisateur.

Avec 3. vous pouvez exécuter la commande en tant que root ou utiliser -uou -gpour exécuter la commande en tant que tout autre utilisateur ou groupe.

Florian Diesch
la source
Ceci est exactement ce que je cherchais. J'ai accepté votre réponse et je vous remercie de votre effort.
Redsandro
1
Pensée finale, puis - je utiliser 127.0.0.1ou localhostcomme hostpour la sécurité triviale ajoutée?
Redsandro
5
La page de manuel indique «Remarque sudo inspecte uniquement les interfaces réseau réelles; cela signifie que l'adresse IP 127.0.0.1 (localhost) ne correspondra jamais. De plus, le nom d'hôte "localhost" ne correspondra que s'il s'agit du nom d'hôte réel, ce qui n'est généralement le cas que pour les systèmes non en réseau. '
Florian Diesch
1
Merci. Pas de nom d'hôte pour moi, d'autant plus que je veux pouvoir copier le sudoersfile sur plusieurs machines. ALLc'est.
Redsandro
9

Prenons celui-ci à part:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro est le nom d'utilisateur auquel nous accordons la permission. Mettez un% à l'avant pour l'appliquer à un groupe.

ALL est un nom pour cette règle. Les Sudoers peuvent faire bien plus que simplement accorder des autorisations globales. C'est là que ça se complique.

= n'a pas besoin d'explication

ALL: ALL se lit comme (who_to_run_it_as: what_group_to_run_it_as). De cette façon, vous pouvez autoriser l'exécution d'une commande, mais uniquement dans le contexte d'un utilisateur ou d'un groupe spécifique.

NOPASSWD: lui dit de désactiver l'invite de mot de passe.

/ path / to / command vous permet de spécifier des commandes spécifiques path_to_commmand, another_command

La chose à retenir est que si sudo est principalement utilisé par les utilisateurs à domicile pour augmenter les privilèges root, il peut être et est utilisé pour contrôler l'accès à des commandes spécifiques d'une manière beaucoup plus granulaire.

RobotHumains
la source
1
Merci pour les plus %et les , another_commandnotes. Maintenant, je comprends la %wheelligne dans la distribution basée sur Fedora.
Redsandro