SELinux mencegah Apache dari menulis ke file

12

SELinux mencegah apachepengguna menulis ke file log yang dimilikinya. Ketika saya melakukannya setenforce 0itu berhasil. Kalau tidak, ini menunjukkan kesalahan ini

IOError: [Errno 13] Permission denied: '/var/www/webapp/k/site/k.log'

Konteks keamanan file:

$ ll -Z k.log 
-rw-r--r--. apache apache system_u:object_r:httpd_sys_content_t:s0 k.log

File dibuat ketika mode SELinux diatur ke permisif.

Bagaimana cara mengatur konteks keamanan sehingga apachepengguna dapat menulis di direktori itu? Saya memang mengatur konteks keamanan direktori menggunakan chcontetapi saya tidak dapat menemukan jenis file yang cocok.

Dari audit.log:

type=AVC msg=audit(1409945481.163:1561): avc:  denied  { append } for  pid=16862 comm="httpd" name="k.log" dev="dm-1" ino=201614333 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file
type=SYSCALL msg=audit(1409945481.163:1561): arch=c000003e syscall=2 success=no exit=-13 a0=7fa8080847a0 a1=441 a2=1b6 a3=3 items=0 ppid=15256 pid=16862 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
Clodoaldo
sumber

Jawaban:

10

Untuk file yang Anda inginkan agar dapat ditulis oleh Apache, jenisnya harus diatur ke httpd_sys_rw_content_t.

Michael Hampton
sumber
18

Seperti yang telah dinyatakan, Anda harus menginstruksikan SELINUX untuk mengizinkan penulisan ke file itu. Hal yang benar untuk dilakukan adalah menandai /var/www/webapp/k/site/pada tipehttpd_sys_rw_content_t

Untuk menandai direktori tersebut secara permanen httpd_sys_rw_content_t, Anda dapat menggunakan perintah semanage fcontext -a -t httpd_sys_rw_content_t /var/www/webapp/k/site(/.*)?; restorecon -RF /var/www/webapp/k/site/ Ini akan bertahan dari pembaruan kebijakan biner SELINUX dan pelabelan kembali sistem file.

shodanshok
sumber
2
ini seharusnya ditandai sebagai jawaban yang benar. dan disarankan untuk menandai direktori secara permanen (sebagaimana dinyatakan dalam jawaban ini).
skidadon
1
Anda mungkin perlu melepaskan kurung dari shell.
Michael Hampton
6

Ini akan mengubah izin:

chcon --type httpd_sys_rw_content_t /var/www/webapp/k/site/k.log
t0k3n1z3r
sumber
1
Saya mendapatkan kesalahan ini: -bash: kesalahan sintaks dekat token tak terduga `('
Derrick Miller