Default bagus untuk XDG_RUNTIME_DIR?

10

The XDG Basis Direktori Keterangan adalah spec yang sangat menarik untuk direktori pengguna. Ini juga memberikan nilai default yang baik, kecuali untuk XDG_RUNTIME_DIR.

Sekarang saya sedang menulis perangkat lunak yang perlu membuat pipa bernama. Ini adalah kerangka kerja klien-server per pengguna (ada FIFO untuk server dan FIFO per klien).

Jika XDG_RUNTIME_DIRtidak didefinisikan, saya saat ini menggunakan subdirektori per pengguna di /tmp- tetapi tidak memastikan semua kondisi yang ditentukan (yaitu paragraf dimulai dengan "Masa pakai direktori HARUS terikat dengan pengguna yang login ..." )

Apakah /tmp/myserver-$USERcukup baik?

Edit

Saya melihat beberapa saran di tempat lain:

  • . cukup tidak memuaskan (setidaknya karena itu bukan jalur absolut).
  • Saya juga melihat /var/run/user/$USER- tidak buruk, tetapi direktori itu tidak ada (setidaknya pada kotak saya menjalankan pengujian Debian )
cadrian
sumber

Jawaban:

4

/tmpdigunakan oleh banyak program dengan cara yang sama. Pada sistem saya, saya dapat melihat direktori /tmp/orbit-$USER(digunakan oleh Gnome's ORBit2) dan /tmp/.X11-unix/(Xorg dan X11) dengan banyak pipa, ehm, soket, di dalamnya. Saya yakin ada juga yang lain, jadi saya tidak melihat ada yang salah dengan apa yang Anda lakukan. Hanya bersiaplah bahwa karena ini adalah lokasi yang dapat ditulisi dunia, proses jahat dapat membajak lokasi (verifikasi izin sebelum Anda menulisnya).

Saya juga dapat merekomendasikan $TMPDIRbagi mereka yang menggunakan pam_mktemp , karena direktori ini hanya dapat diakses oleh pengguna.

chutz
sumber
PAM adalah solusi yang tepat, terima kasih! Pada Debian disebut libpam-tmpdir
cadrian
5

SystemD membuat /run/user/$USERagak wajib.

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

Akses Tulis Tidak Terprivat

Proses yang tidak terjangkau pada umumnya tidak memiliki akses tulis ke sebagian besar hierarki.

Pengecualian untuk pengguna normal /tmp, /var/tmp, /dev/shm, serta direktori home $HOME(biasanya ditemukan di bawah /home) dan direktori runtime $XDG_RUNTIME_DIR(ditemukan di bawah /run/user) dari pengguna, yang semuanya ditulis.

Hanya untuk proses sistem yang tidak terbatas /tmp, /var/tmpdan /dev/shmdapat ditulis. Jika proses sistem yang tidak diprivatisasi memerlukan direktori pribadi yang dapat ditulis dalam /varatau /run, disarankan untuk membuatnya sebelum menjatuhkan hak istimewa dalam kode daemon, untuk membuatnya melalui tmpfiles.d (5) fragmen selama boot, atau melalui RuntimeDirectory= arahan unit layanan (lihat systemd.unit (5) untuk detailnya).

go2null
sumber
2

Buat direktori /tmp/service-$USER.id dengan id unik. Untuk exsmple, di shell:

mktemp -d /tmp/service-"$USER".XXX
Selivanov Pavel
sumber
1
Bagaimana Anda memastikan persyaratan bahwa direktori yang sama digunakan dari login pertama ke logout terakhir pengguna?
cadrian
Hmmm ... buat symlink ~ user / .service / tmp_dir. Jika direktori tertaut tidak ada, buat yang baru
Selivanov Pavel