RHCSA Siri Kawalan Kawalan Akses Mandatori Dengan Selinux di RHEL 7 - Bahagian 13

RHCSA Siri Kawalan Kawalan Akses Mandatori Dengan Selinux di RHEL 7 - Bahagian 13

Semasa siri ini, kami telah meneroka secara terperinci sekurang -kurangnya dua kaedah kawalan akses: Standard Ugo/RWX Kebenaran (Urus Pengguna dan Kumpulan - Bahagian 3) dan Senarai Kawalan Akses (Konfigurasikan ACL pada Sistem Fail - Bahagian 7).

Peperiksaan RHCSA: Selinux Essentials and Control Filesystem Access

Walaupun perlu sebagai kebenaran peringkat pertama dan mekanisme kawalan akses, mereka mempunyai beberapa batasan yang ditangani oleh Keselamatan yang dipertingkatkan Linux (aka Selinux untuk pendek).

Salah satu batasan sedemikian adalah bahawa pengguna dapat mendedahkan fail atau direktori kepada pelanggaran keselamatan melalui yang tidak dapat dijelaskan chmod perintah dan dengan itu menyebabkan penyebaran hak akses yang tidak dijangka. Akibatnya, apa-apa proses yang dimulakan oleh pengguna yang boleh dilakukan kerana ia dikehendaki dengan fail yang dimiliki oleh pengguna, di mana akhirnya perisian yang berniat jahat atau sebaliknya dapat mencapai akses peringkat akar ke seluruh sistem.

Dengan batasan -batasan tersebut, Agensi Keselamatan Negara Amerika Syarikat (NSA) pertama kali dirancang Selinux, Kaedah kawalan akses wajib yang fleksibel, untuk menyekat keupayaan proses untuk mengakses atau melaksanakan operasi lain pada objek sistem (seperti fail, direktori, pelabuhan rangkaian, dll) kepada model kebenaran paling sedikit, yang boleh diubah suai kemudian seperti yang diperlukan. Dalam beberapa perkataan, setiap elemen sistem diberikan hanya akses yang diperlukan untuk berfungsi.

Dalam RHEL 7, Selinux dimasukkan ke dalam kernel itu sendiri dan didayakan di Menguatkuasakan mod secara lalai. Dalam artikel ini kita akan menerangkan secara ringkas konsep asas yang berkaitan dengan Selinux dan operasinya.

Mod Selinux

Selinux boleh beroperasi dalam tiga cara yang berbeza:

  1. Menguatkuasakan: Selinux menafikan akses berdasarkan peraturan dasar selinux, satu set garis panduan yang mengawal enjin keselamatan.
  2. Permisif: Selinux tidak menafikan akses, tetapi penafian dilog masuk untuk tindakan yang akan ditolak jika berjalan dalam mod menguatkuasakan.
  3. Kurang upaya (jelas).

The getenforce Perintah memaparkan mod semasa selinux, sedangkan Setenforce (diikuti oleh a 1 atau a 0) digunakan untuk menukar mod ke Menguatkuasakan atau Permisif, masing -masing, semasa sesi semasa sahaja.

Untuk mencapai kegigihan di seluruh logout dan reboot, anda perlu mengedit /etc/selinux/config fail dan tetapkan pemboleh ubah selinux sama ada menguatkuasakan, permisif, atau kurang upaya:

# getenforce # setenforce 0 # getenforce # setenforce 1 # getenforce # kucing/etc/selinux/config 
Tetapkan mod Selinux

Biasanya anda akan menggunakan Setenforce untuk bertukar -tukar antara mod selinux (menguatkuasakan ke permisif dan belakang) sebagai langkah penyelesaian masalah pertama. Sekiranya selinux kini ditetapkan menguatkuasakan Semasa anda mengalami masalah tertentu, dan perkara yang sama hilang apabila anda menetapkannya permisif, Anda boleh yakin anda melihat isu kebenaran selinux.

Konteks Selinux

Konteks Selinux terdiri daripada persekitaran kawalan akses di mana keputusan dibuat berdasarkan pengguna selinux, peranan, dan jenis (dan pilihan a):

  1. Pengguna Selinux melengkapkan akaun pengguna Linux biasa dengan memetakannya ke akaun pengguna Selinux, yang seterusnya digunakan dalam konteks Selinux untuk proses dalam sesi itu, untuk secara jelas menentukan peranan dan tahap yang dibenarkan mereka.
  2. Konsep peranan bertindak sebagai perantara antara domain dan pengguna selinux kerana ia mentakrifkan proses domain dan jenis proses yang boleh diakses. Ini akan melindungi sistem anda terhadap kelemahan serangan keistimewaan.
  3. Jenis mentakrifkan jenis fail selinux atau domain proses selinux. Dalam keadaan biasa, proses dihalang daripada mengakses fail yang digunakan oleh proses lain, dan dan dari mengakses proses lain, oleh itu akses hanya dibenarkan jika peraturan dasar selinux tertentu ada yang membolehkannya.

Mari lihat bagaimana semua itu berfungsi melalui contoh berikut.

Contoh 1: Menukar port lalai untuk daemon SSHD

Dalam mengamankan SSH - Bahagian 8 kami menjelaskan bahawa menukar port lalai di mana SSHD Mendengar ON adalah salah satu langkah keselamatan pertama untuk menjamin pelayan anda terhadap serangan luaran. Mari edit /etc/ssh/sshd_config fail dan tetapkan port ke 9999:

Port 9999 

Simpan perubahan, dan mulakan semula SSHD:

# Systemctl mulakan semula sshd # systemctl status sshd 
Mulakan semula perkhidmatan SSH

Seperti yang anda lihat, SSHD telah gagal bermula. Tetapi apa yang berlaku?

Pemeriksaan cepat mengenai /var/log/audit/audit.log menunjukkan bahawa SSHD telah dinafikan keizinan untuk bermula di port 9999 (Mesej Log Selinux termasuk perkataan "AVC"Supaya mereka dapat dengan mudah dikenal pasti dari mesej lain) kerana itu adalah pelabuhan yang disediakan untuk Pengurusan JBoss perkhidmatan:

# kucing/var/log/audit/audit.log | Grep AVC | ekor -1 
Periksa log SSH

Pada ketika ini anda boleh melumpuhkan Selinux (Tetapi jangan!) seperti yang dijelaskan sebelum ini dan cuba memulakan SSHD sekali lagi, dan ia harus berfungsi. Walau bagaimanapun sememi Utiliti dapat memberitahu kita apa yang perlu kita ubah agar kita dapat memulakan SSHD di pelabuhan apa pun yang kita pilih tanpa masalah.

Jalankan,

# port semanage -l | Grep SSH 

Untuk mendapatkan senarai pelabuhan di mana selinux membolehkan SSHD mendengar.

Alat Semanage

Oleh itu, mari kita ubah port masuk /etc/ssh/sshd_config ke pelabuhan 9998, Tambahkan port ke konteks ssh_port_t, Dan kemudian mulakan semula perkhidmatan:

# port semanage -a -t ssh_port_t -p tcp 9998 # systemctl restart sshd # systemctl is -active sshd 
Semenage Tambah port

Seperti yang anda dapat lihat, perkhidmatan itu bermula dengan jayanya kali ini. Contoh ini menggambarkan hakikat bahawa Selinux mengawal nombor port TCP ke definisi dalaman jenis pelabuhannya sendiri.

Contoh 2: Membenarkan Httpd menghantar Sendmail Sendmail

Ini adalah contoh selinux menguruskan proses mengakses proses lain. Sekiranya anda melaksanakan mod_security dan mod_evasive bersama dengan Apache di pelayan rhel 7 anda, anda perlu membenarkan httpd untuk mengakses hantar surat Untuk menghantar pemberitahuan mel selepas (D) dos serang. Dalam perintah berikut, isi -P bendera jika anda tidak mahu perubahan itu berterusan merentasi reboot.

# sememi boolean -1 | grep httpd_can_sendmail # setsebool -p httpd_can_sendmail 1 # semenage boolean -1 | grep httpd_can_sendmail 
Benarkan Apache menghantar surat

Seperti yang anda boleh katakan dari contoh di atas, Selinux Boolean Tetapan (atau hanya boolean) adalah peraturan yang benar / palsu yang tertanam ke dalam dasar selinux. Anda boleh menyenaraikan semua boolean dengan Semanage Boolean -L, dan alternatif paipnya ke grep untuk menapis output.

Contoh 3: Melayan tapak statik dari direktori selain daripada lalai

Katakan anda melayani laman web statik menggunakan direktori yang berbeza daripada yang lalai (/var/www/html), katakan /laman web (Ini mungkin berlaku jika anda menyimpan fail web anda dalam pemacu rangkaian bersama, misalnya, dan perlu memasangnya di /laman web).

a). Buat indeks.html fail di dalam /laman web dengan kandungan berikut:

 

Ujian Selinux

Sekiranya anda melakukannya,

# ls -lz /laman web /indeks.html 

anda akan melihat bahawa indeks.html fail telah dilabelkan dengan default_t selinux taipkan, Apache yang tidak dapat diakses:

Periksa kebenaran fail selinux

b). Tukar Documentroot arahan dalam /etc/httpd/conf/httpd.Conf ke /laman web dan jangan lupa untuk mengemas kini blok direktori yang sepadan. Kemudian, mulakan semula Apache.

c). Semak imbas ke http: //, Dan anda harus mendapat respons HTTP yang dilarang 503.

d). Seterusnya, tukar label /laman web, secara berulang, ke httpd_sys_content_t Taipkan untuk memberikan akses baca sahaja ke direktori dan kandungannya:

# semenage fcontext -a -t httpd_sys_content_t "/laman web (/.*)?" 

e). Akhirnya, gunakan dasar selinux yang dibuat di d):

# restorecon -r -v /laman web 

Sekarang mulakan semula Apache dan semak imbas ke http: // Sekali lagi dan anda akan melihat fail HTML dipaparkan dengan betul:

Sahkan halaman Apache

Ringkasan

Dalam artikel ini kita telah melalui asas -asas Selinux. Perhatikan bahawa disebabkan kelebihan subjek, penjelasan terperinci penuh tidak mungkin dalam satu artikel, tetapi kami percaya bahawa prinsip -prinsip yang digariskan dalam panduan ini akan membantu anda untuk meneruskan ke topik yang lebih maju sekiranya anda ingin melakukannya.

Sekiranya saya boleh, izinkan saya mengesyorkan dua sumber penting untuk bermula dengan: Halaman NSA Selinux dan Panduan Pengguna dan Pentadbir RHEL 7 Selinux.

Jangan teragak -agak untuk memberitahu kami jika anda mempunyai pertanyaan atau komen.