Linux rafitra fiarovana

Ny iray amin'ireo antony mahatonga ny fahombiazan'ny Linux OS amin'ny fitaovana finday sy mpizara dia ny fiarovana avo lenta amin'ny kernel, serivisy mifandraika ary fampiharana. Fa raha jereo akaiky amin'ny rafitry ny kernel Linux, dia tsy azo atao ny mahita azy io ny kianja iray tompon'andraikitra amin'ny fiarovana toy izany. Aiza ny subsystem fiarovana Linux miafina ary inona no ao anatiny?

Background amin'ny Linux Security Modules sy SELinux

Security Enhanced Linux dia andiana fitsipika sy fomba fidirana mifototra amin'ny maodely fidirana tsy maintsy atao sy mifototra amin'ny andraikitra mba hiarovana ny rafitra Linux amin'ny loza mety hitranga sy hanitsiana ny tsy fahampian'ny Discretionary Access Control (DAC), ny rafitra fiarovana Unix nentim-paharazana. Ny tetikasa dia niainga tao amin'ny tsinain'ny US National Security Agency, ary novolavolaina mivantana indrindra tamin'ny alΓ lan'ny orinasa Secure Computing Corporation sy MITRE, ary koa laboratoara fikarohana maromaro.

Linux rafitra fiarovana
Linux Security Modules

Linus Torvalds dia nanao fanehoan-kevitra maromaro momba ny fivoaran'ny NSA vaovao mba hampidirana azy ireo ao amin'ny kernel Linux mainline. Nofaritany tontolo iainana ankapobeny, miaraka amin'ny andiana interceptors hifehezana ny asa miaraka amin'ny zavatra ary andiana sehatra fiarovana sasany amin'ny rafitra angon-drakitra kernel mba hitahiry ireo toetra mifanaraka amin'izany. Ity tontolo iainana ity dia azo ampiasaina amin'ny alΓ lan'ny maody kernel azo zakaina mba hampiharana izay modely fiarovana irina. LSM dia niditra tanteraka tamin'ny Linux kernel v2.6 tamin'ny 2003.

Ny rafitra LSM dia ahitana sahan'ny mpiambina ao amin'ny rafitry ny angon-drakitra ary miantso amin'ny fanelanelanana amin'ny teboka manan-danja ao amin'ny code kernel mba hanodinana azy ireo sy hanaraha-maso ny fidirana. Izy io koa dia manampy fampiasa amin'ny fisoratana anarana modules fiarovana. Ny interface / sys/kernel/security/lsm dia misy lisitry ny maody mavitrika ao amin'ny rafitra. Ny hook LSM dia voatahiry ao anaty lisitra izay antsoina amin'ny filaharana voalaza ao amin'ny CONFIG_LSM. Ny antontan-taratasy amin'ny antsipiriany momba ny hooks dia tafiditra ao amin'ny fisie lohapejy ahitana/linux/lsm_hooks.h.

