Як змінити право власності на символічні посилання?


47

Я зіткнувся з деяким питанням зі створенням м'яких посилань. Далі йде оригінальний файл.

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

Створення посилання не вдається з видачею дозволу для власника файлу:

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)

Отже, я створив посилання з привілеями 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

Далі я спробував змінити право власності на м'яке посилання на початкового користувача.

$ 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

Але дозвіл на м'яке посилання не змінюється.

Що мені тут не вистачає, щоб змінити дозвіл посилання?


Яку операційну систему ви використовуєте?
mjturner

$ cat / etc / redhat-release Реліз Red Hat Enterprise Linux Server 6.6 (Сантьяго)
Zama Question

Відповіді:


68

У системі Linux, коли змінюється право власності на символічне посилання за допомогою chown, за замовчуванням воно змінює ціль символічного посилання (тобто те, на що символічне посилання вказує ).

Якщо ви хочете змінити право власності на саме посилання, вам потрібно скористатися -hопцією chown:

-h, --no-dereference впливає на кожне символічне посилання замість будь-якого згаданого файлу (корисно лише для систем, які можуть змінити право власності на симпосилання)

Наприклад:

$ 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

Зауважте, що цільовим посиланням зараз належить 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

І знову ж таки посилання test1все ще належить root, хоч testі змінилося.

$ 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

І нарешті ми змінюємо право власності на посилання за допомогою -hопції.


Як невтішна тангенціальна: ні, cp -asні installні lnможуть безпосередньо створювати символьні посилання із вказаним користувачем / групою.
Ульріх Шварц

7

Діючи на символьні посилання, ви повинні сказати більшості інструментів (chown, chmod, ls ...), щоб не відмежувати посилання: потрібно додати -hпараметр, як зазначено на сторінці сторінки:

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

Тому спробуйте: sudo chown -h askar.admin /etc/init.d/jboss1


1
Найбільш лаконічна відповідь. Більшість людей приїжджають сюди, тому що власна чудова робота не працює - "-h" це виправляє.
іктоктоп

4

Також зауважте, що помилка, яку ви подали вище

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

не через те, що власник символьної посилання є хтось інший, ніж власник оригінального файлу. Це (найімовірніше), спричинене тим, що користувач askar не має доступу для запису до каталогу /etc/init.d.


Я зрозумів це. Додавання дозволу на написання для групи відсутнє
Zama Ques
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.