Làm thế nào để thay đổi quyền sở hữu từ các liên kết tượng trưng?


47

Tôi đang đối mặt với một số vấn đề với việc tạo liên kết mềm. Sau đây là tập tin gốc.

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

Tạo liên kết không thành công với vấn đề cấp phép cho chủ sở hữu tệp:

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)

Vì vậy, tôi đã tạo liên kết với các đặc quyền 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

Tiếp theo tôi đã cố gắng thay đổi quyền sở hữu liên kết mềm thành người dùng ban đầu.

$ 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

Nhưng sự cho phép của liên kết mềm không bị thay đổi.

Tôi thiếu gì ở đây để thay đổi sự cho phép của liên kết?


Bạn đang sử dụng hệ điều hành nào?
mjturner

$ cat / etc / redhat-phát hành Red Hat Enterprise Linux Server phát hành 6.6 (Santiago)
Zama Ques

Câu trả lời:


68

Trên hệ thống Linux, khi thay đổi quyền sở hữu liên kết tượng trưng bằng cách sử dụng chown, theo mặc định, nó sẽ thay đổi mục tiêu của liên kết tượng trưng (nghĩa là, bất cứ điều gì liên kết tượng trưng đang trỏ đến ).

Nếu bạn muốn thay đổi quyền sở hữu liên kết, bạn cần sử dụng -htùy chọn để chown:

-h, --no-dereference ảnh hưởng đến từng liên kết tượng trưng thay vì bất kỳ tệp được tham chiếu nào (chỉ hữu ích trên các hệ thống có thể thay đổi quyền sở hữu của một liên kết tượng trưng)

Ví dụ:

$ 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

Lưu ý rằng mục tiêu của liên kết hiện thuộc sở hữu của 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

Và một lần nữa, liên kết test1vẫn thuộc sở hữu của root, mặc dù testđã thay đổi.

$ 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

Và cuối cùng chúng tôi thay đổi quyền sở hữu của liên kết bằng cách sử dụng -htùy chọn.


Như một tiếp tuyến đáng thất vọng: không phải cp -ascũng installkhông lnthể trực tiếp tạo ra các liên kết tượng trưng với một người dùng / nhóm được chỉ định.
Ulrich Schwarz

7

Khi hành động trên các liên kết tượng trưng, ​​bạn phải nói với hầu hết các công cụ (chown, chmod, ls ...) để không hủy đăng ký liên kết: bạn phải thêm -htham số, như đã nêu trong trang web:

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

Hãy thử sudo chown -h askar.admin /etc/init.d/jboss1


1
Câu trả lời ngắn gọn nhất. Hầu hết mọi người đến đây vì chown bởi chính nó không hoạt động - "-h" sửa lỗi này.
itoctopus

4

Cũng lưu ý rằng lỗi bạn đưa ra ở trên

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

không phải do chủ sở hữu của symlink là người khác chứ không phải chủ sở hữu của tệp gốc. Đó là (rất có thể) gây ra bởi người dùng Askar không có quyền ghi vào thư mục /etc/init.d.


Tôi nhận ra rằng . Thêm quyền viết cho nhóm bị thiếu
Zama Ques
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.