Menerapkan kontrol akses wajib dengan Selinux atau Apparmor di Linux

Menerapkan kontrol akses wajib dengan Selinux atau Apparmor di Linux

Untuk mengatasi keterbatasan dan untuk meningkatkan mekanisme keamanan yang disediakan oleh standar UGO/RWX izin dan daftar kontrol akses, Badan Keamanan Nasional Amerika Serikat (NSA) merancang fleksibel Kontrol akses wajib (Mac) metode yang dikenal sebagai Selinux (kependekan dari Keamanan meningkatkan Linux) Untuk membatasi antara lain, kemampuan proses untuk mengakses atau melakukan operasi lain pada objek sistem (seperti file, direktori, port jaringan, dll) untuk izin sesedikit mungkin, sambil tetap memungkinkan modifikasi selanjutnya pada model ini.

Selinux
dan Apparmor Security Hardening Linux

Mac populer lainnya dan banyak digunakan Apparmor, yang selain fitur yang disediakan oleh Selinux, termasuk mode pembelajaran yang memungkinkan sistem untuk “mempelajari”Bagaimana aplikasi spesifik berperilaku, dan untuk menetapkan batas dengan mengkonfigurasi profil untuk penggunaan aplikasi yang aman.

Di dalam Centos 7, Selinux dimasukkan ke dalam kernel itu sendiri dan diaktifkan Menegakkan mode secara default (lebih lanjut tentang ini di bagian selanjutnya), sebagai lawan OpenSuse Dan Ubuntu yang menggunakan Apparmor.

Dalam artikel ini kami akan menjelaskan hal -hal penting dari Selinux dan Apparmor dan cara menggunakan salah satu alat ini untuk keuntungan Anda tergantung pada distribusi yang Anda pilih.

Pengantar Selinux dan Cara Menggunakannya di Centos 7

Security Enhanced Linux dapat beroperasi dengan dua 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.

Selinux juga bisa dinonaktifkan. Meskipun ini bukan mode operasi itu sendiri, itu masih merupakan pilihan. Namun, belajar bagaimana menggunakan alat ini lebih baik daripada hanya mengabaikannya. Ingatlah!

Untuk menampilkan mode saat ini Selinux, menggunakan Getenforce. Jika Anda ingin beralih mode operasi, gunakan setenforce 0 (untuk mengaturnya Permisif) atau Setenforce 1 (Menegakkan).

Karena perubahan ini tidak akan bertahan menyalakan ulang, Anda perlu mengedit /etc/selinux/config file dan atur Selinux variabel ke keduanya menegakkan, permisif, atau dengan disabilitas Untuk mencapai kegigihan di reboot:

Cara mengaktifkan dan menonaktifkan mode selinux

Di samping catatan, jika Getenforce pengembalian dinonaktifkan, Anda harus mengedit /etc/selinux/config dengan mode operasi yang diinginkan dan reboot. Jika tidak, Anda tidak akan dapat mengatur (atau mengubah) mode operasi dengan setenforce.

Salah satu penggunaan khas setenforce terdiri dari beralih di antara mode selinux (dari menegakkan ke permisif atau sebaliknya) untuk memecahkan masalah aplikasi yang berperilaku buruk atau tidak berfungsi seperti yang diharapkan. Jika berfungsi setelah Anda mengatur selinux ke Permisif Mode, Anda dapat yakin Anda sedang melihat masalah izin Selinux.

Dua kasus klasik di mana kita kemungkinan besar harus berurusan dengan Selinux adalah:

  1. Mengubah port default tempat daemon mendengarkan.
  2. Mengatur Root document Petunjuk untuk host virtual di luar /var/www/html.

Mari kita lihat dua kasus ini menggunakan contoh -contoh berikut.

Contoh 1: Mengubah port default untuk daemon sshd

Salah satu hal pertama yang dilakukan sebagian besar administrator sistem untuk mengamankan server mereka adalah mengubah port tempat daemon ssh mendengarkan, kebanyakan untuk mencegah pemindai pelabuhan dan penyerang eksternal. Untuk melakukan ini, kami menggunakan arahan port /etc/ssh/sshd_config diikuti oleh nomor port baru sebagai berikut (kami akan menggunakan port 9999 pada kasus ini):

