Come cambiare la proprietà dai collegamenti simbolici?


48

Sto riscontrando qualche problema con la creazione di collegamenti soft. Di seguito è riportato il file originale.

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

La creazione del collegamento non riesce con un problema di autorizzazione per il proprietario del file:

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)

Quindi, ho creato il collegamento con i privilegi di sudo:

$ 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

Successivamente ho provato a cambiare la proprietà del collegamento software per l'utente originale.

$ 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

Ma l'autorizzazione del soft link non viene modificata.

Cosa mi manca qui per modificare l'autorizzazione del collegamento?


Quale sistema operativo stai usando?
mjturner,

$ cat / etc / redhat-release Red Hat Enterprise Linux Server versione 6.6 (Santiago)
Zama Ques,

Risposte:


69

Su un sistema Linux, quando si modifica la proprietà di un collegamento simbolico mediante chown, per impostazione predefinita cambia la destinazione del collegamento simbolico (ovvero, qualunque sia il collegamento simbolico a cui punta ).

Se desideri cambiare la proprietà del link stesso, devi utilizzare l' -hopzione per chown:

-h, --no-dereference influisce su ogni collegamento simbolico anziché su qualsiasi file di riferimento (utile solo su sistemi che possono modificare la proprietà di un collegamento simbolico)

Per esempio:

$ 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

Si noti che la destinazione del collegamento è ora di proprietà di root.

$ 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

E ancora, il collegamento test1è ancora di proprietà di root, anche se testè cambiato.

$ 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

E infine cambiamo la proprietà del link usando l' -hopzione.


In quanto tangenziale deludente: né cp -asinstallné è lnpossibile creare direttamente collegamenti simbolici con un utente / gruppo specificato.
Ulrich Schwarz,

7

Quando si agisce su symlink, è necessario dire alla maggior parte degli strumenti (chown, chmod, ls ...) di non dedurre il link: è necessario aggiungere il -hparametro, come indicato nella manpage:

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

Allora prova : sudo chown -h askar.admin /etc/init.d/jboss1


1
La risposta più concisa La maggior parte delle persone viene qui perché l'abito da solo non funziona - la "-h" risolve questo problema.
itoctopus

4

Si noti inoltre che l'errore che hai dato sopra

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

non è dovuto al fatto che il proprietario del collegamento simbolico sia qualcun altro oltre al proprietario del file originale. È (molto probabilmente) causato dall'utente askar che non ha accesso in scrittura alla directory /etc/init.d.


Ho capito che . Mancava l'aggiunta dell'autorizzazione alla scrittura per il gruppo
Zama Ques,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.