Назад | Перейти на главную страницу

Хорошее значение по умолчанию для XDG_RUNTIME_DIR?

В Спецификация базового каталога XDG - очень интересная спецификация для пользовательских каталогов. Он также предоставляет хорошие значения по умолчанию, за исключением XDG_RUNTIME_DIR.

Сейчас я пишу программу, которая должна создавать именованные каналы. Это клиент-серверная структура для каждого пользователя (есть FIFO для сервера и FIFO для каждого клиента).

Если XDG_RUNTIME_DIR не определен, в настоящее время я использую подкаталог для каждого пользователя в /tmp - но он не обеспечивает всех указанных условий (а именно абзац, начинающийся с «Срок службы каталога ДОЛЖЕН быть привязан к пользователю, вошедшему в систему…»)

Является /tmp/myserver-$USER достаточно хорошо?

редактировать

Я видел в другом месте несколько предложений:

SystemD делает /run/user/$USER вроде бы обязательно.

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

Непривилегированный доступ для записи

У непривилегированных процессов обычно отсутствует доступ на запись к большей части иерархии.

Исключения для обычных пользователей: /tmp, /var/tmp, /dev/shm, а также домашний каталог $HOME (обычно находится ниже /home) и каталог времени выполнения $XDG_RUNTIME_DIR (находится ниже /run/user) пользователя, которые все доступны для записи.

Только для непривилегированных системных процессов /tmp, /var/tmp и /dev/shm доступны для записи. Если непривилегированному системному процессу нужен частный каталог с возможностью записи в /var или /run, рекомендуется либо создать его перед сбросом привилегий в коде демона, либо создать его с помощью фрагментов tmpfiles.d (5) во время загрузки, либо через RuntimeDirectory= директива сервисных единиц (подробности см. в systemd.unit (5)).

/tmp уже используется многими программами подобным образом. В моей системе я вижу /tmp/orbit-$USER (используется ORBit2 Gnome) и /tmp/.X11-unix/ (Xorg и X11) каталоги с большим количеством каналов, эээ, сокетов в них. Я уверен, что есть и другие, поэтому не вижу ничего плохого в том, что вы делаете. Просто будьте готовы к тому, что, поскольку это место для записи в мире, вредоносный процесс может захватить это место (проверьте разрешения, прежде чем писать в него).

Я также могу рекомендовать $TMPDIR для тех, кто использует pam_mktemp, поскольку этот каталог доступен только пользователю.

Создайте каталог /tmp/service-$USER.id с уникальным идентификатором. Например, в оболочке:

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