Trường hợp sử dụng hợp lệ đối với một tập tin chỉ thực hiện quyền của tập tin là gì?


20

Tôi đã đọc lên chmod và các chế độ bát phân của nó . Tôi thấy rằng chỉ 1được thực hiện. Trường hợp sử dụng hợp lệ cho quyền chỉ thực thi là gì? Để thực thi một tập tin, người ta thường muốn đọc và thực thi quyền.

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo

Câu trả lời:


41

Các kịch bản Shell yêu cầu quyền đọc được thực thi, nhưng các tệp nhị phân thì không:

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission

Hiển thị nội dung của một tập tin và thực hiện chúng là hai điều khác nhau. Với các kịch bản shell, những điều này có liên quan vì chúng được "thực thi" bằng cách "đọc" chúng vào một shell mới (hoặc hiện tại), nếu bạn tha thứ cho việc đơn giản hóa. Đây là lý do tại sao bạn cần có thể đọc chúng. Binaries không sử dụng cơ chế đó.

Đối với các thư mục, quyền thực thi là một chút khác nhau; điều đó có nghĩa là bạn có thể thực hiện mọi thứ với các tệp trong thư mục đó (ví dụ: đọc hoặc thực thi chúng). Vì vậy, giả sử bạn có một bộ công cụ /toolsmà bạn muốn mọi người có thể sử dụng, nhưng chỉ khi họ biết về chúng. chmod 711 /tools. Sau đó, những thứ /toolscó thể thực thi được có thể được chạy một cách rõ ràng (ví dụ /tools/mytool), nhưng ls /tools/sẽ bị từ chối. Tương tự, các tài liệu có thể được lưu trữ trong /private-docsđó có thể được đọc nếu và chỉ khi tên tệp được biết.


1
Ngẫu nhiên không có điểm nào trong việc thiết lập chỉ thực thi trên các nhị phân hệ thống nữa trừ khi bạn chạy ftp ẩn danh.
Joshua

1
Ngoài ra, thiết lập bit thực thi trên một thư mục cho phép bạn thực cdhiện nó.
vườn


1
BTW, không cần bao gồm tiêu đề C stdio.hở đây. Tôi đề nghị loại bỏ nó.
Spikatrix

1
@Kevin: Có lẽ vì không có lsvà hoàn thành tab làm việc khiến công việc bảo trì trở nên khó chịu và nó cung cấp rất ít nếu có bất kỳ lợi ích bảo mật thực tế nào. Hầu hết các tệp mà kẻ tấn công có thể quan tâm dù sao cũng ở các vị trí tiêu chuẩn đã biết hoặc vị trí của chúng có thể được phát hiện gián tiếp từ dữ liệu trong các tệp khác (làm thế nào các chương trình sử dụng hợp pháp các tệp đó biết tìm chúng ở đâu?).
Ilmari Karonen

4

Trên Gentoo, các chương trình thực thi được setuid (được thiết lập để chạy với sự cho phép của chủ sở hữu thay vì kẻ xâm lược) bị từ chối truy cập đọc (chế độ 4711). Điều này là để thêm một lớp bảo vệ chống lại việc khai thác lỗi để hỗ trợ leo thang đặc quyền.

Nếu kẻ tấn công không có đặc quyền có thể đọc tệp setuid và biết về một lỗi cho phép tấn công kiểu trả về kiểu libc , chúng có thể sử dụng nội dung của tệp để dự đoán các chức năng hoặc thư viện hữu ích nhất định có thể ở đâu được đặt trong bộ nhớ khi chương trình được gọi.

Các hệ thống hiện đại thường bao gồm các biện pháp bảo vệ bổ sung có hiệu quả hơn, chẳng hạn như ASLR , nhưng các hạn chế hiện diện trong nền tảng 32 bit có thể khiến chúng dễ bị khai thác hơn.


Lưu ý rằng việc bảo vệ chỉ áp dụng cho các bản phát hành dựa trên nguồn. Với các bản phân phối dựa trên nhị phân, kẻ tấn công chỉ có thể nhìn vào bản sao chương trình của chính chúng để tìm ra nơi thú vị.
Đánh dấu

Một nhị phân chỉ thực thi cũng có thể có mật khẩu nhúng. Người dùng có thể chạy chương trình và nó có thể gửi mật khẩu đến máy chủ, nhưng người dùng sẽ không thể lấy mật khẩu từ đó (hệ thống không nên cho phép họ tạo các bãi rác lõi).
Barmar

1

Có vẻ như giá trị của "chỉ thực hiện" không được sử dụng nhiều cho một tệp, nhưng nó có thể được sử dụng để ngăn người ta đọc nội dung của một thư mục.

$ mkdir foo
$ touch foo/bar
$ ls foo/
bar
$ chmod 100 foo
$ ls foo/
ls: cannot open directory foo/: Permission denied

1
Điều đáng nói là lý do này hữu ích là vì bạn vẫn có thể đọc foo / bar nếu bạn biết tên tệp. Tôi đã sử dụng điều này trên các máy chủ web.
Random832

0

Bạn cần phải có quyền đọc và thực thi để thực thi tập lệnh. Đọc nội dung của một kịch bản là những gì cho phép nó thực thi, vì vậy bạn cần có khả năng read and execute. Nếu không, bạn không thể chạy một kịch bản mà không có nó.

Trường hợp sử dụng hợp lệ cho quyền chỉ thực thi là gì?

Bảo vệ. Một số có thể muốn bảo vệ các tập tin của họ và ngăn chặn những người khác thực thi hoặc sử dụng chúng.


2
chmod 000Sẽ không cho phép bất cứ ai ngoại trừ root. Đôi khi bạn không cần phải mở rộng chỉ để bảo vệ - điều này phụ thuộc vào ý định của người dùng. Để làm, hãy nói "re-chmod" tệp trở lại các quyền có thể đọc và có thể ghi mà bạn sẽ phải thực hiện điều này thông qua root. Nếu bạn không thể truy cập root, nó sẽ khó khăn.
Jordan Savell

2
Giả sử bạn có một bộ công cụ /toolsmà bạn muốn mọi người có thể sử dụng, nhưng chỉ khi họ biết về chúng. chmod 711 /tools. Sau đó, những thứ thực thi trong /tools có thể được chạy một cách rõ ràng, nhưng ls /tools/sẽ bị từ chối.
DopeGhoti

1
Câu trả lời tốt! Dạy tôi một cái gì đó ở đó quá. Tại sao các tệp nhị phân không cần quyền đọc được thực thi?
Jordan Savell

2
Bởi vì hiển thị nội dung của một tập tin và thực thi chúng là hai điều khác nhau. Các tập lệnh Shell được "thực thi" bằng cách "đọc" chúng vào một trình bao mới (nếu bạn tha thứ cho việc đơn giản hóa), đó là lý do tại sao bạn cần có thể đọc chúng. Binaries không sử dụng cơ chế đó.
DopeGhoti

1
Ah lẽ thường. Tôi nghĩ đó là một cái gì đó khác biệt - cảm ơn!
Jordan Savell
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.