man
Ich habe die Seite von gelesen chown
. Ich verstehe nicht, warum S_ISUID
und S_ISGID
der Modus gelöscht werden sollten, wenn die Funktion erfolgreich zurückgegeben wird.
Antwort1
Ich glaube, Sie verweisen auf Folgendes aus der Manpage:
Wenn der Besitzer oder die Gruppe einer ausführbaren Datei von einem nicht privilegierten Benutzer geändert wird, werden die Modusbits S_ISUID und S_ISGID gelöscht.
Warum werden sie jetzt gelöscht? Sie sehen, sie werden nur gelöscht, wennausführbarDatei. Denn wenn eines der Bits (SUID/SGID) gesetzt ist, kann der nicht privilegierte Benutzer die Datei als neuer Besitzer der Datei ausführen. Das wäre ein großes Sicherheitsverstoß.
Antwort2
Ich glaube, Sie haben es falsch gelesen man 2 chown
:Dumüssen S_ISUID
und nicht gelöscht werden S_ISGID
, sie werden automatisch gelöscht, wenn Sie diese Funktion als nicht privilegierter Benutzer verwenden. Wenn Ihr Programm als ausgeführt wird, root
hängt das Verhalten (unter Linux) von der Kernelversion ab.
Wenn die Bits gesetzt werden müssen, wenden Sie sie einfach erneut an (vorausgesetzt, das Konto, das versucht, sie zu setzen, verfügt über die entsprechenden Berechtigungen).
Aus der Manpage:
When the owner or group of an executable file are changed by an
unprivileged user the S_ISUID and S_ISGID mode bits are cleared.
POSIX does not specify whether this also should happen when root does
the chown(); the Linux behavior depends on the kernel version. In
case of a non-group-executable file (i.e., one for which the S_IXGRP
bit is not set) the S_ISGID bit indicates mandatory locking, and is
not cleared by a chown().