quelle autorisation pour écrire le fichier PID dans / var / run

51

Ubuntu

touch: impossible de toucher `/var/run/test.pid ': autorisation refusée

Je démarre start-stop-daemon et j'écris le fichier PID dans / var / run. Start-stop-daemon est exécuté en tant que my-program-user

Le paramètre / var / run est drwxr-xr-x 9 racine racine

J'aime éviter de mettre mon utilisateur de programme dans le groupe racine.

s5804
la source

Réponses:

71

Par défaut, vous ne pouvez écrire que dans / var / run en tant qu'utilisateur avec un ID utilisateur effectif de 0 (c'est-à-dire en tant que root). Ceci pour de bonnes raisons, alors quoi que vous fassiez, ne changez pas les autorisations de / var / run ... À la place, en tant que root, créez un répertoire sous / var / run:

# mkdir /var/run/mydaemon

Puis changez son propriétaire en utilisateur / groupe sous lequel vous souhaitez exécuter votre processus:

# chown myuser:myuser /var/run/mydaemon

Spécifiez maintenant d'utiliser / var / run / mydaemon plutôt que / var / run.

Vous pouvez toujours tester cela en exécutant un test en tant qu'utilisateur en question.

Stephen Nelson-Smith
la source
5
Cela a bien fonctionné pour moi, mais lorsque j'ai redémarré mon serveur, le /var/run/mydaemonrépertoire a disparu.
Myborobudur
17
Ce n'est pas une réponse complète, / var / run est tmpfs par défaut sur Ubuntu. Chaque fois que le serveur est démarré, la commande mkdir et chown doit être réexécutée.
Tim
1
@ Tim, que diriez-vous de modifier la réponse et de la compléter?
Kaiser
Si vous utilisez un démon, une solution propre consisterait à ajouter le chemin / var / run / mydaemon au fichier d'unité systemd, comme décrit ici . Une solution plus simple serait d’ajouter les commandes mkdir et chown au script init.d (le cas échéant)
odedfos
1
Une meilleure réponse est ici: superuser.com/a/1127720/71795 une mauvaise réponse qui semble très élégante est ici: stackoverflow.com/a/5174433 . Résumé: utilisez soit /tmpou ~.
Tim
13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

cela ne fonctionnera pas, car il sera perdu lors du prochain redémarrage ( /var/runest un tmpfs sur Ubuntu).

La seule solution envisageable consiste à exécuter mkdir et chmod dans le cadre des scripts de démarrage.

Vladimir Nicolici
la source
3

Vous pouvez essayer ça. Créez un répertoire / var / run / test /, puis modifiez l'autorisation de ce répertoire sur le même utilisateur que votre programme. "chown / var / run / test /". Maintenant, dans votre application, modifiez l'emplacement du fichier PID en /var/run/test/test.pid. Cela devrait faire fonctionner les choses pour vous.

proy
la source
2

Qu'en est-il d'utiliser le bit "collant" sur / var / run?

chmod + t / var / run?

Probablement gâcher d'autres applications, mais il semble que ce serait une autre solution.

Je m'en tiendrai à la création d'un dossier / var / run séparé pour l'instant, cependant.

utilisateur68971
la source
1

Les entrées dans le /etc/permissionssont permanentes. Faites une entrée pour rendre la propriété et les autorisations d'un répertoire permanentes.

utilisateur432133
la source
-6

Pour éviter de placer votre utilisateur de programme dans le groupe racine, autorisez les autres utilisateurs à accéder en écriture:

# chmod 757
Ivan Chuchman
la source
3
Ne faites jamais un chmod 757 sur / var / run! Cela causerait un grave problème de sécurité
michel
1
C'est une idée terrible. Cela causerait un problème de sécurité potentiellement énorme
Tom O'Connor
Même si nous ignorons le problème de sécurité, chmod 757cela ne fonctionnera que jusqu'au prochain redémarrage. Désolé de créer une nouvelle réponse, mais il semble n'y avoir aucun moyen de répondre à l'autre commentaire.
Vladimir Nicolici
@ Michel, l'auteur n'a jamais dit de faire un chmodsur /var/run. L'auteur peut l'avoir voulu dire pour le sous-répertoire de l'application. Je ne sais pas de quoi tout le monde parle.
Acumenus