Tại sao nó là xấu khi có tập tin root viết vào một thư mục không thuộc sở hữu của root?


28

Điều này xuất hiện trong một bình luận cho một câu hỏi khác và tôi rất thích nó nếu ai đó có thể giải thích lý do cho điều này với tôi.

Tôi đã đề nghị Apache ghi lại các lỗi cho một Vhost đã cho vào thư mục chính của người dùng. Điều này đã bị bắn hạ vì nó không an toàn. Tại sao?

Tôi đã yêu cầu làm rõ trong một bình luận trả lời nhưng tất cả những gì tôi nhận được là không an toàn khi viết root trong một thư mục không thuộc sở hữu của root. Một lần nữa, ai đó có thể giải thích?

Cảm ơn,

Bart.


4
Apache đang làm gì khi chạy bằng root - nguyên tắc ít đặc quyền nhất sẽ chống lại điều đó!
Jonathan Leffler

1
Apache đang chạy dưới dạng www, nhưng đang được bắt đầu với quyền root nên nó có thể liên kết với cổng 80 như là tiêu chuẩn. Rõ ràng nó cũng đăng nhập như root.
Bart B

Câu trả lời:


31

Bởi vì một người dùng xấu có thể cố gắng trỏ tệp rootđang ghi vào một vị trí khác . Điều này không đơn giản, nhưng thực sự có thể.

Ví dụ: nếu người dùng sẽ tìm cách tạo liên kết tượng trưng từ nhật ký được cho là của Apache thành / etc / Shadow thì bạn sẽ đột nhiên có một hệ thống không sử dụng được. Apache ( root) sẽ ghi đè thông tin đăng nhập của người dùng khiến hệ thống bị lỗi.

ln -s /etc/shadow /home/eviluser/access.log

Nếu tệp access.log không thể ghi được bởi người dùng, có thể khó chiếm quyền điều khiển, nhưng tránh khả năng này là tốt hơn!

Một khả năng có thể là sử dụng logrotate để thực hiện công việc , tạo liên kết đến một tệp chưa tồn tại, nhưng logrotate đó sẽ ghi đè ngay khi nhật ký phát triển:

ln -s /etc/shadow /home/eviluser/access.log.1

Lưu ý :

Các liên kết tượng trưng phương pháp duy nhất là một trong những cuộc tấn công có thể, được coi là một bằng chứng của khái niệm.

Bảo mật phải được thực hiện với một tâm trí Danh sách trắng , không đưa vào danh sách đen những gì chúng ta biết là một vấn đề.


Có cách nào để thiết lập quyền trên đó để họ chỉ có thể đọc tệp và không xóa, chỉnh sửa hoặc làm bất cứ điều gì khác (như chown, chmod, v.v.) không?
Joshua

bạn nên thực hiện thao tác này trên mọi tệp mục tiêu có thể! tệp có thể ghi này là tệp thích, không phải là liên kết thuộc sở hữu của kẻ tấn công khi anh ta tạo.
drAlberT

2
@Joshua: chown chỉ có thể được thực hiện bằng root. chmod có thể được thực hiện bởi bất cứ ai sở hữu tập tin. IIRC, đổi tên có thể được thực hiện bởi bất cứ ai sở hữu thư mục. Như AlberT đề cập, việc tạo một liên kết trước khi root tạo tập tin có thể được thực hiện bởi bất cứ ai có thể ghi vào thư mục.
atk

2
@atk: Ngoài ra, bất cứ ai sở hữu thư mục thường có thể xóa các tệp khỏi nó (trừ khi +tbit dính được đặt), ngay cả khi chúng không có quyền ghi vào các tệp (vì unlink () là ghi vào thư mục, không phải là ghi vào thư mục tập tin). Ngay cả khi root tạo tập tin trước thời hạn, chủ sở hữu thư mục vẫn có thể xóa nó và thay thế nó bằng một liên kết tượng trưng đến một cái gì đó khác.
James Sneeringer

1
Nếu eviluser có thể ghi vào / home / eviluser (hoặc có thể thay đổi các quyền trên thư mục - họ sở hữu nó, IOW), thì việc cấp phép trên access.log là gì không quan trọng; kẻ ác có thể (tái) di chuyển tệp và đặt liên kết tượng trưng của chúng vào vị trí của nó. Một câu hỏi khác là liệu phần mềm có chú ý đến những gì nó mở ra không.
Jonathan Leffler

1

Nguyên tắc chung của việc không có các quy trình ghi vào một thư mục mà họ không sở hữu hoặc tin tưởng là một quy trình tốt. Nhưng trong trường hợp cụ thể này, thật hợp lý khi tin rằng mã Apache mở nhật ký bằng O_NOFOLLOWvv: đăng nhập vào thư mục chính của người dùng là một thiết lập phổ biến.

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.