В Спецификация базового каталога XDG - очень интересная спецификация для пользовательских каталогов. Он также предоставляет хорошие значения по умолчанию, за исключением XDG_RUNTIME_DIR
.
Сейчас я пишу программу, которая должна создавать именованные каналы. Это клиент-серверная структура для каждого пользователя (есть FIFO для сервера и FIFO для каждого клиента).
Если XDG_RUNTIME_DIR
не определен, в настоящее время я использую подкаталог для каждого пользователя в /tmp
- но он не обеспечивает всех указанных условий (а именно абзац, начинающийся с «Срок службы каталога ДОЛЖЕН быть привязан к пользователю, вошедшему в систему…»)
Является /tmp/myserver-$USER
достаточно хорошо?
редактировать
Я видел в другом месте несколько предложений:
.
совершенно неудовлетворительно (хотя бы потому, что это не абсолютный путь)./var/run/user/$USER
- неплохо, но этот каталог не существует (по крайней мере, на моем компьютере с Debian тестирование)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