Mặc định tốt cho XDG_RUNTIME_DIR?


10

Các XDG cơ sở mục Đặc điểm kỹ thuật là một spec rất thú vị cho các thư mục người dùng. Nó cũng cung cấp các giá trị mặc định tốt, ngoại trừ XDG_RUNTIME_DIR.

Bây giờ tôi đang viết một phần mềm cần tạo các ống có tên. Nó là một khung máy khách-máy chủ cho mỗi người dùng (có một FIFO cho máy chủ và một FIFO cho mỗi khách hàng).

Nếu XDG_RUNTIME_DIRkhông được xác định, tôi hiện đang sử dụng thư mục con theo người dùng trong /tmp- nhưng nó không đảm bảo tất cả các điều kiện được chỉ định (viz. Đoạn bắt đầu bằng "Thời gian tồn tại của thư mục PHẢI bị ràng buộc với người dùng đang đăng nhập" )

/tmp/myserver-$USERđủ tốt?

Biên tập

Tôi thấy ở đâu đó một vài gợi ý:

  • . là không thỏa đáng (ít nhất vì nó không phải là một con đường tuyệt đối).
  • Tôi cũng đã thấy /var/run/user/$USER- không tệ, nhưng thư mục đó không tồn tại (ít nhất là trên hộp của tôi đang chạy thử nghiệm Debian )

Câu trả lời:


4

/tmpđược sử dụng bởi nhiều chương trình theo cách tương tự. Trên hệ thống của tôi, tôi có thể thấy các thư mục /tmp/orbit-$USER(được sử dụng bởi Gnome của ORBit2) và /tmp/.X11-unix/(Xorg và X11) với rất nhiều đường ống, ehm, ổ cắm, trong đó. Tôi chắc chắn cũng có những người khác, vì vậy tôi thấy không có gì sai với những gì bạn đang làm. Chỉ cần chuẩn bị rằng vì đó là một vị trí có thể ghi trên thế giới, một quy trình độc hại có thể chiếm quyền điều khiển vị trí (xác minh các quyền trước khi bạn viết cho nó).

Tôi cũng có thể giới thiệu $TMPDIRcho những người sử dụng pam_mktemp , vì thư mục này chỉ có thể truy cập bởi người dùng.


PAM là giải pháp đúng đắn, cảm ơn! Trên Debian, nó được gọi là libpam-tmpdir
cadrian

5

SystemD làm cho /run/user/$USERbắt buộc.

http://www.freedesktop.org/software/systemd/man/file-hierarchy.html

Truy cập ghi không đặc quyền

Các quy trình không có đặc quyền thường thiếu quyền truy cập ghi vào hầu hết các cấu trúc phân cấp.

Các trường hợp ngoại lệ cho người dùng bình thường là /tmp, /var/tmp, /dev/shm, cũng như các thư mục chính $HOME(thường được tìm thấy dưới đây /home) và thư mục runtime $XDG_RUNTIME_DIR(tìm thấy bên dưới /run/user) của người sử dụng, mà tất cả đều có thể ghi.

Đối với hệ thống không có đặc quyền chỉ xử lý /tmp, /var/tmp/dev/shmđó vẫn được phép. Nếu một quy trình hệ thống không có đặc quyền cần một thư mục riêng, có thể ghi trong /varhoặc /run, bạn nên tạo nó trước khi bỏ các đặc quyền trong mã daemon, để tạo nó thông qua các đoạn tmpfiles.d (5) trong khi khởi động hoặc thông qua RuntimeDirectory= chỉ thị của các đơn vị dịch vụ (xem systemd.unit (5) để biết chi tiết).


2

Tạo thư mục /tmp/service-$USER.id với id duy nhất. Đối với exsmple, trong vỏ:

mktemp -d /tmp/service-"$USER".XXX

1
Làm thế nào để bạn đảm bảo yêu cầu rằng cùng một thư mục được sử dụng từ lần đăng nhập đầu tiên đến lần đăng xuất cuối cùng của người dùng?
cadrian

Hmmm ... tạo symlink ~ người dùng / .service / tmp_dir. Nếu thư mục được liên kết không tồn tại, hãy tạo mới
Selivanov Pavel
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.