Sistem kaamanan Linux

Salah sahiji alesan pikeun kasuksésan anu luar biasa tina OS Linux dina embedded, alat sélulér sareng server nyaéta tingkat kaamanan anu cukup luhur tina kernel, jasa sareng aplikasi anu aya hubunganana. Tapi lamun tingali leuwih deukeut mun arsitéktur kernel Linux Ubuntu, mangka teu mungkin pikeun manggihan di dinya hiji pasagi jawab kaamanan saperti. Dimana subsistem kaamanan Linux nyumput sareng naon eusina?

Latar dina Modul Kaamanan Linux sareng SELinux

Security Enhanced Linux mangrupikeun sakumpulan aturan sareng mékanisme aksés dumasar kana modél aksés wajib sareng dumasar-peran pikeun ngajagi sistem Linux tina poténsi ancaman sareng ngabenerkeun kakurangan Discretionary Access Control (DAC), sistem kaamanan Unix tradisional. Proyék ieu asalna dina peujit Badan Kaamanan Nasional AS, sareng dikembangkeun langsung utamina ku kontraktor Secure Computing Corporation sareng MITRE, ogé sajumlah laboratorium panalungtikan.

Sistem kaamanan Linux
Modul Kaamanan Linux

Linus Torvalds ngadamel sababaraha koméntar ngeunaan pamekaran NSA énggal supados tiasa dilebetkeun kana kernel Linux mainline. Anjeunna ngajelaskeun lingkungan umum, sareng sakumpulan interceptors pikeun ngadalikeun operasi sareng objék sareng sakumpulan médan pelindung anu tangtu dina struktur data kernel pikeun nyimpen atribut anu saluyu. Lingkungan ieu teras tiasa dianggo ku modul kernel anu tiasa dimuat pikeun nerapkeun modél kaamanan anu dipikahoyong. LSM pinuh asup kana Linux kernel v2.6 taun 2003.

Kerangka LSM ngawengku widang jaga dina struktur data jeung nelepon ka fungsi interception dina titik kritis dina kode kernel pikeun ngamanipulasi aranjeunna sarta ngalakukeun kontrol aksés. Éta ogé nambihan fungsionalitas pikeun ngadaptar modul kaamanan. Antarbeungeut /sys/kernel/security/lsm ngandung daptar modul aktip dina sistem. LSM hook disimpen dina daptar nu disebut dina urutan dieusian dina CONFIG_LSM. Dokuméntasi lengkep ngeunaan kait kalebet dina file header kalebet / linux / lsm_hooks.h.

