Bom padrão para XDG_RUNTIME_DIR?

10

A Especificação de diretório base do XDG é uma especificação muito interessante para diretórios de usuários. Ele também fornece bons valores padrão, exceto para XDG_RUNTIME_DIR.

Agora estou escrevendo um software que precisa criar pipes nomeados. É uma estrutura cliente-servidor por usuário (há um FIFO para o servidor e um FIFO por cliente).

Se XDG_RUNTIME_DIRnão estiver definido, atualmente estou usando um subdiretório por usuário /tmp- mas ele não garante todas as condições especificadas (por exemplo, o parágrafo que começa com "O tempo de vida do diretório DEVE estar vinculado ao usuário que está conectado ..." )

É /tmp/myserver-$USERbom o suficiente?

Editar

Vi em outro lugar algumas sugestões:

  • . é bastante insatisfatório (pelo menos porque não é um caminho absoluto).
  • Eu também vi /var/run/user/$USER- nada mal, mas esse diretório não existe (pelo menos na minha caixa executando um teste Debian )
Cadrian
fonte

Respostas:

4

/tmpjá é usado por muitos programas de maneira semelhante. No meu sistema, posso ver os diretórios /tmp/orbit-$USER(usados ​​pelo ORBit2 do Gnome) e /tmp/.X11-unix/(Xorg e X11) com muitos pipes, ehm, soquetes, neles. Estou certo de que também existem outros, por isso não vejo nada de errado com o que você está fazendo. Basta estar preparado para que, como é um local gravável no mundo, um processo malicioso possa seqüestrar o local (verifique as permissões antes de escrever nele).

Também posso recomendar $TMPDIRpara quem usa pam_mktemp , pois esse diretório é acessível apenas pelo usuário.

chutz
fonte
PAM é a solução certa, obrigado! No Debian é chamado libpam-tmpdir
cadrian
5

SystemD torna /run/user/$USERmeio obrigatório.

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

Acesso de gravação não privilegiado

Processos não privilegiados geralmente não têm acesso de gravação à maior parte da hierarquia.

As exceções para usuários normais são /tmp, /var/tmp, /dev/shm, bem como o diretório home $HOME(normalmente encontrado abaixo /home) e o diretório de tempo de execução $XDG_RUNTIME_DIR(que se encontra abaixo /run/user) do usuário, que são todos gravável.

Para o sistema sem privilégios processa única /tmp, /var/tmpe /dev/shmsão graváveis. Se um processo do sistema não privilegiado precisar de um diretório privado gravável /varou /run, é recomendável criá-lo antes de eliminar privilégios no código daemon, criá-lo através dos fragmentos tmpfiles.d (5) durante a inicialização ou via RuntimeDirectory= diretiva de unidades de serviço (consulte systemd.unit (5) para obter detalhes).

go2null
fonte
2

Crie o diretório /tmp/service-$USER.id com o ID exclusivo. Por exemplo, com casca:

mktemp -d /tmp/service-"$USER".XXX
Selivanov Pavel
fonte
1
Como você garante o requisito de que o mesmo diretório seja usado desde o primeiro login até o último logout do usuário?
cadrian
Hmmm ... crie o link simbólico ~ usuário / .service / tmp_dir. Se o diretório ligado não existir, crie novo
Selivanov Pavel