La création d'un agent de lancement qui s'exécute avec les privilèges sudo/Root peut être réalisée en ayant simplement sudo
est la commande que l'agent de lancement exécute.
Création d'un fichier PList
Essayez de placer cet exemple minimal dans ~/Library/LaunchAgents/com.sudoexample.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.sudoexample</string>
<key>ProgramArguments</key>
<array>
<string>sudo</string>
<string>touch</string>
<string>/tmp/sudoexample</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/sudoexample.log</string>
<key>StandardErrorPath</key>
<string>/tmp/sudoexample.log</string>
</dict>
</plist>
Remarque : les agents doivent normalement être propriétaires des fichiers de l'utilisateur, mais ils ne sont pas autorisés à les utiliser. <code>root</code> La propriété semble également fonctionner correctement.
L'exemple ci-dessus s'exécute sudo touch /tmp/sudoexample
et enregistre la sortie sur /tmp/sudoexample.log
.
Si vous exécutez launchctl load ~/Library/LaunchAgents/com.sudoexample.plist
à ce stade, il échouera parce que sudo
essaiera de demander un mot de passe et launchctl
n'a pas d'associé tty
pour servir l'invite de mot de passe :
$ ls /tmp/
sudoexample.log
$ cat /tmp/sudoexample.log
sudo: no tty present and no askpass program specified
Autoriser des privilèges élevés
Nous devons accorder à votre utilisateur l'autorisation d'exécuter sudo touch
sans mot de passe.
Cela peut se faire de la manière suivante :
echo "$(whoami) ALL=(ALL) NOPASSWD: $(which touch)" | sudo tee /etc/sudoers.d/touch
Lorsque vous avez terminé, le fichier devrait ressembler à ceci :
$ sudo cat /etc/sudoers.d/touch
coryklein ALL=(ALL) NOPASSWD: /usr/bin/touch
Testez-le
$ launchctl load ~/Library/LaunchAgents/com.sudoexample.plist
$ ls -l /tmp
total 0
-rw-r--r-- 1 root wheel 0 Jun 29 14:01 sudoexample
-rw-r--r-- 1 coryklein wheel 0 Jun 29 14:01 sudoexample.log
Vous pouvez maintenant voir que l'agent de lancement s'est exécuté avec succès en créant le fichier Root appartenant à /tmp/sudoexample
.
Merci à <a href="https://apple.stackexchange.com/users/93229/klanomath">klanomath </a>pour avoir jeté les bases de celle-ci.