web-dev-qa-db-fra.com

Comment désactiver la condition requise pour une seule commande dans sudoers?

Je veux désactiver require pour que je puisse Sudo dans les scripts, mais je préfère le désactiver uniquement pour une seule commande plutôt que tout. Est-ce possible dans la configuration sudoers?

47
artbristol

Vous pouvez remplacer le paramètre par défaut pour des options telles que requiretty pour un utilisateur spécifique ou pour une commande spécifique (ou pour un run-as-user ou Host spécifique), mais pas pour une commande spécifique lorsqu'elle est exécutée en tant que spécifique utilisateur.

Par exemple, en supposant que requiretty est défini dans les options de compilation par défaut, le fichier sudoers suivant permet à la fois artbristol et bob d'exécuter /path/to/program en tant que root à partir d'un script. artbristol n'a pas besoin de mot de passe alors que bob doit avoir à entrer un mot de passe (vraisemblablement tty_tickets est désactivé et bob a récemment entré son mot de passe sur un terminal).

artbristol ALL = (root) NOPASSWD: /path/to/program
bob ALL = (root) /path/to/program
Defaults!/path/to/program !requiretty

Si vous souhaitez modifier le paramètre d'une commande avec des arguments spécifiques, vous devez utiliser un alias de commande (il s'agit d'une limitation de syntaxe). Par exemple, le fragment suivant permet à artbristol d'exécuter /path/to/program --option dans un script, mais pas /path/to/program avec d'autres arguments.

Cmnd_Alias MYPROGRAM = /path/to/program --option  
artbristol ALL = (root) /path/to/program
artbristol ALL = (root) NOPASSWD: MYPROGRAM
Defaults!MYPROGRAM !requiretty

Quelque chose comme ça:

myuser    ALL=(ALL)    NOPASSWD:/usr/local/bin/mycmd
Defaults:myuser        !requiretty
31
JRFerguson

J'ai trouvé que cela fonctionnait bien pour moi en utilisant un fichier dans /etc/sudoers.d. C'est assez simple à vérifier.

J'ai d'abord créé /etc/sudoers.d/01build avec le contenu:

build    ALL=(ALL)    NOPASSWD:/bin/date
Defaults:build !requiretty

Puis testé que cela fonctionne:

ssh Host Sudo -n /bin/date
Mon Nov 16 16:04:27 CST 2015

Ensuite, j'ai modifié /etc/sudoers.d/01build et supprimé le Defaults: line, et après cela, j'obtiens:

ssh Host Sudo -n /bin/date
Sudo: sorry, you must have a tty to run Sudo
4