Mục đích của các quyền Linux như 111 hoặc 333 (tức là người dùng có thể thực thi , nhưng không thể đọc tệp), nếu khả năng thực thi không tự động ngụ ý khả năng đọc?
Mục đích của các quyền Linux như 111 hoặc 333 (tức là người dùng có thể thực thi , nhưng không thể đọc tệp), nếu khả năng thực thi không tự động ngụ ý khả năng đọc?
Câu trả lời:
Tôi đã chơi với nó và rõ ràng, quyền thực thi không bao hàm quyền đọc. Các nhị phân có thể được thực thi mà không thể đọc được:
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
Mặc dù vậy, tôi không thể thực thi các tập lệnh, trừ khi chúng có cả các bit cho phép đọc và thực thi:
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
, và sau đó bash cố mở hw.sh
để đọc (và không thành công).
nó có ý nghĩa đối với các thư mục, ví dụ nếu bạn giữ (bí mật) các tệp thực thi trong một thư mục cụ thể và sau đó cho phép người dùng gọi các tệp đó mà không thể xem nội dung thư mục (nhưng biết rằng có một tệp cụ thể ở đó sau khi bạn thông báo cho họ!). 333 so với 111 cho phép ghi / xóa các tệp đến / từ các thư mục đó mà không thể xem nội dung của thư mục.
Rõ ràng không phải tất cả các kết hợp đều hữu ích, nhưng để lấy một kết hợp mà bạn đã đề cập cụ thể ... Bạn thực sự không cần sự read
cho phép để thực thi một tệp - chỉ có execute
quyền - trừ khi tệp được đề cập là tập lệnh (ví dụ: tập lệnh shell ( .sh
), perl-script ( .pl
), v.v.). Các tệp nhị phân bình thường có thể được thực thi chỉ với sự execute
cho phép. On * BSD-systmes, một số thực thi cho execute
phép mà không read
permisson, đặc biệt là trên lệnh "bảo mật quan trọng" - ví dụ su
.
Vậy tại sao không cung cấp cho người dùng - cho phép read
(và chỉ execute
-permisson)? Trở thành một tập tin mà người dùng không thể đọc được, người dùng đó cũng không thể sao chép ! Xóa read
quyền, ngăn người dùng tạo các bản sao thực thi "cá nhân" của riêng họ - mà sau này họ có thể lạm dụng (ví dụ: get SUID=root on
).
Và không có sự cho write
phép, ngăn không cho một tập tin bị xóa.
Tâm trí bạn, chứ không phải cho không read
-nor write
-permission cho chủ sở hữu là một phổ biến chút, nhưng đôi khi nó có thể là một ý tưởng tốt để ngăn chặn ngay cả những owner
từ chỉ xóa một tập tin. Tất nhiên owner
- không đề cập đến root
- có thể luôn tránh được các biện pháp đó, nếu không phải theo những cách khác, thì đơn giản chỉ bằng chmod
sự cho phép trên tệp.
owner
chỉ xóa một tập tin." - ngoại trừ việc bạn không cần bất kỳ loại quyền nào trên một tệp (đọc, viết hoặc thực thi) để xóa nó.
/proc/${PID}/maps
và sau đó đọc các phần có liên quan của bộ nhớ /proc/${PID}/mem
không? Hay việc hạn chế các quyền trên tệp của tệp thực thi cũng hạn chế quyền đọc trên các phần có liên quan trong bộ nhớ trong khi thực thi? (Cái sau dường như không thể xảy ra, IMO.)