Selama bertahun-tahun, SELinux telah membantu mencegah kerusakan sistem dari eksploitasi zero-day. Alat ini juga berguna untuk isolasi mesin virtual dan diperlukan untuk isolasi kontainer. Namun SELinux masih sering dinonaktifkan atau ditempatkan dalam mode permisif.
targeted
SELinux kebijakan dirancang untuk mengisolasi berbagai domain proses sambil tetap memungkinkan interaksi antar layanan sesuai kebutuhan. Hanya beberapa perintah yang diperlukan bagi administrator untuk mengonfigurasi sistem untuk menggunakan kebijakan ini dengan aplikasi khusus mereka, menjaga SELinux dalam mode penegakan.
[Pelajari lebih lanjut tentang menggunakan dokumentasi kebijakan SELinux di sini.]
semanage
perintah digunakan untuk menyesuaikan konteks file, konteks port, dan boolean. Jika masih ada konflik dengan proses tertentu, domain tersebut dapat ditempatkan ke mode permisif hingga penyelidikan lebih lanjut dapat diselesaikan. Ini membuat sistem lainnya terlindungi dalam mode penegakan.
Hanya dengan empat semanage
perintah di bawah ini, sebagian besar sistem dapat dikonfigurasi sehingga aplikasi khusus Anda berjalan dengan SELinux dalam mode penerapan.
The semanage boolean
perintah
targeted
kebijakan mencakup banyak boolean untuk mengaktifkan dan menonaktifkan kumpulan allow
aturan, membuat asumsi bahwa layanan memiliki beberapa kasus penggunaan dan dijalankan secara berbeda di setiap lingkungan. Penggunaan boolean memungkinkan kumpulan aturan yang berbeda untuk kasus penggunaan yang berbeda:Server web di lingkungan akademik mungkin perlu mengizinkan siswa untuk memublikasikan konten dari direktori rumah mereka, sementara situs perusahaan yang menghadap publik mungkin perlu menolak akses ke rumah pengguna mana pun direktori, membatasi executable SSI, dan menampilkan data yang disimpan pada share NFS.
httpd_selinux
halaman manual menjelaskan penggunaan semua boolean yang disediakan untuk httpd
domain serta contoh setsebool
perintah untuk secara terus-menerus mengaktifkan setiap boolean. Cara alternatif (dan yang lebih baru) untuk melihat dan mengubah boolean ini adalah dengan semanage boolean
perintah.
-l
opsi mencantumkan semua boolean dalam kebijakan yang dimuat. Anda kemudian dapat memfilter kata kunci:
$ sudo semanage boolean -l | grep httpd
httpd_anon_write (off , off) Allow httpd to anon write
httpd_builtin_scripting (on , on) Allow httpd to builtin scripting
httpd_can_check_spam (off , off) Allow httpd to can check spam
httpd_can_connect_ftp (off , off) Allow httpd to can connect ftp
httpd_can_connect_ldap (off , off) Allow httpd to can connect ldap
Output ini mencakup nama boolean, status boolean saat ini dan persisten, dan deskripsi singkat tentang bagaimana boolean digunakan.
Untuk mengubah boolean dengan semanage
gunakan:
$ sudo semanage boolean -m --off httpd_ssi_exec
Anda juga dapat membuat daftar boolean yang disesuaikan secara lokal dengan menambahkan -C
pilihan:
$ sudo semanage boolean -l -C
SELinux boolean State Default Description
httpd_ssi_exec (off , off) Allow httpd to ssi exec
virt_sandbox_use_all_caps (on , on) Allow virt to sandbox use all caps
virt_use_nfs (on , on) Allow virt to use nfs
Halaman manual untuk setiap domain SELinux memiliki deskripsi semua boolean yang disediakan untuk domain tersebut. Untuk opsi lainnya saat memodifikasi boolean SELinux dengan semanage
, lihat semanage-boolean
halaman manual.
Anda dapat mengotomatiskan semanage
ini perintah dengan modul dan peran Ansible terkait. Modul Ansible untuk semanage boolean
adalah seboolean
. Ini, dan modul terkait yang dijelaskan di bawah, digunakan oleh peran yang disediakan oleh linux-system-roles
paket di Fedora atau rhel-system-roles
paket di Red Hat Enterprise Linux. Paket Red Hat tersedia mulai dari Red Hat Enterprise Linux 7.4 dan dapat ditemukan di repositori "Ekstra".
The semanage fcontext
perintah
targeted
policy menyediakan informasi konteks file untuk file aplikasi—termasuk data, log, dan file runtime—lokasi alternatif default dan umum. Definisi konteks ini adalah pemetaan bahwa restorecon
perintah yang digunakan untuk memverifikasi atau mengubah konteks file.
semanage fcontext
perintah dapat digunakan untuk membuat daftar definisi konteks file, dan menambahkan lebih banyak. -l
opsi menunjukkan semua konteks dalam kebijakan yang dimuat. Anda kemudian dapat memfilter kata kunci:
$ sudo semanage fcontext -l | grep sshd
/etc/rc\.d/init\.d/sshd regular file system_u:object_r:sshd_initrc_exec_t:s0
/etc/ssh/primes regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key\.pub regular file system_u:object_r:sshd_key_t:s0
/usr/lib/systemd/system/sshd-keygen.* regular file system_u:object_r:sshd_keygen_unit_file_t:s0
Output ini mencakup pola ekspresi reguler untuk nama file target, jenis file, dan konteks file untuk ditetapkan ke nama file yang cocok.
Halaman manual terkait, dalam hal ini man sshd_selinux
, menyertakan daftar file terkelola dan deskripsi setiap konteks file yang tersedia untuk domain. Ada juga contoh perintah untuk menentukan dan menerapkan pelabelan alternatif.
Misalnya, jika Anda ingin menyimpan sshd
kunci host di subdirektori terpisah, Anda dapat menjalankan dua perintah berikut:
$ sudo semanage fcontext -a -t sshd_key_t '/etc/ssh/keys(/.*)?'
$ sudo restorecon -r /etc/ssh/keys
Dalam contoh ini, ekspresi reguler akan cocok dengan direktori /etc/ssh/keys
serta semua subdirektori dan file yang ditemukan di /etc/ssh/keys
direktori.
Sama seperti boolean, Anda dapat melihat konteks file yang disesuaikan secara lokal dengan menambahkan -C
pilihan:
$ sudo semanage fcontext -l -C
SELinux fcontext type Context
/usr/share/dnfdaemon/dnfdaemon-system all files system_u:object_r:rpm_exec_t:s0
Untuk opsi lainnya saat memodifikasi konteks file SELinux, lihat semanage-fcontext
halaman manual.
Anda dapat mengotomatiskan semanage fcontext
perintah dengan Ansible sefcontext
modul. restorecon
perintah masih perlu dijalankan dengan modul perintah terpisah. Lihat ansible-doc sefcontext
untuk contoh. selinux
peran sistem mencakup kedua tugas.
semanage port
perintah
Selain konteks file, targeted
kebijakan juga mendefinisikan konteks pelabuhan. Sama seperti boolean dan konteks file, halaman manual khusus domain mencantumkan jenis yang ditentukan, dan mungkin juga menampilkan contoh perintah yang diperlukan untuk menjalankan layanan pada port yang berbeda.
Lihat konteks port dengan:
$ sudo semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
Saat menjalankan layanan pada port kustom, Anda harus mengubah file konfigurasi untuk layanan dan juga menambahkan definisi port SELinux. Tanpa definisi port, layanan akan gagal untuk memulai dan mencatat error yang mirip dengan "tidak dapat mengikat ke port".
Tambahkan definisi port dengan:
$ sudo semanage port -a -t http_cache_port_t -p tcp 8010
Saat menentukan port, Anda harus menyertakan protokol dan nomor port. Selain itu, hanya satu jenis yang dapat ditentukan untuk setiap protokol dan nomor port. Untuk opsi lainnya saat memodifikasi konteks port SELinux, lihat semanage-port
halaman manual.
Anda dapat mengotomatiskan semanage-port
perintah dengan seport
Modul yang memungkinkan.
semanage permissive
perintah
Alih-alih memindahkan seluruh sistem ke mode permisif—atau lebih buruk lagi, menonaktifkan SELinux sepenuhnya—Anda dapat menempatkan satu domain ke mode permisif. Domain dalam mode permisif memungkinkan semua tindakan saat masih mencatat apa pun akan menjadi penolakan. Domain lain pada sistem tetap dalam mode penegakan, yang mencatat dan menolak tindakan yang tidak diizinkan secara khusus.
Halaman manual untuk domain umum mencantumkan jenis SELinux yang dapat ditempatkan ke mode permisif.
Untuk membuat daftar domain apa pun yang saat ini dalam mode permisif, gunakan:
$ sudo semanage permissive -l
Pada penginstalan awal, kecil kemungkinannya akan ada domain dalam mode permisif.
Untuk menempatkan domain ke mode permisif, gunakan:
$ sudo semanage permissive -a squid_t
-d
option menghapus domain permisif, sehingga mengaktifkan kembali mode penegakan untuk domain tersebut.
Untuk opsi lainnya saat menempatkan domain ke mode permisif, lihat semanage-permissive
halaman manual.
selinux_permissive
yang Memungkinkan modul dapat digunakan untuk menempatkan domain ke mode permisif. Lihat ansible-doc selinux_permissive
sebagai contoh.
File
Semua semanage
perintah yang menambahkan atau mengubah konfigurasi kebijakan yang ditargetkan menyimpan informasi di *local
file di bawah /etc/selinux/targeted
pohon direktori. Semua file ini memiliki peringatan bahwa mereka tidak boleh diedit secara langsung tetapi digunakan untuk mempertahankan penyesuaian. Saat SELinux dan paket kebijakan diperbarui, file penyesuaian lokal ini akan tetap ada dan diterapkan ke kebijakan yang diperbarui.