Dobra wartość domyślna dla XDG_RUNTIME_DIR?

10

XDG Baza katalog Specyfikacja jest bardzo interesujący spec katalogach użytkowników. Zapewnia również dobre wartości domyślne, z wyjątkiem XDG_RUNTIME_DIR.

Teraz piszę oprogramowanie, które musi tworzyć nazwane potoki. Jest to struktura klient-serwer dla użytkownika (istnieje FIFO dla serwera i FIFO dla klienta).

Jeśli XDG_RUNTIME_DIRnie jest zdefiniowane, obecnie korzystam z podkatalogu dla poszczególnych użytkowników w /tmp- ale nie zapewnia to spełnienia wszystkich określonych warunków (tzn. Akapit rozpoczynający się od „Żywotność katalogu MUSI być związana z zalogowanym użytkownikiem…” )

Czy /tmp/myserver-$USERwystarczy?

Edytować

Gdzie indziej widziałem kilka sugestii:

  • . jest dość niezadowalający (przynajmniej dlatego, że nie jest to ścieżka bezwzględna).
  • Widziałem też /var/run/user/$USER- nieźle, ale ten katalog nie istnieje (przynajmniej na moim komputerze z uruchomionym testowaniem Debiana )
Cadrian
źródło

Odpowiedzi:

4

/tmpjest już używany przez wiele programów w podobny sposób. W moim systemie widzę /tmp/orbit-$USER(używane przez Gnome'a ​​ORBit2) i /tmp/.X11-unix/(Xorg i X11) katalogi z dużą ilością rur, ehm, gniazd. Jestem pewien, że są też inni, więc nie widzę nic złego w tym, co robisz. Po prostu przygotuj się, że ponieważ jest to lokalizacja do zapisu na całym świecie, złośliwy proces może przejąć lokalizację (sprawdź uprawnienia przed napisaniem do niej).

Mogę również polecić $TMPDIRtym, którzy używają pam_mktemp , ponieważ ten katalog jest dostępny tylko dla użytkownika.

chutz
źródło
PAM to właściwe rozwiązanie, dzięki! Na Debianie nazywa się to libpam-tmpdir
cadrian
5

SystemD sprawia, że ​​jest to /run/user/$USERtrochę obowiązkowe.

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

Nieuprzywilejowany dostęp do zapisu

Procesy nieuprzywilejowane na ogół nie mają dostępu do zapisu w większości hierarchii.

Wyjątkami są dla zwykłych użytkowników /tmp, /var/tmp, /dev/shmjak również w katalogu domowym $HOME(zwykle znajdują się poniżej /home) i katalogu uruchomieniowym $XDG_RUNTIME_DIR(znaleziono poniżej /run/user) użytkownika, które są zapisu.

Dla systemu nieuprzywilejowany przetwarza tylko /tmp, /var/tmpi /dev/shmsą zapisu. Jeśli nieuprzywilejowany proces systemowy potrzebuje prywatnego, zapisywalnego katalogu w /varlub /run, zaleca się utworzenie go przed usunięciem uprawnień w kodzie demona, utworzenie go za pomocą fragmentów tmpfiles.d (5) podczas uruchamiania lub zgodnie z RuntimeDirectory= dyrektywą jednostek serwisowych (szczegółowe informacje patrz systemd.unit (5)).

go2null
źródło
2

Utwórz katalog /tmp/service-$USER.id z unikalnym identyfikatorem. Na przykład w powłoce:

mktemp -d /tmp/service-"$USER".XXX
Selivanov Pavel
źródło
1
Jak zapewnić wymóg korzystania z tego samego katalogu od pierwszego logowania do ostatniego wylogowania użytkownika?
cadrian
Hmmm ... utwórz symlink ~ użytkownik / .service / tmp_dir. Jeśli połączony katalog nie istnieje, utwórz nowy
Selivanov Pavel