Tại sao Linux / POSIX có lchown mà không phải lchmod?


11

Có vẻ như Linux hỗ trợ thay đổi chủ sở hữu của một liên kết tượng trưng (nghĩa là lchown) nhưng thay đổi chế độ / sự cho phép của một liên kết tượng trưng (nghĩa là lchmod) không được hỗ trợ . Theo như tôi có thể thấy điều này phù hợp với POSIX. Tuy nhiên, tôi không hiểu tại sao một người sẽ hỗ trợ một trong hai hoạt động này mà không phải cả hai. Động lực đằng sau này là gì?


1
Các quyền của một symlink luôn luôn lrwxrwxrwx. A chmodkhông có ý nghĩa ở đây. Theo liên kết dẫn bạn đến các quyền mục tiêu.
ott--

2
@ott: Trên Linux, các quyền của symlink luôn là những quyền bạn đưa ra chính xác vì Linux không hỗ trợ lchmod. Nhưng các HĐH giống Unix khác đều hỗ trợ nó (ví dụ Mac OS X ), vì vậy câu hỏi đặt ra là tại sao Linux không hỗ trợ lchown.
Florian Brucker

Câu trả lời:


9

Linux, giống như hầu hết các hệ thống giống Unix (Apple OS / X là một trong những trường hợp ngoại lệ hiếm hoi), bỏ qua các quyền trên các liên kết tượng trưng khi giải quyết các mục tiêu của chúng chẳng hạn.

Tuy nhiên, quyền sở hữu các liên kết tượng trưng, ​​giống như các tệp khác, có liên quan khi được phép đổi tên hoặc hủy liên kết các mục nhập của chúng trong các thư mục có tập tbit, chẳng hạn như /tmp.

Để có thể xóa hoặc đổi tên tệp (symlink hoặc không) /tmp, bạn cần phải là chủ sở hữu của tệp. Đó là một lý do người ta có thể muốn thay đổi quyền sở hữu của một liên kết tượng trưng (để cấp hoặc xóa quyền để hủy liên kết / đổi tên nó).

$ ln -s / /tmp/x
$ rm /tmp/x
# OK removed

$ ln -s / /tmp/x
$ sudo chown -h nobody /tmp/x
$ rm /tmp/x
rm: cannot remove ‘/tmp/x’: Operation not permitted

Ngoài ra, như Mark Plotnick đã đề cập trong câu trả lời đã bị xóa của mình , các ứng dụng sao lưu và lưu trữ cần lchown()khôi phục liên kết tượng trưng cho chủ sở hữu ban đầu của chúng. Một tùy chọn khác là chuyển euid và egid trước khi tạo symlink, nhưng điều đó sẽ không hiệu quả và làm phức tạp các cách quản lý đúng trên thư mục mà symlink được trích xuất.


Tôi không chắc liệu đây có phải là động lực ban đầu hay không, nhưng nó đưa ra lý do tại sao thiết kế này hữu ích. Cảm ơn!
Florian Brucker

0

Không có lchmod () trong posix nhưng fchmodat () sẽ cho phép đặt quyền của liên kết tượng trưng. Điều này vẫn không yêu cầu quyền của các liên kết tượng trưng để được đánh giá.


1
OP biết không có lchmodlà phù hợp với POSIX. Câu trả lời này thêm gì mà chưa có trong câu hỏi?
muru

Các op đã hỏi tại sao chỉ có một trong số các chức năng được hỗ trợ và tôi đã giải thích rằng hầu như cả hai đều có sẵn, chỉ không có tên được đề cập.
schily

1
Làm sao vậy Tiêu chuẩn nói : Một số triển khai có thể cho phép thay đổi chế độ của các liên kết tượng trưng. Điều này không được hỗ trợ bởi các giao diện trong đặc tả POSIX. Các hệ thống với sự hỗ trợ như vậy cung cấp một giao diện có tên lchmod (). Để hỗ trợ việc triển khai như vậy, fchmodat () có tham số cờ. Tất cả điều này nói rằng có một cờ cho fchmodat cho phép thực hiện thay đổi permlink symlink. Không nhất thiết là nó có thể.
muru

Chính xác, vì quyền của các liên kết tượng trưng không được đánh giá từ 35 năm, nên việc thay đổi các chế độ là vô nghĩa. Fchmodat () tồn tại cho tính trực giao. Lợi thế thực sự duy nhất là futplesat () là dấu thời gian có thể thiết lập cho các liên kết tượng trưng giúp con người hiểu được cây thư mục.
schily

@schilly, OS / X không tôn trọng quyền trên symlink. Ở đó, nếu bạn không có quyền đọc, bạn không thể giải quyết mục tiêu của họ.
Stéphane Chazelas
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.