Perusahaan kami memiliki server web dengan CentOS 7 dan pelanggan kami mengelola situs web mereka melalui FTP (vsftpd). SELinux dalam mode menegakkan.
Masalahnya adalah bahwa data yang dibuat / unggah melalui VSFTPD tidak mewarisi konteks SELinux yang sesuai. Biarkan saya jelaskan.
Misalnya, untuk situs WordPress yang dimiliki server, di luar kotak, sudah ada beberapa aturan yang dapat dilihat menggunakan semanage fcontext -l |grep '/var/www'
, yaitu:
/var/www/html(/.*)?/uploads(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
Jadi, ketika saya menyalin situs WordPress katakanlah dari server lain ke direktori /var/www/html/
oleh SSH, folder wp-content/
dan wp-content/uploads/
memiliki httpd_sys_rw_content_t
konteks keamanan yang tepat . NAMUN, ketika folder-folder itu dibuat melalui FTP, konteksnya adalah httpd_sys_content_t
(no rw ). Ini berarti bahwa situs yang diunggah pelanggan kami ke server tidak dapat menulis ke direktori itu bahkan jika mereka memberikan izin menulis kepada pengguna / grup apache, sehingga admin WordPress tidak berfungsi. Jadi, ketika mereka mengunggah situs, mereka harus meminta dukungan dari kami untuk memperbaikinya, yang merupakan buang waktu bagi semua yang terlibat.
Katakanlah pelanggan mengunggah situs mereka ke dalam httpdocs
, jika melalui SSH saya melakukan mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -fr
masalah terpecahkan, jadi tidak ada yang salah dengan datanya.
Saya juga bisa lakukan restorecon -Rv httpdocs/
untuk memperbaiki masalah ini.
Jadi, pertanyaannya adalah: Bagaimana saya bisa membuat direktori dibuat / diunggah melalui VSFTPD mewarisi konteks SELinux yang tepat sama seperti mereka diwarisi ketika direktori dibuat / diunggah melalui SSH?
Jawaban:
Ada perbedaan antara pelabelan default yang terjadi saat runtime dan kebijakan pasca pelabelan berbasis ekspresi reguler yang berlaku di server.
Apa yang Anda perhatikan di sini:
Apakah kebijakan pelabelan posting.
Apa yang Anda diskusikan dalam masalah Anda sebenarnya terkait dengan kebijakan runtime.
Ketika sebuah entri dibuat dalam direktori menggunakan SELinux aturan yang mengatur label apa file atau direktori akhirnya tidak ditentukan oleh ekspresi reguler yang Anda kutip tetapi aturan lain sebagai berikut (saya percaya ini adalah urutan yang benar tetapi mungkin telah melewatkan sesuatu) .
type_transition
aturan bernama eksplisit .type_transition
aturan eksplisit tanpa nama .default_context
.Jadi, ya itu memang melakukan ini, tetapi tidak untuk alasan yang Anda pikirkan. Tentu bukan karena kebijakan pelabelan posting.
Ini terjadi karena
type_transition
aturan bernama tertentu ada yang menyediakan perilaku ini.Ini pada dasarnya mengatakan.
unconfined_t
danhttpd_sys_content_t
danhttpd_sys_rw_content_t
Alasan ini bekerja untuk SSHD adalah karena setelah Anda masuk Anda diberikan konteks sumber
unconfined_t
yang aturan ini berlaku.Ini tidak berfungsi untuk layanan FTP karena konteks sumber dari layanan ini kemungkinan besar
ftpd_t
tidak memiliki aturan yang cocok.Dengan demikian, Anda perlu memodifikasi kebijakan untuk mengubah perilaku SELinux untuk juga menghormati aturan file yang disebutkan yang Anda lihat di entri lain untuk FTP juga.
Di Fedora 23 setidaknya, ada antarmuka untuk mengizinkan ini, modul kebijakan seperti ini akan melakukannya.
Anda dapat memuat ini dengan memastikan bahwa
selinux-policy-devel
paket diinstal dan dijalankanmake -f /usr/share/selinux/devel/Makefile load
.sumber
local_ftpd.te
dengan modul policy Anda, lalu saya lakukanmake -f /usr/share/selinux/devel/Makefile local_ftpd.pp
kemudiansemodule -i local_ftpd.pp
. Apakah ini ok? Sekarang file yang dibuat melalui FTP mewarisi konteks yang diinginkan. Terima kasih lagi!