Файлы Sticky bit и сокетов в XDG_RUNTIME_DIR

Я храню некоторые файлы сокетов Unix под подкаталогом под $ XDG_RUNTIME_DIR . В документации я могу читать:

Файлы в этом каталоге МОГУТ быть подвергнуты периодической очистке. Чтобы убедиться, что ваши файлы не удалены, они должны иметь временную метку времени доступа, измененную не реже одного раза в 6 часов монотонного времени, или «липкий» бит должен быть установлен в файле.

Интересно, нужно ли устанавливать липкий бит в каждом файле сокета, чтобы избежать периодической очистки или если достаточно установить липкий бит в подкаталоге, в котором я храню все файлы сокетов.

2 Solutions collect form web for “Файлы Sticky bit и сокетов в XDG_RUNTIME_DIR”

Часть указанной вами спецификации базового каталога XDG говорит о настройке липкого бита на файлы :

Файлы в этом каталоге МОГУТ быть подвергнуты периодической очистке. Чтобы убедиться, что ваши файлы не удалены, они должны иметь временную метку времени доступа, измененную не реже одного раза в 6 часов монотонного времени, или «липкий» бит должен быть установлен в файле .

Спецификация здесь несколько неоднозначна, так как файл может означать каждый объект файловой системы, сущность файловой системы без каталога или обычный файл в зависимости от контекста. Но липкий бит в каталогах оказывает особое влияние на Linux и даже называется другим при использовании в каталогах в man-странице chmod (1) :

Флаг ограниченного удаления или липкий бит – это один бит, интерпретация которого зависит от типа файла. Для каталогов он запрещает непривилегированным пользователям удалять или переименовывать файл в каталоге, если только они не владеют файлом или каталогом; это называется флагом ограниченного удаления для каталога и обычно встречается в каталогах, доступных для записи в мире, таких как / tmp.

Из-за этого разумно предположить, что файл в документации XDG в этом контексте означает объект каталога без каталога .

Но поскольку спецификация не является полностью однозначной, она будет зависеть от реализации механизма очистки вашего дистрибутива. Похоже, что в настоящее время такой периодической очистки не существует, по крайней мере, на Fedora и в Linux Mint, но поскольку это может измениться в будущем, и нет никакой информации о том, как дистрибутивы будут интерпретировать эту часть спецификации, безопаснее ее устанавливать на каждый файл / сокет, который вы хотите исключить из периодической очистки.

EDIT : для pam_systemd распределений pam_systemd отвечает за управление $ XDG_RUNTIME_DIR. В настоящее время он выполняет только создание при первом входе и удалении при последнем выходе из системы. Также systemd создает сокеты в подкаталогах $ XDG_RUNTIME_DIR и не устанавливает липкий бит на что-либо. Это наводит на мысль о том, что, по крайней мере, ни одно systemd распределение на основе системы не выполняет периодическую очистку.

Поскольку липкий бит не влияет на не-директорию, я бы предположил, что это вопрос программы, выполняющей очистку.

Клейкий бит должен использоваться, чтобы сообщить этой программе оставить файлы в покое. Поэтому, если вы не можете сказать из документации, вам придется:

  • Найдите, какая программа выполняет очистку, и прочитайте ее исходный код.
  • Проведите эксперимент: поместите несколько файлов / сокетов в каталог, некоторые с набором липких бит, некоторые с ним не установлены, посмотрите, что произойдет. (Используйте фиктивные файлы: те, которые нигде не используются).
  • libkcapi - Ошибка: Ошибка Netlink: не удается открыть сокет netlink
  • Может закрыть () блок?
  • Какие привилегии должны назначать для создания сырых сокетов
  • Переполнение буфера UDP и очистка старой датаграммы
  • Можно ли установить сеанс Socket (между сервером и клиентом) с помощью команд оболочки?
  • Как я могу разрешить приложениям связываться с любым адресом в подсети, назначенной интерфейсу?
  • Сокет подключается к портам, связанным с IP-адресом и локальным хостом
  • Linux и Unix - лучшая ОС в мире.