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?
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.
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
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
.