Mengubah Status dan Mode SELinux

Tim Dokumentasi Fedora, Peter Boy (pboy) Versi F36 and newer Last review: 2023-08-09

Perubahan permanen pada status dan mode SELinux

Seperti yang dibahas dalam Memulai dengan SELinux, SELinux dapat diaktifkan atau dinonaktifkan. Ketika diaktifkan, SELinux memiliki dua mode: enforcing dan permissive.

Gunakan perintah getenforce atau sestatus untuk memeriksa mode di mana SELinux sedang berjalan. Perintah getenforce akan menampilkan Enforcing, Permissive, atau Disabled.

Perintah sestatus menampilkan status SELinux dan kebijakan SELinux yang sedang digunakan:

[~]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31

Ketika sistem menjalankan SELinux dalam mode permissive, pengguna dan proses dapat memberi label objek sistem berkas secara tidak benar. Objek sistem berkas yang dibuat saat SELinux dinonaktifkan tidak akan memiliki label sama sekali. Perilaku ini menyebabkan masalah saat beralih ke mode enforcing karena SELinux bergantung pada label objek sistem berkas yang benar.

Untuk mencegah file yang tidak berlabel atau salah label menyebabkan masalah, sistem berkas akan secara otomatis diberi label ulang saat beralih dari status dinonaktifkan ke mode permissive atau enforcing. Dalam mode permissive, gunakan perintah fixfiles -F onboot sebagai root untuk membuat file /.autorelabel yang berisi opsi -F guna memastikan bahwa file akan diberi label ulang saat sistem di-boot ulang berikutnya.

Mengaktifkan SELinux

Saat diaktifkan, SELinux dapat berjalan dalam salah satu dari dua mode: enforcing atau permissive. Bagian berikut menunjukkan cara mengubah mode ini secara permanen.

Saat mengaktifkan SELinux pada sistem yang sebelumnya dinonaktifkan, untuk menghindari masalah seperti sistem gagal boot atau kegagalan proses, ikuti prosedur berikut.

Persyaratan
  • Pastikan paket selinux-policy-targeted, selinux-policy, libselinux-utils, dan grubby telah terpasang. Untuk memeriksa apakah paket tertentu sudah terpasang:

    $ rpm -q package_name
Prosedur
  1. Jika sistem Anda memiliki SELinux yang dinonaktifkan di level kernel (cara ini direkomendasikan, lihat [_disabling_selinux]), ubah ini terlebih dahulu. Periksa apakah terdapat opsi selinux=0 pada baris perintah kernel:

    $ cat /proc/cmdline
    BOOT_IMAGE=... ... selinux=0
    1. Hapus opsi selinux=0 dari konfigurasi bootloader menggunakan grubby:

      $ sudo grubby --update-kernel ALL --remove-args selinux
    2. Perubahan ini akan berlaku setelah Anda memulai ulang sistem pada langkah berikutnya.

  2. Pastikan sistem berkas diberi label ulang pada saat boot berikutnya:

    $ sudo fixfiles onboot
  3. Aktifkan SELinux dalam mode permissive. Untuk informasi lebih lanjut, lihat [_changing_to_permissive_mode].

  4. Mulai ulang sistem Anda:

    $ reboot
  5. Periksa pesan penolakan SELinux.

    $ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent
  6. Jika tidak ada penolakan, ubah ke mode enforcing. Untuk informasi lebih lanjut, lihat [_changing_to_enforcing_mode].

Untuk menjalankan aplikasi kustom dengan SELinux dalam mode enforcing, pilih salah satu skenario berikut:

Mengubah ke mode permissive

Gunakan prosedur berikut untuk mengubah mode SELinux menjadi permissive secara permanen. Saat SELinux berjalan dalam mode permissive, kebijakan SELinux tidak diterapkan. Sistem tetap beroperasi dan SELinux tidak menolak operasi apa pun, tetapi hanya mencatat pesan AVC, yang kemudian dapat digunakan untuk pemecahan masalah, debug, dan peningkatan kebijakan SELinux. Setiap AVC hanya dicatat satu kali dalam kasus ini.