Ny subsystem LSM dia nahafahana namita ny fampidirana feno ny SELinux miaraka amin'ny dikan-teny mitovy amin'ny kernel Linux v2.6. Saika avy hatrany, ny SELinux dia lasa fenitra de facto ho an'ny tontolo Linux azo antoka ary tafiditra ao anatin'ny fizarana malaza indrindra: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Glossary

  • maha- - Ny mpampiasa SELinux dia tsy mitovy amin'ny id mpampiasa Unix/Linux mahazatra; afaka miara-miaina amin'ny rafitra iray ihany izy ireo, saingy hafa tanteraka amin'ny ankapobeny. Ny kaonty Linux mahazatra tsirairay dia afaka mifanandrify amin'ny iray na maromaro ao amin'ny SELinux. Ny maha-SELinux dia ampahany amin'ny tontolon'ny fiarovana amin'ny ankapobeny, izay mamaritra izay sehatra azonao atao sy tsy azonao idirana.
  • sehatra - Ao amin'ny SELinux, ny sehatra dia ny tontolon'ny famonoana lohahevitra iray, izany hoe dingana iray. Ny sehatra dia mamaritra mivantana ny fidirana ananan'ny dingana iray. Ny sehatra dia amin'ny ankapobeny dia lisitry ny zavatra azon'ny dingana atao na izay azon'ny dingana atao amin'ny karazana samihafa. Ny ohatra sasantsasany amin'ny sehatra dia sysadm_t ho an'ny fitantanana rafitra, ary user_t izay sehatra mpampiasa tsy manana tombontsoa. Ny rafitra init dia mandeha amin'ny sehatra init_t, ary ny dingana nomena anarana dia mandeha ao amin'ny domain name_t.
  • anjara asa β€” Inona no mpanelanelana eo amin'ny sehatra sy ny mpampiasa SELinux. Ny anjara toerana no mamaritra hoe sehatra inona no azon'ny mpampiasa idirana sy karazana zavatra azon'izy ireo idirana. Ity rafitra fanaraha-maso ny fidirana ity dia manakana ny fandrahonan'ny fanafihana fisondrotry ny tombontsoa. Ny andraikitra dia voasoratra ao amin'ny modely fiarovana amin'ny Role Based Access Control (RBAC) ampiasaina amin'ny SELinux.
  • karazana - Toetran'ny lisitra Type Enforcement izay omena amin'ny zavatra iray ary mamaritra hoe iza no afaka miditra ao. Mitovy amin'ny famaritana sehatra, afa-tsy io sehatra io dia mihatra amin'ny dingana iray, ary ny karazana dia mihatra amin'ny zavatra toy ny lahatahiry, rakitra, sockets, sns.
  • Lohahevitra sy zavatra - Ny dingana dia lohahevitra ary mandeha amin'ny sehatra manokana, na sehatra fiarovana. Loharanon'ny rafitra miasa: rakitra, lahatahiry, faladia, sns., dia zavatra nomena karazana iray, amin'ny teny hafa, ambaratonga manokana.
  • Politika SELinux - Mampiasa politika isan-karazany ny SELinux mba hiarovana ny rafitra. Ny politikan'ny SELinux dia mamaritra ny fidiran'ny mpampiasa amin'ny andraikitra, ny andraikitry ny sehatra, ary ny sehatra amin'ny karazana. Voalohany, mahazo alalana hahazo anjara ny mpampiasa, avy eo mahazo alalana hiditra amin'ny sehatra ny anjara. Farany, ny sehatra iray dia tsy mahazo miditra amin'ny karazana zavatra sasany ihany.

LSM sy SELinux architecture

Na eo aza ny anarana, ny LSM dia tsy maodely Linux azo entina amin'ny ankapobeny. Na izany aza, toa an'i SELinux, dia tafiditra mivantana amin'ny kernel. Ny fanovana rehetra amin'ny kaody loharano LSM dia mitaky fanangonana kernel vaovao. Ny safidy mifanaraka amin'izany dia tsy maintsy alefa ao amin'ny fikandrana kernel, raha tsy izany dia tsy hihetsika ny kaody LSM aorian'ny boot. Saingy na dia amin'ity tranga ity aza dia azo alefa amin'ny safidy OS bootloader.

Linux rafitra fiarovana
Vidin'ny LSM -tserasera

Ny LSM dia manana fihokoana amin'ny asa kernel fototra izay mety ilaina amin'ny fisavana. Ny iray amin'ireo endri-javatra lehibe indrindra amin'ny LSM dia ny fametrahana azy ireo. Noho izany, mbola atao ny fisavana mahazatra, ary ny sosona LSM tsirairay dia manampy fanaraha-maso sy fanaraha-maso fanampiny. Midika izany fa tsy azo averina ny fandrarana. Ity dia aseho amin'ny sary; raha toa ka tsy nahomby ny valin'ny fisavana DAC mahazatra, dia tsy ho tonga amin'ny tsipika LSM akory ilay raharaha.

SELinux dia mampiasa ny rafitra fiarovana Flask an'ny rafitra fandidiana fikarohana Fluke, indrindra ny fitsipiky ny tombontsoa faran'izay kely. Ny votoatin'ity foto-kevitra ity, araka ny lazain'ny anarany, dia ny manome ny mpampiasa na ny fizotry ny zo ilaina amin'ny fanatanterahana ny hetsika natao. Ity fitsipika ity dia ampiharina amin'ny alΓ lan'ny fanoratana fidirana an-tery, noho izany ny fanaraha-maso ny fidirana ao amin'ny SELinux dia mifototra amin'ny sehatra => modely karazana.

Noho ny fanoratana an-tery fidirana, ny SELinux dia manana fahafahana mifehy ny fidirana bebe kokoa noho ny modely DAC nentim-paharazana ampiasaina amin'ny rafitra miasa Unix/Linux. Ohatra, azonao atao ny mametra ny laharan'ny seranan-tsambo izay hifandraisan'ny mpizara ftp, mamela manoratra sy manova rakitra ao anaty lahatahiry iray, fa tsy mamafa azy ireo.

