Melaksanakan kawalan akses wajib dengan selinux atau apparmor di linux

Melaksanakan kawalan akses wajib dengan selinux atau apparmor di linux

Untuk mengatasi batasan dan untuk meningkatkan mekanisme keselamatan yang disediakan oleh standard Ugo/RWX kebenaran dan senarai kawalan akses, Agensi Keselamatan Negara Amerika Syarikat (NSA) mencipta fleksibel Kawalan akses mandatori Kaedah (mac) yang dikenali sebagai Selinux (ringkasan untuk Keselamatan yang dipertingkatkan Linux) untuk menyekat antara lain, keupayaan proses untuk mengakses atau melaksanakan operasi lain pada objek sistem (seperti fail, direktori, pelabuhan rangkaian, dll) kepada kebenaran paling sedikit mungkin, sementara masih membenarkan pengubahsuaian kemudian untuk model ini.

Selinux
dan Apparmor Security Hardening Linux

Mac yang popular dan digunakan secara meluas adalah AppArmor, yang selain ciri yang disediakan oleh Selinux, termasuk mod pembelajaran yang membolehkan sistem "belajar"Bagaimana aplikasi tertentu bertindak, dan menetapkan had dengan mengkonfigurasi profil untuk penggunaan aplikasi yang selamat.

Dalam Centos 7, Selinux dimasukkan ke dalam kernel itu sendiri dan didayakan di Menguatkuasakan mod secara lalai (lebih lanjut mengenai ini di bahagian seterusnya), berbanding dengan opensuse dan Ubuntu yang digunakan AppArmor.

Dalam artikel ini, kami akan menerangkan keperluan Selinux dan Apparmor dan cara menggunakan salah satu alat ini untuk manfaat anda bergantung pada pengedaran yang anda pilih.

Pengenalan kepada Selinux dan Cara Menggunakannya di CentOS 7

Linux yang dipertingkatkan keselamatan boleh beroperasi dalam dua 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.

Selinux juga boleh dilumpuhkan. Walaupun ia bukan mod operasi itu sendiri, ia masih menjadi pilihan. Walau bagaimanapun, belajar cara menggunakan alat ini lebih baik daripada hanya mengabaikannya. Ingatlah!

Untuk memaparkan mod semasa Selinux, gunakan getenforce. Sekiranya anda mahu bertukar -tukar mod operasi, gunakan Setenforce 0 (Untuk menetapkannya ke Permisif) atau Setenforce 1 (Menguatkuasakan).

Oleh kerana perubahan ini tidak akan bertahan a Reboot, anda perlu mengedit /etc/selinux/config fail dan tetapkan Selinux pemboleh ubah sama ada menguatkuasakan, permisif, atau kurang upaya Untuk mencapai kegigihan merentasi reboot:

Cara Mengaktifkan dan Melumpuhkan Mod Selinux

Pada nota sampingan, jika getenforce pulangan dilumpuhkan, anda perlu mengedit /etc/selinux/config dengan mod operasi yang dikehendaki dan reboot. Jika tidak, anda tidak akan dapat menetapkan (atau bertukar) mod operasi dengan Setenforce.

Salah satu kegunaan biasa Setenforce terdiri daripada togol antara mod selinux (dari menguatkuasakan ke permisif atau sebaliknya) untuk menyelesaikan masalah permohonan yang tidak bersalah atau tidak berfungsi seperti yang diharapkan. Sekiranya ia berfungsi selepas anda menetapkan selinux ke Permisif mod, anda boleh yakin anda melihat isu kebenaran selinux.

Dua kes klasik di mana kita kemungkinan besar harus berurusan dengan selinux adalah:

  1. Menukar port lalai di mana daemon mendengarkan.
  2. Menetapkan Documentroot arahan untuk tuan rumah maya di luar /var/www/html.

Mari kita lihat kedua -dua kes ini menggunakan contoh berikut.

Contoh 1: Menukar port lalai untuk daemon SSHD

