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.

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.


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.


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.


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.


1

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


-6

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

# chmod 757

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.