Bagaimana cara mengubah kepemilikan dari tautan simbolik?

48

Saya menghadapi beberapa masalah dengan membuat tautan lunak. Berikut ini adalah file asli.

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

Pembuatan tautan gagal dengan masalah izin untuk pemilik file:

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)

Jadi, saya membuat tautan dengan hak 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

Selanjutnya saya mencoba mengubah kepemilikan tautan lunak ke pengguna asli.

$ 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

Tetapi izin tautan lunak tidak berubah.

Apa yang saya lewatkan di sini untuk mengubah izin tautan?

Zama Ques
sumber
Sistem operasi apa yang Anda gunakan?
mjturner
$ cat / etc / redhat-release Red Hat Enterprise Linux Server rilis 6.6 (Santiago)
Zama Ques

Jawaban:

69

Pada sistem Linux, ketika mengubah kepemilikan tautan simbolis menggunakan chown, secara default ia mengubah target tautan simbolis (yaitu, apa pun yang menunjuk tautan simbolis ).

Jika Anda ingin mengubah kepemilikan tautan itu sendiri, Anda perlu menggunakan -hopsi untuk chown:

-h, --no-dereference memengaruhi setiap tautan simbolik alih-alih file apa pun yang dirujuk (hanya berguna pada sistem yang dapat mengubah kepemilikan symlink)

Sebagai contoh:

$ 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

Perhatikan bahwa target tautan sekarang dimiliki oleh 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

Dan lagi, tautannya test1masih dimiliki oleh root, meski testsudah berubah.

$ 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

Dan akhirnya kami mengubah kepemilikan tautan menggunakan -hopsi.

mjturner
sumber
Sebagai tangensial yang mengecewakan: tidak cp -asatau tidak installjuga lndapat secara langsung membuat symlink dengan pengguna / grup tertentu.
Ulrich Schwarz
7

Saat bekerja pada symlink, Anda harus memberi tahu sebagian besar alat (chown, chmod, ls ...) untuk tidak menampilkan tautan: Anda harus menambahkan -hparameter, seperti yang dinyatakan dalam manual:

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

Jadi cobalah: sudo chown -h askar.admin /etc/init.d/jboss1

Adrien M.
sumber
1
Jawaban paling ringkas. Kebanyakan orang datang ke sini karena gaunnya sendiri tidak berfungsi - "-h" memperbaikinya.
itoctopus
4

Perhatikan juga bahwa kesalahan yang Anda berikan di atas

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

bukan karena pemilik symlink menjadi orang lain daripada pemilik file asli. Ini (kemungkinan besar) disebabkan oleh pengguna askar tidak memiliki akses tulis ke direktori /etc/init.d.

Stefan Schmiedl
sumber
Saya pikir itu. Menambahkan izin menulis untuk grup tidak ada
Zama Ques