"Adalah fakta penting dan populer bahwa segala sesuatu tidak selalu seperti yang terlihat..."
―Douglas Adams, Panduan Hitchhiker untuk Galaksi
Keamanan. pengerasan. Kepatuhan. Aturan. Empat Penunggang Kuda dari SysAdmin Apocalypse. Selain tugas sehari-hari kami—pemantauan, pencadangan, implementasi, penyetelan, pembaruan, dan sebagainya—kami juga bertanggung jawab untuk mengamankan sistem kami. Bahkan sistem di mana penyedia pihak ketiga memberi tahu kami untuk menonaktifkan keamanan yang ditingkatkan. Sepertinya pekerjaan untuk Mission Impossible Perburuan Ethan.
Menghadapi dilema ini, beberapa sysadmin memutuskan untuk mengambil pil biru karena mereka pikir mereka tidak akan pernah tahu jawaban atas pertanyaan besar tentang kehidupan, alam semesta, dan yang lainnya. Dan, seperti yang kita semua tahu, jawabannya adalah 42 .
Dengan semangat Panduan Hitchhiker untuk Galaxy , berikut adalah 42 jawaban atas pertanyaan besar tentang mengelola dan menggunakan SELinux dengan sistem Anda.
- SELinux adalah sistem LABELING, yang berarti setiap proses memiliki LABEL. Setiap file, direktori, dan objek sistem memiliki LABEL. Aturan kebijakan mengontrol akses antara proses berlabel dan objek berlabel. Kernel memberlakukan aturan ini.
- Dua konsep yang paling penting adalah:Pelabelan (file, proses, port, dll.) dan Jenis penegakan (yang memisahkan proses satu sama lain berdasarkan jenisnya).
- Format Label yang benar adalah
user:role:type:level
(opsional ).
- Tujuan dari Penegakan Keamanan Multi-Level (MLS) adalah untuk mengontrol proses (domain ) berdasarkan tingkat keamanan data yang akan mereka gunakan. Misalnya, proses rahasia tidak dapat membaca data rahasia.
- Penegakan Keamanan Multi-Kategori (MCS) melindungi proses serupa satu sama lain (seperti mesin virtual, roda gigi OpenShift, kotak pasir SELinux, wadah, dll.).
- Parameter kernel untuk mengubah mode SELinux saat boot:
autorelabel=1
→ memaksa sistem untuk memberi label ulangselinux=0
→ kernel tidak memuat bagian apapun dari infrastruktur SELinuxenforcing=0
→ boot dalam mode permisif
- Jika Anda perlu memberi label ulang pada seluruh sistem:
# touch /.autorelabel
# rebootJika pelabelan sistem berisi banyak kesalahan, Anda mungkin perlu boot dalam mode permisif agar autorelabel berhasil.
-
Untuk memeriksa apakah SELinux diaktifkan:
# getenforce
-
Untuk mengaktifkan/menonaktifkan SELinux untuk sementara:
# setenforce [1|0]
-
Alat status SELinux:
# sestatus
-
File konfigurasi:
/etc/selinux/config
- Bagaimana cara kerja SELinux? Berikut ini contoh pelabelan untuk Server Web Apache:
- Binary:
/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 mulai:
/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
- Binary:
Proses yang berjalan di httpd_t
konteks dapat berinteraksi dengan objek dengan httpd_something_t
label.
- Banyak perintah menerima argumen
-Z
untuk melihat, membuat, dan mengubah konteks:ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Konteks diatur ketika file dibuat berdasarkan konteks direktori induknya (dengan beberapa pengecualian). RPM dapat mengatur konteks sebagai bagian dari instalasi.
- Ada empat penyebab utama kesalahan SELinux, yang dijelaskan lebih lanjut dalam item 15-21 di bawah ini:
- Masalah pelabelan
- Sesuatu yang perlu diketahui SELinux
- Bug dalam kebijakan/aplikasi SELinux
- Informasi Anda mungkin disusupi
- Masalah pelabelan: Jika file Anda di
/srv/myweb
tidak diberi label dengan benar, akses mungkin ditolak. Berikut beberapa cara untuk memperbaikinya:- Jika Anda mengetahui labelnya:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
- Jika Anda mengetahui file dengan label yang setara:
# semanage fcontext -a -e /srv/myweb /var/www
- Pulihkan konteksnya (untuk kedua kasus):
# restorecon -vR /srv/myweb
- Jika Anda mengetahui labelnya:
- Masalah pelabelan: Jika Anda memindahkan file alih-alih menyalinnya, file tersebut mempertahankan konteks aslinya. Untuk memperbaiki masalah ini:
-
Ubah perintah konteks dengan label:
$ sudo chcon -t httpd_system_content_t /var/www/html/index.html
-
Ubah perintah konteks dengan label referensi:
$ sudo chcon --reference /var/www/html/ /var/www/html/index.html
-
Pulihkan konteksnya (untuk kedua kasus):
$ sudo restorecon -vR /var/www/html/
-
-
Jika SELinux perlu tahu HTTPD mendengarkan pada port 8585, beri tahu SELinux:
$ sudo semanage port -a -t http_port_t -p tcp 8585
-
SELinux perlu tahu boolean memungkinkan bagian dari kebijakan SELinux diubah pada saat runtime tanpa pengetahuan tentang penulisan kebijakan SELinux. Misalnya, jika Anda ingin httpd mengirim email, masukkan:
$ sudo setsebool -P httpd_can_sendmail 1
- SELinux perlu tahu Booleans hanya off/on pengaturan untuk SELinux:
- Untuk melihat semua boolean:
# getsebool -a
- Untuk melihat deskripsi masing-masing:
# semanage boolean -l
- Untuk menyetel boolean, jalankan:
# setsebool [_boolean_] [1|0]
- Untuk mengonfigurasinya secara permanen, tambahkan
-P
. Misalnya:
# setsebool httpd_enable_ftp_server 1 -P
- Untuk melihat semua boolean:
- Kebijakan/aplikasi SELinux dapat memiliki bug, termasuk:
- Jalur kode yang tidak biasa
- Konfigurasi
- Pengalihan
stdout
- Descriptor file bocor
- Memori yang dapat dieksekusi
- Perpustakaan yang dibangun dengan buruk
- Informasi Anda mungkin disusupi jika Anda memiliki domain terbatas yang mencoba:
- Muat modul kernel
- Matikan mode penegakan SELinux
- Tulis ke
etc_t/shadow_t
- Ubah aturan iptables
- Alat SELinux untuk pengembangan modul kebijakan:
$ yum -y install setroubleshoot setroubleshoot-server
Mulai ulang atau mulai ulang
auditd
setelah Anda menginstal.
- Gunakan
journalctl
untuk mendaftar semua log yang terkait dengansetroubleshoot
:$ sudo journalctl -t setroubleshoot --since=14:20
- Gunakan
journalctl
untuk mendaftar semua log yang terkait dengan label SELinux tertentu. Misalnya:$ sudo journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
-
Gunakan
setroubleshoot
log ketika kesalahan SELinux terjadi dan menyarankan beberapa solusi yang mungkin. Misalnya, darijournalctl
: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
- Logging:SELinux mencatat informasi di semua tempat:
/var/log/messages
/var/log/audit/audit.log
/var/lib/setroubleshoot/setroubleshoot_database.xml
-
Logging:Mencari kesalahan SELinux di log audit:
$ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
-
Untuk mencari pesan SELinux Access Vector Cache (AVC) untuk layanan tertentu:
$ sudo ausearch -m avc -c httpd
audit2allow
utilitas mengumpulkan informasi dari log operasi yang ditolak dan kemudian menghasilkan aturan izin kebijakan SELinux. Misalnya:- Untuk menghasilkan deskripsi yang dapat dibaca manusia tentang mengapa akses ditolak:
# audit2allow -w -a
- Untuk melihat aturan penegakan jenis yang mengizinkan akses yang ditolak:
# audit2allow -a
- Untuk membuat modul khusus:
# audit2allow -a -M mypolicy
-M
option membuat file penegakan jenis (.te) dengan nama yang ditentukan dan mengkompilasi aturan ke dalam paket kebijakan (.pp):mypolicy.pp mypolicy.te
- Untuk menginstal modul kustom:
# semodule -i mypolicy.pp
- Untuk menghasilkan deskripsi yang dapat dibaca manusia tentang mengapa akses ditolak:
- Untuk mengonfigurasi satu proses (domain) agar berjalan permisif:
# semanage permissive -a httpd_t
- Jika Anda tidak lagi menginginkan domain menjadi permisif:
# semanage permissive -d httpd_t
-
Untuk menonaktifkan semua domain permisif:
$ sudo semodule -d permissivedomains
-
Mengaktifkan kebijakan MLS SELinux:
$ sudo yum install selinux-policy-mls
Di
/etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mlsPastikan SELinux berjalan dalam mode permisif:
$ sudo setenforce 0
Gunakan
fixfiles
skrip untuk memastikan bahwa file diberi label ulang pada reboot berikutnya:$ sudo fixfiles -F onboot
$ sudo reboot
-
Buat pengguna dengan rentang MLS tertentu:
$ sudo useradd -Z staff_u tux
Menggunakan
useradd
perintah, petakan pengguna baru ke pengguna SELinux yang ada (dalam hal ini,staff_u
).
-
Untuk melihat pemetaan antara pengguna SELinux dan Linux:
$ sudo semanage login -l
-
Tentukan rentang tertentu untuk pengguna:
$ sudo semanage login --modify --range s2:c100 tux
-
Untuk memperbaiki label pada direktori home pengguna (jika diperlukan):
$ sudo chcon -R -l s2:c100 /home/tux
-
Untuk membuat daftar kategori saat ini:
$ sudo chcat -L
-
Untuk mengubah kategori atau mulai membuat sendiri, ubah file sebagai berikut:
/etc/selinux/_<selinuxtype>_/setrans.conf
-
Untuk menjalankan perintah atau skrip dalam file, peran, dan konteks pengguna tertentu:
$ sudo runcon -t initrc_t -r system_r -u user_u yourcommandhere
- -t adalah konteks file
- -r adalah konteks peran
- -u adalah konteks pengguna
- Kontainer yang berjalan dengan SELinux dinonaktifkan:
- Dengan Podman:
# podman run --security-opt label=disable …
- Dengan Docker:
# docker run --security-opt label=disable …
- Dengan Podman:
- Jika Anda perlu memberi wadah akses penuh ke sistem:
- Dengan Podman:
# podman run --privileged …
- Dengan Docker:
# docker run --privileged …
- Dengan Podman:
Dan dengan ini, Anda sudah tahu jawabannya. Jadi tolong: Jangan panik, dan aktifkan SELinux .
Sumber:
- SELinux oleh Dan Walsh
- Panduan visual Anda untuk penegakan kebijakan SELinux juga oleh Dan Walsh
- Linux yang Ditingkatkan Keamanan untuk manusia biasa oleh Thomas Cameron
- Buku Mewarnai SELinux oleh Máirín Duffy
- Panduan Pengguna dan Administrator SELinux—Red Hat Enterprise Linux 7