Một tập tin có thể thực thi được có thể được đọc?


9

Nếu một tập tin có quyền -rwx-wx-wxthì người dùng khác và nhóm có thể đọc nó, hoặc nó chỉ có thể được thực thi và viết? Có một số cách để đọc một tập tin thực thi bằng cách thực hiện nó?


Không có cách tiêu chuẩn mà tôi có thể nói.
Tim

Câu trả lời:


18

Một tệp có -rwx-wx-wxquyề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-wxlà 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.


Chỉ là một câu hỏi ngẫu nhiên trừu tượng: Liệu các công cụ lược tả / gỡ lỗi có hoạt động trên các tệp thực thi chỉ với các quyền thực thi không?
Sairam

@Sairam: Thí nghiệm nói không: chmod 111 hello ; gdb ./hellonói ./hello: Permission denied.; rnóiNo executable file specified.
Keith Thompson

Đối với một tệp không thể thực thi, một cái gì đó như -rw - w - w- có thể hữu ích cho một cái gì đó như tệp nhật ký mà bạn muốn mọi người có thể ghi thông tin vào nhật ký mà không thể đọc được. Tất nhiên, họ chỉ có thể làm trống tập tin, nhưng đó là một vấn đề riêng biệt.
Dave

6

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

4
Một tập lệnh shell yêu cầu truy cập READ cũng như EXECUTE để chạy. Tuy nhiên, một nhị phân biên dịch KHÔNG. Do đó, một nhị phân được biên dịch với các quyền ở trên có thể được thực thi bởi bất kỳ ai!
mdpc

1
Tôi cho rằng điều này đưa ra câu hỏi về những gì OP đang cố gắng thực hiện, tức là tại sao nhị phân được biên dịch lại có thể ghi được? Bộ quyền (733) thực sự đã mất một chút thời gian để tôi tìm ra, vì nó không chuẩn.
cjc

2

Câu trả lời đơn giản là không : chỉ có exectòa nhà chọc trời mới có thể đọc một tệp mà không yêu cầu quyền truy cập đọc (mặc dù bắt buộc truy cập thực thi ). An openO_RDONLYhoặc O_RDWRsẽ thất bại.


1

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.


Điều này chỉ đúng nếu một chmod| chownđã được thực hiện
warren
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.