it-swarm-vi.com

khả năng tiếp cận biến môi trường trong Linux

Có lẽ đây là một câu hỏi nhỏ, nhưng làm thế nào các biến môi trường trong Linux có thể truy cập được giữa những người dùng khác nhau?

ví dụ. nếu Alice hành quyết

export FAVORITE_FOOD=`cat /home/alice/fav_food.txt`

Eve có thể nói món ăn yêu thích của Alice không? (Giả sử cả Alice và Eve đều là người dùng bình thường và Eve không có quyền truy cập đọc vào /home/alice/fav_food.txt)

43
Yoav Aner

Ban đầu tôi định nói "không". Giá trị biến môi trường là trên mỗi người dùng và không người dùng nào khác có thể đọc hoặc ghi vào env của người dùng khác. bình. Tuy nhiên, có một mẩu tin thú vị trên SO chỉ ra rằng root ít nhất có thể đọc thông tin này thông qua /proc/<pid>/environ. Tôi đã không nhận thức được giao diện dành riêng cho Linux này cho đến bây giờ.

https://stackoverflow.com/a/532284/643314

Như đã nói, có vẻ như giao diện này vẫn không thể đọc được đối với những người dùng khác, ngay cả khi họ ở trong cùng một nhóm. Các quyền được đặt thành 400 cho tệp môi trường và/Proc ngăn chmod ảnh hưởng đến nó. Tôi nghi ngờ rằng miền bảo mật để phân tách biến môi trường giữa những người dùng vẫn còn nguyên vẹn và không thể bỏ qua các phương tiện thông thường.

4
logicalscope

Mặc dù câu trả lời đúng về mặt lý thuyết của Gilles: Tôi sẽ không đặt bí mật vào các biến môi trường.

  • Các biến môi trường thường được xác định ở gần đỉnh của cây quy trình (ví dụ: thông qua $HOME/.profile).
  • Người dùng không coi nội dung của môi trường là bí mật.

Nó đủ để một quá trình duy nhất ghi lại các biến môi trường vào một tệp có thể đọc được trên thế giới: env >> env-traces.txt hoặc tương tự. Bạn không thể kiểm soát nó.

2
slowhand

Trong hầu hết các trường hợp, người dùng khác không thể đọc các biến môi trường của bạn. Tuy nhiên, lỗ hổng bảo mật nổi tiếng mà một phiên bản của chương trình setuid chạy cùng một người dùng như bất kỳ phiên bản nào khác của chương trình setuid có thể được khai thác. Điều này có nghĩa là nếu ai đó chạy chương trình setuid và người khác có thể khai thác một chương trình khác được setuid cho cùng một người dùng để đọc từ /proc/<pid>/environ sau đó họ có thể đọc các biến môi trường của chương trình. Đây là một lý do tại sao bạn nên sử dụng người dùng mới cho bất kỳ trình nền nào bạn viết thay vì lạm dụng người dùng không có ai.

0

nếu không có chính sách nghiêm ngặt, LÝ THUYẾT có một cách nếu việc xuất này được thực hiện trong tập lệnh người dùng đăng nhập bash cho Alice: Eve tạo một tập lệnh để in env và đặt các bit SETUIDGID trong chmod và sau đó chọn nó cho Alice, sau đó thực thi. Kịch bản sẽ được thực thi theo uid của Alice và nó sẽ tự động chạy theo Alice. Sau đó, nó rò rỉ dữ liệu qua stdout =) Nhưng phải có một thiết lập hệ thống rất yếu để thực hiện một thủ thuật như vậy. Tôi đã thấy một hộp có cấu hình khủng khiếp như vậy trong thực hành pháp y của tôi, vì vậy đó không phải là một trò đùa.

0
Alexey Vesnin