Cách an toàn để máy chủ web ghi tệp


3

Tôi đã tạo một webhook trên github gọi máy chủ web của tôi để cập nhật các tệp trong web root. Tôi đã bảo mật phần gửi bằng cách sử dụng mã thông báo trên github để chỉ các yêu cầu từ github có thể thực thi tập lệnh. Câu hỏi của tôi là vì tập lệnh sẽ chạy như máy chủ web (dữ liệu www), cách tốt nhất để cấp cho nó quyền ghi vào webroot là gì. Là cho phép người dùng máy chủ web viết quyền trên webroot là một ý tưởng tốt? Các lựa chọn thay thế là gì?


Như bạn có thể đọc trong nhiều nguồn khác nhau GIT không phải là công cụ tốt nhất để triển khai thực tế. Đối với cách bạn muốn triển khai của bạn hoạt động, điều đó tùy thuộc vào bạn. Bạn có thể cung cấp cho người dùng quyền vĩnh viễn hoặc tạm thời. Bạn có thể có một tập lệnh với tập s-bit thực sự được gọi hoặc một số thiết lập khác. Ứng dụng web của bạn thực sự làm gì? Nó có chấp nhận đầu vào của người dùng không? Có bao nhiêu người đang sử dụng nó, v.v ... tất cả có thể có liên quan và cũng là loại bảo mật bạn muốn.
Seth

Câu trả lời:


1

Đầu tiên viết một kịch bản thực hiện các bước triển khai chính xác cần thiết. Sau đó cho www-data quyền điều hành kịch bản cụ thể đó thông qua sudo. Ví dụ: sử dụng quy tắc sudoers sau:

www-data ALL=(someuser) /path/to/deploy.sh

(Thay thế "someuser" bằng tài khoản thực sự sở hữu các tệp của ứng dụng web.)

Trình xử lý webhook sau đó sẽ thực thi:

sudo -u someuser /path/to/deploy.sh

Bằng cách này, máy chủ web của bạn có thể thực hiện cập nhật chính xác như kịch bản nhưng vẫn không có quyền truy cập không cần thiết để xóa tệp hoặc cài đặt phần mềm độc hại vào trang web.


Tôi đã vô hiệu hóa tất cả các hàm thực thi shell cho PHP (tập lệnh webhook của tôi), vì vậy tôi sẽ cần thay đổi điều đó, cộng với tôi nghĩ thay vì thực hiện các thay đổi đối với tệp sudoers tôi có thể tạo tệp thực thi bằng SUID.
Ravi

Các kịch bản Shell không thể là SUID, vì vậy nó sẽ phải là một chương trình được biên dịch - và có nhiều khả năng mắc lỗi ở đó. Ngoài ra, nếu bạn đã vô hiệu hóa tất cả các hàm thực thi shell, bạn sẽ thực hiện triển khai như thế nào?
grawity

Tôi không chắc liệu tôi có làm điều này quá phức tạp hay không nhưng tập lệnh triển khai có thể lắng nghe trên một ổ cắm mà webhook truyền dữ liệu tới. Điều này tránh được suid và phần thực thi từ PHP.
Ravi

Sau đó toàn bộ chủ đề trở nên không liên quan, vì webhook của bạn không ghi bất kỳ tệp nào ở nơi đầu tiên!
grawity
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.