Panduan Pemula untuk SELinux

Panduan Pemula untuk SELinux

Terjemahan artikel yang disediakan untuk pelajar kursus "Keselamatan Linux"

SELinux atau Security Enhanced Linux ialah mekanisme kawalan akses yang dipertingkat yang dibangunkan oleh Agensi Keselamatan Kebangsaan (NSA) AS untuk mencegah pencerobohan berniat jahat. Ia melaksanakan model kawalan capaian paksa (atau mandatori) (Kawalan Capaian Mandatori Bahasa Inggeris, MAC) di atas model budi bicara (atau terpilih) sedia ada (Kawalan Akses Budi Bicara Bahasa Inggeris, DAC), iaitu, kebenaran untuk membaca, menulis, melaksanakan.

SELinux mempunyai tiga mod:

  1. Menguatkuasakan — penafian akses berdasarkan peraturan dasar.
  2. Permisif — menyimpan log tindakan yang melanggar dasar, yang akan dilarang dalam mod penguatkuasaan.
  3. Kurang Upaya — melumpuhkan sepenuhnya SELinux.

Secara lalai tetapan berada dalam /etc/selinux/config

Menukar mod SELinux

Untuk mengetahui mod semasa, jalankan

$ getenforce

Untuk menukar mod kepada permisif jalankan arahan berikut

$ setenforce 0

atau, untuk menukar mod daripada permisif pada menguatkuasakan, laksanakan

$ setenforce 1

Jika anda perlu melumpuhkan sepenuhnya SELinux, maka ini hanya boleh dilakukan melalui fail konfigurasi

$ vi /etc/selinux/config

Untuk melumpuhkan, tukar parameter SELINUX seperti berikut:

SELINUX=disabled

Menyediakan SELinux

Setiap fail dan proses ditandakan dengan konteks SELinux, yang mengandungi maklumat tambahan seperti pengguna, peranan, jenis, dsb. Jika ini kali pertama anda mendayakan SELinux, anda perlu mengkonfigurasi konteks dan label terlebih dahulu. Proses memberikan label dan konteks dikenali sebagai penandaan. Untuk mula menandakan, dalam fail konfigurasi kami menukar mod kepada permisif.

$ vi /etc/selinux/config
SELINUX=permissive

Selepas menetapkan mod permisif, buat fail tersembunyi kosong dalam akar dengan nama autorelabel

$ touch /.autorelabel

dan mulakan semula komputer

$ init 6

Nota: Kami menggunakan mod permisif untuk menandakan, sejak penggunaan mod menguatkuasakan boleh menyebabkan sistem ranap semasa but semula.

Jangan risau jika muat turun tersekat pada sesetengah fail, penandaan mengambil sedikit masa. Setelah penandaan selesai dan sistem anda dibut, anda boleh pergi ke fail konfigurasi dan tetapkan mod menguatkuasakandan juga jalankan:

$ setenforce 1

Anda kini telah berjaya mendayakan SELinux pada komputer anda.

Memantau log

Anda mungkin mengalami beberapa ralat semasa menandakan atau semasa sistem sedang berjalan. Untuk menyemak sama ada SELinux anda berfungsi dengan betul dan jika ia tidak menyekat akses kepada mana-mana port, aplikasi, dll., anda perlu melihat log. Log SELinux terletak di /var/log/audit/audit.log, tetapi anda tidak perlu membaca keseluruhannya untuk mencari ralat. Anda boleh menggunakan utiliti audit2why untuk mencari ralat. Jalankan arahan berikut:

$ audit2why < /var/log/audit/audit.log

Akibatnya, anda akan menerima senarai ralat. Jika tiada ralat dalam log, maka tiada mesej akan dipaparkan.

Mengkonfigurasi Dasar SELinux

Dasar SELinux ialah satu set peraturan yang mengawal mekanisme keselamatan SELinux. Dasar mentakrifkan satu set peraturan untuk persekitaran tertentu. Sekarang kita akan belajar cara mengkonfigurasi dasar untuk membenarkan akses kepada perkhidmatan yang dilarang.

1. Nilai logik (suis)

Suis (boolean) membolehkan anda menukar bahagian dasar pada masa jalan, tanpa perlu membuat dasar baharu. Mereka membenarkan anda membuat perubahan tanpa but semula atau menyusun semula dasar SELinux.

