Möglichkeiten, umask unter Ubuntu für Daemon-Prozesse festzulegen

8

Ich habe einen http-Daemon-Serverprozess (yaws), bei dem der Server neue Dateien mit einer Umask von 002 schreiben soll, damit ein anderer Benutzer in derselben Gruppe vom Daemon-Prozess erstellte Dateien ändern, verschieben oder löschen kann. Dies ist unter Ubuntu 10.04.

Im Gegensatz zu Apache verfügt yaws nicht über eine Konfigurationsoption für umask. Welche Methoden gibt es also, um die umask eines Daemon-Prozesses festzulegen?

Ich habe diese Antwort zum Ändern des hinzuzufügenden Init-Skripts gefunden umask 002. Dies hat funktioniert, aber ich bin nicht sicher, ob das Bearbeiten des Init-Skripts der beste Weg ist, um dies auf mehreren Computern einfach zu dokumentieren und zu konfigurieren.

Ich habe hier auch einen Verweis auf das Modul pam_umask gefunden . Es sieht so aus, als könnten pro Benutzer Einstellungen der Umask im GECOS-Feld von / etc / passwd konfiguriert werden.

Gibt es andere Möglichkeiten, die Umask für Daemon-Prozesse festzulegen? Und was wäre der empfohlene Weg?

mp3foley
quelle

Antworten:

2

Erstellen Sie eine .profileDatei im Home-Verzeichnis des Dämons:

#!/bin/sh
umask 002

Sie finden das Home-Verzeichnis des Daemons, indem Sie Folgendes ausführen:

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

Wenn das nicht funktioniert, kann ich mir nur vorstellen, das /etc/init.dSkript zu bearbeiten .

Zaz
quelle
2
getent passwd daemon | awk -F ':' {print $ 6; } funktioniert auch.
Janne Pikkarainen
1
Es besteht keine Notwendigkeit sudozum Lesen /etc/passwd. Oder catfür diese Angelegenheit ( grepakzeptiert einen Dateinamen als Argument oder verwendet nur, getentwie Janne betont hat).
Bis auf weiteres angehalten.
Dies funktioniert nicht unter Ubuntu 10.04. Dies könnte daran liegen, dass / bin / sh mit / bin / dash verknüpft ist, aber ich habe die Standard-Shell des Daemons in / bin / bash geändert und immer noch nicht funktioniert. Ich denke, das liegt daran, dass $ HOME / .profile nicht von nicht interaktiven und nicht angemeldeten Bash- oder Dash-Shells gelesen wird. Ich konnte keine einfache Möglichkeit finden, dies über die Befehlszeile zu demonstrieren. Interaktive Shell-Umask kann mit angezeigt werden sudo -u daemon bash -c umask. Ich habe nicht interaktiv getestet, indem ich Einstellungen geändert, den Dämon neu gestartet und die Berechtigungen für die von ihm erstellten Dateien überprüft habe.
mp3foley
@ mp3foley: Ich bin nicht vertraut dash, umasksollte aber darin arbeiten.
Zaz
Ich habe auch Fragen auf der Mailingliste der Dämonen (Gieren) gestellt. Am besten fügen Sie die Umask-Einstellung im Daemon-Startskript in /etc/init.d/ hinzu. Jemand patcht sogar den Quellcode der Dämonen.
mp3foley
5

Unter Ubuntu 10.04 können globale Standard-Umask-Einstellungen mit dem Modul pam_umask gesteuert werden.

In diesem Blog wurden einige Details zu Debian im Allgemeinen gefunden: http://muzso.hu/2008/01/22/default-permissions-with-libpam-umask

Das Modul pam_umask ist standardmäßig unter Ubuntu 10.04 installiert, muss jedoch konfiguriert werden.

Bearbeiten Sie /etc/pam.d/common-session und fügen Sie die folgende Zeile hinzu:

session optional pam_umask.so umask=022

Dann können die Einstellungen pro Benutzer durch Ausführen des Befehls geändert werden:

sudo chfn -o "umask=002" daemon_username

um dem GECOS-Feld in / etc / passwd eine umask-Einstellung hinzuzufügen.

Dies funktioniert nur für nicht interaktive Shells ohne Anmeldung, z. B. wenn beim Booten ein Daemon-Startskript ausgeführt wird.

Für Login-Shells müssen die umask-Einstellungen aus anderen Shell-Konfigurationsdateien wie / etc / profile, /etc/login.defs oder dem Home-Verzeichnis des Benutzers .profile, .bashrc usw. entfernt werden. Andernfalls werden die pam_umask-Einstellungen überschrieben. Die Konfigurationsreihenfolge finden Sie in der Manpage pam_umask.

mp3foley
quelle
1

Wenn der Dienst über das Tool "start-stop-daemon" gestartet wird, kann die umask auf Befehlszeilenebene mit dem Parameter "--umask" angegeben werden, z.

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

Das Anpassen des Startskripts zum Lesen solcher Details aus einer Konfigurationsdatei ist möglicherweise transparenter als das Hinzufügen benutzerbasierter Einstellungen - dies hängt natürlich von der Startprozedur ab, die für den Dämon verwendet wird.

Weitere Informationen finden Sie auf der Manpage: man start-stop-daemon

Dolch
quelle