Lembaran tipu SELinux untuk pentadbir sistem: 42 jawapan kepada soalan penting

Terjemahan artikel disediakan khusus untuk pelajar kursus tersebut "Pentadbir Linux".

Lembaran tipu SELinux untuk pentadbir sistem: 42 jawapan kepada soalan penting

Di sini anda akan mendapat jawapan kepada soalan penting tentang kehidupan, alam semesta dan segala-galanya dalam Linux dengan keselamatan yang dipertingkatkan.

"Kebenaran penting bahawa perkara-perkara tidak selalu seperti yang mereka nampak adalah pengetahuan umum..."

-Douglas Adams, Panduan Penumpang ke Galaksi

Keselamatan. Peningkatan kebolehpercayaan. Surat-menyurat. Dasar. Empat Penunggang Kuda sysadmin Apocalypse. Selain tugas harian kami - pemantauan, sandaran, pelaksanaan, konfigurasi, pengemaskinian, dll. - kami juga bertanggungjawab ke atas keselamatan sistem kami. Malah sistem yang pembekal pihak ketiga mengesyorkan kami melumpuhkan keselamatan yang dipertingkatkan. Rasa macam kerja Ethan Hunt daripada "Misi: Mustahil."

Menghadapi dilema ini, sesetengah pentadbir sistem memutuskan untuk mengambilnya pil biru, kerana mereka fikir mereka tidak akan pernah tahu jawapan kepada persoalan besar kehidupan, alam semesta dan semua itu. Dan seperti yang kita semua tahu, jawapan itu ialah 42.

Dengan semangat Panduan The Hitchhiker ke Galaxy, berikut ialah 42 jawapan kepada soalan penting tentang kawalan dan penggunaan. SELinux pada sistem anda.

1. SELinux ialah sistem kawalan akses paksa, yang bermaksud setiap proses mempunyai label. Setiap fail, direktori dan objek sistem juga mempunyai label. Peraturan dasar mengawal akses antara proses dan objek yang ditag. Kernel menguatkuasakan peraturan ini.

2. Dua konsep yang paling penting ialah: Melabelkan — penandaan (fail, proses, port, dsb.) dan Jenis penguatkuasaan (yang mengasingkan proses antara satu sama lain berdasarkan jenis).

3. Format label yang betul user:role:type:level (pilihan).

4. Tujuan menyediakan keselamatan pelbagai peringkat (Keselamatan Berbilang Tahap - MLS) adalah untuk mengurus proses (domain) berdasarkan tahap keselamatan data yang akan mereka gunakan. Sebagai contoh, proses rahsia tidak boleh membaca data rahsia.

5. Memastikan keselamatan pelbagai kategori (Keselamatan Berbilang Kategori - MCS) melindungi proses yang serupa antara satu sama lain (contohnya, mesin maya, enjin OpenShift, kotak pasir SELinux, bekas, dll.).

6. Pilihan kernel untuk menukar mod SELinux semasa but:

  • autorelabel=1 → menyebabkan sistem menjalankan pelabelan semula
  • selinux=0 → kernel tidak memuatkan infrastruktur SELinux
  • enforcing=0 → memuatkan dalam mod permisif

7. Jika anda perlu melabelkan semula keseluruhan sistem:

# touch /.autorelabel
#reboot

Jika penandaan sistem mengandungi sejumlah besar ralat, anda mungkin perlu but dalam mod permisif untuk menandakan untuk berjaya.

8. Untuk menyemak sama ada SELinux didayakan: # getenforce

9. Untuk mendayakan/melumpuhkan SELinux buat sementara waktu: # setenforce [1|0]

10. Menyemak status SELinux: # sestatus

11. Fail konfigurasi: /etc/selinux/config

12. Bagaimanakah SELinux berfungsi? Berikut ialah contoh penandaan untuk pelayan web Apache:

  • Perwakilan binari: /usr/sbin/httpd→httpd_exec_t
  • Direktori konfigurasi: /etc/httpd→httpd_config_t
  • Log direktori fail: /var/log/httpd → httpd_log_t
  • Direktori kandungan: /var/www/html → httpd_sys_content_t
  • Skrip pelancaran: /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, boleh berinteraksi dengan objek berlabel httpd_something_t.

13. Banyak arahan menerima hujah -Z untuk melihat, mencipta dan menukar konteks:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Konteks ditubuhkan apabila fail dibuat berdasarkan konteks direktori induknya (dengan beberapa pengecualian). RPM boleh mewujudkan konteks seperti semasa pemasangan.

14. Terdapat empat punca utama ralat SELinux, yang diterangkan dengan lebih terperinci dalam perkara 15-21 di bawah:

  • Isu pelabelan
  • Kerana sesuatu yang perlu diketahui oleh SELinux
  • Ralat dalam dasar/aplikasi SELinux
  • Maklumat anda mungkin terjejas

15. Masalah pelabelan: jika fail anda ada dalam /srv/myweb ditandakan secara salah, akses mungkin dinafikan. Berikut ialah beberapa cara untuk membetulkannya:

  • Jika anda tahu labelnya:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Jika anda mengetahui fail dengan tanda yang setara:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Memulihkan konteks (untuk kedua-dua kes):
    # restorecon -vR /srv/myweb

