Dois-je utiliser `sudo` ou` su` dans un script de démarrage?

J'ai un programme personnel, qui a un design server / client.

Le démon du server doit être exécuté en tant que propre user limité et le programme n'a pas été conçu pour supprimer ses privilèges root (si démarré en tant que root) comme le font certains programmes Linux.

Donc ma question, dans son script de démarrage dans /etc/init.d/ , devrais-je utiliser sudo ou su pour exécuter ce démon comme un autre user? Est-ce que cela fait une différence? L'un des deux fonctionnera-t-il? Autre chose?

Le operating system est un système GNU / Linux personnalisé, construit à l'aide des instructions "Linux From Scratch", et les deux programmes fonctionnent correctement.

Si vous pouvez facilement modifier le programme afin qu'il laisse tomber ses privilèges, alors c'est la meilleure approche. Changer d'ID user dans les scripts de démarrage est kludgey et plutôt inflexible, même si cela fonctionne.

Des deux, je voudrais utiliser su à cet effet, car il est less configurable et donc plus prévisible. Si vous utilisez sudo dans votre script d'initialisation et que vous supprimez (involontairement ou intentionnellement) l'input root ALL=(ALL) ALL la root ALL=(ALL) ALL dans /etc/sudoers , votre script d'initialisation se brisera mystérieusement.

En outre, j'utiliserais le formulaire suivant pour réduire l'empreinte de la configuration encore plus loin:

 su -s /bin/sh -c "my_program my_args etc" my_user 

L'option -s signifie que vous pouvez changer le shell par défaut de l'user en / bin / false ou / sbin / nologin ou quelque chose sans casser le script. Vous pouvez également redirect les E / S standard vers /dev/null ou un autre endroit approprié, si votre programme ne le gère pas déjà.

En termes de commodité, je vous suggère de regarder le programme chpst de la stack de superviseur runit. C'est très pratique et permet d'éviter de jouer avec les parameters de la command line qui s'échappent etc. ce qui est une douleur avec sudo / su .

Si vous voulez exécuter le programme comme un autre user, vous l'appelez comme ça:

 chpst -u my_user /path/to/program 

Il fait setsid , setgid , execve sur votre programme, c'est tout (il a beaucoup d'autres fonctionnalités intéressantes).

Si votre dissortingbution inclut busybox , vous pouvez également vérifier si elle a chpst applet chpst , vous l'avez peut-être déjà et vous n'avez pas besoin de package séparé.

Techniquement, les deux devraient bien fonctionner, mais vous voulez probablement suivre les conventions ici. Sudo est généralement utilisé pour élever à la racine pour exécuter une seule command, alors que su est généralement utilisé pour passer à un nouvel user, puis exécuter des commands en tant que nouvel user:

Cela dit, il y a quelques points de vue sur sudo vs su si vous faites une search rapide sur Google: