RHCSA Series Wajib Kontrol Akses Esensial dengan Selinux di RHEL 7 - Bagian 13

RHCSA Series Wajib Kontrol Akses Esensial dengan Selinux di RHEL 7 - Bagian 13

Selama seri ini kami telah mengeksplorasi secara rinci setidaknya dua metode kontrol akses: Standar Ugo/rwx Izin (Kelola Pengguna dan Grup - Bagian 3) dan Daftar Kontrol Akses (Konfigurasikan ACL pada Sistem File - Bagian 7).

Ujian RHCSA: Selinux Essentials dan Kontrol Akses Sistem File

Meskipun diperlukan sebagai izin tingkat pertama dan mekanisme kontrol akses, mereka memiliki beberapa batasan yang ditangani oleh Keamanan meningkatkan Linux (alias Selinux Ringkasnya).

Salah satu keterbatasan tersebut adalah bahwa pengguna dapat mengekspos file atau direktori ke pelanggaran keamanan melalui yang tidak jelas Chmod perintah dan dengan demikian menyebabkan penyebaran hak akses yang tidak terduga. Akibatnya, proses apa pun yang dimulai oleh pengguna dapat melakukan apa yang diinginkan dengan file yang dimiliki oleh pengguna, di mana akhirnya perangkat lunak jahat atau dikompromikan dapat mencapai akses tingkat root ke seluruh sistem.

Dengan batasan itu dalam pikiran, Badan Keamanan Nasional Amerika Serikat (NSA) pertama kali dirancang Selinux, Metode kontrol akses wajib yang fleksibel, untuk membatasi kemampuan proses untuk mengakses atau melakukan operasi lain pada objek sistem (seperti file, direktori, port jaringan, dll) ke model izin terkecil, yang dapat dimodifikasi nanti sesuai kebutuhan. Dalam beberapa kata, setiap elemen sistem hanya diberikan akses yang diperlukan untuk berfungsi.

Di dalam RHEL 7, Selinux dimasukkan ke dalam kernel itu sendiri dan diaktifkan Menegakkan mode secara default. Dalam artikel ini kami akan menjelaskan secara singkat konsep dasar yang terkait dengan Selinux dan operasinya.

Mode Selinux

Selinux dapat beroperasi dengan tiga cara berbeda:

  1. Menegakkan: Selinux menolak akses berdasarkan aturan kebijakan selinux, serangkaian pedoman yang mengontrol mesin keamanan.
  2. Permisif: Selinux tidak menolak akses, tetapi penolakan dicatat untuk tindakan yang akan ditolak jika berjalan dalam mode penegakan.
  3. Dengan disabilitas (cukup jelas).

Itu Getenforce Perintah menampilkan mode selinux saat ini, sedangkan setenforce (diikuti oleh a 1 atau a 0) digunakan untuk mengubah mode menjadi Menegakkan atau Permisif, masing -masing, hanya selama sesi saat ini.

Untuk mencapai kegigihan di seluruh logout dan reboot, Anda perlu mengedit /etc/selinux/config file dan atur variabel selinux ke salah satu menegakkan, permisif, atau dengan disabilitas:

# getenforce # setenforce 0 # getenforce # setenforce 1 # getenforce # cat/etc/selinux/config 
Atur Mode Selinux

Biasanya Anda akan menggunakan setenforce untuk beralih antara mode selinux (menegakkan ke permisif dan kembali) sebagai langkah pemecahan masalah pertama. Jika Selinux saat ini diatur ke menegakkan Saat Anda mengalami masalah tertentu, dan hal yang sama hilang saat Anda mengaturnya permisif, Anda dapat yakin Anda sedang melihat masalah izin Selinux.

Konteks selinux

Konteks selinux terdiri dari lingkungan kontrol akses di mana keputusan dibuat berdasarkan pengguna selinux, peran, dan jenis (dan secara opsional a level):

  1. Pengguna Selinux melengkapi akun pengguna Linux reguler dengan memetakannya ke akun pengguna Selinux, yang pada gilirannya digunakan dalam konteks Selinux untuk proses dalam sesi itu, untuk secara eksplisit menentukan peran dan level yang diizinkan mereka.
  2. Konsep peran bertindak sebagai perantara antara domain dan pengguna selinux yang mendefinisikan domain proses dan jenis file mana yang dapat diakses. Ini akan melindungi sistem Anda terhadap kerentanan terhadap serangan eskalasi hak istimewa.
  3. Tipe mendefinisikan jenis file selinux atau domain proses selinux. Dalam keadaan normal, proses dicegah dari mengakses file yang digunakan proses lain, dan dan dari mengakses proses lain, sehingga akses hanya diperbolehkan jika ada aturan kebijakan selinux tertentu yang memungkinkannya.

Mari kita lihat bagaimana semua itu bekerja melalui contoh -contoh berikut.

Contoh 1: Mengubah port default untuk daemon sshd

Dalam mengamankan SSH - Bagian 8 kami menjelaskan bahwa mengubah port default di mana sshd Mendengarkan adalah salah satu langkah keamanan pertama untuk mengamankan server Anda terhadap serangan eksternal. Mari edit /etc/ssh/sshd_config mengajukan dan mengatur port ke 9999:

Port 9999 

Simpan perubahan, dan restart SSHD:

# Systemctl Restart SSHD # Systemctl Status SSHD 
Restart SSH Service

Seperti yang Anda lihat, SSHD gagal memulai. Tapi apa yang terjadi?

Pemeriksaan cepat /var/log/audit/audit.catatan menunjukkan bahwa SSHD telah ditolak izin untuk memulai di port 9999 (Pesan log selinux termasuk kata "AVC"Sehingga mereka dapat dengan mudah diidentifikasi dari pesan lain) karena itu adalah port yang dipesan untuk Manajemen JBoss melayani:

# kucing/var/log/audit/audit.log | grep avc | ekor -1 
Periksa log SSH

Pada titik ini Anda bisa menonaktifkan Selinux (Tapi jangan!) seperti yang dijelaskan sebelumnya dan cobalah untuk memulai sshd Sekali lagi, dan itu harus berhasil. Namun, SANMANAGE Utilitas dapat memberi tahu kami apa yang perlu kami ubah agar kami dapat memulai SSHD di port apa pun yang kami pilih tanpa masalah.

Berlari,

# port semanage -l | grep ssh 

Untuk mendapatkan daftar port di mana Selinux memungkinkan SSHD untuk mendengarkan.

Alat Semanage

Jadi mari kita ubah port masuk /etc/ssh/sshd_config ke port 9998, Tambahkan port ke Konteks SSH_PORT_T, dan kemudian restart layanan:

# Sarganage Port -a -t SSH_PORT_T -P TCP 9998 # SystemctL Restart SSHD # Systemctl IS -AKTIF SSHD 
SANMANAGE Tambahkan port

Seperti yang Anda lihat, layanan ini dimulai dengan sukses kali ini. Contoh ini menggambarkan fakta bahwa Selinux mengontrol nomor port TCP ke definisi internal tipe port sendiri.

Contoh 2: Mengizinkan HTTPD untuk mengirim Access Sendmail

Ini adalah contoh selinux yang mengelola proses yang mengakses proses lain. Jika Anda mengimplementasikan mod_security dan mod_evasive bersama dengan Apache di server RHEL 7 Anda, Anda perlu mengizinkan httpd untuk mengakses sendmail Untuk mengirim pemberitahuan surat setelah a (D) dos menyerang. Dalam perintah berikut, hilangkan -P Bendera jika Anda tidak ingin perubahan gigih di reboot.

# Sarganage Boolean -1 | grep httpd_can_sendmail # setsebool -p httpd_can_sendmail 1 # semanage boolean -1 | grep httpd_can_sendmail 
Izinkan Apache mengirim surat

Seperti yang Anda tahu dari contoh di atas, Selinux Boolean Pengaturan (atau hanya boolean) adalah aturan benar / salah yang tertanam ke dalam kebijakan selinux. Anda dapat mendaftarkan semua orang boolean dengan Sarganage Boolean -l, dan sebagai alternatifnya pipa untuk grep untuk memfilter output.

Contoh 3: Melayani situs statis dari direktori selain yang default

Misalkan Anda melayani situs web statis menggunakan direktori yang berbeda dari yang default (/var/www/html), mengatakan /situs web (Ini bisa menjadi kasus jika Anda menyimpan file web Anda di drive jaringan bersama, misalnya, dan perlu memasangnya di /situs web).

A). Buat indeks.html file di dalam /situs web dengan konten berikut:

 

Uji selinux

Jika kamu melakukan,

# ls -lz /situs web /indeks.html 

Anda akan melihat itu indeks.html file telah diberi label dengan Default_t selinux Ketik, apa yang tidak dapat diakses Apache:

Periksa izin file selinux

B). Mengubah Root document arahan di /etc/httpd/conf/httpd.conf ke /situs web dan jangan lupa untuk memperbarui blok direktori yang sesuai. Kemudian, restart Apache.

C). Jelajahi http: //, dan Anda harus mendapatkan respons HTTP terlarang 503.

D). Selanjutnya, ubah label /situs web, secara rekursif, ke httpd_sys_content_t Ketik untuk memberikan akses hanya baca-baca Apache ke direktori itu dan isinya:

# semanage fcontext -a -t httpd_sys_content_t "/situs web (/.*)?" 

e). Akhirnya, terapkan kebijakan selinux yang dibuat di D):

# restorecon -r -v /situs web 

Sekarang restart Apache dan telusuri http: // Sekali lagi dan Anda akan melihat file HTML ditampilkan dengan benar:

Verifikasi halaman Apache

Ringkasan

Dalam artikel ini kami telah melalui dasar -dasar Selinux. Perhatikan bahwa karena luasnya subjek, penjelasan rinci lengkap tidak dimungkinkan dalam satu artikel, tetapi kami percaya bahwa prinsip -prinsip yang diuraikan dalam panduan ini akan membantu Anda beralih ke topik yang lebih canggih jika Anda ingin melakukannya.

Jika saya bisa, izinkan saya merekomendasikan dua sumber daya penting untuk memulai: halaman NSA Selinux dan Panduan Pengguna dan Administrator RHEL 7 Selinux.

Jangan ragu untuk memberi tahu kami jika Anda memiliki pertanyaan atau komentar.