2013-06-03 76 views
7

Câu hỏi của tôi liên quan đến this question, nhưng các quy trình được đề cập được chạy từ cron và bởi người dùng không phải root. Như vậy, nhiều người dùng không thực sự có dirs nhà (hoặc dirs nhà của họ trỏ đến /usr/share/package_name mà không phải là một vị trí lý tưởng cho một tập tin PID).Vị trí ưa thích cho tệp PID của daemon hệ thống chạy như người dùng không phải là người chủ gốc

Lưu trữ trong /var/run có vấn đề, vì thư mục này không thể ghi ngoại trừ gốc.

Tôi có thể sử dụng /tmp, nhưng tôi tự hỏi liệu điều này có lý tưởng vì lý do bảo mật hay không.

Tôi có thể sắp xếp tập lệnh khởi động để tạo thư mục trong /var/run được sở hữu bởi người dùng thích hợp (Tôi không thể thực hiện việc này tại thời điểm cài đặt gói, vì /var thường được gắn là tmpfs, vì vậy không liên tục).

Thực tiễn tốt nhất ở đây là gì?

+0

Tôi có một ý tưởng. Nếu bạn đang sử dụng/tmp, nhưng tìm kiếm một pidfile được gọi là 'yourdaemon.pid.UNIQUE_KEY' và được sở hữu bởi người dùng daemon? – hek2mgl

+0

@ hek2mgl: 'UNIQUE_KEY' sẽ phải là ngẫu nhiên, nhưng có một số khả năng. Nó làm cho việc phát hiện tệp PID có chút khó chịu, vì daemon phải đọc tất cả các tệp trong '/ tmp/*' và so sánh với mẫu và quyền sở hữu dự kiến, nhưng có vẻ như nó phải an toàn. – Flimzy

+0

@ hek2mgl: Nếu bạn muốn biến câu trả lời thành câu trả lời, tôi sẽ bỏ phiếu. Và tại thời điểm này, tôi muốn nói rằng nó dẫn đầu để được chấp nhận. – Flimzy

Trả lời

2

Câu hỏi hay :), tôi đang có chính xác cùng một lúc. Tôi không chắc chắn nếu đây là câu trả lời đúng nhưng tôi hy vọng nó sẽ giúp và tôi sẽ đánh giá cao thông tin phản hồi là tốt.

Tôi đã tìm kiếm và tìm thấy rằng việc đăng ký daemon cho mỗi người dùng dưới dạng dịch vụ dbus là một giải pháp thanh lịch. dbus có thể đảm bảo rằng dịch vụ chỉ chạy một lần. không cần một pidfile.

Một giải pháp (của tôi hiện tại) sẽ là để tạo ra các tập tin PID trong một thư mục như:

$HOME/.yourdaemon/pid 

Sau khi bình luận của bạn tôi nhận ra, rằng bạn không thể viết thư cho gia đình. Tôi sẽ đề nghị xem xét dbus

Cập nhật

Tôi có một ý tưởng. Nếu bạn đang sử dụng/tmp, nhưng tìm kiếm một pidfile được gọi là yourdaemon.pid.UNIQUE_KEY và được sở hữu bởi người dùng daemon? Điều này sẽ làm việc tốt.

UNIQUE_KEY nên được tạo ngẫu nhiên (ưu tiên sử dụng tempnam vì đây là bằng chứng điều kiện chủng tộc).

+0

Đề xuất $ HOME của bạn không hoạt động trong trường hợp của tôi, vì những lý do tôi giải thích trong câu hỏi. Cụ thể, không có $ HOME hoặc $ HOME là vị trí không thể ghi. Tôi sẽ xem xét dbus, mặc dù. – Flimzy

+4

Trong khi hành vi hoàn toàn trẻ con của bạn, bao gồm bỏ phiếu nối tiếp xuống và bỏ phiếu nối tiếp hàng loạt các câu hỏi khác của tôi, hãy nhắc tôi theo cách khác, tôi không sẵn sàng hạ xuống cấp của bạn. Tôi đang sử dụng gợi ý tệp PID được đặt tên ngẫu nhiên trong mã của tôi, vì vậy bạn nhận được tín dụng chấp nhận. – Flimzy

+0

Đây không phải là trẻ con. Đó là đôi khi cách tốt nhất để đưa ai đó trở lại trực tuyến. Nếu tôi có số điện thoại của tôi, tôi sẽ gọi cho bạn. Và có, tất nhiên bạn đang sử dụng ý tưởng của tôi vì nó là tốt (và kết quả của một đêm không ngủ) :) hehe – hek2mgl

-2

@Flimzy - Vấn đề bảo mật là gì?

Chắc chắn nếu ai đó có quyền truy cập vào máy, họ có thể sử dụng lệnh hệ thống ps? Sau đó, họ nhận được id quá trình từ miệng ngựa.

Vì vậy, câu trả lời là đặt nó ở bất cứ đâu bạn muốn và tập trung vào các vấn đề bảo mật khác. tức là người đó truy cập máy của bạn như thế nào?

+2

Tối thiểu, kẻ tấn công có quyền truy cập ghi vào/tmp, có thể đánh lừa một tập lệnh khi nghĩ rằng nó đang chạy. Tùy thuộc vào cách mà kịch bản tương tác với tập tin PID của nó, có lẽ cái gì đó nguy hiểm hơn có thể được thực hiện. – Flimzy

+2

Tất nhiên, tôi có thể có kịch bản của tôi kiểm tra quyền sở hữu và quyền của tập tin PID của nó như là một biện pháp bảo vệ rằng ai đó đã không làm điều gì đó khó chịu với nó ... Nhưng sau đó nó cần phải có một vị trí thay thế để ghi tập tin PID mới của nó. ... – Flimzy

+0

@Flimzy - Tôi sẽ nói với bạn nếu người thu thập có thể ghi vào '/ tmp' thì kiến ​​thức về ID quá trình của một daemon rất thấp trong danh sách. (nghĩa là họ có thể truy cập máy tính của bạn bằng cách nào) –