ProHoster > Blog > Pentadbiran > Lembaran tipu SELinux untuk pentadbir sistem: 42 jawapan kepada soalan penting
Lembaran tipu SELinux untuk pentadbir sistem: 42 jawapan kepada soalan penting
Terjemahan artikel disediakan khusus untuk pelajar kursus tersebut "Pentadbir Linux".
Di sini anda akan mendapat jawapan kepada soalan penting tentang kehidupan, alam semesta dan segala-galanya dalam Linux dengan keselamatan yang dipertingkatkan.
"Kebenaran penting bahawa perkara-perkara tidak selalu seperti yang mereka nampak adalah pengetahuan umum..."
-Douglas Adams, Panduan Penumpang ke Galaksi
Keselamatan. Peningkatan kebolehpercayaan. Surat-menyurat. Dasar. Empat Penunggang Kuda sysadmin Apocalypse. Selain tugas harian kami - pemantauan, sandaran, pelaksanaan, konfigurasi, pengemaskinian, dll. - kami juga bertanggungjawab ke atas keselamatan sistem kami. Malah sistem yang pembekal pihak ketiga mengesyorkan kami melumpuhkan keselamatan yang dipertingkatkan. Rasa macam kerja Ethan Hunt daripada "Misi: Mustahil."
Menghadapi dilema ini, sesetengah pentadbir sistem memutuskan untuk mengambilnya pil biru, kerana mereka fikir mereka tidak akan pernah tahu jawapan kepada persoalan besar kehidupan, alam semesta dan semua itu. Dan seperti yang kita semua tahu, jawapan itu ialah 42.
Dengan semangat Panduan The Hitchhiker ke Galaxy, berikut ialah 42 jawapan kepada soalan penting tentang kawalan dan penggunaan. SELinux pada sistem anda.
1. SELinux ialah sistem kawalan akses paksa, yang bermaksud setiap proses mempunyai label. Setiap fail, direktori dan objek sistem juga mempunyai label. Peraturan dasar mengawal akses antara proses dan objek yang ditag. Kernel menguatkuasakan peraturan ini.
2. Dua konsep yang paling penting ialah: Melabelkan — penandaan (fail, proses, port, dsb.) dan Jenis penguatkuasaan (yang mengasingkan proses antara satu sama lain berdasarkan jenis).
3. Format label yang betul user:role:type:level (pilihan).
4. Tujuan menyediakan keselamatan pelbagai peringkat (Keselamatan Berbilang Tahap - MLS) adalah untuk mengurus proses (domain) berdasarkan tahap keselamatan data yang akan mereka gunakan. Sebagai contoh, proses rahsia tidak boleh membaca data rahsia.
5. Memastikan keselamatan pelbagai kategori (Keselamatan Berbilang Kategori - MCS) melindungi proses yang serupa antara satu sama lain (contohnya, mesin maya, enjin OpenShift, kotak pasir SELinux, bekas, dll.).
6. Pilihan kernel untuk menukar mod SELinux semasa but:
autorelabel=1 → menyebabkan sistem menjalankan pelabelan semula
selinux=0 → kernel tidak memuatkan infrastruktur SELinux
enforcing=0 → memuatkan dalam mod permisif
7. Jika anda perlu melabelkan semula keseluruhan sistem:
# touch /.autorelabel
#reboot
Jika penandaan sistem mengandungi sejumlah besar ralat, anda mungkin perlu but dalam mod permisif untuk menandakan untuk berjaya.
8. Untuk menyemak sama ada SELinux didayakan: # getenforce
9. Untuk mendayakan/melumpuhkan SELinux buat sementara waktu: # setenforce [1|0]
10. Menyemak status SELinux: # sestatus
11. Fail konfigurasi: /etc/selinux/config
12. Bagaimanakah SELinux berfungsi? Berikut ialah contoh penandaan untuk pelayan web Apache:
Perwakilan binari: /usr/sbin/httpd→httpd_exec_t
Direktori konfigurasi: /etc/httpd→httpd_config_t
Log direktori fail: /var/log/httpd → httpd_log_t
Direktori kandungan: /var/www/html → httpd_sys_content_t
Proses berjalan dalam konteks httpd_t, boleh berinteraksi dengan objek berlabel httpd_something_t.
13. Banyak arahan menerima hujah -Z untuk melihat, mencipta dan menukar konteks:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Konteks ditubuhkan apabila fail dibuat berdasarkan konteks direktori induknya (dengan beberapa pengecualian). RPM boleh mewujudkan konteks seperti semasa pemasangan.
14. Terdapat empat punca utama ralat SELinux, yang diterangkan dengan lebih terperinci dalam perkara 15-21 di bawah:
Isu pelabelan
Kerana sesuatu yang perlu diketahui oleh SELinux
Ralat dalam dasar/aplikasi SELinux
Maklumat anda mungkin terjejas
15.Masalah pelabelan: jika fail anda ada dalam /srv/myweb ditandakan secara salah, akses mungkin dinafikan. Berikut ialah beberapa cara untuk membetulkannya:
Jika anda tahu labelnya: # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
Jika anda mengetahui fail dengan tanda yang setara: # semanage fcontext -a -e /srv/myweb /var/www
Memulihkan konteks (untuk kedua-dua kes): # restorecon -vR /srv/myweb
16.Masalah pelabelan: jika anda mengalihkan fail dan bukannya menyalinnya, fail itu akan mengekalkan konteks asalnya. Untuk menyelesaikan masalah ini:
Tukar arahan konteks dengan label: # chcon -t httpd_system_content_t /var/www/html/index.html
Pulihkan konteks (untuk kedua-dua kes): # restorecon -vR /var/www/html/
17. Jika SELinux yang anda perlu tahubahawa HTTPD sedang mendengar pada port 8585, beritahu SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18.SELinux yang anda perlu tahu Nilai Boolean yang membenarkan bahagian dasar SELinux ditukar pada masa jalan tanpa mengetahui dasar SELinux ditimpa. Sebagai contoh, jika anda mahu httpd menghantar e-mel, masukkan: # setsebool -P httpd_can_sendmail 1
19.SELinux yang anda perlu tahu nilai logik untuk mendayakan/melumpuhkan tetapan SELinux:
Untuk melihat semua nilai boolean: # getsebool -a
Untuk melihat huraian setiap: # semanage boolean -l
Untuk menetapkan nilai boolean: # setsebool [_boolean_] [1|0]
Untuk pemasangan kekal, tambah -P. Sebagai contoh: # setsebool httpd_enable_ftp_server 1 -P
20. Dasar/aplikasi SELinux mungkin mengandungi ralat, termasuk:
Laluan kod yang luar biasa
Konfigurasi
Mengubah hala stdout
Deskriptor fail bocor
Memori boleh laksana
Perpustakaan yang dibina dengan buruk
Buka tiket (jangan serahkan laporan kepada Bugzilla; Bugzilla tiada SLA).
21.Maklumat anda mungkin terjejasjika anda mempunyai domain terhad yang cuba:
25. Jika ralat SELinux berlaku, gunakan log setroubleshoot menawarkan beberapa penyelesaian yang mungkin.
Sebagai contoh, daripada journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.
***** Plugin restorecon (99.5 confidence) suggests ************************
If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html
26. Pembalakan: SELinux merekodkan maklumat di banyak tempat:
27. Pembalakan: mencari ralat SELinux dalam log audit:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Untuk mencari mesej SELinux Access Vector Cache (AVC) untuk perkhidmatan tertentu:
# ausearch -m avc -c httpd
29. Utiliti audit2allow mengumpul maklumat daripada log operasi yang dilarang dan kemudian menjana peraturan dasar kebenaran SELinux. Sebagai contoh:
Untuk membuat penerangan yang boleh dibaca oleh manusia tentang sebab akses ditolak: # audit2allow -w -a
Untuk melihat jenis peraturan penguatkuasaan yang membenarkan akses yang ditolak: # audit2allow -a
Untuk membuat modul tersuai: # audit2allow -a -M mypolicy
Pilihan -M mencipta fail penguatkuasaan jenis (.te) dengan nama yang ditentukan dan menyusun peraturan ke dalam pakej dasar (.pp): mypolicy.pp mypolicy.te
Untuk memasang modul tersuai: # semodule -i mypolicy.pp
30. Untuk mengkonfigurasi proses (domain) berasingan untuk berfungsi dalam mod permisif: # semanage permissive -a httpd_t
31. Jika anda tidak lagi mahu domain menjadi permisif: # semanage permissive -d httpd_t
32. Untuk melumpuhkan semua domain permisif: # semodule -d permissivedomains
33. Mendayakan dasar MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Pastikan SELinux berjalan dalam mod permisif: # setenforce 0
Gunakan skrip fixfilesuntuk memastikan bahawa fail dilabel semula pada but semula seterusnya:
# fixfiles -F onboot # reboot
34. Buat pengguna dengan julat MLS tertentu: # useradd -Z staff_u john
Menggunakan arahan useradd, petakan pengguna baharu kepada pengguna SELinux sedia ada (dalam kes ini, staff_u).
35. Untuk melihat pemetaan antara pengguna SELinux dan Linux: # semanage login -l
36. Tentukan julat khusus untuk pengguna: # semanage login --modify --range s2:c100 john
37. Untuk membetulkan label direktori rumah pengguna (jika perlu): # chcon -R -l s2:c100 /home/john
38. Untuk melihat kategori semasa: # chcat -L
39. Untuk menukar kategori atau mula mencipta sendiri, edit fail seperti berikut:
/etc/selinux/_<selinuxtype>_/setrans.conf
40. Untuk menjalankan arahan atau skrip dalam fail, peranan dan konteks pengguna tertentu: