Lembar contekan SELinux untuk administrator sistem: 42 jawaban atas pertanyaan penting

Terjemahan artikel disiapkan khusus untuk mahasiswa kursus tersebut "Pengelola Linux".

Lembar contekan SELinux untuk administrator sistem: 42 jawaban atas pertanyaan penting

Di sini Anda akan mendapatkan jawaban atas pertanyaan penting tentang kehidupan, alam semesta, dan segala sesuatu di Linux dengan keamanan yang ditingkatkan.

“Kebenaran penting bahwa segala sesuatu tidak selalu seperti yang terlihat adalah pengetahuan umum…”

-Douglas Adams, Panduan Hitchhiker ke Galaxy

Keamanan. Peningkatan keandalan. Korespondensi. Kebijakan. Sysadmin Empat Penunggang Kuda Kiamat. Selain tugas sehari-hari kami - pemantauan, pencadangan, implementasi, konfigurasi, pembaruan, dll. - kami juga bertanggung jawab atas keamanan sistem kami. Bahkan sistem yang penyedia pihak ketiganya menyarankan agar kami menonaktifkan peningkatan keamanan. Rasanya seperti bekerja Perburuan Etan dari “Misi: Mustahil.”

Menghadapi dilema ini, beberapa administrator sistem memutuskan untuk mengambil tindakan pil biru, karena mereka mengira tidak akan pernah tahu jawaban dari pertanyaan besar tentang kehidupan, alam semesta dan sebagainya. Dan seperti yang kita tahu, jawabannya adalah 42.

Sesuai semangat The Hitchhiker's Guide to the Galaxy, berikut adalah 42 jawaban atas pertanyaan penting tentang kontrol dan penggunaan. SELinux pada sistem Anda.

1. SELinux adalah sistem kontrol akses paksa, yang berarti setiap proses memiliki label. Setiap file, direktori dan objek sistem juga memiliki label. Aturan kebijakan mengontrol akses antara proses dan objek yang diberi tag. Kernel menerapkan aturan-aturan ini.

2. Dua konsep terpenting adalah: Pelabelan — penandaan (file, proses, port, dll.) dan Ketik penegakan (yang mengisolasi proses satu sama lain berdasarkan tipe).

3. Format label yang benar user:role:type:level (opsional).

4. Tujuan menyediakan keamanan multi-level (Keamanan Bertingkat - MLS) adalah mengelola proses (domain) berdasarkan tingkat keamanan data yang akan digunakannya. Misalnya, proses rahasia tidak dapat membaca data rahasia.

5. Memastikan keamanan multi-kategori (Keamanan Multi-Kategori - MCS) melindungi proses serupa satu sama lain (misalnya, mesin virtual, mesin OpenShift, kotak pasir SELinux, container, dll.).

6. Opsi kernel untuk mengubah mode SELinux saat boot:

  • autorelabel=1 → menyebabkan sistem menjalankan pelabelan ulang
  • selinux=0 → kernel tidak memuat infrastruktur SELinux
  • enforcing=0 → memuat dalam mode permisif

7. Jika Anda perlu memberi label ulang pada keseluruhan sistem:

# touch /.autorelabel
#reboot

Jika penandaan sistem mengandung banyak kesalahan, Anda mungkin perlu melakukan booting dalam mode permisif agar komentar berhasil.

8. Untuk memeriksa apakah SELinux diaktifkan: # getenforce

9. Untuk mengaktifkan/menonaktifkan SELinux untuk sementara: # setenforce [1|0]

10. Memeriksa status SELinux: # sestatus

11. Berkas konfigurasi: /etc/selinux/config

12. Bagaimana cara kerja SELinux? Berikut adalah contoh penandaan 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
  • Pelabuhan: 80/tcp, 443/tcp → httpd_t, http_port_t

Proses 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 dibuat ketika file dibuat berdasarkan konteks direktori induknya (dengan beberapa pengecualian). RPM dapat menetapkan konteks seperti saat instalasi.

14. Ada empat penyebab utama kesalahan SELinux, yang dijelaskan lebih rinci pada poin 15-21 di bawah ini:

  • Masalah pelabelan
  • Karena sesuatu yang perlu diketahui SELinux
  • Kesalahan dalam kebijakan/aplikasi SELinux
  • Informasi Anda mungkin dikompromikan

