Nehmen wir an, Sie haben diese Struktur:
+ directory
-- file1
-- file2
-- file3 -> /tmp/file3
file3
ist ein Link zu einem file3
anderen Ort im System.
Nun sagen wir ich chmod 777
das Verzeichnis und alle Inhalte darin. Hat mein file3
in /tmp
diese Berechtigungen erhalten? Nehmen wir auch an, wir haben die gleiche Situation, aber umgekehrt.
/tmp/file3 -> /directory/file3
Wie wirkt sich das auf die Verknüpfung aus, wenn ich die Berechtigungen für die verknüpfte Datei anwende?
Antworten:
Dies hängt davon ab, wie Sie anrufen
chmod
und auf welcher Plattform Sie arbeiten.Auf einem Linux-System
man chmod
heißt es beispielsweise:Auf einem Mac kann chmod jedoch verwendet werden, um die Berechtigungen eines symbolischen Links mit folgenden Optionen (von
man chmod
) zu ändern :Nehmen wir zum Beispiel an, dass Sie sich für den Rest dieser Antwort auf einem Linux-Computer befinden.
Wenn Sie im ersten Fall
chmod -R 777 directory
die Berechtigungen rekursiv ändern, ist das Verknüpfungsziel nicht betroffen. Wenn Sie dies jedoch tunchmod 777 directory/*
, ist dies der Fall .Wenn Sie die Berechtigungen für das Linkziel direkt ändern, werden diese Berechtigungen durchgesetzt (da, wie in der Manpage und in Baraboom angegeben , die tatsächlichen Linkberechtigungen für nichts verwendet werden).
Testprotokoll zur Veranschaulichung:
quelle
Die Antworten von baraboom und peth sind beide richtig: Berechtigungsbits für die symbolischen Links selbst sind irrelevant (außer unter macOS; siehe unten), und das Ändern der Berechtigung für einen symbolischen Link - über das
chmod
Befehlszeilentool oder über denchmod()
Systemaufruf - fungiert einfach als wenn es gegen das Ziel der symbolischen Verbindung durchgeführt wurde.So zitieren Sie die SUSv4 / POSIX.1-2008-Beschreibung des Systemaufrufs symlink () :
Hier lässt "nicht spezifiziert" Interpretationsspielraum für jede Implementierung. Besonderheiten:
stat()
zurückst_mode=0777
, unabhängig davon, wie die Umask lautete, als der Symlink erstellt wurde.ls -l
wird daher immerlrwxrwxrwx
für symbolische Verknüpfungen angezeigt .chmod -h
Befehl kann diese Verknüpfungsberechtigung (die intern einen Nicht-POSIXlchown()
-Systemaufruf verwendet, um dies zu erreichen) und dasstat()
System ändern call liefert diesen Wert fürst_mode
.Symbolische Links unter Linux und FreeBSD können immer befolgt werden, wie von POSIX angegeben. Insbesondere unter FreeBSD bedeutet dies, dass der Dateimodus einer symbolischen Verknüpfung keinerlei Auswirkung auf die Zugriffssteuerung hat.
Auf der anderen Seite unterbricht macOS POSIX leicht. Ein symbolischer Link kann zwar unabhängig von seiner Leseberechtigung verfolgt werden,
readlink()
schlägt jedoch mitEACCES
(Berechtigung verweigert) fehl, wenn der Benutzer keine Leseberechtigung hat:(Beachten Sie, dass der
-> target
Teil in der Ausgabe des zweitenls -l
Befehls fehltcat symlink
und der Inhalt dertarget
Datei trotzdem erfolgreich gedruckt wurde , obwohl der Benutzer keine Leseberechtigung für hattesymlink
.)NetBSD bietet anscheinend eine spezielle Mount-Option mit dem Namen,
symperm
die, falls gesetzt, symbolische Link-Lese- / Ausführungsberechtigungen zur Steuerungreadlink()
und zum Link-Traversal verursacht.quelle
quelle