Comment changer la propriété des liens symboliques?

49

Je suis confronté à un problème de création de liens souples. Voici le fichier d'origine.

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

La création de lien échoue avec un problème d'autorisation pour le propriétaire du fichier:

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)

J'ai donc créé le lien avec les privilèges 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

Ensuite, j'ai essayé de changer la propriété du lien logiciel en faveur de l'utilisateur d'origine.

$ 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

Mais la permission du lien virtuel ne change pas.

Qu'est-ce qui me manque ici pour changer la permission du lien?

Zama Ques
la source
Quel système d'exploitation utilisez-vous?
Mjturner
$ cat / etc / redhat-release Serveur Red Hat Enterprise Linux version 6.6 (Santiago)
Zama Ques

Réponses:

71

Sur un système Linux, lors du changement de propriétaire d'un lien symbolique à l'aide de chown, la cible du lien symbolique est modifiée par défaut (c'est-à-dire quel que soit le lien symbolique pointé ).

Si vous souhaitez modifier la propriété du lien lui-même, vous devez utiliser l' -hoption pour chown:

-h, --no-dereference affecte chaque lien symbolique au lieu d'un fichier référencé (utile uniquement sur les systèmes pouvant modifier la propriété d'un lien symbolique)

Par exemple:

$ 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

Notez que la cible du lien appartient maintenant à 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

Et encore une fois, le lien test1appartient toujours à root, même s’il testa changé.

$ 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

Et finalement nous changeons la propriété du lien en utilisant l' -hoption.

mjturner
la source
Comme une tangentielle décevante: ni cp -asni installni lnpeut directement créer des liens symboliques avec un utilisateur / groupe spécifié.
Ulrich Schwarz
7

Lorsque vous agissez sur des liens symboliques, vous devez indiquer à la plupart des outils (chown, chmod, ls ...) de ne pas déréférencer le lien: vous devez ajouter le -hparamètre, comme indiqué dans la page de manuel:

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

Alors essayez: sudo chown -h askar.admin /etc/init.d/jboss1

Adrien M.
la source
1
La réponse la plus concise. La plupart des gens viennent ici parce que chown par son propre ne fonctionne pas - le "-h" corrige cela.
Itoctopus
4

Notez également que l'erreur que vous avez donnée ci-dessus

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

n’est pas dû au fait que le propriétaire du lien symbolique soit une personne autre que le propriétaire du fichier original. Cela est probablement dû au fait que l'utilisateur askar n'a pas accès en écriture au répertoire /etc/init.d.

Stefan Schmiedl
la source
Je pensais que . L'ajout de la permission d'écriture pour le groupe était manquant
Zama Ques