2014-11-17 17 views
8

Tôi đang sử dụng Sails.js 0.10.5 trên Nút 0.10.33 trên Ubuntu Trusty. Tôi muốn thực hiện quá trình nút như một người dùng không phải root với các đặc quyền ít nhất có thể trong môi trường sản xuất. Tôi cảm thấy thoải mái với các tùy chọn khác nhau để liên kết với các cổng dưới 1024 nhưng tôi quan tâm nhiều hơn đến quyền truy cập thư mục.Chạy sails.js với ít đặc quyền nhất trong Sản xuất

Lý tưởng nhất, tôi muốn quy trình nút chỉ có quyền ghi vào các tệp nhật ký của nó và không có gì khác. Nó chỉ nên có quyền truy cập đọc vào thư mục chứa app.js và bên dưới.

Hiện tại tôi cần cấp quyền truy cập ghi vào thư mục ./.tmp và cũng vào thư mục ./views do các tác vụ grunt chạy lúc khởi động. Tôi muốn thực hiện các tác vụ grunt vào thời gian triển khai như một người dùng khác thay vì ở thời gian chạy. Lệnh sails www xuất hiện đầy hứa hẹn nhưng tôi không thể đạt được kết quả mong muốn.

Ai đó có thể vui lòng chỉ cho tôi đúng hướng để chạy Sails.js với không ghi quyền truy cập vào nội dung, chế độ xem, v.v ... của nó không?

+0

Điều này nghe có vẻ như chỉ đơn giản là tạo một người dùng (với quyền cụ thể cho các thư mục cụ thể) và chạy 'nút' (hoặc bắt đầu ứng dụng của bạn) khi người dùng đó hoạt động. Bạn đã thử chưa – Whymarrh

+0

'sudo -u foo grunt something' và' sudo -u nút thanh app.js' (hoặc tương tự)? – Whymarrh

+0

@Whymarrh Theo tôi hiểu, hãy chạy 'nút app.js' cho ứng dụng dựa trên Sails, sau đó khởi chạy' grunt' như một tiến trình con làm tài khoản người dùng tương tự. Nếu ai đó biết làm thế nào để tách tự động thực hiện grunt từ Sails, điều này sẽ giúp trả lời câu hỏi của tôi. –

Trả lời

2

Giải pháp đơn giản nhất đối với tôi có vẻ là tách các tác vụ grunt cần đặc quyền nâng cao thành một tệp riêng biệt mà bạn có thể gọi với người dùng khác khi triển khai. Sau đó, buồm sẽ không cần phải chạy bất cứ điều gì và có thể được đọc chỉ.

1

CHỈNH SỬA: Tôi sử dụng PM2 với apache làm proxy (với mod WS).

Bạn có thể sử dụng một proxy như apache để định tuyến từ cổng 80 đến các cổng máy chủ nội bộ khác dựa trên máy chủ lưu trữ.

Bằng cách này, bạn có thể chạy nhiều ứng dụng trong cùng một máy chủ.

Nó có rất nhiều chức năng hữu ích như xem nhật ký cách ứng dụng varius trong thiết bị đầu cuối, khởi động lại và đăng nhập ứng dụng bị lỗi, chạy ứng dụng dưới dạng người dùng, trạng thái ứng dụng ... v.v.

PM2 liên kết: https://github.com/Unitech/pm2 configs

PM2: https://github.com/Unitech/PM2/blob/development/ADVANCED_README.md#options

+0

Tôi đang sử dụng PM2 ở một số nơi và mãi mãi ở những nơi khác. Trong cả hai trường hợp, nó chỉ đảm bảo rằng ứng dụng nút tiếp tục chạy trong trường hợp có lỗi.Những công cụ này không ảnh hưởng đến các quyền được yêu cầu bởi ứng dụng nút. –

+0

có, nhưng bạn có thể sử dụng nó với một proxy như apache hoặc nginx –

+0

Theo đoạn đầu tiên của câu hỏi của tôi, hỗ trợ cổng 80 với quyền hạn chế là một vấn đề được giải quyết thông qua proxy như Apache hoặc Nginx, hoặc thông qua bản đồ cổng iptables hoặc thông qua cap_net_bind_service. Tôi đang hướng chạy ứng dụng nút mà không có quyền ghi vào các tệp nguồn của nó. –

4

Sử dụng sails www để xây dựng tài sản tĩnh

chmod -R 440 tất cả các file và thư mục, do đó người dùng của bạn và máy chủ web (nhóm) có thể truy cập các tập tin.

Sử dụng nginx/apache để lưu trữ máy chủ web trên cổng 80/443 và yêu cầu proxy để chạy buồm (chạy trên cổng riêng của nó hoặc trên một ổ cắm unix).

Chạy cánh buồm bằng PM2 để giữ cho nó chạy và quản lý/thu thập nhật ký.

Cánh buồm sẽ nhấc lên, nhưng sẽ không thể ghi thư mục .tmp, thậm chí không cần thiết vì tất cả các tệp tĩnh của bạn sẽ được định tuyến đến thư mục www qua nginx/apache.

+0

Ngoài ra, bạn có thể di chuyển thư mục www bên ngoài các cánh buồm và có nó thuộc sở hữu của máy chủ web. – user3590543

+0

Điều này có vẻ khả thi. Bạn có gợi ý rằng sails.js sẽ nâng và tiếp tục chạy ngay cả khi nó không ghi vào thư mục .tmp của nó? Tôi cũng thấy rằng buồm/grunt đã cố gắng viết thư mục ./views/. –

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