Contoh
Katakan kami ingin berkongsi direktori rumah pengguna melalui FTP baca/tulis, dan kami telah pun mengongsinya, tetapi apabila kami cuba mengaksesnya, kami tidak melihat apa-apa. Ini kerana dasar SELinux menghalang pelayan FTP daripada membaca dan menulis ke direktori utama pengguna. Kita perlu mengubah dasar supaya pelayan FTP boleh mengakses direktori rumah. Mari lihat jika terdapat sebarang suis untuk ini dengan melakukan

$ semanage boolean -l

Perintah ini akan menyenaraikan suis yang tersedia dengan keadaan semasa (hidup atau mati) dan perihalannya. Anda boleh memperhalusi carian anda dengan menambahkan grep untuk mencari hasil ftp sahaja:

$ semanage boolean -l | grep ftp

dan anda akan dapati yang berikut

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Suis ini dilumpuhkan, jadi kami akan mendayakannya setsebool $ setsebool ftp_home_dir on

Kini daemon ftp kami akan dapat mengakses direktori rumah pengguna.
Nota: Anda juga boleh mendapatkan senarai suis yang tersedia tanpa penerangan dengan melakukan getsebool -a

2. Label dan konteks

Ini ialah cara yang paling biasa untuk melaksanakan dasar SELinux. Setiap fail, folder, proses dan port ditandakan dengan konteks SELinux:

  • Untuk fail dan folder, label disimpan sebagai atribut lanjutan pada sistem fail dan boleh dilihat dengan arahan berikut:
    $ ls -Z /etc/httpd
  • Untuk proses dan port, pelabelan diuruskan oleh kernel, dan anda boleh melihat label ini seperti berikut:

proses

$ ps –auxZ | grep httpd

pelabuhan

$ netstat -anpZ | grep httpd

Contoh
Sekarang mari kita lihat contoh untuk lebih memahami label dan konteks. Katakan kita mempunyai pelayan web yang, bukannya direktori /var/www/html/ использует /home/dan/html/. SELinux akan menganggap ini sebagai pelanggaran dasar dan anda tidak akan dapat melihat halaman web anda. Ini kerana kami tidak menetapkan konteks keselamatan yang dikaitkan dengan fail HTML. Untuk melihat konteks keselamatan lalai, gunakan arahan berikut:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Di sini kami mendapat httpd_sys_content_t sebagai konteks untuk fail html. Kami perlu menetapkan konteks keselamatan ini untuk direktori semasa kami, yang pada masa ini mempunyai konteks berikut:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Perintah alternatif untuk menyemak konteks keselamatan fail atau direktori:

$ semanage fcontext -l | grep '/var/www'

Kami juga akan menggunakan semanage untuk menukar konteks setelah kami menemui konteks keselamatan yang betul. Untuk menukar konteks /home/dan/html, jalankan arahan berikut:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Selepas konteks ditukar menggunakan semanage, arahan restorecon akan memuatkan konteks lalai untuk fail dan direktori. Pelayan web kami kini boleh membaca fail daripada folder /home/dan/htmlkerana konteks keselamatan untuk folder ini telah ditukar kepada httpd_sys_content_t.

3. Wujudkan dasar tempatan

Mungkin terdapat situasi di mana kaedah di atas tidak berguna kepada anda dan anda mendapat ralat (avc/penolakan) dalam audit.log. Apabila ini berlaku, anda perlu membuat dasar tempatan. Anda boleh mencari semua ralat menggunakan audit2why, seperti yang diterangkan di atas.

Anda boleh membuat dasar setempat untuk menyelesaikan ralat. Sebagai contoh, kami mendapat ralat yang berkaitan dengan httpd (apache) atau smbd (samba), kami melihat ralat dan membuat dasar untuknya:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

ia adalah http_policy и smb_policy ialah nama dasar tempatan yang kami buat. Sekarang kita perlu memuatkan dasar tempatan yang dicipta ini ke dalam dasar SELinux semasa. Ini boleh dilakukan seperti berikut:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Dasar tempatan kami telah dimuat turun dan kami seharusnya tidak lagi menerima sebarang avc atau denail dalam audit.log.

Ini adalah percubaan saya untuk membantu anda memahami SELinux. Saya harap selepas membaca artikel ini anda akan berasa lebih selesa dengan SELinux.

Sumber: www.habr.com

Tambah komen