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 den chmod()
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 () :
Die Werte der Dateimodusbits für die erstellte symbolische Verknüpfung sind nicht angegeben. Alle von POSIX.1-2008 angegebenen Schnittstellen müssen sich so verhalten, als ob der Inhalt symbolischer Links immer gelesen werden kann, mit der Ausnahme, dass der Wert der im Feld st_mode der stat- Struktur zurückgegebenen Dateimodusbits nicht angegeben ist.
Hier lässt "nicht spezifiziert" Interpretationsspielraum für jede Implementierung. Besonderheiten:
- Gibt unter Linux (getestet mit ext4fs)
stat()
zurück st_mode=0777
, unabhängig davon, wie die Umask lautete, als der Symlink erstellt wurde. ls -l
wird daher immer lrwxrwxrwx
für symbolische Verknüpfungen angezeigt .
- Unter macOS (HFS) und FreeBSD (sowohl UFS als auch ZFS) verfügt eine symbolische Verknüpfung über eine eigene Berechtigung: Der oben angegebene
chmod -h
Befehl kann diese Verknüpfungsberechtigung (die intern einen Nicht-POSIX lchown()
-Systemaufruf verwendet, um dies zu erreichen) und das stat()
System ändern call liefert diesen Wert für st_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 mit EACCES
(Berechtigung verweigert) fehl, wenn der Benutzer keine Leseberechtigung hat:
$ sudo ln -shf target symlink
$ sudo chmod -h 444 symlink
$ ls -l symlink
lr--r--r-- 1 root staff 1 Mar 14 13:05 symlink -> target
$ sudo chmod -h 000 symlink
$ ls -l symlink
ls: symlink: Permission denied
l--------- 1 root staff 1 Mar 14 13:05 symlink
$ echo kthxbye > target
$ cat symlink
kthxbye
(Beachten Sie, dass der -> target
Teil in der Ausgabe des zweiten ls -l
Befehls fehlt cat symlink
und der Inhalt der target
Datei trotzdem erfolgreich gedruckt wurde , obwohl der Benutzer keine Leseberechtigung für hatte symlink
.)
NetBSD bietet anscheinend eine spezielle Mount-Option mit dem Namen, symperm
die, falls gesetzt, symbolische Link-Lese- / Ausführungsberechtigungen zur Steuerung readlink()
und zum Link-Traversal verursacht.