Pertanyaan Mengapa saya mendapatkan kesalahan "gagal membuat file pid ... Izin Ditolak"?


Jika suatu program memerlukan izin menulis bagaimana saya harus mengaturnya dengan chown? Secara khusus, apa yang akan memprogram izin foo untuk memecahkan kesalahan ini?

failed to create pid file '/var/run/bar.pid': Permission denied

10
2017-08-10 09:00


asal




Jawaban:


Jika Anda memiliki program foo mencoba membuat / menulis ke file, izin dari foo biner tidak masalah, tetapi pengguna itu berjalan sebagai membuat semua perbedaan.

Pada kasus ini, foo sedang mencoba untuk menulis /var/run, yang dimiliki oleh root dan hanya ditulis oleh akar.

Jadi, Anda harus menjalankan program sebagai sudo foo untuk membuat file PID. Silakan mempertimbangkan implikasi keamanan dari memungkinkan sebuah program untuk dijalankan sebagai root sebelum Anda melakukannya ...


7
2017-08-10 09:07



jika izin pada binari adalah sesuatu: rw-r-r maka apakah program dapat dieksekusi mengingat bahwa saya menjalankan program sebagai root i.e memungkinkan untuk membuat id proses di bawah / var / run? - Ankit
@Ankit: jika biner tidak memiliki izin yang dapat dijalankan sama sekali tidak akan "berjalan"; tetapi apa pun yang Anda jalankan sebagai root akan dapat membuat pid di bawah /var/run - ish
Atau, tulis file pid di tempat lain (banyak aplikasi memungkinkan Anda menentukan jalur ke file pid). - msanford


Pendekatan umum: menentukan pengguna dan kelompok proses yang mencoba mengakses file. Ini sering ditemukan dalam konfigurasi perangkat lunak (seperti webservers / mailservers / ...), tetapi jika perangkat lunak sudah berjalan menggunakan ini:

ps aux 

Cari proses yang ingin Anda konfigurasikan hak aksesnya. Kolom pertama memberi tahu Anda di bawah nama pengguna yang dijalankannya.

groups <username>

Ini akan memberitahu Anda ke grup mana milik pengguna.

Ubah pemilik atau grup file agar sesuai dengan layanan.

Catatan 1: Ketika pertanyaan menunjukkan bahwa file tersebut di / var / run / saya mengasumsikan hanya satu proses yang membutuhkan akses, jika ini tidak benar, Anda tidak perlu mengubah pemilik atau grup, tetapi Anda mungkin mempertimbangkan untuk menambahkan proses 'pengguna ke grup atau membuat grup baru untuk file / folder ini.

Catatan 2: Hal-hal lucu dapat terjadi dengan apparmor, yang merupakan sistem keamanan: dapat mencegah proses dari menulis ke file dan folder yang mereka miliki (pada tingkat filesystem) semua hak yang diperlukan. Dengan aa-status Anda dapat melihat apakah aturan khusus untuk layanan Anda aktif.


1
2017-08-10 09:22





Apa yang saya lakukan hanyalah menambahkan pembuatan folder tepat sebelum start-stop-deamon dijalankan. Ini berfungsi karena skrip umumnya dijalankan sebagai root saat start up. Itu hanya membuat folder di / var / run dan segera mengubah pemilik, sehingga PID dapat ditulis.

Pada contoh di bawah ini, saya memeriksa keberadaan subfolder dari / var / run di mana saya menempatkan PID sebagai pengguna yang berjalan saat ini, dalam hal ini pengguna 'pi' (karena saya berada pada raspberry).

Juga periksa tautan ini karena sangat mendidik saya: Script python untuk dijalankan sebagai layananNamun, itu tidak mencakup masalah yang dibahas di sini.

Bagian contoh dari skrip shell saya:

# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/power/$DAEMON_NAME.pid

do_start () {
    log_daemon_msg "Starting system $DAEMON_NAME daemon"
    if [ ! -d /var/run/power ]; then
        mkdir /var/run/power/
        chown pi:pi /var/run/power/
    fi
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chdir $DIR --startas $DAEMON -- $DAEMON_OPTS
    log_end_msg $?
}

1
2017-10-03 21:56



Punya versi ini untuk systemd? - Artem Russakovskii