Façons de définir umask sur Ubuntu pour les processus démon

8

J'ai un processus serveur de démon http (lacet) que j'aimerais que le serveur écrive tous les nouveaux fichiers avec un umask de 002, afin qu'un autre utilisateur du même groupe puisse modifier, déplacer ou supprimer les fichiers créés par le processus démon. C'est sur Ubuntu 10.04.

Contrairement à Apache, le pian n'a pas d'option de configuration pour umask, alors quelles méthodes existe-t-il pour définir le umask de tout processus démon?

J'ai trouvé cette réponse sur la modification du script d'initialisation à ajouter umask 002. Cela a fonctionné, mais je ne suis pas sûr que la modification du script init soit le meilleur moyen de rendre cela facile à documenter et à configurer sur plusieurs machines.

J'ai également trouvé une référence au module pam_umask ici . Il semble que cela permet de configurer les paramètres par utilisateur du umask dans le champ GECOS de / etc / passwd.

Existe-t-il d'autres façons de définir le umask pour les processus démon? Et quelle serait la voie recommandée?

mp3foley
la source

Réponses:

2

Créez un .profilefichier dans le répertoire personnel du démon:

#!/bin/sh
umask 002

Vous pouvez trouver le répertoire personnel du démon en exécutant:

getent passwd daemon | awk -F':' '{ print $6; }'

Si cela ne fonctionne pas, la seule autre solution à laquelle je peux penser serait de modifier le /etc/init.dscript.

Zaz
la source
2
démon getent passwd | awk -F ':' {print $ 6; } fonctionne aussi.
Janne Pikkarainen
1
Il n'est pas nécessaire d'utiliser sudopour lire /etc/passwd. Ou catd'ailleurs ( grepacceptera un nom de fichier comme argument ou utilisera simplement getentcomme Janne l'a souligné).
pause jusqu'à nouvel ordre.
Cela ne fonctionne pas sous Ubuntu 10.04. Cela peut être dû au fait que / bin / sh est lié à / bin / dash, mais j'ai changé le shell par défaut des démons en / bin / bash et ne fonctionnais toujours pas. Je pense que c'est parce que $ HOME / .profile n'est pas lu par les shells bash ou dash non interactifs et sans connexion. Je n'ai trouvé aucun moyen facile de le démontrer à partir de la ligne de commande. Le shell interactif umask peut être montré avec sudo -u daemon bash -c umask. J'ai testé non interactif en modifiant les paramètres et en redémarrant le démon et en regardant les autorisations sur les fichiers qu'il crée.
mp3foley
@ mp3foley: Je ne suis pas familier dash, mais je umaskdevrais y travailler.
Zaz
J'ai également posé des questions sur la liste de diffusion des démons (pian). La meilleure façon est d'ajouter le paramètre umask dans le script de démarrage du démon dans /etc/init.d/. Quelqu'un corrige même le code source des démons.
mp3foley
5

Sur Ubuntu 10.04, les paramètres umask globaux par défaut peuvent être contrôlés avec le module pam_umask.

Quelques détails ont été trouvés sur ce blog concernant Debian en général: http://muzso.hu/2008/01/22/default-permissions-with-libpam-umask

Le module pam_umask est installé par défaut sur Ubuntu 10.04, mais doit être configuré.

Modifiez /etc/pam.d/common-session, en ajoutant la ligne:

session optional pam_umask.so umask=022

Ensuite, les paramètres par utilisateur peuvent être modifiés en exécutant la commande:

sudo chfn -o "umask=002" daemon_username

pour ajouter un paramètre umask au champ GECOS dans / etc / passwd.

Cela ne fonctionne que pour les shells non interactifs et sans connexion, comme lorsqu'un script de démarrage de démon est exécuté au démarrage.

Pour les shells de connexion, les paramètres umask doivent être supprimés des autres fichiers de configuration du shell tels que / etc / profile, /etc/login.defs, ou le répertoire personnel des utilisateurs .profile, .bashrc, etc. Sinon, les paramètres pam_umask sont remplacés. Consultez la page de manuel pam_umask pour l'ordre de configuration.

mp3foley
la source
1

Si le service est démarré via l'outil "start-stop-daemon" le umask peut être spécifié au niveau de la ligne de commande avec le paramètre "--umask" par exemple:

log_daemon_msg "Starting $DESC" "$NAME"
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion --umask 002 ; then
        log_end_msg 0
    else
        log_end_msg 1
        RET=1
    fi

Ajuster le script de démarrage pour lire ces détails à partir d'un fichier de configuration peut être plus transparent que l'ajout de paramètres basés sur l'utilisateur - cela dépend bien sûr de la procédure de démarrage utilisée pour le démon.

Plus d'informations peuvent être récupérées sur la page de manuel: man start-stop-daemon

Poignard
la source