Wie ändere ich den Besitzer von symbolischen Links?

47

Ich habe ein Problem mit der Erstellung von Softlinks. Es folgt die Originaldatei.

$ ls -l /etc/init.d/jboss
-rwxr-xr-x 1 askar admin 4972 Mar 11  2014 /etc/init.d/jboss

Die Linkerstellung schlägt mit einem Berechtigungsproblem für den Eigentümer der Datei fehl:

ln -sv  jboss /etc/init.d/jboss1
ln: creating symbolic link `/etc/init.d/jboss1': Permission denied

$ id
uid=689(askar) gid=500(admin) groups=500(admin)

Also habe ich den Link mit sudo-Berechtigungen erstellt:

$ sudo ln -sv  jboss /etc/init.d/jboss1
`/etc/init.d/jboss1' -> `jboss'

$ ls -l /etc/init.d/jboss1
  lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss

Als nächstes habe ich versucht, den Besitzer des Softlinks auf den ursprünglichen Benutzer zu ändern.

$ sudo chown askar.admin /etc/init.d/jboss1

$ ls -l /etc/init.d/jboss1
lrwxrwxrwx 1 root root 11 Jul 27 17:24 /etc/init.d/jboss1 -> jboss

Die Erlaubnis des Softlinks wird jedoch nicht geändert.

Was fehlt mir hier, um die Berechtigung des Links zu ändern?

Zama Ques
quelle
Welches Betriebssystem verwenden Sie?
MJTURNER
$ cat / etc / redhat-release Red Hat Enterprise Linux Server Version 6.6 (Santiago)
Zama Ques

Antworten:

68

Wenn auf einem Linux-System der Eigentümer einer symbolischen Verknüpfung mit chowngeändert wird, wird standardmäßig das Ziel der symbolischen Verknüpfung geändert (dh auf was auch immer die symbolische Verknüpfung zeigt ).

Wenn Sie den Eigentümer des Links selbst ändern möchten, müssen Sie die -hOption verwenden, um chown:

-h, --no-dereference wirken sich auf jeden symbolischen Link aus, anstatt auf alle Dateien, auf die verwiesen wird (nützlich nur auf Systemen, die den Besitz eines Symlinks ändern können).

Zum Beispiel:

$ touch test
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
$ sudo ln -s test test1
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test
$ sudo chown root:root test1
$ ls -l test*
-rw-r--r-- 1 root root 0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test

Beachten Sie, dass das Ziel des Links jetzt root gehört.

$ sudo chown mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj   mj   0 Jul 27 08:47 test
lrwxrwxrwx 1 root root 4 Jul 27 08:47 test1 -> test

Und wieder ist der Link test1immer noch im Besitz von root, obwohl er testsich geändert hat.

$ sudo chown -h mj:mj test1
$ ls -l test*
-rw-r--r-- 1 mj mj 0 Jul 27 08:47 test
lrwxrwxrwx 1 mj mj 4 Jul 27 08:47 test1 -> test

Und schließlich ändern wir den Eigentümer des Links mithilfe der -hOption.

mjturner
quelle
Als enttäuschend tangentiale: weder cp -asnoch installnoch lndirekt Symlinks mit einer bestimmten Benutzer / Gruppe erstellen.
Ulrich Schwarz
7

Wenn Sie auf Symlinks reagieren, müssen Sie die meisten Tools (chown, chmod, ls ...) anweisen, den Link nicht zu dereferenzieren: Sie müssen den -hParameter hinzufügen , wie in der Manpage angegeben:

-h, --no-dereference
          affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)

Also versuche : sudo chown -h askar.admin /etc/init.d/jboss1

Adrien M.
quelle
1
Die prägnanteste Antwort. Die meisten Leute kommen hierher, weil das "-h" das Problem behebt.
Itoctopus
4

Beachten Sie auch, dass der Fehler, den Sie oben angegeben haben

ln: creating symbolic link `/etc/init.d/jboss1': Permission denied

liegt nicht daran, dass der Besitzer des Symlinks jemand anderes als der Besitzer der Originaldatei ist. Dies wird (höchstwahrscheinlich) dadurch verursacht, dass der Benutzer askar keinen Schreibzugriff auf das Verzeichnis hat /etc/init.d.

Stefan Schmiedl
quelle
Ich dachte mir, dass . Das Hinzufügen der Schreibberechtigung für die Gruppe fehlte
Zama Ques