Các thư mục thế giới có thể ghi mặc định là gì?


14

Trong một hệ thống tệp Linux tiêu chuẩn, thư mục phổ biến nào trong số này có thể ghi được theo mặc định ?

 /tmp 
 /etc
 /var 
 /proc 
 /bin 
 /boot
 /....
 ....

Tại sao họ có thể ghi được trên thế giới? Điều đó có gây ra rủi ro bảo mật?

Câu trả lời:


16

Các thư mục bắt buộc FHS duy nhất thường có thể ghi trên thế giới là /tmp/var/tmp. Trong cả hai trường hợp, đó là vì chúng được dự định để lưu trữ các tệp tạm thời có thể được thực hiện bởi bất kỳ ai.

Cũng phổ biến là /dev/shm, như một tmpfs (hệ thống tệp được hỗ trợ bởi RAM), để truy cập nhanh vào dữ liệu cỡ trung bình được chia sẻ giữa các quy trình hoặc chỉ tạo các tệp được đảm bảo sẽ bị hủy khi khởi động lại.

Cũng có thể có một /var/mailhoặc /var/spool/mail, và đôi khi các thư mục bộ đệm khác. Chúng được sử dụng để giữ thư tạm thời trước khi nó được xử lý. Chúng không phải lúc nào cũng có thể ghi trên thế giới, tùy thuộc vào các công cụ được sử dụng. Khi có, đó là vì các tệp có thể được tạo ở đó bằng các công cụ người dùng để xử lý bằng trình nền.

Tất cả các thư mục này thường có tập bit dính ( t), nghĩa là chỉ chủ sở hữu của tệp hoặc thư mục mới có thể di chuyển hoặc xóa các tệp trong đó.

Bất kỳ chương trình nào đang chạy như bất kỳ người dùng nào cũng có thể tạo các tệp trong các thư mục này và tùy thuộc vào chương trình tạo để thực hiện đúng như bảo mật cho dữ liệu cụ thể của nó. Không có vấn đề bảo mật chung nào khác ngoài việc ai đó có khả năng lấp đầy hệ thống tập tin, nhưng có rất nhiều phạm vi để một chương trình hiểu sai.

Đã có một số động thái đối với các /tmpthư mục dành riêng cho dịch vụ . Việc này tránh một số lỗi tiềm ẩn có thể xảy ra, do đó, chương trình không bị lỗi trong cách sử dụng thư mục.


Bạn có thể tìm thấy các thư mục có thể ghi trên thế giới trên hệ thống của mình với:

find / -maxdepth 3 -type d -perm -777

8

/tmp, /var/tmp/var/lockcó thể ghi trên thế giới theo mặc định. Có thể có các liên kết tượng trưng, ​​chẳng hạn như /usr/tmp/var/tmp, được cung cấp để tương thích với các ứng dụng cũ hơn.

/tmp/var/tmpcó thể ghi trên thế giới vì chúng được sử dụng cho bất kỳ người dùng nào cho bất kỳ lưu trữ tạm thời nào. /var/lockcó thể ghi trên thế giới để mọi quá trình, chạy như bất kỳ người dùng nào, có thể tạo các tệp khóa ở một vị trí trung tâm.

Có rủi ro bảo mật? Không, nhưng loại có.

Các quyền cho tất cả các thư mục đó 1777, với hàng đầu 1bit dính . Điều đó có nghĩa là trong khi bất kỳ ai cũng có thể tạo một tệp trong các thư mục có thể ghi trên thế giới đó, thì chỉ chủ sở hữu mới có thể xóa các tệp của chính họ (và tất nhiên, người dùng root cũng có thể).

Rủi ro bảo mật có thể xảy ra từ việc tạo tệp tạm thời không an toàn. Vì các thư mục này là miễn phí cho tất cả, người dùng cần thực hiện các biện pháp phòng ngừa để đảm bảo rằng các tệp họ tạo thực sự là các tệp mới, thay vì mở tệp hiện có hoặc liên kết tượng trưng có thể được người dùng độc hại trồng ở đó. Nếu các tệp được tạo bằng các kỹ thuật thích hợp, chẳng hạn như open(…, O_EXCL)hoặc mkstemp(3), thì rủi ro đó sẽ tránh được.


1
Trên các hệ thống hiện đại, một trong những liên kết tương thích đó là /var/lock/run/lock
camh

2

/tmp

Đó là rủi ro, bởi vì bạn cần thêm mã bổ sung để sử dụng nó một cách an toàn. Rõ ràng điều này bị bỏ qua.

Một ví dụ gần đây được đưa ra bởi Steve Kemp. http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html

./mgmt/tools/SysAPI.cc:  tmp = fopen("/tmp/shadow", "w");
./mgmt/tools/SysAPI.cc:    system("/bin/mv -f /tmp/shadow /etc/shadow");

Nếu bạn (kẻ tấn công) thay thế / tmp / bóng trước dòng thứ hai, bạn có thể thay thế mật khẩu của mọi người. (Tôi đoán cuộc tấn công yêu cầu bạn tạo tệp trước dòng đầu tiên và làm cho tệp có thể ghi được trên thế giới).

Systemd trên linux cho phép giảm thiểu các lỗ hổng như vậy bằng cách cách ly / tmp cho nhiều dịch vụ hệ thống. (Ngoại trừ những người "sử dụng sai / tmp làm vị trí cho ổ cắm IPC và các nguyên tắc giao tiếp khác").

Trong Fedora Linux - http://fedoraproject.org/wiki/Features/ServicePrivateTmp

Giải thích về hệ thống - http://0pulum.de/blog/projects/security.html


"Tôi đoán cuộc tấn công yêu cầu bạn tạo tệp trước dòng đầu tiên" - Thật vậy. Nếu tệp không tồn tại, dòng đầu tiên sẽ tạo nó dưới dạng người dùng đang chạy (có thể là root) và một người dùng độc hại khác sẽ không có quyền thay thế nó trước dòng thứ hai. Nếu tệp đã tồn tại, fopenghi đè lên nhưng không thiết lập lại quyền, vì vậy người dùng độc hại vẫn có thể thay đổi. Ngoài ra, một người dùng độc hại có thể đã làm một cái gì đó giống như ln -s /bin/bash /tmp/shadowtrước dòng đầu tiên, để một hệ thống nhị phân thiết yếu sẽ bị ghi đè.
hvd

2

Để tìm các thư mục có thể ghi trên thế giới, bạn có thể sử dụng

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Đối với tập tin thay đổi loại thành f

Đối với loại liên kết tượng trưng đến l

Để thiết lập bit dính:

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
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.