SELinux for nginx connect to gunicorn

  • Posted on: 7 January 2017
  • By: oon
SELinux on CentOS

Biasanya saya sering menonaktifkan SELinux begitu pertama kali masuk ke console linux yang diinisialisasi oleh penyedia cloud.

Kali ini ingin mencoba bagaimana mengaktifkan setting SELinux hanya agar nginx bisa connect ke gunicorn socket file saat memberikan layanan untuk Django.

Oke semua bermula dari log nginx:

[crit] 26523#0: *25 connect() to unix:/home/oo/gunicorn-oo.sock failed (13: Permission denied) while connecting to upstream, client: xx.83.yy.44, server: oo, request: "GET / HTTP/1.1", upstream: "http://unix:/home/oo/gunicorn-oo.sock:/", host: "oo"

berdasar diskusi di stackoverflow [1] didapati bahwa ada kemungkinan problem karena terblok SELinux, cara cek dengan:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied

Oh iya benar, jika dilakukan hit http akan bertambah itu log.

Kemudian ada yang menyarankan untuk cek can_network_connect untuk httpd (iya, tidak hanya apache httpd tapi nginx juga masuk kategori ini)

getsebool -a | grep httpd

Ternyata belum aktif, caranya mengaktifkan:

setsebool httpd_can_network_connect on
setsebool httpd_can_network_connect on -P

Oke coba cek lagi dari audit log, ternyata masih denied, kemudian install audit2allow, lalu lakukan langkah berikut:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M nginxgunicorn

Akan muncul 2 file yang dihasilkan: nginxgunicorn.pp dan nginxgunicorn.te

Muncul juga pesan berikut:

******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i nginxgunicorn.pp
 

lakukan semodule dalam pesan tersebut, kemudian cek audit log kembali.

Ternyata problem sebelumnya sudah teratasi, kemudian muncul problem baru selain "write" ada juga "connect to", lakukan kembali dua langkah di atas:

sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M nginxgunicorn

semodule -i nginxgunicorn.pp

Jika sudah tidak ada pesan lagi di audiit log, coba kembali hit HTTP sambil memonitor error log nginx.

Semoga berhasil! :)

[1]https://stackoverflow.com/a/24830777/3991504

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.