Ny singa fototra amin'ny SELinux dia:

  • Server fampiharana ny politika - Ny rafitra fototra amin'ny fandaminana ny fanaraha-maso ny fidirana.
  • Angon-drakitra momba ny politika momba ny fiarovana.
  • Fifandraisana amin'ny mpanelanelana hetsika LSM.
  • Selinuxfs - Pseudo-FS, mitovy amin'ny /proc ary napetraka ao amin'ny /sys/fs/selinux. Mampidi-doza ny kernel Linux amin'ny fotoana fandehanana ary misy rakitra misy fampahalalana momba ny sata SELinux.
  • Access Vector Cache - Mekanisma fanampiny hampitombo ny vokatra.

Linux rafitra fiarovana
Ahoana ny fiasan'ny SELinux

Miasa toy izao izany rehetra izany.

  1. Ny lohahevitra iray, amin'ny teny SELinux, dia manao hetsika azo atao amin'ny zavatra iray aorian'ny fanamarinana DAC, araka ny aseho eo amin'ny sary ambony. Ity fangatahana hanao fandidiana ity dia mankany amin'ny mpanelanelana hetsika LSM.
  2. Avy eo, ny fangatahana, miaraka amin'ny lohahevitra sy ny tontolon'ny fiarovana ny zavatra, dia alefa any amin'ny SELinux Abstraction sy Hook Logic module, izay tompon'andraikitra amin'ny fifandraisana amin'ny LSM.
  3. Ny fahefana manapa-kevitra momba ny fidirana amin'ny lohahevitra iray dia ny Server Enforcement Policy ary mandray angona avy amin'ny SELinux AnHL izy.
  4. Mba handraisana fanapahan-kevitra momba ny fidirana na fandavana dia mitodika any amin'ny subsystem caching Access Vector Cache (AVC) ny Server Enforcement Server ho an'ny fitsipika ampiasaina indrindra.
  5. Raha tsy hita ao amin'ny cache ny vahaolana momba ny fitsipika mifanaraka amin'izany, dia alefa any amin'ny angon-drakitra politikam-piarovana ny fangatahana.
  6. Ny valin'ny fikarohana avy amin'ny angon-drakitra sy ny AVC dia averina any amin'ny Server Enforcement Server.
  7. Raha mifanaraka amin'ny hetsika nangatahana ny politika hita dia avela ny fandidiana. Raha tsy izany dia voarara ny fandidiana.

Mitantana ny SELinux Settings

SELinux dia miasa amin'ny iray amin'ireo fomba telo:

  • Fampiharana - fanarahana hentitra ny politikan'ny fiarovana.
  • Mahazo alalana - Ny fanitsakitsahana ny fameperana dia azo atao; misy fanamarihana mifanaraka amin'izany dia atao ao amin'ny diary.
  • Kilemainaβ€”Tsy manan-kery ny politikan'ny fiarovana.

Azonao atao ny mahita hoe inona ny mode SELinux miaraka amin'ity baiko manaraka ity.

[admin@server ~]$ getenforce
Permissive

Fanovana ny maody alohan'ny hamerenana indray, ohatra, mametraka azy ho fampiharana, na 1. Ny mari-pamantarana mamela dia mifanandrify amin'ny kaody nomerika 0.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #Ρ‚ΠΎ ΠΆΠ΅ самоС

Azonao atao koa ny manova ny fomba amin'ny alΓ lan'ny fanitsiana ny rakitra:

