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

10

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

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

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

Это /tmp/myserver-$USERдостаточно хорошо?

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

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

  • . совершенно неудовлетворительно (хотя бы потому, что это не абсолютный путь).
  • Я также видел /var/run/user/$USER- неплохо, но этот каталог не существует (по крайней мере, на моем компьютере, на котором выполняется тестирование Debian )
cadrian
источник

Ответы:

4

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

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

chutz
источник
PAM - правильное решение, спасибо! На Debian это называется libpam-tmpdir
cadrian
5

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)).

go2null
источник
2

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

mktemp -d /tmp/service-"$USER".XXX
Селиванов Павел
источник
1
Как вы обеспечиваете требование, чтобы один и тот же каталог использовался от первого входа в систему до последнего выхода из системы пользователя?
Кадриан
Хммм ... создать символическую ссылку ~ user / .service / tmp_dir. Если связанный каталог не существует, создайте новый
Селиванов Павел