Autoriser la commande sudo complexe sur Debian Linux

13

Je dois autoriser une commande spécifique sur une boîte Debian Linux pour un seul utilisateur. J'ai essayé cela dans le /etc/sudoersfichier:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

Cela ne fonctionne pas comme prévu. Si j'exécute la commande en tant qu'utilisateur zabbix avec sudo, il demande le mot de passe (bien que j'aie spécifié l' NOPASSWDoption).

Cependant, cela fonctionne:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

Mais a l'inconvénient que toutes les sous-commandes de apt-getsont autorisées. Existe-t-il un moyen de résoudre ce problème pour n'autoriser qu'une commande spécifique?

Daniel
la source

Réponses:

10

Je suis en désaccord avec laïque. Bien que cela fonctionne, vous n'avez pas besoin awkde l'exécuter en tant que root. Je ne serais pas à l'aise avec cela car vous pourriez être en mesure d'attaquer awkd'une manière ou d'une autre. C'est un interpréteur de langage de programmation complet après tout.

Lorsqu'on s'exécute sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}', ils s'exécutent en fait sudo /usr/bin/apt-get --print-uris -qq -y upgrade, puis dirigent / redirigent en tant qu'utilisateur appelant.

Essaye ça: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

Soit dit en passant, il n'y a rien de mal à mettre cela dans un script comme le fait lain et vous pouvez toujours le faire. J'éviterais simplement d'exécuter awk en tant que root si possible.

user606723
la source
1
Vous avez raison, mais si le script n'est pas sûr, peu importe ce qu'il contient, il peut être écrasé et le monde est votre huître. Si le script est sécurisé, ce qu'il contient est également sécurisé.
user9517
25

Vous vous trompez probablement de la façon dont la redirection interagit avec sudo. La redirection est effectuée au niveau de l'utilisateur appelant et non de l'utilisateur privilégié. Il serait probablement plus facile pour vous d'envelopper votre commande dans un script et de permettre ensuite à l'utilisateur zabbix d'exécuter ce script, par exemple

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

l'ensemble sudoers comme

zabbix  ALL=NOPASSWD: /path/to/script

Maintenant, le script entier sera exécuté en tant qu'utilisateur privilégié et pas seulement la commande particulière apt-get. Assurez-vous cependant que l'utilisateur zabbix ne peut pas écrire dans le script.

user9517
la source
1
Quelqu'un peut probablement me corriger si sudo s'en occupe déjà (je me souviens avoir eu des problèmes avec les variables env qui ne sont pas passées), mais je suggérerais à awk et wc d'avoir leurs chemins complets comme meilleure pratique générale pour les scripts afin qu'un utilisateur puisse 'exportez pas PATH = ~ user / bin: $ PATH et collez les commandes que vous voulez dans un script appelé awk (ou wc) dans ~ user / bin
Foon
@Foon: Je pense que vous confondez sudo avec cron.
user9517
1
Ne pas le confondre, mais superuser.com/questions/232231/… indique que sudo empêche la manipulation de PATH (et LD_LIBARRAY_PATH par défaut)
Foon
J'ai fait quelque chose de similaire seulement, j'ai su le script évoquant et l'ai rendu accessible en écriture uniquement par root. Testez si cela fonctionne pour l'utilisateur avec les autorisations 711, ils ne peuvent même pas voir ce qu'il fait pour essayer de le contourner.
Chris K