Prasyarat
  • Paket selinux-policy-targeted, libselinux-utils, dan policycoreutils telah terpasang di sistem Anda.

  • Parameter kernel selinux=0 atau enforcing=0 tidak digunakan.

Prosedur
  1. Buka file /etc/selinux/config menggunakan editor teks pilihan Anda, misalnya:

# vi /etc/selinux/config
  1. Atur opsi SELINUX=permissive:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=*permissive*
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted
  1. Mulai ulang sistem:

    # reboot

Mengubah ke mode enforcing

Gunakan prosedur berikut untuk mengalihkan SELinux ke mode enforcing. Saat SELinux berjalan dalam mode enforcing, sistem akan menerapkan kebijakan SELinux dan menolak akses berdasarkan aturan kebijakan tersebut. Di Fedora, mode enforcing diaktifkan secara bawaan ketika sistem pertama kali diinstal dengan SELinux.

Persyaratan
  • Paket selinux-policy-targeted, libselinux-utils, dan policycoreutils telah terpasang di sistem Anda.

  • Parameter kernel selinux=0 atau enforcing=0 tidak digunakan.

Prosedur
  1. Buka file /etc/selinux/config menggunakan editor teks pilihan Anda, misalnya:

    # vi /etc/selinux/config
  2. Atur opsi SELINUX=enforcing:

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
  3. Simpan perubahan, lalu mulai ulang sistem:

    # reboot

    Pada boot berikutnya, SELinux akan memberi label ulang semua file dan direktori dalam sistem serta menambahkan konteks SELinux untuk file dan direktori yang dibuat ketika SELinux dinonaktifkan.

Verifikasi
  1. Setelah sistem dimulai ulang, pastikan perintah getenforce menampilkan hasil Enforcing:

    $ getenforce
    Enforcing

Setelah beralih ke mode enforcing, SELinux mungkin menolak beberapa tindakan karena aturan kebijakan SELinux yang salah atau hilang. Untuk melihat tindakan apa yang ditolak SELinux, masukkan perintah berikut sebagai root:

# ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today

Sebagai alternatif, dengan paket setroubleshoot-server yang terpasang, jalankan perintah berikut:

# grep "SELinux is preventing" /var/log/messages

Pengguna standar dapat menggunakan antarmuka grafis setroubleshoot untuk mengirim laporan bug langsung ke Bugzilla.

Jika SELinux aktif dan layanan Audit daemon (auditd) tidak berjalan di sistem Anda, cari pesan SELinux tertentu di keluaran perintah dmesg:

# dmesg | grep -i -e type=1300 -e type=1400

Jika SELinux menolak beberapa tindakan, lihat bab Mengatasi masalah yang terkait dengan SELinux dalam dokumen RHEL 8 Menggunakan SELinux untuk informasi tentang pemecahan masalah.

Menonaktifkan SELinux

Gunakan prosedur berikut untuk menonaktifkan SELinux secara permanen.

Ketika SELinux dinonaktifkan, kebijakan SELinux tidak dimuat sama sekali; kebijakan tidak diterapkan dan pesan AVC tidak dicatat. Oleh karena itu, semua manfaat menjalankan SELinux yang tercantum dalam Manfaat SELinux akan hilang.

Disarankan untuk menggunakan mode permissive daripada menonaktifkan SELinux secara permanen. Lihat [_changing_to_permissive_mode] untuk informasi lebih lanjut tentang mode permissive.

