Nächste: X.509-Zertifikate, Vorige: Dienste, Nach oben: Systemkonfiguration [Inhalt][Index]
Some programs need to run with elevated privileges, even when they are
launched by unprivileged users. A notorious example is the passwd
program, which users can run to change their password, and which needs to
access the /etc/passwd and /etc/shadow files—something
normally restricted to root, for obvious security reasons. To address that,
passwd
should be setuid-root, meaning that it always runs
with root privileges (siehe How Change Persona in The GNU C Library
Reference Manual, for more info about the setuid mechanism).
The store itself cannot contain setuid programs: that would be a security issue since any user on the system can write derivations that populate the store (siehe Der Store). Thus, a different mechanism is used: instead of changing the setuid or setgid bits directly on files that are in the store, we let the system administrator declare which programs should be entrusted with these additional privileges.
Das Feld setuid-programs
einer operating-system
-Deklaration
enthält eine Liste von <setuid-program>
-Objekten, die die Namen der
Programme angeben, deren setuid- oder setgid-Bits gesetzt werden sollen
(siehe Das Konfigurationssystem nutzen). Zum Beispiel kann das Programm
mount.nfs
, was Teil des Pakets nfs-utils ist, so setuid-root
werden:
(setuid-program
(program (file-append nfs-utils "/sbin/mount.nfs")))
Um mount.nfs
also mit setuid auszuführen, tragen Sie das vorige
Beispiel in Ihre Betriebssystemdeklaration ein, indem Sie es an
%setuid-programs
anhängen wie hier:
(operating-system
;; Davor stehen andere Felder …
(setuid-programs
(append (list (setuid-program
(program (file-append nfs-utils "/sbin/mount.nfs"))))
%setuid-programs)))
Dieser Datentyp steht für ein Programm, bei dem das setuid- oder setgid-Bit gesetzt werden soll.
program
Ein dateiartiges Objekt, dessen setuid- und/oder setgid-Bit gesetzt werden soll.
setuid?
(Vorgabe: #t
)Ob das setuid-Bit für den Benutzer gesetzt werden soll.
setgid?
(Vorgabe: #f
)Ob das setgid-Bit für die Benutzergruppe gesetzt werden soll.
user
(Vorgabe: 0
)Benutzeridentifikator (UID, als ganze Zahl) oder Benutzername (als Zeichenkette) des Benutzers, dem das Programm gehören soll, nach Vorgabe der Administratornutzer root.
group
(Vorgabe: 0
)GID (als ganze Zahl) oder Gruppenname (als Zeichenkette) der Benutzergruppe, der das Programm gehört, nach Vorgabe die Benutzergruppe root.
Eine vorgegebene Menge von setuid-Programmen wird durch die Variable
%setuid-programs
aus dem Modul (gnu system)
definiert.
Eine Liste von <setuid-program>
-Objekten, die übliche Programme
angeben, die setuid-root sein müssen.
Die Liste enthält Befehle wie passwd
, ping
, su
und sudo
.
Intern erzeugt Guix die eigentlichen setuid-Programme im Verzeichnis /run/setuid-programs, wenn das System aktiviert wird. Die Dateien in diesem Verzeichnis verweisen auf die „echten“ Binärdateien im Store.
Nächste: X.509-Zertifikate, Vorige: Dienste, Nach oben: Systemkonfiguration [Inhalt][Index]