web-dev-qa-db-fra.com

Comment éviter la demande de mot de passe pour Sudo pour les scripts crontab?

J'ai besoin qu'un nouvel utilisateur puisse exécuter Sudo sans demande de mot de passe, car cet utilisateur a dans crontab un .sh qui utilise Sudo pour certaines commandes.

J'ai créé un nouvel utilisateur sur mon serveur Ubuntu 16.04 x64

adduser my-user Sudo
gpasswd -a my-user Sudo

Puis, en utilisant visuo j’ai ajouté cette ligne, basée sur cette question

my-user ALL=(ALL) NOPASSWD : ALL

Puis redémarré

Après le redémarrage, je me suis connecté avec my-user et j'ai essayé de supprimer Sudo, mais le mot de passe Sudo m'a été demandé.

NOTE: J'ai ajouté la crontab utilisant crontab -e my-user donc je suppose que mon script est exécuté sous la forme my-user. En fait, le script crontabbed se bloque en me signalant dans le journal une demande de mot de passe Sudo. J'ai vraiment besoin d'exécuter le script de cette manière pour pouvoir créer un fichier avec my-suer en tant que propriétaire.

Dites-moi si certaines étapes/lignes n'étaient pas nécessaires et comment rendre my-user capable d'exécuter Sudo sans demande de mot de passe.

Merci

PS: J'ai vu cette question , mais je ne parviens pas à le faire fonctionner. J'ai donc besoin d'une explication plus précise, car ma situation est différente: j'utilise un script crontab et j'en ai besoin. ne demande pas de mot de passe Sudo

1
realtebo

Parfois, l’exécution d’un processus à partir de la racine crontab de la racine peut entraîner des problèmes de propriété de fichier initiale et de mode rwx; ceux-ci peuvent ne pas être conservés correctement.

Dans tout les cas:

1) pour créer un nouvel utilisateur, restez simple:

_ $ Sudo deluser my-user  # if "my-user" is a regular user
 $ adduser my-user
 $ Sudo gpasswd -a my-user Sudo
_

2) pour inclure une nouvelle entrée avec une balise NOPASSWD dans sudoers ou dans un fichier (par exemple, _/etc/sudoers.d/60_my-user_rules_), fixez les deux points à la balise, c’est-à-dire NOPASSWD: =
Je ne l'avais jamais vu auparavant avec un espace intercalé et votre règle devient:

_ my-user my-Host = NOPASSWD: /full/path/to/cmd [parameter1 [| parameter2 [| ...]]]
_

L'ajout de _(ALL)_ avant le _NOPASSWD:_ est facultatif, car la règle par défaut est _(ALL:ALL)_ de toute façon. Cependant, vous souhaiterez peut-être non seulement exécuter votre cmd/script avec le privilège root, mais également l'exécuter en tant qu'utilisateur donné (_spec-user_) ou en tant que membre d'un groupe donné (_spec-group_), ou des deux. Dans ce cas, la règle devient:

_ my-user my-Host = ([spec-user][:spec-group]) NOPASSWD: /full/path/to/cmd [parameter1 [| parameter2 [| ...]]]
_

Cela limitera votre disposition Sudo sans mot de passe à un utilisateur, un hôte et une commande. Vous pouvez renforcer cette règle en spécifiant le ou les paramètres facultatifs associés à cette commande. Dans ce cas, la règle ne s’appliquera que pour ce ou ces paramètres exacts.
Pour les scripts, vous pouvez renforcer cette règle en veillant à ce qu’elle ne s’applique que si le script est non modifié de quelque manière que ce soit. C'est un moyen d'éviter le détournement de script. Cela se fait via cmd-aliasing et en spécifiant les sommes SHA dans _/etc/sudoers.d/60_my-user_rules_.

HTH. Veuillez signaler si vous rencontrez des problèmes avec cette réponse.

4
Cbhihe