[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=kendrena

Ny fahasamihafana amin'ny setenfoce dia ny hoe rehefa mandeha ny rafitra fandidiana, ny maodely SELinux dia hapetraka mifanaraka amin'ny sandan'ny SELINUX parameter ao amin'ny rakitra fikirakirana. Fanampin'izany, ny fanovana amin'ny fampiharana <=> kilemaina dia mihatra amin'ny alΓ lan'ny fanitsiana ny rakitra /etc/selinux/config ary aorian'ny famerenana indray.

Jereo ny tatitra momba ny toe-javatra fohy:

[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

Raha hijery ny toetran'ny SELinux, ny fitaovana mahazatra sasany dia mampiasa ny -Z parameter.

[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

Raha ampitahaina amin'ny famoahana mahazatra an'ny ls -l, dia misy saha fanampiny maromaro amin'ny endrika manaraka:

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

Ny saha farany dia manondro zavatra toy ny fanasokajiana fiarovana ary misy fitambarana singa roa:

  • s0 - zava-dehibe, nosoratana ihany koa ho elanelam-potoana avo lenta
  • c0, c1… c1023 - sokajy.

Manova ny tefin'ny fidirana

MampiasΓ  semodule hametahana, hanampiana, ary hanesorana ny maody 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 - ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Ekipa voalohany fidirana amin'ny herinandroge mampifandray ny mpampiasa SELinux amin'ny mpampiasa rafitra miasa, ny faharoa dia mampiseho lisitra. Farany, ny baiko farany miaraka amin'ny -r switch dia manaisotra ny sarintanin'ireo mpampiasa SELinux amin'ny kaonty OS. Ny fanazavana momba ny syntax ho an'ny sanda MLS/MCS Range dia ao amin'ny fizarana teo aloha.

[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

ekipa mpampiasa semanage ampiasaina amin'ny fitantanana ny sarintany eo amin'ny mpampiasa sy ny andraikitry ny SELinux.

[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

Fitsipika baiko:

  • - ampio ny fidirana an-tsarintany anjara manokana;
  • -L lisitr'ireo mpampiasa sy andraikitra mifanentana;
  • -d mamafa ny fidirana an-tsarintany anjara andraikitry ny mpampiasa;
  • -R lisitry ny andraikitra mifandray amin'ny mpampiasa;

Files, seranana ary sanda Boolean

Ny mody SELinux tsirairay dia manome fitsipika momba ny fametahana rakitra, fa azonao atao koa ny manampy ny fitsipikao manokana raha ilaina. Ohatra, tianay hanana zo miditra amin'ny lahatahiry /srv/www ny mpizara tranonkala.

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

Ny baiko voalohany dia manoratra fitsipika vaovao momba ny marika, ary ny faharoa dia mamerina, na ny marimarina kokoa, ny karazana rakitra mifanaraka amin'ny fitsipika ankehitriny.

Toy izany koa, ny seranan-tsambo TCP/UDP dia voamarika amin'ny fomba izay ny serivisy mety ihany no afaka mihaino azy ireo. Ohatra, raha te hihaino ny mpizara tranonkala amin'ny port 8080 ianao dia mila manatanteraka ny baiko.

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

Betsaka ny maodely SELinux manana masontsivana afaka maka ny sanda Boolean. Ny lisitry ny masontsivana toy izany dia azo jerena amin'ny fampiasana getsebool -a. Azonao atao ny manova ny sanda boolean amin'ny fampiasana 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

Atrikasa, mahazo fidirana amin'ny interface Pgadmin-web

Andeha hojerentsika ohatra azo ampiharina: nametraka pgadmin7.6-web tao amin'ny RHEL 4 izahay mba hitantana ny angona PostgreSQL. Nandeha kely izahay Fitadiavana miaraka amin'ny firafitry ny pg_hba.conf, postgresql.conf ary config_local.py, mametraha fahazoan-dΓ lana amin'ny lahatahiry, mametraka ireo maody Python tsy hita avy amin'ny pip. Efa vonona ny zava-drehetra, manomboka sy mandray 500 Internal Server Error.

Linux rafitra fiarovana

Manomboka amin'ireo ahiahiana mahazatra isika, manamarina /var/log/httpd/error_log. Misy lahatsoratra mahaliana vitsivitsy ao.

[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.

Amin'izao fotoana izao, ny ankamaroan'ny mpitantana Linux dia ho voatarika mafy hampandeha setencorce 0, ary izany no fiafaran'izany. Raha ny marina, izany no nataoko tamin'ny voalohany. Mazava ho azy fa fomba iray hivoahana ihany koa izany, saingy lavitra ny tsara indrindra.

Na dia eo aza ny endrika sarotra, ny SELinux dia mety ho mora ampiasaina. Apetraho fotsiny ny fonosana setroubleshoot ary jereo ny log system.

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

Mariho fa ny serivisy auditd dia tsy maintsy averina amin'ity fomba ity, fa tsy mampiasa systemctl, na dia eo aza ny fisian'ny systemd ao amin'ny OS. Ao amin'ny log system ho tondroina tsy ny zava-misy amin'ny fanakanana ihany, fa ny antony sy fomba handresena ny fandrarana.

Linux rafitra fiarovana

Manatanteraka ireto baiko ireto izahay:

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

Manamarina ny fidirana amin'ny pejin-tranonkala pgadmin4-web izahay, mandeha ny zava-drehetra.

Linux rafitra fiarovana

Linux rafitra fiarovana

Source: www.habr.com

Add a comment