16. Masalah pelabelan: jika anda mengalihkan fail dan bukannya menyalinnya, fail itu akan mengekalkan konteks asalnya. Untuk menyelesaikan masalah ini:

  • Tukar arahan konteks dengan label:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Tukar arahan konteks dengan label pautan:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Pulihkan konteks (untuk kedua-dua kes): # restorecon -vR /var/www/html/

17. Jika SELinux yang anda perlu tahubahawa HTTPD sedang mendengar pada port 8585, beritahu SELinux:

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

18. SELinux yang anda perlu tahu Nilai Boolean yang membenarkan bahagian dasar SELinux ditukar pada masa jalan tanpa mengetahui dasar SELinux ditimpa. Sebagai contoh, jika anda mahu httpd menghantar e-mel, masukkan: # setsebool -P httpd_can_sendmail 1

19. SELinux yang anda perlu tahu nilai logik untuk mendayakan/melumpuhkan tetapan SELinux:

  • Untuk melihat semua nilai boolean: # getsebool -a
  • Untuk melihat huraian setiap: # semanage boolean -l
  • Untuk menetapkan nilai boolean: # setsebool [_boolean_] [1|0]
  • Untuk pemasangan kekal, tambah -P. Sebagai contoh: # setsebool httpd_enable_ftp_server 1 -P

20. Dasar/aplikasi SELinux mungkin mengandungi ralat, termasuk:

  • Laluan kod yang luar biasa
  • Konfigurasi
  • Mengubah hala stdout
  • Deskriptor fail bocor
  • Memori boleh laksana
  • Perpustakaan yang dibina dengan buruk

Buka tiket (jangan serahkan laporan kepada Bugzilla; Bugzilla tiada SLA).

21. Maklumat anda mungkin terjejasjika anda mempunyai domain terhad yang cuba:

  • Muatkan modul kernel
  • Lumpuhkan mod SELinux yang dikuatkuasakan
  • Tulis kepada etc_t/shadow_t
  • Tukar peraturan iptables

22. Alat SELinux untuk membangunkan modul dasar:

# yum -y install setroubleshoot setroubleshoot-server

But semula atau mulakan semula auditd selepas pemasangan.

23. Gunakan

journalctl

untuk memaparkan senarai semua log yang dikaitkan dengan setroubleshoot:

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

24. Gunakan journalctl untuk menyenaraikan semua log yang dikaitkan dengan teg SELinux tertentu. Sebagai contoh:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Jika ralat SELinux berlaku, gunakan log setroubleshoot menawarkan beberapa penyelesaian yang mungkin.
Sebagai contoh, daripada 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. Pembalakan: SELinux merekodkan maklumat di banyak tempat:

  • / var / log / mesej
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Pembalakan: mencari ralat SELinux dalam log audit:

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

28. Untuk mencari mesej SELinux Access Vector Cache (AVC) untuk perkhidmatan tertentu:

# ausearch -m avc -c httpd

29. Utiliti audit2allow mengumpul maklumat daripada log operasi yang dilarang dan kemudian menjana peraturan dasar kebenaran SELinux. Sebagai contoh:

  • Untuk membuat penerangan yang boleh dibaca oleh manusia tentang sebab akses ditolak: # audit2allow -w -a
  • Untuk melihat jenis peraturan penguatkuasaan yang membenarkan akses yang ditolak: # audit2allow -a
  • Untuk membuat modul tersuai: # audit2allow -a -M mypolicy
  • Pilihan -M mencipta fail penguatkuasaan jenis (.te) dengan nama yang ditentukan dan menyusun peraturan ke dalam pakej dasar (.pp): mypolicy.pp mypolicy.te
  • Untuk memasang modul tersuai: # semodule -i mypolicy.pp

30. Untuk mengkonfigurasi proses (domain) berasingan untuk berfungsi dalam mod permisif: # semanage permissive -a httpd_t

31. Jika anda tidak lagi mahu domain menjadi permisif: # semanage permissive -d httpd_t

32. Untuk melumpuhkan semua domain permisif: # semodule -d permissivedomains

33. Mendayakan dasar MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Pastikan SELinux berjalan dalam mod permisif: # setenforce 0
Gunakan skrip fixfilesuntuk memastikan bahawa fail dilabel semula pada but semula seterusnya:

# fixfiles -F onboot # reboot

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

Menggunakan arahan useradd, petakan pengguna baharu kepada pengguna SELinux sedia ada (dalam kes ini, staff_u).

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

36. Tentukan julat khusus untuk pengguna: # semanage login --modify --range s2:c100 john

37. Untuk membetulkan label direktori rumah pengguna (jika perlu): # chcon -R -l s2:c100 /home/john

38. Untuk melihat kategori semasa: # chcat -L

39. Untuk menukar kategori atau mula mencipta sendiri, edit fail seperti berikut:

/etc/selinux/_<selinuxtype>_/setrans.conf

40. Untuk menjalankan arahan atau skrip dalam fail, peranan dan konteks pengguna tertentu:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t konteks fail
  • -r konteks peranan
  • -u konteks pengguna

41. Bekas yang berjalan dengan SELinux dilumpuhkan:

  • Podman: # podman run --security-opt label=disable …
  • Docker: # docker run --security-opt label=disable …

42. Jika anda perlu memberikan bekas akses penuh kepada sistem:

  • Podman: # podman run --privileged …
  • Docker: # docker run --privileged …

Dan sekarang anda sudah tahu jawapannya. Jadi sila: jangan panik dan dayakan SELinux.

Rujukan:

Sumber: www.habr.com

Tambah komen