Subsistem LSM ngamungkinkeun pikeun ngarengsekeun integrasi pinuh ku SELinux sareng versi anu sami tina kernel Linux stabil v2.6. Ampir langsung, SELinux janten standar de facto pikeun lingkungan Linux anu aman sareng kalebet dina distribusi anu paling populér: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Glosarium

  • Idéntitas — Pamaké SELinux henteu sami sareng id pangguna Unix/Linux biasa; aranjeunna tiasa hirup babarengan dina sistem anu sami, tapi dina dasarna béda. Unggal akun Linux standar tiasa pakait sareng hiji atanapi langkung di SELinux. Identitas SELinux mangrupikeun bagian tina kontéks kaamanan sadayana, anu nangtukeun domain mana anu anjeun tiasa sareng teu tiasa gabung.
  • Domain - Dina SELinux, domain mangrupikeun kontéks palaksanaan subjek, nyaéta prosés. Domain sacara langsung nangtukeun aksés anu aya dina prosés. A domain dasarna mangrupa daptar naon prosés bisa ngalakukeun atawa naon prosés bisa ngalakukeun jeung tipena béda. Sababaraha conto domain nyaéta sysadm_t pikeun administrasi sistem, sareng user_t anu mangrupikeun domain pangguna anu henteu ngagaduhan hak istimewa. Sistem init dijalankeun dina domain init_t, sareng prosés anu namina dijalankeun dina domain name_t.
  • Kalungguhan - Naon anu janten perantara antara domain sareng pangguna SELinux. Peran nangtukeun domain mana anu tiasa dianggo ku pangguna sareng jinis objék anu tiasa diaksés. Mékanisme kontrol aksés ieu nyegah ancaman serangan escalation hak husus. Peran ditulis kana modél kaamanan Role Based Access Control (RBAC) anu digunakeun dina SELinux.
  • Jinis - A atribut daptar Type Enforcement anu ditugaskeun ka hiji obyék sarta nangtukeun saha bisa ngakses eta. Sarupa jeung harti domain, iwal domain nu manglaku ka prosés, sarta jenis lumaku pikeun objék kayaning directories, file, sockets, jsb.
  • Subjék jeung objék - Prosés mangrupikeun subjek sareng dijalankeun dina kontéks khusus, atanapi domain kaamanan. Sumberdaya sistem operasi: file, diréktori, sockets, jeung sajabana, mangrupakeun objék nu ditugaskeun tipe tangtu, dina basa sejen, tingkat privasi.
  • Kawijakan SELinux - SELinux ngagunakeun rupa-rupa kawijakan pikeun ngajaga sistem. Kabijakan SELinux netepkeun aksés pangguna kana peran, peran kana domain, sareng domain kana jinis. Kahiji, pamaké ieu otorisasi pikeun ménta peran, lajeng peran ieu otorisasi pikeun ngakses domain. Tungtungna, domain ngan bisa boga aksés ka tipe tangtu objék.

LSM sareng arsitéktur SELinux

Sanaos namina, LSM henteu umumna modul Linux anu tiasa dimuat. Nanging, sapertos SELinux, éta langsung diintegrasikeun kana kernel. Sakur parobahan kode sumber LSM merlukeun kompilasi kernel anyar. Pilihan anu saluyu kedah diaktipkeun dina setélan kernel, upami henteu kodeu LSM moal diaktipkeun saatos boot. Tapi sanajan dina hal ieu, éta tiasa diaktipkeun ku pilihan OS bootloader.

Sistem kaamanan Linux
LSM mariksa tumpukan

LSM dilengkepan kait dina fungsi inti inti anu tiasa relevan pikeun cek. Salah sahiji fitur utama LSM nyaeta aranjeunna numpuk. Ku kituna, pamariksaan standar masih dilaksanakeun, sareng unggal lapisan LSM ngan ukur nambihan kadali sareng kadali tambahan. Ieu ngandung harti yén larangan teu bisa digulung deui. Ieu ditingalikeun dina gambar; upami hasil pamariksaan DAC rutin gagal, maka masalahna moal dugi ka kait LSM.

SELinux ngadopsi arsitéktur kaamanan Flask tina sistem operasi panalungtikan Fluke, khususna prinsip hak husus pangsaeutikna. Inti tina konsép ieu, sakumaha ngaranna nunjukkeun, nyaéta méré pamaké atawa prosés ngan hak-hak anu diperlukeun pikeun ngalaksanakeun lampah dimaksudkeun. Prinsip ieu dilaksanakeun ngagunakeun ngetik aksés paksa, sahingga kontrol aksés di SELinux dumasar kana domain => model tipe.

Hatur nuhun kana ngetik aksés paksa, SELinux gaduh kamampuan kontrol aksés anu langkung ageung tibatan modél DAC tradisional anu dianggo dina sistem operasi Unix/Linux. Contona, Anjeun bisa ngawatesan jumlah port jaringan nu server ftp bakal nyambung ka, ngidinan nulis jeung ngarobah payil dina folder nu tangtu, tapi teu ngahapus aranjeunna.