Menonaktifkan SELinux menggunakan opsi SELINUX=disabled dalam file /etc/selinux/config menyebabkan proses di mana kernel melakukan boot dengan SELinux aktif lalu beralih ke mode nonaktif di kemudian saat proses boot. Karena hal ini dapat menyebabkan kebocoran memori dan kondisi balapan yang menimbulkan kernel panic, sebaiknya nonaktifkan SELinux dengan menambahkan parameter selinux=0 pada baris perintah kernel seperti dijelaskan dalam bagian Mengubah mode SELinux saat boot, jika memang skenario Anda benar-benar memerlukan penonaktifan penuh SELinux.

Persyaratan
  • Paket grubby telah terpasang:

    $ rpm -q grubby
    grubby-version
Prosedur
  1. Buka file /etc/selinux/config menggunakan editor teks pilihan Anda, misalnya:

    # vi /etc/selinux/config
  2. Atur opsi SELINUX=disabled:

    # File ini mengontrol status SELinux pada sistem.
    # SELINUX= dapat menggunakan salah satu dari tiga nilai berikut:
    #       enforcing - Kebijakan keamanan SELinux diterapkan.
    #       permissive - SELinux hanya menampilkan peringatan, tidak menerapkan kebijakan.
    #       disabled - Tidak ada kebijakan SELinux yang dimuat.
    SELINUX=disabled
    # SELINUXTYPE= dapat menggunakan salah satu dari dua nilai berikut:
    #       targeted - Proses-proses tertentu dilindungi,
    #       mls - Perlindungan Multi Level Security.
    SELINUXTYPE=targeted
  3. Simpan perubahan, lalu mulai ulang sistem Anda:

# reboot
Verifikasi
  • Setelah boot ulang, pastikan perintah getenforce menampilkan hasil Disabled:

    $ getenforce
    Disabled

Mengubah Mode SELinux saat Boot

Saat boot, Anda dapat menetapkan beberapa parameter kernel untuk mengubah cara kerja SELinux:

enforcing=0

Menetapkan parameter ini menyebabkan sistem memulai dalam mode permissive, yang berguna saat memecahkan masalah. Menggunakan mode permissive mungkin menjadi satu-satunya cara untuk mendeteksi masalah jika sistem berkas Anda terlalu rusak. Selain itu, dalam mode permissive, sistem tetap membuat label dengan benar. Pesan AVC yang dihasilkan pada mode ini dapat berbeda dari yang ada pada mode enforcing.

Dalam mode permissive, hanya penolakan pertama dari serangkaian penolakan yang sama yang akan dilaporkan. Namun, dalam mode enforcing, Anda mungkin mendapatkan penolakan terkait pembacaan direktori, dan aplikasi akan berhenti. Dalam mode permissive, Anda akan mendapatkan pesan AVC yang sama, tetapi aplikasi tetap melanjutkan membaca file dalam direktori tersebut dan menghasilkan pesan AVC untuk setiap penolakan tambahan.

selinux=0

Parameter ini menyebabkan kernel tidak memuat bagian mana pun dari infrastruktur SELinux. Skrip init mendeteksi bahwa sistem melakukan boot dengan parameter selinux=0 dan membuat file /.autorelabel. Hal ini menyebabkan sistem secara otomatis melakukan pelabelan ulang pada saat berikutnya Anda melakukan boot dengan SELinux diaktifkan.

Penggunaan parameter selinux=0 tidak direkomendasikan. Untuk melakukan debug pada sistem Anda, sebaiknya gunakan mode permissive.

autorelabel=1

Parameter ini memaksa sistem untuk melakukan pelabelan ulang dengan cara yang serupa dengan perintah berikut:

# touch /.autorelabel
# reboot

Jika suatu sistem berkas berisi banyak objek yang salah label, jalankan sistem dalam mode permissive agar proses pelabelan ulang otomatis (autorelabel) dapat berhasil.

Untuk parameter boot kernel tambahan yang terkait dengan SELinux, seperti checkreqprot, lihat file kernel-parameters.txt. File ini tersedia di paket sumber kernel Linux Anda (.src.rpm). Untuk mengunduh paket sumber yang berisi kernel yang sedang digunakan:

[~]# dnf download --source kernel