Unter welchen Umständen wird chmod
scheitern?
Ich habe mir die Manpage angesehen, aber sie gibt nur die Verwendung an und geht nicht auf Details darüber ein, unter welchen Umständen sie nicht funktioniert.
Ich würde annehmen, dass chmod
es funktionieren wird, wenn:
- Du bist Wurzel
- Sie besitzen die Zieldatei (und setzen ein Bit für den profanen Modus, dh kein klebriges Bit, andere)
Können Benutzer die chmod
Berechtigungen für eine Datei ändern, für die sie Gruppenzugriff haben? Bezieht es sich auf den Lese- / Schreibzugriff?
Antworten:
Nur der Eigentümer der Datei oder der Root-Benutzer dürfen die Berechtigungen einer Datei ändern. Die aktuellen Berechtigungen für die Datei oder das übergeordnete Verzeichnis sind irrelevant¹. Dies ist in POSIX angegeben :
Auf den meisten Unices bedeutet "entsprechende Berechtigungen", dass sie als Root ausgeführt werden. Wenn diese Bedingungen nicht erfüllt sind,
chmod
schlägt dies normalerweise fehlEPERM
, obwohl andere Verhaltensweisen wie das Abbrechen des Programms aufgrund einer Sicherheitsverletzung zulässig sind.Darüber hinaus bieten einige Unix-Varianten systemspezifische Möglichkeiten zum Autorisieren oder Verbieten
chmod
. Beispielsweise verfügt Linux über eine Funktion (CAP_FOWNER
), mit der Prozesse die Berechtigungen und anderen Metadaten einer Datei unabhängig von ihrem Eigentümer ändern können.Es gibt andere Gründe, die
chmod
möglicherweise fehlschlagen, obwohl die Datei vorhanden ist, zugänglich ist und den entsprechenden Eigentümer hat. Zu den gängigen gehören ein schreibgeschütztes Dateisystem oder ein Dateisystem, das keine Berechtigungen wie FAT unterstützt. Weniger häufig sind systemspezifische Einschränkungen wie das unveränderliche Attribut des ext2-Dateisystems und der Nachfolger von Linux.¹ Außer insofern, als der laufende Prozess
chmod
auf die Datei zugreifen kann, muss er über Ausführungsberechtigungen für das Verzeichnis verfügen, das die Datei enthält, sowie für jedes andere Verzeichnis, das er durchläuft, um dies zu tun.quelle
Die gewünschten Details finden Sie auf der Handbuchseite für den Systemaufruf chmod (). Anstelle von
man chmod
Gebrauchman 2 chmod
.man chattr
undman 2 setxattr
wird dich auch interessieren; Die von chattr / setxattr () festgelegten Dateiattribute verbessern das Verhalten der von chmod festgelegten traditionellen Unix-Berechtigungen.quelle
Gemäß dem UNIX-Standard muss "die effektive Benutzer-ID des Prozesses mit dem Eigentümer der Datei übereinstimmen oder der Prozess muss über die entsprechenden Berechtigungen verfügen, um dies zu tun."
Das bisschen über entsprechende Privilegien bedarf einiger Erklärung. Auf herkömmlichen Systemen ist chmod für alle Dateien zulässig, wenn die effektive UID (unter Linux die Dateisystem-UID, siehe unten) des Prozesses 0 [dh root] ist.
Linux verfügt über ein System namens Capabilities , und das
CAP_FOWNER
Bit steuert die Fähigkeit,chmod
alle Dateien zu verwenden. Standardmäßig werden alle Funktionen gewährt, wenn einexecve()
Aufruf einen Root-Prozess erstellt (entweder durch Ausführen einer Setuid-Binärdatei oder wenn die reale UID 0 ist) oder wenn die effektive UID auf 0 gesetzt wird (und entfernt wird, wenn sie auf einen Wert ungleich Null gesetzt wird). und eine Reihe von Funktionen, einschließlich,CAP_FOWNER
werden aktiviert, wenn die UID des Dateisystems auf 0 gesetzt ist (und deaktiviert, wenn sie auf einen Wert ungleich Null gesetzt ist). Lesen Sie die Manpage für weitere Details.Sie haben das Sticky-Bit erwähnt, aber die Tatsache weggelassen, dass Benutzer das Setgid-Bit möglicherweise auch nicht für eine Datei setzen, wenn sie nicht zu der Gruppe gehören, die der Datei zugewiesen ist. Das setuid- oder setgid-Bit kann auch unter zusätzlichen implementierungsdefinierten Umständen ignoriert werden.
quelle
Warum versuchst du nicht einfach zu sehen?
quelle
chmod
und dann die Berechtigungen dafür überprüfen. Wenn Sie sich paranoid fühlen, machen Sie einefsync
vor der Überprüfung.