Quyền nào để ghi tệp PID trong / var / run


51

Ubuntu

chạm: không thể chạm `/var/run/test.pid ': Quyền bị từ chối

Tôi đang bắt đầu start-stop-daemon và muốn viết tệp PID trong / var / run start-stop-daemon được chạy với tư cách là người dùng chương trình của tôi

/ var / run là root root drwxr-xr-x 9

Tôi muốn tránh đưa người dùng chương trình của tôi vào nhóm gốc.

Câu trả lời:


71

Theo mặc định, bạn chỉ có thể ghi vào / var / run với tư cách là người dùng có ID người dùng hiệu quả là 0 (tức là root). Đây là lý do chính đáng, vì vậy, bất cứ điều gì bạn làm, đừng đi và thay đổi quyền của / var / run ... Thay vào đó, với quyền root, hãy tạo một thư mục trong / var / run:

# mkdir /var/run/mydaemon

Sau đó thay đổi quyền sở hữu thành người dùng / nhóm mà bạn muốn chạy quy trình của mình:

# chown myuser:myuser /var/run/mydaemon

Bây giờ chỉ định sử dụng / var / run / mydaemon thay vì / var / run.

Bạn luôn có thể kiểm tra điều này bằng cách chạy thử nghiệm như người dùng đang nghi vấn.


5
Điều này làm việc tốt với tôi nhưng khi tôi khởi động lại máy chủ thì /var/run/mydaemonthư mục đã biến mất.
myborobudur

17
Đây không phải là một câu trả lời hoàn chỉnh, / var / run là tmpfs theo mặc định trên Ubuntu. Mỗi khi máy chủ được khởi động, lệnh mkdir và lệnh chown cần được chạy lại.
Tim

1
@Tim làm thế nào về chỉnh sửa ing câu trả lời và hoàn thành nó?
kaiser

Nếu bạn đang làm việc với daemon thì một giải pháp sạch sẽ là thêm đường dẫn / var / run / mydaemon vào tệp đơn vị systemd như được mô tả ở đây . Một giải pháp hacky dễ dàng hơn là thêm các lệnh mkdir và chown vào tập lệnh init.d (nếu có)
odedfos

1
Một câu trả lời mở rộng tốt hơn là ở đây: superuser.com/a/1127720/71795 một câu trả lời sai có vẻ rất thanh lịch ở đây: stackoverflow.com/a/5174433 . Tóm tắt: sử dụng /tmphoặc ~.
Tim

13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

điều này sẽ không hoạt động, vì nó sẽ bị mất trong lần khởi động lại tiếp theo ( /var/runlà một tmpfs trên Ubuntu).

Giải pháp khả thi duy nhất là chạy mkdir và chmod như một phần của tập lệnh khởi động.


3

Bạn có thể thử điều này. Tạo một thư mục / var / run / test / và sau đó thay đổi quyền của thư mục này cho cùng một người dùng khi chương trình của bạn chạy. "chown / var / run / test /". Bây giờ trong ứng dụng của bạn thay đổi vị trí của tệp PID thành /var/run/test/test.pid. Điều này sẽ có được những điều làm việc cho bạn.


2

Còn việc sử dụng bit "dính" trên / var / run thì sao?

chmod + t / var / chạy?

Có thể làm rối tung một số ứng dụng khác, nhưng có vẻ như nó sẽ là một giải pháp khác.

Tuy nhiên, bây giờ tôi sẽ gắn bó với việc tạo một thư mục / var / run riêng biệt.


1

Các mục trong /etc/permissionslà vĩnh viễn. Tạo một mục ở đó để làm cho quyền sở hữu và quyền cho một thư mục vĩnh viễn.


-6

Để tránh đưa người dùng chương trình của bạn vào nhóm gốc, hãy cho phép người khác viết quyền truy cập:

# chmod 757

3
Không bao giờ thực hiện chmod 757 trên / var / run! Điều này sẽ gây ra sự cố bảo mật nghiêm trọng
michel

1
Đây là một ý tưởng khủng khiếp. Nó sẽ gây ra sự cố bảo mật tiềm ẩn lớn
Tom O'Connor

Ngay cả khi chúng tôi bỏ qua vấn đề bảo mật, chmod 757cũng sẽ chỉ hoạt động cho đến lần khởi động lại tiếp theo. Xin lỗi về việc tạo một câu trả lời mới, nhưng dường như không có cách nào để trả lời bình luận khác.
Vladimir Nicolici

@michel, tác giả không bao giờ nói để làm một chmodtrên /var/run. Tác giả có thể có nghĩa là nó cho thư mục con ứng dụng. Không chắc chắn tất cả những gì ồn ào về.
Acumenus
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.