it-swarm.com.de

Wie kann man den Besitz von symbolischen Links ändern?

Ich habe Probleme beim Erstellen 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 Besitz 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 Erlaubnis des Links zu ändern?

60
Zama Ques

Wenn Sie auf einem Linux-System den Besitz einer symbolischen Verknüpfung mit chown ändern, ändert sich standardmäßig das Ziel der symbolischen Verknüpfung ( dh auf was auch immer der symbolische Link zeigt).

Wenn Sie den Besitz des Links selbst ändern möchten, müssen Sie die Option -h Verwenden, um chown:

- h, --no-dereference wirken sich auf jeden symbolischen Link anstelle einer referenzierten Datei aus (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 test1 Immer noch im Besitz von root, obwohl sich test 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 Besitz des Links mit der Option -h.

94
mjturner

Wenn Sie auf Symlinks reagieren, müssen Sie den meisten Tools (chown, chmod, ls ...) mitteilen, dass sie den Link nicht dereferenzieren sollen: Sie müssen den Parameter -h 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 versuchen Sie: Sudo chown -h askar.admin /etc/init.d/jboss1

13
Adrien M.

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

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

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

4
Stefan Schmiedl