Port 9999 

Setelah mencoba memulai kembali layanan dan memeriksa statusnya, kami akan melihat bahwa ia gagal memulai:

# Systemctl Restart SSHD # Systemctl Status SSHD 
Periksa status layanan SSH

Jika kita melihat /var/log/audit/audit.catatan, Kami akan melihatnya sshd dicegah memulai pelabuhan 9999 oleh Selinux karena itu adalah port yang dipesan untuk Manajemen JBoss Layanan (pesan log selinux termasuk kata "AVC" sehingga mereka mungkin dengan mudah diidentifikasi dari pesan lain):

# kucing/var/log/audit/audit.log | grep avc | ekor -1 
Periksa Log Audit Linux

Pada titik ini kebanyakan orang mungkin akan menonaktifkan Selinux Tapi kami tidak akan. Kita akan melihat bahwa ada cara untuk Selinux, dan SSHD mendengarkan di port yang berbeda, untuk hidup secara harmonis bersama. Pastikan Anda memiliki PolicyCoreutils-Python Paket diinstal dan jalankan:

# yum instal policycoreutils-python 

Untuk melihat daftar port di mana Selinux memungkinkan SSHD untuk mendengarkan. Pada gambar berikut kita juga dapat melihat port itu 9999 dicadangkan untuk layanan lain dan dengan demikian kami tidak dapat menggunakannya untuk menjalankan layanan lain untuk saat ini:

# port semanage -l | grep ssh 

Tentu saja kami dapat memilih port lain untuk SSH, tetapi jika kami yakin bahwa kami tidak perlu menggunakan mesin khusus ini untuk layanan terkait JBOSS, kami kemudian dapat memodifikasi aturan selinux yang ada dan menetapkan port itu ke SSH sebagai gantinya:

# port semanage -m -t ssh_port_t -p tcp 9999 

Setelah itu, kita bisa menggunakan yang pertama SANMANAGE Perintah untuk memeriksa apakah port ditetapkan dengan benar, atau -LC Opsi (Singkat untuk Daftar Kustom):

# Sarganage Port -LC # Sarganage Port -L | grep ssh 
Tetapkan port ke ssh

Kami sekarang dapat memulai ulang SSH dan terhubung ke layanan menggunakan port 9999. Perhatikan bahwa perubahan ini akan bertahan dari reboot.

Contoh 2: Memilih dokumen di luar/var/www/html untuk host virtual

Jika Anda perlu mengatur host virtual Apache menggunakan direktori selain /var/www/html sebagai Root document (katakanlah, misalnya, /Websrv/Situs/Gabriel/public_html):

DocumentRoot “/Websrv/Situs/Gabriel/public_html” 

Apache akan menolak untuk melayani konten karena indeks.html telah diberi label dengan Default_t selinux Ketik, apa yang tidak dapat diakses Apache:

# wget http: // localhost/index.html # ls -lz/webrv/situs/gabriel/public_html/index.html 
Diberi Tipe Selinux Default_t

Seperti halnya contoh sebelumnya, Anda dapat menggunakan perintah berikut untuk memverifikasi bahwa ini memang masalah terkait Selinux:

# kucing/var/log/audit/audit.log | grep avc | ekor -1 
Periksa log untuk masalah selinux

Untuk mengubah label /Websrv/Situs/Gabriel/public_html secara rekursif httpd_sys_content_t, Mengerjakan:

# Sarganage fcontext -a -t httpd_sys_content_t "/websrv/situs/gabriel/public_html (/.*)?" 

Perintah di atas akan memberikan akses read-only Apache ke direktori itu dan isinya.

Akhirnya, untuk menerapkan kebijakan (dan membuat perubahan label segera efektif), lakukan:

# restorecon -r -v/websrv/situs/gabriel/public_html 

Sekarang Anda harus dapat mengakses direktori:

# wget http: // localhost/index.html 
Akses Direktori Apache

Untuk informasi lebih lanjut tentang Selinux, lihat panduan Fedora 22 Selinux dan Administrator.

Halaman: 1 2