izin apa untuk menulis file PID di / var / run

51

Ubuntu

sentuh: tidak dapat menyentuh `/var/run/test.pid ': Izin ditolak

Saya mulai start-stop-daemon dan suka menulis file PID di / var / run start-stop-daemon dijalankan sebagai pengguna-program-saya

Pengaturan / var / run adalah root root drwxr-xr-x 9

Saya suka menghindari menempatkan pengguna-program-saya di grup root.

s5804
sumber

Jawaban:

71

Secara default, Anda hanya dapat menulis ke / var / run sebagai pengguna dengan ID pengguna 0 yang efektif (yaitu sebagai root). Ini untuk alasan yang baik, jadi apa pun yang Anda lakukan, jangan pergi dan mengubah izin / var / run ... Alih-alih, sebagai root, buat direktori di bawah / var / run:

# mkdir /var/run/mydaemon

Kemudian ubah kepemilikannya ke pengguna / grup tempat Anda ingin menjalankan proses:

# chown myuser:myuser /var/run/mydaemon

Sekarang tentukan untuk menggunakan / var / run / mydaemon daripada / var / run.

Anda selalu dapat menguji ini dengan menjalankan tes sebagai pengguna yang dipermasalahkan.

Stephen Nelson-Smith
sumber
5
Ini bekerja dengan baik untuk saya tetapi ketika saya me-restart server saya maka /var/run/mydaemondirektori itu hilang.
myborobudur
17
Ini bukan jawaban yang lengkap, / var / run adalah tmpfs secara default di Ubuntu. Setiap kali server dijalankan, perintah mkdir dan chown harus dijalankan kembali.
Tim
1
@Tim, bagaimana dengan mengedit jawaban dan melengkapinya?
kaiser
Jika Anda berurusan dengan daemon maka solusi bersih adalah menambahkan path / var / run / mydaemon ke file systemd unit seperti yang dijelaskan di sini . Solusi hacky yang lebih mudah adalah dengan menambahkan perintah mkdir dan chown ke skrip init.d (jika ada)
odedfos
1
Jawaban luas yang lebih baik ada di sini: superuser.com/a/1127720/71795 jawaban yang salah yang tampaknya sangat elegan ada di sini: stackoverflow.com/a/5174433 . Ringkasan: gunakan salah satu /tmpatau ~.
Tim
13
mkdir /var/run/mydaemon
chown myuser:myuser /var/run/mydaemon

ini tidak akan berfungsi, karena akan hilang pada reboot berikutnya ( /var/runadalah tmpfs di Ubuntu).

Satu-satunya solusi yang layak adalah menjalankan mkdir dan chmod sebagai bagian dari skrip startup.

Vladimir Nicolici
sumber
3

Anda bisa mencoba ini. Buat direktori / var / run / test / dan kemudian ubah izin direktori ini ke pengguna yang sama dengan program Anda berjalan. "chown / var / run / test /". Sekarang di aplikasi Anda, ubah lokasi file PID ke /var/run/test/test.pid. Ini akan membuat semuanya bekerja untuk Anda.

proy
sumber
2

Bagaimana dengan menggunakan bit "sticky" di / var / run?

chmod + t / var / run?

Mungkin mengacaukan beberapa aplikasi lain, tetapi sepertinya itu akan menjadi solusi lain.

Saya akan tetap dengan membuat folder / var / run terpisah untuk saat ini.

pengguna68971
sumber
1

Entri di dalam /etc/permissionsbersifat permanen. Buat entri di sana untuk membuat kepemilikan dan izin untuk direktori permanen.

pengguna432133
sumber
-6

Untuk menghindari menempatkan pengguna program Anda di grup root, izinkan orang lain menulis akses:

# chmod 757
Ivan Chuchman
sumber
3
Jangan pernah melakukan chmod 757 di / var / run! Ini akan menyebabkan masalah keamanan yang serius
michel
1
Ini ide yang buruk. Ini akan menyebabkan masalah keamanan yang berpotensi besar
Tom O'Connor
Bahkan jika kita mengabaikan masalah keamanan, chmod 757juga hanya akan berfungsi sampai reboot berikutnya. Maaf tentang membuat jawaban baru, tetapi sepertinya tidak ada cara untuk membalas komentar lainnya.
Vladimir Nicolici
@michel, penulis pernah mengatakan untuk melakukan chmodpada /var/run. Penulis mungkin bermaksud untuk subdirektori aplikasi. Tidak yakin apa yang terjadi.
Acumenus