Terjemahan artikel disiapkan khusus untuk siswa kursus Administrator Linux .
Di sini Anda akan mendapatkan jawaban atas pertanyaan-pertanyaan penting tentang kehidupan, alam semesta dan semua yang ada di Linux dengan keamanan yang ditingkatkan."Kebenaran penting adalah bahwa segala sesuatu tidak selalu seperti apa yang tampaknya diketahui ..."
―Douglas Adams, The Hitchhiker's Guide to the Galaxy
Keamanan Meningkatkan keandalan. Kepatuhan. Politik. Empat Penunggang Kuda dari Kiamat sysadmin. Selain tugas sehari-hari kami - memantau, mencadangkan, menerapkan, mengonfigurasi, memperbarui, dll. - kami juga bertanggung jawab atas keamanan sistem kami. Bahkan sistem di mana penyedia pihak ketiga merekomendasikan agar kami mematikan keamanan yang ditingkatkan. Ini mirip dengan karya
Ethan Hunt dari Mission Impossible.
Menghadapi dilema ini, beberapa administrator sistem memutuskan untuk mengambil
pil biru karena mereka pikir mereka tidak akan pernah tahu jawaban atas pertanyaan besar kehidupan, alam semesta dan semua itu. Dan, seperti kita semua tahu, jawaban ini adalah 42.
Dalam semangat "Panduan Hitchhiker untuk Galaxy", berikut adalah 42 jawaban untuk pertanyaan penting tentang mengelola dan menggunakan
SELinux pada sistem Anda.
1. SELinux adalah sistem kontrol akses paksa, yang berarti bahwa setiap proses memiliki label. Setiap file, direktori, dan objek sistem juga memiliki tag. Aturan kebijakan mengontrol akses antara proses dan objek yang berlabel. Kernel memberlakukan aturan ini.
2. Dua konsep paling penting adalah:
Pelabelan - pelabelan (file, proses, port, dll.) Dan
Penegakan tipe (yang mengisolasi proses dari satu sama lain berdasarkan jenis).
3. Format label yang benar adalah
user:role:type:level
(opsional).
4. Tujuan menyediakan
Multi-Level Security (MLS ) adalah untuk mengelola proses (domain) berdasarkan tingkat keamanan data yang akan mereka gunakan. Misalnya, proses rahasia tidak dapat membaca data rahasia.
5. Memastikan
Multi-Category Security (MCS ) melindungi proses serupa dari satu sama lain (misalnya, mesin virtual, mekanisme OpenShift, SELinux sandboxes, container, dll.).
6. Parameter kernel untuk mengubah mode SELinux saat boot:
autorelabel=1
memaksa sistem untuk mulai menandai ulangselinux=0
kernel tidak memuat infrastruktur SELinuxenforcing=0
memuat dalam mode permisif
7. Jika Anda perlu menandai ulang seluruh sistem:
# touch /.autorelabel
#reboot
Jika penandaan sistem mengandung banyak kesalahan, Anda mungkin perlu mem-boot dalam mode permisif agar penandaan berhasil.
8. Untuk memeriksa apakah SELinux diaktifkan:
# getenforce
9. Untuk sementara mengaktifkan / menonaktifkan SELinux:
# setenforce [1|0]
10. Memeriksa status SELinux:
# sestatus
11. File konfigurasi:
/etc/selinux/config
12. Bagaimana cara kerja SELinux? Ini adalah contoh pelabelan untuk server web Apache:
- Representasi biner:
/usr/sbin/httpd→httpd_exec_t
- Direktori Konfigurasi:
/etc/httpd→httpd_config_t
- Direktori file log:
/var/log/httpd → httpd_log_t
- Direktori Konten:
/var/www/html → httpd_sys_content_t
- Skrip peluncuran:
/usr/lib/systemd/system/httpd.service → httpd_unit_file_d
- Proses:
/usr/sbin/httpd -DFOREGROUND → httpd_t
- Port:
80/tcp, 443/tcp → httpd_t, http_port_t
Sebuah proses yang berjalan dalam konteks httpd_t
dapat berinteraksi dengan objek berlabel httpd_something_t
.13. Banyak perintah menerima argumen
-Z
untuk melihat, membuat, dan mengubah konteks:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Konteks ditetapkan ketika file dibuat berdasarkan konteks direktori induknya (dengan beberapa pengecualian). RPM dapat mengatur konteks seperti saat instalasi.14. Ada empat penyebab utama kesalahan SELinux, yang dijelaskan secara lebih rinci dalam paragraf 15-21 di bawah:
- Masalah Pelabelan
- Karena sesuatu yang SELinux perlu ketahui
- Kesalahan dalam kebijakan / aplikasi SELinux
- Informasi Anda dapat dikompromikan.
15. Masalah dengan penandaan : jika file Anda di
/srv/myweb
ditandai dengan salah, akses mungkin ditolak. Berikut ini beberapa cara untuk memperbaikinya:
- Jika Anda tahu labelnya:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
- Jika Anda tahu file dengan tanda yang setara:
# semanage fcontext -a -e /srv/myweb /var/www
- Setelah memulihkan konteks (untuk kedua kasus):
# restorecon -vR /srv/myweb
16. Masalah dengan penandaan: jika Anda memindahkan file alih-alih menyalinnya, file akan mempertahankan konteks aslinya. Untuk memperbaiki masalah ini:
- Ubah perintah konteks yang berlabel:
# chcon -t httpd_system_content_t /var/www/html/index.html
- Ubah perintah konteks dengan label tautan:
# chcon --reference /var/www/html/ /var/www/html/index.html
- Pulihkan konteks (untuk kedua kasus):
# restorecon -vR /var/www/html/
17. Jika
SELinux perlu tahu bahwa HTTPD sedang mendengarkan pada port 8585, beri tahu SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux perlu mengetahui nilai-nilai boolean yang memungkinkan Anda untuk mengubah bagian-bagian dari kebijakan SELinux saat runtime tanpa pengetahuan menulis ulang kebijakan SELinux. Misalnya, jika Anda ingin httpd mengirim email, masukkan:
# setsebool -P httpd_can_sendmail 1
19. SELinux perlu mengetahui nilai -nilai logis untuk mengaktifkan / menonaktifkan pengaturan SELinux:
- Untuk melihat semua nilai boolean:
# getsebool -a
- Untuk melihat deskripsi masing-masing:
# semanage boolean -l
- Untuk menetapkan nilai boolean:
# setsebool [_boolean_] [1|0]
- Untuk instalasi permanen, tambahkan
-P
. Sebagai contoh: # setsebool httpd_enable_ftp_server 1 -P
20. Kebijakan / aplikasi SELinux dapat mengandung kesalahan, termasuk:
- Jalur Kode Mewah
- Konfigurasi
- Redirect stdout
- Kebocoran deskriptor file
- Memori yang bisa dieksekusi
- Perpustakaan yang dibangun dengan buruk
Buka tiket (jangan mengirim laporan ke Bugzilla; tidak ada SLA di Bugzilla).
21. Informasi Anda dapat dikompromikan jika Anda memiliki domain terbatas yang mencoba untuk:
- Unduh modul kernel
- Nonaktifkan mode SELinux yang dipaksakan
- Tulis dalam
etc_t/shadow_t
- Ubah aturan iptables
22. Alat SELinux untuk mengembangkan modul kebijakan:
# yum -y install setroubleshoot setroubleshoot-server
Reboot atau mulai ulang
auditd
setelah instalasi.
23. Gunakan
journalctl
untuk mendaftar semua log yang terkait dengan
setroubleshoot
:
# journalctl -t setroubleshoot --since=14:20
24. Gunakan
journalctl
untuk mendaftar semua log yang terkait dengan label SELinux tertentu. Sebagai contoh:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. Jika kesalahan SELinux terjadi, gunakan log
setroubleshoot
dengan beberapa solusi yang mungkin.
Misalnya, dari
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. Logging: SELinux mencatat informasi di banyak tempat:
- / var / log / messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Logging: cari kesalahan SELinux di log audit:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Untuk menemukan pesan SELinux Access Vector Cache (AVC) untuk layanan tertentu:
# ausearch -m avc -c httpd
29. Utilitas
audit2allow
mengumpulkan informasi dari log operasi yang dilarang, dan kemudian menghasilkan aturan kebijakan izin SELinux. Sebagai contoh:
- Untuk membuat deskripsi yang dapat dibaca tentang alasan akses ditolak:
# audit2allow -w -a
- Untuk melihat aturan jenis penegakan yang memungkinkan akses ditolak:
# audit2allow -a
- Untuk membuat modul khusus:
# audit2allow -a -M mypolicy
- Opsi
-M
membuat file jenis penegakan (.te) dengan nama yang ditentukan dan mengkompilasi aturan ke dalam paket kebijakan (.pp): mypolicy.pp mypolicy.te
- Untuk menginstal modul khusus:
# semodule -i mypolicy.pp
30. Untuk mengonfigurasi proses terpisah (domain) agar berfungsi dalam mode permisif:
# semanage permissive -a httpd_t
31. Jika Anda tidak lagi ingin domain menjadi permisif:
# semanage permissive -d httpd_t
32. Untuk menonaktifkan semua domain permisif:
# semodule -d permissivedomains
33. Mengaktifkan kebijakan MLS SELinux:
# yum install selinux-policy-mls
/etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
# yum install selinux-policy-mls
/etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Pastikan SELinux dalam mode permisif:
# setenforce 0
Gunakan skrip
fixfiles
untuk memastikan bahwa file akan ditandai kembali selama reboot berikutnya:
# fixfiles -F onboot # reboot
34. Buat pengguna dengan rentang MLS tertentu:
# useradd -Z staff_u john
Menggunakan perintah
useradd
, memetakan pengguna baru ke pengguna SELinux yang ada (dalam hal ini,
staff_u
).
35. Untuk melihat korespondensi antara pengguna SELinux dan Linux:
# semanage login -l
36. Tentukan kisaran spesifik untuk pengguna:
# semanage login --modify --range s2:c100 john
37. Untuk memperbaiki label di direktori home pengguna (jika perlu):
# chcon -R -l s2:c100 /home/john
38. Untuk melihat kategori saat ini:
# chcat -L
39. Untuk mengubah kategori atau mulai membuat kategori Anda sendiri, edit file sebagai berikut:
/etc/selinux/_<
selinuxtype >
_/setrans.conf
40. Untuk menjalankan perintah atau skrip dalam file, peran, dan konteks pengguna tertentu:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
- konteks file
-t
- konteks peran
-r
- konteks pengguna
-u
41. Kontainer yang bekerja dengan SELinux yang dinonaktifkan:
- Podman:
# podman run --security-opt label=disable …
- Docker:
# docker run --security-opt label=disable …
42. Jika Anda perlu memberi wadah akses penuh ke sistem:
- Podman:
# podman run --privileged …
- Docker:
# docker run --privileged …
Dan sekarang Anda sudah tahu jawabannya. Karena itu, tolong: jangan panik dan nyalakan SELinux.Referensi: