GNU/Linux >> Belajar Linux >  >> Linux

Cara membaca dan mengoreksi pesan penolakan SELinux

Security Enhanced Linux (SELinux) adalah kerangka kerja keamanan yang mengizinkan dan menolak akses ke aplikasi, file, dll. dalam sistem Linux. Untuk gambaran umum SELinux lengkap, lihat Apa itu SELinux.

Untuk artikel ini, kita akan melihat apa yang terjadi ketika akses ke file atau aplikasi yang diinginkan ditolak. Pesan apa yang akan Anda lihat, di mana pesan ini disimpan, dan apa arti sebenarnya dari informasi tersebut? Apa saja situasi abnormal, yang disebabkan oleh positif palsu dan penyangkalan hantu, yang mungkin Anda alami? Kami akan mengeksplorasi semua itu di sini.

Apa itu penolakan?

Sebuah penolakan adalah kejadian yang dihasilkan kapan saja layanan, aplikasi, file, dll. ditolak aksesnya oleh sistem SELinux. Ketika ini terjadi, penolakan di-cache di Access Vector Cache (AVC). Terkadang Anda akan melihat pesan penolakan yang disebut sebagai penolakan AVC .

Di mana penolakan dicatat?

Sekarang, penolakan AVC ini, seperti yang lainnya di Linux, dicatat oleh sistem. Di mana pesan-pesan tersebut dicatat bervariasi tergantung pada daemon sistem mana yang berjalan.

  • diaudit pada - /var/log/audit/audit.log
  • sudah diaudit; rsyslogd aktif - /var/log/messages
  • penyelesaian masalah, rsyslogd, dan auditd on - Kedua lokasi, meskipun pesan di /var/log/messages lebih mudah dipahami

Seperti apa penolakan itu?

Terkadang Anda akan melihat peringatan penolakan di desktop Anda. Saat Anda memilih tampilkan , peringatan ini akan memberi Anda detail tentang apa yang salah dan bahkan terkadang solusi untuk memecahkan masalah.

Hal lain yang dapat Anda lakukan adalah menjalankan perintah berikut untuk mengeluarkan pesan penolakan:

[root@server ~]# grep "SELinux is preventing" /var/log/messages

Di sini hasilnya dalam bahasa yang lebih mudah dipahami, dan jika Anda membaca dengan seksama, sebuah solusi disajikan:

Sep 22 13:35:24 server setroubleshoot[3999]: SELinux is preventing rhsmcertd-worke from read access on the file virt.module. For complete SELinux messages run: sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b
Sep 22 13:35:24 server platform-python[3999]: SELinux is preventing rhsmcertd-worke from read access on the file virt.module.#012#012*****  Plugin catchall_boolean (89.3 confidence) suggests   ******************#012#012If you want to allow daemons to dump core#012Then you must tell SELinux about this by enabling the 'daemons_dump_core' boolean.#012#012Do#012setsebool -P daemons_dump_core 1#012#012*****  Plugin catchall (11.6 confidence) suggests   **************************#012#012If you believe that rhsmcertd-worke should be allowed read access on the virt.module file by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c 'rhsmcertd-worke' --raw | audit2allow -M my-rhsmcertdworke#012# semodule -X 300 -i my-rhsmcertdworke.pp#012

Output ini sebenarnya sangat membantu, karena entri pertama di atas memberi kita hal berikut:

For complete SELinux messages run: sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b

Jika Anda menjalankan perintah yang disarankan, Anda akan diberikan ringkasan yang sangat bertele-tele namun langsung tentang apa yang terjadi dan apa yang dapat Anda lakukan untuk memperbaiki masalah tersebut. Lihat di bawah ini:

    [root@server ~]# sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b
    SELinux is preventing rhsmcertd-worke from read access on the file virt.module.
    
    *****  Plugin catchall_boolean (89.3 confidence) suggests   ******************
    
    If you want to allow daemons to dump core
    Then you must tell SELinux about this by enabling the 'daemons_dump_core' boolean.
    
    Do
    setsebool -P daemons_dump_core 1
    
    *****  Plugin catchall (11.6 confidence) suggests   **************************
    
    If you believe that rhsmcertd-worke should be allowed read access on the virt.module file by default.
    Then you should report this as a bug.
    You can generate a local policy module to allow this access.
    Do
    allow this access for now by executing:
    # ausearch -c 'rhsmcertd-worke' --raw | audit2allow -M my-rhsmcertdworke
    # semodule -X 300 -i my-rhsmcertdworke.pp
    
    
    Additional Information:
    Source Context                system_u:system_r:rhsmcertd_t:s0
    Target Context                system_u:object_r:root_t:s0
    Target Objects                virt.module [ file ]
    Source                        rhsmcertd-worke
    Source Path                   rhsmcertd-worke
    Port                          <Unknown>
    Host                          server.example.com
    Source RPM Packages           
    Target RPM Packages           
    Policy RPM                    selinux-policy-3.14.3-41.el8_2.5.noarch
    Selinux Enabled               True
    Policy Type                   targeted
    Enforcing Mode                Enforcing
    Host Name                     server.example.com
    Platform                      Linux server.example.com
                                  4.18.0-193.13.2.el8_2.x86_64 #1 SMP Mon Jul 13
                                  23:17:28 UTC 2020 x86_64 x86_64
    Alert Count                   265
    First Seen                    2020-06-24 13:55:40 EDT
    Last Seen                     2020-09-22 13:35:09 EDT
    Local ID                      97a1c0df-81ed-4c08-ba27-41c5067b713b
    
    Raw Audit Messages
    type=AVC msg=audit(1600796109.687:168): avc:  denied  { read } for  pid=3912 comm="rhsmcertd-worke" name="virt.module" dev="dm-0" ino=50331783 scontext=system_u:system_r:rhsmcertd_t:s0 tcontext=system_u:object_r:root_t:s0 tclass=file permissive=0
    
    
    Hash: rhsmcertd-worke,rhsmcertd_t,root_t,file,read

[ Pembaca juga menikmati: Mengakses dokumentasi kebijakan SELinux ]

Anda juga dapat menggunakan perintah di bawah ini untuk pesan audit mentah, meskipun pesan tersebut kurang membantu secara signifikan (dan disertakan dalam sealert keluaran).

[root@server ~]# grep "denied"/var/log/audit/audit.log

Di sini bahasanya kurang ramah pengguna, dan tidak ada langkah yang disarankan untuk diambil.

type=AVC msg=audit(1600796109.687:168): avc:  denied  { read } for  pid=3912 comm="rhsmcertd-worke" name="virt.module" dev="dm-0" ino=50331783 scontext=system_u:system_r:rhsmcertd_t:s0 tcontext=system_u:object_r:root_t:s0 tclass=file permissive=0

Penyangkalan hantu

Pada acara-acara khusus (khusus , seperti dalam kemampuannya untuk menghasilkan frustrasi), SELinux AVC dapat menolak layanan tanpa memberi tahu pengguna bahwa penolakan itu terjadi. Ketika ini terjadi, sedikit penggalian forensik diperlukan. Baru-baru ini, kolega saya, dan penulis luar biasa, Ken Hess, menginstal sistem manajemen dokumen pada mesin virtual CentOS. Selama instalasi ini, DMS gagal menginstal tanpa penjelasan. Setelah proses pemecahan masalah yang panjang dan membuat frustrasi, Ken menemukan bahwa ada pesan penolakan berulang di /var/log/audit/audit.log .

type=AVC msg=audit(1602171971.334:438): avc: denied { write } for pid=12398 comm="httpd" name="31b32f0dfa1f50d778065b767582bb9b.js" dev="dm-0" ino=553885 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=file permissive=0

Setelah pemeriksaan lebih lanjut atas /var/log/messages , ia menemukan yang berikut:

Oct 8 12:33:17 dms python: SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 25.#012#012***** Plugin catchall_boolean (32.5 confidence) suggests ******************#012#012If you want to allow httpd to can network connect#012Then you must tell SELinux about this by enabling the 'httpd_can_network_connect' boolean.#012#012Do#012setsebool -P httpd_can_network_connect 1#012#012***** Plugin catchall_boolean (32.5 confidence) suggests ******************#012#012If you want to allow httpd to can sendmail#012Then you must tell SELinux about this by enabling the 'httpd_can_sendmail' boolean.#012#012Do#012setsebool -P httpd_can_sendmail 1#012#012***** Plugin catchall_boolean (32.5 confidence) suggests ******************#012#012If you want to allow nis to enabled#012Then you must tell SELinux about this by enabling the 'nis_enabled' boolean.#012#012Do#012setsebool -P nis_enabled 1#012#012***** Plugin catchall (4.5 confidence) suggests ***************************#012#012If you believe that httpd should be allowed name_connect access on the port 25 tcp_socket by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c 'httpd' --raw | audit2allow -M my-httpd#012# semodule -i my-httpd.pp#012 Oct 8 12:33:20 dms setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 25. For complete SELinux messages run: sealert -l ce75fc38-5696-4b21-b099-7780db5960f3

Akhirnya, sesuatu yang berguna. Dia kemudian menjalankan perintah ini:

# sealert -l ce75fc38-5696-4b21-b099-7780db5960f3

Yang memberikan informasi ini:

[user@host ~] # SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 25. ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow httpd to can network connect Then you must tell SELinux about this by enabling the 'httpd_can_network_connect' boolean. Do setsebool -P httpd_can_network_connect 1 ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow httpd to can sendmail Then you must tell SELinux about this by enabling the 'httpd_can_sendmail' boolean. Do setsebool -P httpd_can_sendmail 1 ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow nis to enabled Then you must tell SELinux about this by enabling the 'nis_enabled' boolean. Do setsebool -P nis_enabled 1 ***** Plugin catchall (4.5 confidence) suggests *************************** If you believe that httpd should be allowed name_connect access on the port 25 tcp_socket by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # ausearch -c 'httpd' --raw | audit2allow -M my-httpd # semodule -i my-httpd.pp Additional Information:
    
