web-dev-qa-db-fra.com

Comment changer de propriétaire à partir de liens symboliques?

Je rencontre un problème avec la création de liens logiciels. 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 du 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 vers 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 l'autorisation du lien logiciel ne change pas.

Que me manque-t-il ici pour modifier l'autorisation du lien?

60
Zama Ques

Sur un système Linux, lorsque vous changez la propriété d'un lien symbolique à l'aide de chown, par défaut, il modifie la cible du lien symbolique ( c'est-à-dire quel que soit le lien symbolique pointe vers).

Si vous souhaitez changer la propriété du lien lui-même, vous devez utiliser le -h option pour chown:

- h, --no-dereference affecte chaque lien symbolique au lieu de tout fichier référencé (utile uniquement sur les systèmes qui peuvent changer 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 le 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 test1 appartient toujours à root, même si test a 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 enfin, nous changeons la propriété du lien en utilisant le -h option.

94
mjturner

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 -h paramè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

13
Adrien M.

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 est quelqu'un d'autre que le propriétaire du fichier d'origine. Elle est (très probablement) causée par l'utilisateur askar n'ayant pas accès en écriture au répertoire /etc/init.d.

4
Stefan Schmiedl