Câu trả lời:
Một tệp có -rwx-wx-wx
quyền có quyền đọc / ghi / thực thi cho chủ sở hữu và quyền ghi / thực thi (nhưng không đọc) cho mọi người khác.
Nếu đó là tập lệnh (thường là tệp văn bản có dòng #!
trên dòng đầu tiên), thì nó không thể được thực thi bởi người khác, vì thực thi tập lệnh thực sự thực thi trình thông dịch, phải có khả năng đọc tập lệnh. (Trình thông dịch phải là tệp nhị phân, không phải là tập lệnh khác.) (Trên thực tế, điều đó không đúng với tất cả các hệ thống; Ubuntu, với nhân Linux 3.2.0, cho phép bản thân trình thông dịch trở thành tập lệnh phiên dịch. Dường như có giới hạn khoảng 4 cấp độ. Điều đó không có khả năng liên quan đến câu hỏi này.)
Nếu đó là tệp thực thi nhị phân, nó có thể được thực thi trực tiếp, nhưng nội dung của nó không thể đọc được. Điều này có nghĩa là, ví dụ, ai đó không phải là chủ sở hữu có thể chạy nó dưới dạng lệnh, nhưng không thể lấy một bản sao của tệp thực thi.
Tất nhiên việc thực thi đòi hỏi phải đọc, nhưng nó được đọc bởi kernel chứ không phải bởi người dùng. Bạn có thể có được một số thông tin về nội dung của tệp thực thi bằng cách kiểm tra bộ nhớ của quá trình khi nó đang chạy, nhưng tôi nghi ngờ rằng bạn có thể xây dựng lại tệp thực thi nhị phân. Và nếu tệp thực thi là setuid, bạn không thể kiểm tra bộ nhớ của quá trình (trừ khi bạn có quyền truy cập vào tài khoản mà nó đang thực thi).
Ngẫu nhiên, -rwx-wx-wx
là một bộ quyền rất kỳ quặc; nó bảo vệ tập tin khỏi bị đọc bởi bất kỳ ai khác ngoài chủ sở hữu, nhưng cho phép bất cứ ai sửa đổi nó. Tôi không thể nghĩ về một trường hợp có ý nghĩa.
chmod 111 hello ; gdb ./hello
nói ./hello: Permission denied.
; r
nóiNo executable file specified.
Với các quyền đó, chỉ chủ sở hữu của tệp có thể thực thi nó.
Những người dùng khác có thể viết cho nó, nhưng không thực thi nó (vì thực thi trong trường hợp này ngụ ý là có thể đọc nó) nhưng họ có thể viết cho nó như một loại hộp đen:
user1:~$ cd /tmp
user1:/tmp$ echo "hostname" > testfile.sh
user1:/tmp$ chmod +x testfile.sh
user1:/tmp$ ./testfile.sh
server.example.com
user1:/tmp$ chmod 733 testfile.sh
user1:/tmp$ ls -l testfile.sh
-rwx-wx-wx 1 user1 user1 9 Jan 19 21:09 testfile.sh
user1:/tmp$ sudo su - user2
user2:~$ cd /tmp
user2:/tmp$ ./testfile.sh
./testfile.sh: Permission denied
user2:/tmp$ cat testfile.sh
cat: testfile.sh: Permission denied
user2:/tmp$ echo 'echo hello' >> testfile.sh
user2:/tmp$ ./testfile.sh
./testfile.sh: Permission denied
user2:/tmp$ logout
user1:/tmp$ ./testfile.sh
server.example.com
hello
Tất nhiên bất kỳ tập tin có thể được đọc bởi người dùng root.
Ngoài ra, trình tải hệ thống, quản lý bộ nhớ, bộ trao đổi, v.v .... sẽ đọc một tệp có quyền 'x', nếu không thì không thể thực thi được.
Các lỗ hổng có thể có trong việc tiết lộ nội dung thực thi có thể là tệp / Proc cho quy trình, tệp cốt lõi hoặc bằng cách sử dụng trình gỡ lỗi.
chmod
| chown
đã được thực hiện