web-dev-qa-db-fra.com

Exécuter un script avec des arguments comme Sudo sans demander de mot de passe

J'ai deux programmes dans Java que j'appelle à partir d'un script bash:

Java program1 arg ... arg
Sudo Java program2 arg ... arg

Je veux exécuter program2 en tant que Sudo sans me demander un mot de passe. Je connais le fichier sudoers, mais je ne sais pas comment le configurer pour qu'il exécute des programmes Java en tant que Sudo sans demander de mot de passe. Des pensées?

2
Marko Gulin

Utilisation de caractères génériques dans le fichier sudoers

Dans le fichier sudoers, vous pouvez utiliser des caractères génériques (*), offrant ainsi la possibilité d'exécuter un script avec des arguments.

Un exemple

Je l'ai testé avec un script étonnamment simple python. Dans le fichier sudoers, je devais utiliser le chemin absolu vers python: /usr/bin/python dans la ligne du fichier sudoers:

jacob ALL=NOPASSWD: /usr/bin/python /home/jacob/Bureaublad/pscript_1.py*

Ensuite, mon code (script python) était:

#!/usr/bin/python

import sys

s1 = sys.argv[1]
s2 = sys.argv[2]

print(s1)
print(s2)

Puis j'ai couru dans un terminal:

~$ Sudo python '/home/jacob/Bureaublad/pscript_1.py' monkey banana
 monkey
 banana

sans demander mon mot de passe.

De même, vous devriez pouvoir réaliser ce que vous voulez en ajoutant la ligne suivante au fichier sudoers:

<your_username> ALL=NOPASSWD: /path/to/Java <your_script>*

Et lancez le script en:

Sudo Java <script> <args>

et votre mot de passe ne vous sera pas demandé.

Plus d'information

Une source intéressante sur l'utilisation du fichier sudoers pourrait être celui-ci .

2
Jacob Vlijm