welche Berechtigung zum Schreiben einer PID-Datei in / var / run

51

Ubuntu

touch: kann `/var/run/test.pid 'nicht berühren: Erlaubnis verweigert

Ich starte start-stop-daemon und möchte die PID-Datei in / var / run schreiben. Start-stop-daemon wird als my-program-user ausgeführt

Die Einstellung / var / run ist drwxr-xr-x 9 root root

Ich möchte es vermeiden, meinen Programmbenutzer in die Stammgruppe aufzunehmen.

s5804
quelle

Antworten:

71

Standardmäßig können Sie nur als Benutzer mit der effektiven Benutzer-ID 0 (dh als Root) in / var / run schreiben. Dies hat gute Gründe. Ändern Sie also auf keinen Fall die Berechtigungen von / var / run. Erstellen Sie stattdessen als Root ein Verzeichnis unter / var / run:

# mkdir /var/run/mydaemon

Ändern Sie dann den Eigentümer in den Benutzer / die Gruppe, unter dem / der Sie Ihren Prozess ausführen möchten:

# chown myuser:myuser /var/run/mydaemon

Geben Sie nun an, dass / var / run / mydaemon anstelle von / var / run verwendet werden soll.

Sie können dies jederzeit testen, indem Sie einen Test als der betreffende Benutzer ausführen.

Stephen Nelson-Smith
quelle
5
Dies funktionierte gut für mich, aber als ich meinen Server neu startete, war das /var/run/mydaemonVerzeichnis verschwunden.
Myborobudur
17
Dies ist keine vollständige Antwort, / var / run ist unter Ubuntu standardmäßig tmpfs. Bei jedem Start des Servers müssen der Befehl mkdir und chown erneut ausgeführt werden.
Tim
1
@Tim Wie wäre es , die Antwort zu bearbeiten und zu vervollständigen?
Kaiser
Wenn Sie mit einem Daemon arbeiten, besteht eine saubere Lösung darin, den Pfad / var / run / mydaemon zur systemd-Unit-Datei hinzuzufügen, wie hier beschrieben . Eine einfachere Hacky-Lösung wäre das Hinzufügen der Befehle mkdir und chown zum Skript init.d (falls vorhanden)
odedfos
1
Eine bessere umfassende Antwort ist hier: superuser.com/a/1127720/71795 eine falsche Antwort , die ist sehr elegant scheint hier: stackoverflow.com/a/5174433 . Zusammenfassung: Verwenden Sie entweder /tmpoder ~.
Tim
13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

Dies wird nicht funktionieren, da es beim nächsten Neustart verloren geht ( /var/runist ein tmpfs unter Ubuntu).

Die einzig mögliche Lösung ist, mkdir und chmod als Teil der Startskripte auszuführen.

Vladimir Nicolici
quelle
3

Sie können dies versuchen. Erstellen Sie ein Verzeichnis / var / run / test / und ändern Sie die Berechtigung dieses Verzeichnisses auf denselben Benutzer, den Ihr Programm ausführt. msgstr "chown / var / run / test /". Ändern Sie nun in Ihrer Anwendung den Speicherort der PID-Datei in /var/run/test/test.pid. Dies sollte die Dinge zum Laufen bringen.

Proy
quelle
2

Was ist mit dem "sticky" -Bit auf / var / run?

chmod + t / var / run?

Vermutlich einige andere Apps versauen, aber es scheint, als wäre es eine andere Lösung.

Ich bleibe jedoch beim Erstellen eines separaten / var / run-Ordners.

user68971
quelle
1

Einträge im /etc/permissionssind permanent. Machen Sie dort einen Eintrag, um den Besitz und die Berechtigungen für ein Verzeichnis dauerhaft zu machen.

user432133
quelle
-6

Um zu vermeiden, dass Ihr Programmbenutzer in die Stammgruppe aufgenommen wird, gewähren Sie anderen Benutzern Schreibzugriff:

# chmod 757
Ivan Chuchman
quelle
3
Mach niemals einen chmod 757 auf / var / run! Dies würde ein ernstes Sicherheitsproblem verursachen
Michel
1
Das ist eine schreckliche Idee. Dies würde ein potenziell massives Sicherheitsproblem verursachen
Tom O'Connor
Auch wenn wir das Sicherheitsproblem ignorieren, chmod 757wird es auch nur bis zum nächsten Neustart funktionieren. Es tut uns leid, eine neue Antwort zu erstellen, aber es scheint keine Möglichkeit zu geben, auf den anderen Kommentar zu antworten.
Vladimir Nicolici
@michel, der autor hat nie gesagt ein chmodon zu machen /var/run. Der Autor hat es möglicherweise für das Unterverzeichnis application gedacht. Ich bin mir nicht sicher, worum es geht.
Acumenus