Đường ống được đặt tên để liên lạc giữa các quá trình [đóng]


0

Tôi muốn sử dụng một ống có tên để liên lạc giữa tập lệnh máy chủ PHP và dịch vụ, tức là một quá trình (tập lệnh Python) lắng nghe ở đầu kia của ống. Dịch vụ này chạy có chủ ý dưới một người dùng không được bảo mật và cũng tạo ra đường ống với một số lệnh Python tương đương với mkfifo mypipe. Điều này mang lại một tập tin giả mypipe thuộc sở hữu của người dùng không có đặc quyền này.

Vì tập lệnh PHP chạy như một người dùng khác, nên nó không thể ghi vào đường dẫn đó ngay lập tức. Tất nhiên có nhiều cách khác nhau để giải quyết vấn đề. Tuy nhiên, tôi muốn tránh những cạm bẫy an ninh có thể xảy ra.

Vì vậy, câu hỏi của tôi là trong thư mục nào tôi nên đặt ống có tên (thư mục máy chủ là / var / www), chủ sở hữu và quyền nào cần có và cuối cùng, làm thế nào và ở đâu tôi nên xác thực (thoát) nội dung được gửi từ PHP -Mô tả dịch vụ.

Câu trả lời:


1

Có rất nhiều câu hỏi ở đây, một số trong đó không có câu trả lời chính tắc. Vì vậy, vui lòng đọc nó là 0,02 đô la của tôi, không phải là "sự thật cơ bản".

  • Xác nhận đầu vào: Tôi coi việc siêng năng xác nhận đầu vào càng sớm càng tốt, trong trường hợp của bạn, điều này sẽ xảy ra ngay sau khi tập lệnh PHP khởi động, lần thứ hai ngay sau tập lệnh python đã nhận được yêu cầu thông qua FIFO và lần thứ ba sau PHP kịch bản đã nhận được trả lời từ FIFO.
  • Định dạng dữ liệu giao diện (thoát): Bạn có thể (và IMHO nên) cố gắng sử dụng thư viện được thử nghiệm để giúp bạn đạt được điều đó: JSON xuất hiện, vì cả PHP và Python đều có thư viện mã hóa / giải mã tốt. Trong trường hợp này, tôi sẽ mã hóa dữ liệu ngay lập tức trước khi ghi nó vào FIFO và giải mã nó ngay sau đó. Trong thực tế, bạn có thể muốn xem xét một cặp phương thức "send_to_interface" / "receive_from_interface" ở mỗi bên, kết hợp mã hóa / ghi tương ứng. đọc / giải mã thành một nguyên tử. Nếu bạn muốn sử dụng một cơ chế giao diện khác, bạn chỉ cần tạo một cặp mới mà không cần phải chạm vào phần còn lại của mã.
  • Quyền sở hữu và đặc quyền của FIFO: Tôi sẽ đi theo con đường tạo một nhóm chỉ bao gồm người dùng dịch vụ và người dùng www, sau đó thực hiện chgrp servicegroup && chmod 660 trên HỘI. Bạn có thể muốn nghiên cứu sử dụng ổ cắm thay vì FIFO - điều này giúp giảm bớt tình trạng đặc quyền và chuẩn bị cho bạn một tình huống, trong đó dịch vụ và máy chủ web không chạy trên cùng một máy. Tùy thuộc vào những gì dịch vụ python của bạn làm, nó cũng có thể trả hết để chạy nó trong một lớp web và sử dụng cURL ở phía PHP để truy cập nó. Việc đóng gói được đề xuất trong viên đạn trước đây giúp dễ dàng chuyển đổi giữa các cơ chế khác nhau như vậy.

Cảm ơn những hiểu biết. Vì tôi đã sử dụng JSON để chuyển, vì vậy, nếu bạn biết, tôi có thể sử dụng trợ giúp về cách thực hiện thoát bằng thư viện mã hóa / giải mã ở cả hai đầu (hoặc tôi có thể coi thư viện chuẩn là an toàn). Liên quan đến chgrp servicegroup điều này làm phiền tôi một chút rằng tôi có thể cần phải thêm một mục vào tệp sudoers cho người dùng dịch vụ để có quyền thay đổi nhóm hoặc tạo tập lệnh khởi tạo để thực thi lệnh với các đặc quyền.
highsciguy
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.