15. Masalah pelabelan: jika file Anda ada di /srv/myweb ditandai dengan salah, 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 tanda yang setara:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Memulihkan konteks (untuk kedua kasus):
    # restorecon -vR /srv/myweb

16. Masalah pelabelan: jika Anda memindahkan file alih-alih menyalinnya, file tersebut akan mempertahankan konteks aslinya. Untuk memperbaiki masalah ini:

  • Ubah perintah konteks dengan label:
    # 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 konteksnya (untuk kedua kasus): # restorecon -vR /var/www/html/

17. Jika SELinux yang perlu Anda ketahuibahwa HTTPD mendengarkan pada port 8585, beri tahu SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux yang perlu Anda ketahui Nilai Boolean yang memungkinkan bagian dari kebijakan SELinux diubah pada saat runtime tanpa mengetahui kebijakan SELinux ditimpa. Misalnya, jika Anda ingin httpd mengirim email, masukkan: # setsebool -P httpd_can_sendmail 1

19. SELinux yang perlu Anda ketahui nilai logika 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 mungkin mengandung kesalahan, termasuk:

  • Jalur kode yang tidak biasa
  • Konfigurasi
  • Mengarahkan stdout
  • Kebocoran deskriptor file
  • Memori yang dapat dieksekusi
  • Perpustakaan yang dibangun dengan buruk

Tiket terbuka (jangan kirimkan laporan ke Bugzilla; Bugzilla tidak memiliki SLA).

21. Informasi Anda mungkin dikompromikanjika Anda memiliki domain terbatas, cobalah:

  • Muat modul kernel
  • Nonaktifkan mode SELinux yang diterapkan
  • Menulis ke etc_t/shadow_t
  • Ubah aturan iptables

22. Alat SELinux untuk mengembangkan modul kebijakan:

# yum -y install setroubleshoot setroubleshoot-server

Nyalakan ulang atau mulai ulang auditd setelah instalasi.

23. Gunakan

journalctl

untuk menampilkan daftar semua log yang terkait dengan setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. Gunakan journalctl untuk mencantumkan semua log yang terkait dengan tag SELinux tertentu. Misalnya:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Jika terjadi kesalahan SELinux, gunakan log setroubleshoot menawarkan beberapa kemungkinan solusi.
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: mencari 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. а audit2allow mengumpulkan informasi dari log operasi terlarang dan kemudian menghasilkan aturan kebijakan izin SELinux. Misalnya:

  • Untuk membuat deskripsi yang dapat dibaca manusia tentang alasan akses ditolak: # audit2allow -w -a
  • Untuk melihat aturan penegakan jenis yang mengizinkan akses ditolak: # audit2allow -a
  • Untuk membuat modul khusus: # audit2allow -a -M mypolicy
  • Pilihan -M membuat file penegakan tipe (.te) dengan nama yang ditentukan dan mengkompilasi aturan ke dalam paket kebijakan (.pp): mypolicy.pp mypolicy.te
  • Untuk memasang 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 tersebut bersifat 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

Pastikan SELinux berjalan dalam mode permisif: # setenforce 0
Gunakan skrip fixfilesuntuk memastikan bahwa file diberi label ulang pada reboot berikutnya:

# fixfiles -F onboot # reboot

34. Buat pengguna dengan rentang MLS tertentu: # useradd -Z staff_u john

Menggunakan perintah useradd, petakan pengguna baru ke pengguna SELinux yang sudah ada (dalam hal ini, staff_u).

35. Untuk melihat pemetaan antara pengguna SELinux dan Linux: # semanage login -l

36. Tentukan rentang spesifik untuk pengguna: # semanage login --modify --range s2:c100 john

37. Untuk memperbaiki label 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

  • -t konteks file
  • -r konteks peran
  • -u konteks pengguna

41. Kontainer yang berjalan dengan SELinux dinonaktifkan:

  • tukang pod: # podman run --security-opt label=disable …
  • Buruh pelabuhan: # docker run --security-opt label=disable …

42. Jika Anda perlu memberi container akses penuh ke sistem:

  • tukang pod: # podman run --privileged …
  • Buruh pelabuhan: # docker run --privileged …

Dan sekarang Anda sudah tahu jawabannya. Jadi tolong: jangan panik dan aktifkan SELinux.

Ссылки:

Sumber: www.habr.com

Tambah komentar