Quyền truy cập đặc quyền vào các tập tin và thư mục thực sự được xác định bởi các khả năng, không chỉ bởi việc có root
hay không. Trong thực tế, root
thường có tất cả các khả năng có thể, nhưng có những tình huống mà tất cả / nhiều trong số chúng có thể bị loại bỏ, hoặc một số được cung cấp cho người dùng khác (quy trình của họ).
Tóm lại, bạn đã mô tả cách kiểm tra kiểm soát truy cập hoạt động cho một quy trình đặc quyền. Đây là cách các khả năng khác nhau thực sự ảnh hưởng đến nó:
Khả năngCAP_DAC_OVERRIDE
chính ở đây là , một quá trình có thể "bỏ qua việc đọc, ghi và thực hiện kiểm tra quyền". Điều đó bao gồm đọc và ghi vào bất kỳ tệp nào, cũng như đọc, viết và truy cập các thư mục.
Nó không thực sự áp dụng để thực thi các tệp không được đánh dấu là có thể thực thi được. Các bình luận tronggeneric_permission
( fs/namei.c
), trước khi kiểm tra quyền truy cập cho các tập tin, nói rằng
Đọc / ghi DAC luôn luôn quá mức. Các bộ xử lý có thể thực thi được quá mức khi có ít nhất một bộ bit thực thi.
Và mã kiểm tra rằng có ít nhất một x
bit được đặt nếu bạn đang cố thực thi tệp. Tôi nghi ngờ đó chỉ là một tính năng tiện lợi, để ngăn việc vô tình chạy các tệp dữ liệu ngẫu nhiên và gặp lỗi hoặc kết quả kỳ lạ.
Dù sao, nếu bạn có thể ghi đè quyền, bạn có thể tạo một bản sao thực thi và chạy nó. (Mặc dù nó có thể tạo sự khác biệt về mặt lý thuyết cho các tập tin setuid của một quá trình có khả năng trọng quyền tập tin ( CAP_DAC_OVERRIDE
), nhưng không có khả năng liên quan khác ( CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
). Nhưng có CAP_DAC_OVERRIDE
cho phép chỉnh sửa /etc/shadow
và các công cụ như vậy, do đó, nó xấp xỉ bằng để chỉ có quyền truy cập root đầy đủ.)
Ngoài ra còn có CAP_DAC_READ_SEARCH
khả năng cho phép đọc bất kỳ tệp nào và truy cập bất kỳ thư mục nào, nhưng không thực hiện hoặc ghi vào chúng; và CAP_FOWNER
điều đó cho phép một quy trình thực hiện những thứ thường chỉ dành riêng cho chủ sở hữu tệp, như thay đổi các bit quyền và nhóm tệp.
Ghi đè bit dính trên các thư mục chỉ được đề cập bên dưới CAP_FOWNER
, vì vậy dường như CAP_DAC_OVERRIDE
sẽ không đủ để bỏ qua điều đó. (Nó sẽ cung cấp cho bạn quyền viết, nhưng thông thường trong các thư mục dính dù sao bạn cũng có và +t
hạn chế nó.)
(Tôi nghĩ rằng các thiết bị đặc biệt được tính là "tệp" ở đây. Ít nhất generic_permission()
chỉ có loại kiểm tra thư mục, nhưng tôi đã không kiểm tra bên ngoài đó.)
Tất nhiên, vẫn có những tình huống mà ngay cả các khả năng sẽ không giúp bạn sửa đổi các tệp:
- một số tệp trong
/proc
và /sys
, vì chúng không thực sự là tệp
- SELinux và các mô-đun bảo mật khác có thể giới hạn root
chattr
không thay đổi +i
và chỉ gắn +a
cờ trên ext2 / ext3 / ext4, cả hai đều dừng ngay cả root và ngăn chặn cả việc đổi tên tập tin, v.v.
- hệ thống tập tin mạng, nơi máy chủ có thể thực hiện kiểm soát truy cập của riêng mình, ví dụ:
root_squash
trong NFS ánh xạ gốc tới không ai
- FUSE, mà tôi cho rằng có thể làm bất cứ điều gì
- gắn kết chỉ đọc
- thiết bị chỉ đọc
capabilities(7)
trang người đàn ông - hãy xem xét việc gửi báo cáo lỗi!