Komponén utama SELinux nyaéta:

  • Server penegak kawijakan - Mékanisme utama pikeun ngatur kontrol aksés.
  • database kawijakan kaamanan Sistim.
  • Interaksi sareng interceptor acara LSM.
  • Selinuxfs - Pseudo-FS, sarua jeung /proc tur dipasang dina /sys/fs/selinux. Dieusian sacara dinamis ku kernel Linux dina waktos jalan sareng ngandung file anu ngandung inpormasi status SELinux.
  • Aksés Véktor Cache - Mékanisme bantu pikeun ningkatkeun produktivitas.

Sistem kaamanan Linux
Kumaha SELinux jalan

Éta sadayana dianggo sapertos kieu.

  1. Subjek tangtu, dina istilah SELinux, ngalakukeun tindakan anu diidinan dina hiji obyék saatos dipariksa DAC, sapertos anu dipidangkeun dina gambar luhur. Ieu pamundut pikeun ngalakukeun operasi mana anu ka LSM acara interceptor.
  2. Ti dinya, pamundut, babarengan jeung subyek jeung kontéks kaamanan obyék, disalurkeun ka SELinux abstraksi jeung Hook Logika modul, nu jawab interacting jeung LSM.
  3. Otoritas-nyieun kaputusan ngeunaan aksés subjek kana hiji obyék nyaéta Server Penegak Kabijakan sareng nampi data tina SELinux AnHL.
  4. Pikeun nyandak kaputusan ngeunaan aksés atanapi panolakan, Server Penegak Kabijakan tos ka subsistem cache Access Vector Cache (AVC) pikeun aturan anu paling sering dianggo.
  5. Upami solusi pikeun aturan anu saluyu henteu kapendak dina cache, teras pamenta disalurkeun kana pangkalan data kawijakan kaamanan.
  6. Hasil pamilarian tina pangkalan data sareng AVC dipulangkeun ka Server Penegak Kabijakan.
  7. Upami kawijakan anu dipendakan cocog sareng tindakan anu dipénta, maka operasi diidinan. Upami teu kitu, operasi dilarang.

Ngatur Setélan SELinux

SELinux beroperasi dina salah sahiji tina tilu modeu:

  • Enforcing - adherence ketat kana kawijakan kaamanan.
  • Permisif - Palanggaran larangan diidinan; catetan anu saluyu dilakukeun dina jurnal.
  • Ditumpurkeun-Kabijakan kaamanan teu berlaku.

Anjeun tiasa ningali naon mode SELinux aya dina paréntah di handap ieu.

[admin@server ~]$ getenforce
Permissive

Ngarobah mode samemeh rebooting, contona, netepkeun ka maksakeun, atawa 1. Parameter permisif pakait jeung kode numerik 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое

Anjeun oge bisa ngarobah mode ku ngédit file:

[admin@server ~]$ cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.

SELINUXTYPE=udagan

Beda sareng setenfoce nyaéta nalika sistem operasi boot, modeu SELinux bakal diatur luyu sareng nilai parameter SELINUX dina file konfigurasi. Sajaba ti éta, parobahan enforcing <=> disabled ngan mawa pangaruh ku ngédit /etc/selinux/config file sarta sanggeus reboot a.

Tingali laporan status ringkes:

[admin@server ~]$ sestatus

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31

Pikeun ningali atribut SELinux, sababaraha utilitas standar nganggo parameter -Z.

