izin nginx ditolak ke file sertifikat untuk konfigurasi ssl

25

Saya menginstal proxy nginx ssl di server Fedora saya.

Saya telah membuat pasangan sertifikat dan kunci di bawah / etc / nginx. Mereka terlihat seperti ini:

ls -l /etc/nginx/
total 84
...
-rw-r--r--. 1 root root 1346 Sep 20 12:11 demo.crt
-rw-r--r--. 1 root root 1679 Sep 20 12:11 demo.key

...

Sebagai root, saya mencoba memulai layanan nginx:

systemctl start nginx.service

Saya mendapatkan kesalahan berikut:

nginx[30854]: nginx: [emerg]
SSL_CTX_use_certificate_chain_file("/etc/nginx/demo.crt") failed (SSL: error:0200100D:system     library:fopen:Permission denied...e:system lib)
nginx[30854]: nginx: configuration file /etc/nginx/nginx.conf test failed

Apakah ada yang salah dengan izin pada file-file ini?

numb3rs1x
sumber
Itu menyebutkan rantai sertifikat ... bukankah masalah dengan otoritas sertifikasi kunci demo.crt itu? Atau sertifikat yang ditandatangani sendiri? By the way, saya tidak berpikir file kunci harus dapat dibaca oleh dunia. Nginx harus membukanya sebagai root dan kemudian memberikan hak istimewa kepada pengguna apa pun yang menjalankannya.
Aleš Krajník
Itu ditandatangani sendiri, ya. Saya akan mengubah kepemilikan, terima kasih.
numb3rs1x
Anda menganggap masalahnya ada pada sertifikat, tetapi pesan kesalahan berlaku untuk file konfigurasi untuk Nginx.
bbaassssiiee

Jawaban:

39

Anda mungkin memiliki SELinux dalam mode menegakkan (default untuk Fedora):

sestatus -v

Jika demikian, periksa log audit, Anda harus menemukan kesalahan akses:

ausearch -m avc -ts today | audit2allow

Anda juga mungkin memindahkan arsip alih-alih menyalinnya, sehingga konteks keamanan file mungkin salah.

ls -lrtZ /etc/nginx/demo.* 

dan perbaiki jika perlu:

restorecon -v -R /etc/nginx
dawud
sumber
Terima kasih banyak. Saya mengikuti instruksi Anda dan saya tidak lagi mendapatkan kesalahan. Saya kebetulan memindahkan file-file ini dari direktori tempat saya membuatnya. Saya dapat membuatnya di direktori yang sama lain kali. Selain itu, bagaimana saya mencegah hal ini terjadi di masa depan?
numb3rs1x
Untuk kasus penggunaan khusus ini, gunakan cpalih-alih mvdan pelajari cara menggunakan auditsistem untuk mencari penolakan AVC.
dawud
Penelitian aus | perintah audit2allow. Apakah itu menambahkan beberapa izin ke selinux atau hanya untuk mengonfirmasi bahwa selinux adalah masalahnya?
numb3rs1x
Itu hanya untuk mengkonfirmasi. Baca halaman manual masing-masing untuk detailnya.
dawud
4
Wow terima kasih! Ada baiknya memiliki jawaban yang bukan hanya 'menonaktifkan SELinux'.
BCran
7

Saya kira itu SELinux yang menolak izin. Periksa konteks SELinux mereka. Milik mereka harus httpd_config_t. Jika tidak, jalankan

restorecon /etc/nginx/demo.*

atau

chcon httpd_config_t /etc/nginx/demo.*

sebagai root.

Anda dapat memeriksa log di bawah / var / log / audit / untuk melihat apakah itu SELinux yang menolak izin. Anda juga bisa berlari

setenforce 0

untuk mengatur SELinux ke mode permisif . Dengan cara ini, SELinux masih menghasilkan pesan AVC (di / var / log / audit /) tetapi mengizinkan akses.

jdh8
sumber