2012-10-17 24 views
7

Tôi thấy rất nhiều lời khuyên trực tuyến khác nhau về vị trí phục vụ ứng dụng web của bạn, người dùng chạy ứng dụng nào, v.v.Thực tiễn tốt nhất cho quyền người dùng Linux để chạy ứng dụng web như thế nào?

Ví dụ: tôi đã thấy nó được phân phối từ:/var/www/site ,/srv/www/site,/home/$ USER/trang web.

Tôi đã thấy người dùng là dữ liệu www, $ USER (tức là tài khoản người dùng của tôi) hoặc người dùng tùy chỉnh được tạo riêng cho mục đích đó (ví dụ: uwsgi của người dùng).

Về mặt bảo mật, chương trình tốt nhất mà tôi có thể chọn là gì?

Để tham khảo, tôi đang cố gắng triển khai một trang web Django với Nginx và uwsgi.

Ngay bây giờ, uwsgi đang chạy dưới dạng gốc trong chế độ hoàng đế, với uid/gid được đặt làm dữ liệu www, do đó, chư hầu xuất hiện với các quyền tương tự như công nhân Nginx. Tôi đang phục vụ từ/nhà, nhưng nghĩ đến việc di chuyển.

Trả lời

3

Để biết vị trí, hãy chọn những gì có vẻ phù hợp nhất với bạn. Dưới đây là một số cân nhắc để trợ giúp:

  • Vị trí dưới /var dành cho các tệp mà change in size hoặc thường là "biến".
  • /srv thường chỉ ra các tệp liên quan đến một số dịch vụ đang chạy trên máy.
  • /home thường nên được dành riêng cho người dùng tương tác. Tuy nhiên, bạn có thể đặt thư mục chính của người dùng hệ thống thành bất kỳ thứ gì.

Vì lý do bảo mật, bạn nên phân đoạn càng nhiều càng tốt. Ứng dụng không được chạy với tư cách người dùng giống như máy chủ web, do đó không thể lạm dụng để đọc các tệp nhạy cảm liên quan đến chính máy chủ (.htaccess hoặc bất kỳ thứ gì). Các tệp nhị phân của ứng dụng (hoặc cho Django, nguồn python) phải được sở hữu bởi root, mà không cần phải viết quyền truy cập cho người dùng ứng dụng.

Dưới đây là tôi 2 cent trên làm thế nào để thiết lập nó:

  • Django app: /usr/lib/appname/ hoặc /usr/lib/python/site-packages/appname/ nếu được cài đặt. Thuộc sở hữu của root, chmod 644.
  • tệp của ứng dụng (ví dụ: tệp sqlite db, ổ cắm Unix cho FastCGI, dung lượng tệp được tải lên, v.v.): /var/lib/appname/. Thuộc sở hữu của người dùng ứng dụng, chmod 600.
  • vỏ của người dùng ứng dụng là /bin/nologin, nhà là /var/lib/appname/. Người dùng không có mật khẩu được định cấu hình.
+0

Nếu tôi có virtualenv, nó sẽ nằm trong/var/lib/appname/venv? Ngoài ra, để rõ ràng, người dùng ứng dụng có thể, ví dụ: 'uwsgi', nhưng không phải là người dùng tôi đăng nhập như thông qua ssh (và có quyền sudo)? – user1431368

+0

FWIW, mã python của tôi sống trong/home vì [hướng dẫn Django] (https://docs.djangoproject.com/en/1.4/intro/tutorial01/) (phần "Mã này nên ở đâu?") – user1431368

+0

Có , 'uwsgi' sẽ là lựa chọn tốt cho người dùng ứng dụng của bạn, trừ khi bạn có nhiều ứng dụng đang chạy, trong trường hợp đó bạn có thể muốn người dùng trên mỗi ứng dụng. Người dùng KHÔNG nên có quyền sudo HOẶC quyền đăng nhập. Theo hướng dẫn chỉ ra, điều quan trọng nhất là không có mã của bạn dưới gốc web của bạn. – bonsaiviking

Các vấn đề liên quan