Arquivos de bits e soquetes em XDG_RUNTIME_DIR

4

Estou armazenando alguns arquivos de soquete do Unix em um subdiretório abaixo de $ XDG_RUNTIME_DIR . Na documentação, posso ler:

Files in this directory MAY be subjected to periodic clean-up. To ensure that your files are not removed, they should have their access time timestamp modified at least once every 6 hours of monotonic time or the 'sticky' bit should be set on the file.

Gostaria de saber se é necessário definir o bit fixo em cada arquivo de soquete para evitar limpeza periódica ou se é suficiente definir o bit no subdiretório no qual estou armazenando todos os arquivos de soquete .

    
por Peque 06.04.2017 / 11:07

2 respostas

2

A parte da especificação do Diretório base do XDG que você citou fala sobre como definir o problema bit em arquivos :

Files in this directory MAY be subjected to periodic clean-up. To ensure that your files are not removed, they should have their access time timestamp modified at least once every 6 hours of monotonic time or the 'sticky' bit should be set on the file.

A especificação é um pouco ambígua aqui, pois arquivo pode significar cada entidade do sistema de arquivos , entidade do sistema de arquivos sem diretório ou arquivo regular dependendo do contexto. Mas o bit pegajoso nos diretórios tem um efeito especial no Linux e é até mesmo chamado de diferente quando usado em diretórios em a manpage chmod (1) :

The restricted deletion flag or sticky bit is a single bit, whose interpretation depends on the file type. For directories, it prevents unprivileged users from removing or renaming a file in the directory unless they own the file or the directory; this is called the restricted deletion flag for the directory, and is commonly found on world-writable directories like /tmp.

Por causa disso, é razoável supor que arquivo na documentação do XDG neste contexto significa entidade de sistema de arquivos não-diretório .

Mas como a especificação não é completamente inequívoca, dependerá da implementação do mecanismo de limpeza de sua distribuição. Parece que atualmente não há essa limpeza periódica pelo menos no Fedora e no Linux Mint, mas como isso pode mudar no futuro e não há como as distribuições interpretarem essa parte da especificação, é mais seguro configurá-la em cada arquivo / socket que você deseja excluir de limpezas periódicas.

EDITAR : para distribuições baseadas em systemd , pam_systemd é responsável por gerenciar $ XDG_RUNTIME_DIR. Atualmente, ele realiza somente a criação no primeiro login e a exclusão no último logout. Também systemd cria soquetes em subdiretórios de $ XDG_RUNTIME_DIR e não define o bit pegajoso em nada. Isso sugere strongmente que pelo menos nenhuma distribuição baseada em systemd implementa a limpeza periódica ainda.

    
por 11.04.2017 / 21:06
0

Como o sticky bit não tem nenhum efeito em um diretório não, eu diria que é uma questão do programa fazer a limpeza.

O bit pegajoso deve estar sendo usado para dizer a este programa para deixar os arquivos em paz. Portanto, se você não pode dizer a partir da documentação, você terá que:

  • Descubra qual programa está fazendo a limpeza e leia seu código-fonte.
  • Faça uma experiência: coloque vários arquivos / soquetes no diretório, alguns com bit fixos, alguns com ele não definidos, veja o que acontece. (Use arquivos falsos: aqueles que não estão sendo usados para nada).
por 11.04.2017 / 19:50