Salah satu perkara pertama yang kebanyakan pentadbir sistem lakukan untuk menjamin pelayan mereka adalah menukar port di mana SSH Daemon mendengar, kebanyakannya untuk tidak menggalakkan pengimbas pelabuhan dan penyerang luaran. Untuk melakukan ini, kami menggunakan arahan pelabuhan di /etc/ssh/sshd_config diikuti dengan nombor port baru seperti berikut (kami akan menggunakan port 9999 dalam kes ini):

Port 9999 

Setelah cuba memulakan semula perkhidmatan dan memeriksa statusnya, kami akan melihat bahawa ia gagal bermula:

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

Sekiranya kita melihat /var/log/audit/audit.log, kita akan melihatnya SSHD dihalang daripada memulakan pelabuhan 9999 oleh Selinux kerana itu adalah pelabuhan terpelihara untuk Pengurusan JBoss Perkhidmatan (Mesej Log Selinux termasuk perkataan "AVC" supaya mereka dapat dikenal pasti dengan mudah dari mesej lain):

# kucing/var/log/audit/audit.log | Grep AVC | ekor -1 
Semak log audit Linux

Pada ketika ini kebanyakan orang mungkin akan melumpuhkan Selinux Tetapi kita tidak akan. Kami akan melihat bahawa ada cara untuk selinux, dan sshd mendengar di pelabuhan yang berbeza, untuk hidup dalam harmoni bersama. Pastikan anda mempunyai Policycoreutils-Python Pakej dipasang dan dijalankan:

# yum Pasang policycoreutils-python 

Untuk melihat senarai pelabuhan di mana selinux membolehkan SSHD mendengar. Dalam imej berikut, kita juga dapat melihat pelabuhan itu 9999 dikhaskan untuk perkhidmatan lain dan dengan itu kami tidak boleh menggunakannya untuk menjalankan perkhidmatan lain buat masa ini:

# port semanage -l | Grep SSH 

Sudah tentu kita boleh memilih pelabuhan lain untuk SSH, tetapi jika kita yakin bahawa kita tidak perlu menggunakan mesin khusus ini untuk sebarang perkhidmatan yang berkaitan

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

Selepas itu, kita boleh menggunakan yang pertama sememi perintah untuk memeriksa sama ada port ditugaskan dengan betul, atau -LC Pilihan (pendek untuk senarai adat):

# sememi port -lc # port sememi -l | Grep SSH 
Menetapkan port ke ssh

Kami kini boleh memulakan semula SSH dan menyambung ke perkhidmatan menggunakan port 9999. Perhatikan bahawa perubahan ini akan bertahan dengan reboot.

Contoh 2: Memilih dokumen di luar/var/www/html untuk tuan rumah maya

Sekiranya anda perlu menyediakan hos maya Apache menggunakan direktori selain daripada /var/www/html sebagai Documentroot (Katakan, sebagai contoh, /websrv/tapak/gabriel/public_html):

Documentroot "/WebSrv/Sites/Gabriel/Public_html" 

Apache akan menolak untuk melayani kandungan kerana indeks.html telah dilabelkan dengan default_t selinux taipkan, Apache yang tidak dapat diakses:

# wget http: // localhost/index.html # ls -lz/websrv/sites/gabriel/public_html/index.html 
Dilabelkan sebagai jenis default_t selinux

Seperti contoh sebelumnya, anda boleh menggunakan arahan berikut untuk mengesahkan bahawa ini memang merupakan isu yang berkaitan dengan Selinux:

# kucing/var/log/audit/audit.log | Grep AVC | ekor -1 
Semak log untuk isu selinux

Untuk menukar label /websrv/tapak/gabriel/public_html secara rekursif ke httpd_sys_content_t, lakukan:

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

Perintah di atas akan memberikan akses baca sahaja ke direktori dan kandungannya.

Akhirnya, untuk memohon polisi (dan membuat perubahan label dengan segera), lakukan:

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

Sekarang anda harus dapat mengakses direktori:

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

Untuk maklumat lanjut mengenai Selinux, rujuk kepada Fedora 22 Selinux dan Panduan Pentadbir.

Halaman: 1 2