Quel est le moyen canonique pour qu'un job upstart change son userid et exécute le script en tant qu'utilisateur non privilégié ?
On peut évidemment utiliser su
o sudo
mais cela semble compliqué (et peut générer des lignes de journal inutiles).
Quel est le moyen canonique pour qu'un job upstart change son userid et exécute le script en tant qu'utilisateur non privilégié ?
On peut évidemment utiliser su
o sudo
mais cela semble compliqué (et peut générer des lignes de journal inutiles).
En posant la question sur le canal #upstart sur freenode, la prise officielle sur le sujet est :
Une future version de Upstart aura support natif pour cela, mais pour l'instant vous pouvez utiliser quelque chose comme :
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
Que diriez-vous d'utiliser start-stop-daemon ?
exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd
Desde Livre de cuisine Upstart :
La méthode recommandée pour les systèmes Debian et Ubuntu est d'utiliser l'utilitaire d'aide
start-stop-daemon
. [ ]start-stop-daemon
n'impose pas de limites PAM ("Pluggable Authentication Module") au processus qu'il lance.
Note : start-stop-daemon
non pris en charge dans RHEL.
Il existe plusieurs façons de le faire, toutes avec une sémantique légèrement différente, notamment en ce qui concerne l'appartenance à un groupe :
setuidgid
vous placera dans le groupe que vous avez spécifié.
setuidgid
vous mettra seulement dans ce groupe, vous ne pourrez donc pas accéder aux fichiers appartenant à d'autres groupes dont vous êtes membre.setuidgid
de daemontools-encore et le setuidgid
de la boîte à outils nosh Les deux ont un -s
(alias --supplementary
), ce qui vous placera dans ce groupe, ainsi que dans tous les groupes d'utilisateurs. groupes supplémentaires pour l'utilisateur que vous spécifiez.Utilisation de newgrp
une fois que vous êtes devenu l'utilisateur moins privilégié ajoutera un seul groupe à votre ensemble de groupes, mais créera également un nouveau sous-shell, ce qui le rend délicat à utiliser à l'intérieur de scripts.
start-stop-daemon
préserve votre appartenance à un groupe, et fait bien plus que setuid/setgid.
chpst -u username:group1:group2:group3... commandname
vous permettra de spécifier exactement les appartenances de groupe à adopter, mais (en Ubuntu ), il n'est livré qu'avec le runit
qui est une alternative à upstart
.
su -c commandname username
récupère toutes les appartenances de groupe de nom d'utilisateur, comme le fait sudo -u username commandname
donc c'est probablement la voie la moins surprenante.
Utilice setuidgid
du paquet daemontools
.
Documentation ici : http://cr.yp.to/daemontools/setuidgid.html
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.