Ai có thể thay đổi quyền của một tập tin / thư mục?


14

Tôi tin rằng (không chắc chắn) rằng chủ sở hữu của một tệp / thư mục và người dùng root là những người dùng duy nhất được phép thay đổi các quyền của một tệp / thư mục. Tôi có đúng không hoặc có người dùng nào khác cũng được phép thay đổi quyền không?

Câu trả lời:


19

Chỉ chủ sở hữu và root(siêu người dùng) mới được phép thay đổi quyền của tệp hoặc thư mục. Điều này có nghĩa là chủ sở hữu và siêu người dùng có thể đặt các quyền read ( r), write ( w) và exec ( x). Nhưng thay đổi quyền sở hữu (người dùng / nhóm) của các tệp và thư mục bằng các lệnh chown/ chgrpchỉ được phép root.


19
Chủ sở hữu của một tệp có thể thay đổi quyền sở hữu nhóm của tệp đó nếu người dùng là thành viên của nhóm mới.
Kusalananda

7

Đối với mục đích hoạt động bình thường, chỉ có root và chủ sở hữu có thể chmod. Ngoài ra, root có thể chownchgrp, và hơn nữa chủ sở hữu có thể chgrpmiễn là chủ sở hữu là thành viên của nhóm mục tiêu.

Vì mục đích bảo mật, có một trường hợp khác: bất kỳ người dùng nào có quyền ghi vào thư mục chứa tệp có thể thay thế tệp bằng bản sao và do đó trở thành chủ sở hữu, có được khả năng sửa đổi quyền và nội dung.

Thích như vậy:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

Chúng tôi đã tạo một thư mục và viết một tập tin dưới dạng root. Vì root sở hữu tập tin, chúng tôi không thể ghi vào nó, chúng tôi cũng không thể chmod:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

Tuy nhiên, chúng tôi có quyền ghi vào thư mục, vì vậy chúng tôi có thể thay thế tệp để có quyền sở hữu:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

Và bây giờ chúng tôi là chủ sở hữu, tất nhiên chúng tôi có thể làm những gì chúng tôi muốn với tệp đó:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

Tương tự, bất kỳ người dùng nào có quyền ghi vào bất kỳ thư mục nào trong đường dẫn đầy đủ dẫn đến tệp có thể thay thế cấu trúc thư mục từ thời điểm đó, do đó có được quyền sở hữu tệp với tên đã cho. Tất nhiên, quyền sở hữu hoặc quyền của tệp gốc thực tế (mà chúng tôi đã đổi tên thành "yourfile2") không bị thay đổi.

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

Bạn có biết liệu có bản phân phối Linux nào hỗ trợ các tính năng bảo mật bổ sung như Windows không? Nếu tôi ở trong Windows, tôi có thể đặt quyền xóa tệp thành bị từ chối để ngăn xóa ngay cả khi thư mục được cho phép.
Kevin Li

Nhiều (hầu hết?) Các hương vị Linux hiện tại hỗ trợ danh sách kiểm soát truy cập cấp tệp, ( getfacl / setfacl) cho phép linh hoạt hơn các quyền của tệp kiểu "cổ điển". Xóa tệp trong * nix hoạt động bằng cách xóa liên kết đến tệp khỏi thư mục, do đó việc xóa tệp luôn được kiểm soát bởi các quyền của thư mục; các quyền của tập tin không có vai trò ở đó.
Bass

Rất đúng với triết lý Unix của tất cả mọi thứ là một tập tin. Vì vậy, bạn đang nói rằng một điều như vậy không thể được thực hiện trong Linux?
Kevin Li

3
@KevinLi Câu trả lời này chưa thực sự đầy đủ. Bạn có thể đặt bit dính trên một thư mục để hạn chế khả năng những người không phải là chủ sở hữu xóa hoặc đổi tên tệp. Xem câu hỏi này và câu trả lời của nó: unix.stackexchange.com/questions/79395/ Khăn Không cần sử dụng ACL hoặc các chương trình khác.
Andrew Henle

Các hệ thống tập tin @KevinLi * nix rất khác với các hệ thống của Windows. Các tệp tồn tại tách biệt với hệ thống phân cấp thư mục và chúng có thể có một số "liên kết cứng" trỏ đến chúng trong các thư mục. Xóa một tập tin thực sự có nghĩa là loại bỏ liên kết cứng, được thực hiện trên thư mục. Tệp theo dõi có bao nhiêu liên kết cứng đang trỏ đến nó và tệp thực sự sẽ ở trên đĩa miễn là có ít nhất một liên kết cứng trỏ đến nó. Do đó, xóa được điều khiển bởi các điều khoản thư mục, mà làm có một lựa chọn đặc biệt để chỉ cho phép xóa bởi chủ sở hữu tập tin & thư mục gốc, như Andrew nói.
Bass

1

Các chmodlệnh khá trực tiếp gọi các cuộc gọi hệ thống cùng tên; trang hướng dẫn chmod(2)cuộc gọi hệ thống (trên Linux 4.10) cho biết:

UID hiệu quả của quy trình gọi phải phù hợp với chủ sở hữu của tệp hoặc quy trình phải được đặc quyền (Linux: nó phải có CAP_FOWNERkhả năng).

Nếu quy trình gọi không được đặc quyền (Linux: không có CAP_FSETIDkhả năng) và nhóm tệp không khớp với ID nhóm hiệu quả của quy trình hoặc một trong các ID nhóm bổ sung của nó, S_ISGIDbit sẽ bị tắt, nhưng điều này sẽ bị tắt, nhưng điều này sẽ bị tắt sẽ không gây ra lỗi được trả lại.

Vì vậy, có, một quá trình chạy như root có thể thay đổi bất kỳ quyền của tập tin nếu nó không giảm CAP_FOWNERkhả năng.


Cũng quan tâm là chown; trang người đàn ông cho chown(2)biết:

Chỉ một quy trình đặc quyền (Linux: một quy trình có CAP_CHOWNkhả năng) mới có thể thay đổi chủ sở hữu của một tệp. Chủ sở hữu của một tệp có thể thay đổi nhóm của tệp thành bất kỳ nhóm nào mà chủ sở hữu đó là thành viên. Một quy trình đặc quyền (Linux: with CAP_CHOWN) có thể thay đổi nhóm tùy ý.

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.