Jak zmienić własność z dowiązań symbolicznych?


47

Mam problem z tworzeniem miękkich linków. Poniżej znajduje się oryginalny plik.

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

Utworzenie łącza kończy się niepowodzeniem z powodu problemu z uprawnieniami dla właściciela pliku:

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)

Utworzyłem link z uprawnieniami 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

Następnie próbowałem zmienić własność miękkiego linku na pierwotnego użytkownika.

$ 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

Ale pozwolenie na miękki link nie ulega zmianie.

Czego mi brakuje tutaj, aby zmienić pozwolenie na link?


Jakiego systemu operacyjnego używasz?
mjturner

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

Odpowiedzi:


68

W systemie Linux, zmieniając własność łącza symbolicznego chown, domyślnie zmienia cel łącza symbolicznego (tzn. Cokolwiek , na co wskazuje dowiązanie symboliczne ).

Jeśli chcesz zmienić własność samego linku, musisz użyć -hopcji, aby chown:

-h, --no-dereferencje wpływają na każde dowiązanie symboliczne zamiast na dowolny plik, do którego następuje odwołanie (przydatne tylko w systemach, które mogą zmienić własność dowiązania symbolicznego)

Na przykład:

$ 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

Zauważ, że cel linku jest teraz własnością 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

I znowu, link test1nadal jest własnością root, mimo że testsię zmienił.

$ 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

I na koniec zmieniamy własność linku za pomocą -hopcji.


Jako rozczarowująca styczna: ani cp -asani ani installnie lnmożna bezpośrednio tworzyć dowiązań symbolicznych z określonym użytkownikiem / grupą.
Ulrich Schwarz

7

Działając na dowiązaniach symbolicznych, musisz powiedzieć większości narzędzi (chown, chmod, ls ...), aby nie dereferencjonowały linku: musisz dodać -hparametr, jak podano na stronie podręcznika:

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

Więc spróbuj : sudo chown -h askar.admin /etc/init.d/jboss1


1
Najbardziej zwięzła odpowiedź. Większość ludzi przyjeżdża tutaj, ponieważ sama chown nie działa - „h” naprawia to.
itoctopus

4

Zauważ też, że błąd, który podałeś powyżej

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

nie wynika z tego, że właścicielem dowiązania symbolicznego jest ktoś inny niż właściciel oryginalnego pliku. Jest to (najprawdopodobniej) spowodowane tym, że użytkownik askar nie ma dostępu do zapisu do katalogu /etc/init.d.


Zauważyłem to . Brak uprawnienia do zapisu dla grupy
Zama Ques
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.