[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     2914 ?        00:00:04 httpd
system_u:system_r:httpd_t:s0     2915 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2916 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2917 ?        00:00:00 httpd
...
system_u:system_r:httpd_t:s0     2918 ?        00:00:00 httpd

Dibandingkeun sareng kaluaran normal ls -l, aya sababaraha widang tambahan dina format ieu:

<user>:<role>:<type>:<level>

Widang terakhir nunjukkeun hal sapertos klasifikasi kaamanan sareng diwangun ku kombinasi dua elemen:

  • s0 - significance, ogé ditulis salaku lowlevel-highlevel interval
  • c0, c1… c1023 - kategori.

Ngarobah konfigurasi aksés

Anggo semodule pikeun ngamuat, nambihan, sareng ngahapus modul SELinux.

[admin@server ~]$ semodule -l |wc -l #список всех модулей
408
[admin@server ~]$ semodule -e abrt #enable - активировать модуль
[admin@server ~]$ semodule -d accountsd #disable - отключить модуль
[admin@server ~]$ semodule -r avahi #remove - удалить модуль

Tim kahiji login semanage nyambungkeun pamaké SELinux ka pamaké sistem operasi, kadua mintonkeun daptar. Tungtungna, paréntah anu terakhir sareng saklar -r ngaleungitkeun pemetaan pangguna SELinux kana akun OS. Penjelasan ngeunaan sintaksis pikeun nilai MLS/MCS Range aya dina bagian sateuacana.

[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol

regu pamaké semanage dipaké pikeun ngatur pemetaan antara pamaké SELinux jeung kalungguhan.

[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

Parameter paréntah:

  • -a nambahkeun éntri pemetaan peran custom;
  • -l daptar pamaké cocog jeung kalungguhan;
  • -d ngahapus entri pemetaan peran pamaké;
  • -R daptar kalungguhan napel pamaké;

File, Port sareng Nilai Boolean

Unggal modul SELinux nyadiakeun susunan aturan tag file, tapi anjeun oge bisa nambahkeun aturan sorangan lamun perlu. Salaku conto, urang hoyong pangladén wéb ngagaduhan hak aksés kana folder /srv/www.

[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/

Paréntah kahiji ngadaptar aturan nyirian anyar, sarta kadua resets, atawa rada susunan, jenis file luyu jeung aturan ayeuna.

Kitu ogé, palabuhan TCP / UDP ditandaan ku cara anu ngan ukur jasa anu cocog anu tiasa ngadangukeunana. Salaku conto, supados pangladén wéb tiasa ngadangukeun port 8080, anjeun kedah ngajalankeun paréntahna.

[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080

Sajumlah signifikan modul SELinux gaduh parameter anu tiasa nyandak nilai Boolean. Sakabéh daptar parameter sapertos tiasa ditingali nganggo getsebool -a. Anjeun tiasa ngarobih nilai boolean nganggo setsebool.

[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off

Bengkel, kéngingkeun aksés kana antarmuka wéb Pgadmin

Hayu urang tingali conto praktis: urang masang pgadmin7.6-web dina RHEL 4 pikeun ngatur database PostgreSQL. Urang leumpang saeutik quest kalawan setélan pg_hba.conf, postgresql.conf na config_local.py, set idin folder, dipasang modul Python leungit ti pip. Sagalana geus siap, urang ngajalankeun sarta nampa 500 Kasalahan Server internal.

Sistem kaamanan Linux

Urang mimitian ku tersangka has, mariksa /var/log/httpd/error_log. Aya sababaraha éntri metot di dinya.

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690] [timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

Dina titik ieu, paling administrator Linux Ubuntu bakal niatna cocoba pikeun ngajalankeun setencorce 0, sarta éta bakal jadi tungtung eta. Terus terang, kuring ngalakukeun éta pertama kalina. Ieu tangtu ogé jalan kaluar, tapi tebih ti pangalusna.

Sanajan desain pajeujeut, SELinux tiasa ramah-pamaké. Ngan pasang pakét setroubleshoot sareng tingali log sistem.

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

Punten dicatet yén jasa auditd kedah dibalikan deui ku cara kieu, sareng henteu nganggo systemctl, sanaos ayana systemd dina OS. Dina log sistem bakal dituduhkeun teu ukur kanyataan blocking, tapi ogé alesan na cara nungkulan larangan.

Sistem kaamanan Linux

Urang ngajalankeun paréntah ieu:

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

Urang pariksa aksés ka kaca web pgadmin4-web, sagalana jalan.

Sistem kaamanan Linux

Sistem kaamanan Linux

sumber: www.habr.com

Tambahkeun komentar