GNU/Linux >> Belajar Linux >  >> Linux

Panduan sysadmin untuk SELinux:42 jawaban untuk pertanyaan besar

"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.

  1. 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.
  1. Dua konsep yang paling penting adalah:Pelabelan (file, proses, port, dll.) dan Jenis penegakan (yang memisahkan proses satu sama lain berdasarkan jenisnya).
  1. Format Label yang benar adalah user:role:type:level (opsional ).
  1. 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.
  1. Penegakan Keamanan Multi-Kategori (MCS) melindungi proses serupa satu sama lain (seperti mesin virtual, roda gigi OpenShift, kotak pasir SELinux, wadah, dll.).
  1. Parameter kernel untuk mengubah mode SELinux saat boot:
    • autorelabel=1 → memaksa sistem untuk memberi label ulang
    • selinux=0 → kernel tidak memuat bagian apapun dari infrastruktur SELinux
    • enforcing=0 → boot dalam mode permisif
  1. Jika Anda perlu memberi label ulang pada seluruh sistem:
    # touch /.autorelabel
    # reboot

    Jika pelabelan sistem berisi banyak kesalahan, Anda mungkin perlu boot dalam mode permisif agar autorelabel berhasil.

  1. Untuk memeriksa apakah SELinux diaktifkan:

    # getenforce
  1. Untuk mengaktifkan/menonaktifkan SELinux untuk sementara:

    # setenforce [1|0]
  1. Alat status SELinux:

    # sestatus
  1. File konfigurasi:

    /etc/selinux/config
  1. Bagaimana cara kerja SELinux? Berikut ini contoh pelabelan untuk Server Web Apache:
    • Binary:/usr/sbin/httpdhttpd_exec_t
    • Direktori konfigurasi:/etc/httpdhttpd_config_t
    • Direktori file log:/var/log/httpdhttpd_log_t
    • Direktori konten:/var/www/htmlhttpd_sys_content_t
    • Skrip mulai:/usr/lib/systemd/system/httpd.servicehttpd_unit_file_d
    • Proses:/usr/sbin/httpd -DFOREGROUNDhttpd_t
    • Port:80/tcp, 443/tcphttpd_t, http_port_t

Proses yang berjalan di httpd_t konteks dapat berinteraksi dengan objek dengan httpd_something_t label.

  1. 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.

  1. 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
  1. 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
  1. 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/
  1. Jika SELinux perlu tahu HTTPD mendengarkan pada port 8585, beri tahu SELinux:

    $ sudo semanage port -a -t http_port_t -p tcp 8585
  1. 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
  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
  1. 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
  1. 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
  1. Alat SELinux untuk pengembangan modul kebijakan:
    $ yum -y install setroubleshoot setroubleshoot-server

    Mulai ulang atau mulai ulang auditd setelah Anda menginstal.

  1. Gunakan journalctl untuk mendaftar semua log yang terkait dengan setroubleshoot :
    $ sudo journalctl -t setroubleshoot --since=14:20

  1. Gunakan journalctl untuk mendaftar semua log yang terkait dengan label SELinux tertentu. Misalnya:
    $ sudo journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
  1. Gunakan setroubleshoot log ketika kesalahan SELinux terjadi dan menyarankan 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
  1. Logging:SELinux mencatat informasi di semua tempat:
    • /var/log/messages
    • /var/log/audit/audit.log
    • /var/lib/setroubleshoot/setroubleshoot_database.xml
  1. Logging:Mencari kesalahan SELinux di log audit:

    $ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
  1. Untuk mencari pesan SELinux Access Vector Cache (AVC) untuk layanan tertentu:

    $ sudo ausearch -m avc -c httpd
  1. 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
  1. Untuk mengonfigurasi satu proses (domain) agar berjalan permisif:# semanage permissive -a httpd_t
  1. Jika Anda tidak lagi menginginkan domain menjadi permisif:# semanage permissive -d httpd_t
  1. Untuk menonaktifkan semua domain permisif:

    $ sudo semodule -d permissivedomains
  1. Mengaktifkan kebijakan MLS SELinux:

    $ sudo yum install selinux-policy-mls

    Di /etc/selinux/config:

    SELINUX=permissive
    SELINUXTYPE=mls

    Pastikan 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
  1. 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 ).

  1. Untuk melihat pemetaan antara pengguna SELinux dan Linux:

    $ sudo semanage login -l
  1. Tentukan rentang tertentu untuk pengguna:

    $ sudo semanage login --modify --range s2:c100 tux
  1. Untuk memperbaiki label pada direktori home pengguna (jika diperlukan):

    $ sudo chcon -R -l s2:c100 /home/tux
  1. Untuk membuat daftar kategori saat ini:

    $ sudo chcat -L
  1. Untuk mengubah kategori atau mulai membuat sendiri, ubah file sebagai berikut:

    /etc/selinux/_<selinuxtype>_/setrans.conf
  1. 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
  1. Kontainer yang berjalan dengan SELinux dinonaktifkan:
    • Dengan Podman:# podman run --security-opt label=disable …
    • Dengan Docker:# docker run --security-opt label=disable …
  1. Jika Anda perlu memberi wadah akses penuh ke sistem:
    • Dengan Podman:# podman run --privileged …
    • Dengan Docker:# docker run --privileged …

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

Linux
  1. Memperkenalkan panduan untuk komunikasi antar-proses di Linux

  2. 30 Pertanyaan dan Jawaban Wawancara OpenStack Teratas

  3. 20 Pertanyaan dan Jawaban Wawancara Postfix

  1. 4 sesi video untuk sysadmin Linux

  2. 20 panduan dan tutorial sysadmin teratas

  3. Tantangan dan Janji Big Data

  1. Panduan Pemula untuk SELinux

  2. SELinux di Dunia Nyata

  3. Pertanyaan tentang ID pengguna yang disimpan