Additional Information: [root@dms dms]# more sealert.txt SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 25. ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow httpd to can network connect Then you must tell SELinux about this by enabling the 'httpd_can_network_connect' boolean. Do setsebool -P httpd_can_network_connect 1 ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow httpd to can sendmail Then you must tell SELinux about this by enabling the 'httpd_can_sendmail' boolean. Do setsebool -P httpd_can_sendmail 1 ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow nis to enabled Then you must tell SELinux about this by enabling the 'nis_enabled' boolean. Do setsebool -P nis_enabled 1 ***** Plugin catchall (4.5 confidence) suggests *************************** If you believe that httpd should be allowed name_connect access on the port 25 tcp_socket by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # ausearch -c 'httpd' --raw | audit2allow -M my-httpd # semodule -i my-httpd.pp Additional Information: Source Context system_u:system_r:httpd_t:s0 Target Context system_u:object_r:smtp_port_t:s0 Target Objects port 25 [ tcp_socket ] Source httpd Source Path /usr/sbin/httpd Port 25 Host dms Source RPM Packages Target RPM Packages Policy RPM selinux-policy-3.13.1-252.el7.noarch Selinux Enabled True Policy Type targeted Enforcing Mode Permissive Host Name dms Platform Linux dms 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 Alert Count 2 First Seen 2020-10-08 12:33:15 CDT Last Seen 2020-10-08 12:33:15 CDT Local ID ce75fc38-5696-4b21-b099-7780db5960f3 Raw Audit Messages type=AVC msg=audit(1602178395.253:461): avc: denied { name_connect } for pid=12565 comm="httpd" dest=25 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:smtp_port_t :s0 tclass=tcp_socket permissive=1 Hash: httpd,httpd_t,smtp_port_t,tcp_socket,name_connect

Ketika saya meminta Ken untuk mempertimbangkan pengalamannya, dia mengatakan yang berikut:

Sulit untuk mengetahui kapan kesalahan, atau kurangnya kesalahan, disebabkan oleh SELinux. Ketika Anda telah memeriksa pengecualian firewall, izin sistem file, dan prasyarat aplikasi, langkah Anda selanjutnya adalah memeriksa masalah konteks SELinux. Obat yang paling umum adalah menonaktifkan SELinux dengan menempatkannya ke mode Permisif, yang bukan ide yang baik karena hal itu membuat sistem Anda rentan. Metode yang lebih baik adalah memeriksa file /var/log/messages dan /var/log/audit/audit.log untuk penyangkalan SELinux dan bekerja dari sana untuk memperbaiki penyangkalan satu per satu hingga aplikasi Anda berfungsi. SELinux harus tetap dalam mode Penegakan untuk melakukan ini.

Daftar pemecahan masalah terlihat seperti berikut saat menyiapkan aplikasi baru:

1. Periksa pengecualian firewall untuk port aplikasi Anda.

2. Periksa izin sistem file untuk memastikan bahwa akun layanan Anda memiliki izin yang benar untuk membaca, menulis, dan mengeksekusi jika diperlukan.

3. Periksa prasyarat dan dependensi aplikasi Anda.

4. Periksa file /var/log/messages dan /var/log/audit/audit.log apakah ada penolakan SELinux.

Mode permisif SELinux dapat digunakan secara singkat untuk memeriksa apakah SELinux adalah penyebab yang mencegah aplikasi Anda bekerja. Setelah Anda menentukannya sebagai masalahnya, kembalikan ke mode Penegakan dan mulailah mengubah konteks yang relevan. Lihat informasi ini untuk konteks SELinux.

[ Tingkatkan keterampilan Anda mengelola dan menggunakan SELinux dengan panduan bermanfaat ini. ] 

Menutup

SELinux adalah kerangka kerja keamanan efektif yang bisa sangat berguna jika diterapkan dengan benar. Seperti halnya sistem keamanan yang baik, Anda akan mengalami penolakan seiring waktu. Mengetahui apa yang harus dilakukan dengan informasi yang Anda inginkan sangat penting untuk memecahkan masalah apa pun yang mungkin ada atau untuk memungkinkan proses yang sah melalui sistem. Sekarang Anda tahu di mana log disimpan dan cara terbaik untuk menafsirkannya. Di masa mendatang, Anda akan dapat menanggapi setiap peringatan SELinux yang ditandai di sistem Anda.


Linux
  1. Variabel Lingkungan Linux:Cara Membaca dan Mengatur di VPS Linux

  2. Bagaimana Cara Membaca Alamat Ip Secara Mundur?

  3. Cara:Replikasi dan Konfigurasi DRBD

  1. Cara Menonaktifkan SELinux Sementara atau Permanen

  2. Bagaimana cara membuka, membaca, dan menulis dari port serial di C?

  3. Bagaimana cara membaca, memahami, menganalisis, dan men-debug kepanikan kernel Linux?

  1. Cara membaca dan menulis ke drive Windows NTFS sebagai pengguna mana pun

  2. Bagaimana Cara Menonaktifkan SELinux di CentOS?

  3. Apa itu Pengguna SELinux dan bagaimana Memetakan Pengguna Linux ke Pengguna SELinux