Linux Sécherheetssystemer

Ee vun de Grënn fir den enorme Succès vum Linux OS op embedded, mobilen Apparater a Serveren ass den zimlech héije Sécherheetsgrad vum Kernel, verbonne Servicer an Uwendungen. Awer wann méi no kucken fir d'Architektur vum Linux Kernel, dann ass et onméiglech doranner e Quadrat ze fannen deen fir d'Sécherheet als solch verantwortlech ass. Wou verstoppt sech de Linux Sécherheetssubsystem a wat besteet et aus?

Hannergrond op Linux Sécherheetsmoduler a SELinux

Sécherheet Enhanced Linux ass eng Rei vu Reegelen an Zougangsmechanismen baséiert op obligatoresch a Roll-baséiert Zougangsmodeller fir Linux Systemer vu potenziellen Geforen ze schützen an d'Mängel vun der Discretionary Access Control (DAC), dem traditionellen Unix Sécherheetssystem, ze korrigéieren. De Projet entstanen am Darm vun der US National Security Agency, a gouf direkt haaptsächlech vun Optraghueler Secure Computing Corporation a MITER entwéckelt, souwéi eng Rei Fuerschungslaboratoiren.

Linux Sécherheetssystemer
Linux Sécherheet Moduler

Linus Torvalds huet eng Rei Kommentaren iwwer nei NSA Entwécklungen gemaach, fir datt se an der Mainline Linux Kernel agefouert kënne ginn. Hien huet en allgemengt Ëmfeld beschriwwen, mat enger Rei vun Interceptoren fir Operatiounen mat Objeten ze kontrolléieren an eng Rei vu bestëmmte Schutzfelder an Kerneldatenstrukturen fir déi entspriechend Attributer ze späicheren. Dëst Ëmfeld kann dann duerch loadable Kernel Moduler benotzt ginn fir all gewënschten Sécherheetsmodell ëmzesetzen. LSM ass voll am Linux Kernel v2.6 am Joer 2003 aginn.

De LSM-Framework enthält Schutzfelder an Datenstrukturen an rifft d'Interceptiounsfunktiounen op kritesche Punkten am Kernelcode fir se ze manipuléieren an Zougangskontroll auszeféieren. Et füügt och Funktionalitéit fir d'Aschreiwung vu Sécherheetsmoduler un. D'/sys/kernel/security/lsm Interface enthält eng Lëscht vun aktive Moduler um System. LSM Haken sinn a Lëschte gespäichert, déi an der Uerdnung genannt ginn an CONFIG_LSM. Detailléiert Dokumentatioun op Haken ass an der Header Datei abegraff /linux/lsm_hooks.h.

De LSM-Subsystem huet et méiglech gemaach déi voll Integratioun vu SELinux mat der selwechter Versioun vum stabile Linux Kernel v2.6 ze kompletéieren. Bal direkt gouf SELinux den de facto Standard fir e séchert Linux Ëmfeld a gouf an de populärste Verdeelungen abegraff: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux Glossar

  • Identitéit - De SELinux Benotzer ass net d'selwecht wéi déi üblech Unix / Linux Benotzer ID; si kënnen um selwechte System existéieren, awer si komplett anescht am Wesentlechen. All Standard Linux Kont kann zu engem oder méi am SELinux entspriechen. D'SELinux Identitéit ass Deel vum Gesamtsécherheetskontext, wat bestëmmt wéi eng Domainen Dir kënnt an net matmaachen.
  • Domains - Am SELinux ass en Domain den Ausféierungskontext vun engem Sujet, dat heescht e Prozess. D'Domain bestëmmt direkt den Zougang deen e Prozess huet. En Domain ass grondsätzlech eng Lëscht vu wat Prozesser kënne maachen oder wat e Prozess mat verschiddenen Aarte maache kann. E puer Beispiller vun Domänen sinn sysadm_t fir Systemverwaltung, an user_t wat en normalen net-privilegiéierten User-Domain ass. Den init System leeft am init_t Domain, an de genannte Prozess leeft am named_t Domain.
  • Rollen - Wat déngt als Tëschestatioun tëscht Domainen an SELinux Benotzer. Rollen bestëmmen zu wéi enge Domainen e Benotzer ka gehéieren a wéi eng Aarte vun Objeten se Zougang hunn. Dësen Zougangskontrollmechanismus verhënnert d'Drohung vu Privilegieeskalatiounsattacken. Rollen ginn an de Role Based Access Control (RBAC) Sécherheetsmodell geschriwwen, deen an SELinux benotzt gëtt.
  • Typen - En Typ Enforcement List Attribut deen un en Objet zougewisen ass a bestëmmt wien Zougang kann. Ähnlech wéi d'Domain Definitioun, ausser datt d'Domain fir e Prozess gëlt, an den Typ gëlt fir Objekter wéi Verzeichnisser, Dateien, Sockets, etc.
  • Sujeten an Objeten - Prozesser sinn Themen a lafen an engem spezifesche Kontext, oder Sécherheetsdomän. Betribssystem Ressourcen: Dateien, Verzeichnisser, Sockets, asw., sinn Objeten déi e bestëmmten Typ zougewisen sinn, an anere Wierder, e Privatsphärniveau.
  • SELinux Politiken - SELinux benotzt eng Vielfalt vu Politiken fir de System ze schützen. D'SELinux Politik definéiert den Zougang vun de Benotzer zu Rollen, Rollen op Domainen, an Domainen op Typen. Als éischt ass de Benotzer autoriséiert eng Roll ze kréien, dann ass d'Roll autoriséiert fir Zougang zu Domainen. Schlussendlech kann en Domain nëmmen Zougang zu bestëmmten Aarte vun Objeten hunn.

LSM an SELinux Architektur

Trotz dem Numm sinn LSMs net allgemeng luedbar Linux Moduler. Wéi och ëmmer, wéi SELinux, ass et direkt an de Kernel integréiert. All Ännerung vum LSM Quellcode erfuerdert eng nei Kernel-Kompilatioun. Déi entspriechend Optioun muss an de Kernel-Astellungen aktivéiert ginn, soss gëtt de LSM Code net nom Boot aktivéiert. Awer och an dësem Fall kann et vun der OS Bootloader Optioun aktivéiert ginn.

Linux Sécherheetssystemer
LSM kontrolléieren Stack

LSM ass mat Haken a Kär Kernel Funktiounen ausgestatt, déi fir Kontrollen relevant kënne sinn. Ee vun den Haaptmerkmale vun LSMs ass datt se gestapelt sinn. Sou sinn d'Standard Kontrollen nach ëmmer duerchgefouert, an all Layer vun LSM gëtt nëmmen zousätzlech Kontrollen a Kontrollen. Dëst bedeit datt de Verbuet net zréckgerullt ka ginn. Dëst gëtt an der Figur gewisen; wann d'Resultat vu Routine DAC Kontrollen e Feeler ass, da wäert d'Saach net emol d'LSM Haken erreechen.

SELinux adoptéiert d'Flask Sécherheetsarchitektur vum Fluke Fuerschungsbetribssystem, besonnesch de Prinzip vum mannsten Privileg. D'Essenz vun dësem Konzept, wéi säin Numm et scho seet, ass de Benotzer oder de Prozess nëmmen déi Rechter ze ginn, déi néideg sinn fir déi virgesinn Handlungen auszeféieren. Dëse Prinzip gëtt mat forcéierten Zougangstyp implementéiert, sou datt den Zougangskontrolle bei SELinux um Domain => Typ Modell baséiert.

Dank gezwongenen Zougangstyping huet SELinux vill méi grouss Zougangskontrollfäegkeeten wéi den traditionellen DAC Modell deen an Unix / Linux Betribssystemer benotzt gëtt. Zum Beispill kënnt Dir d'Netzwierkportnummer limitéieren, op déi de ftp-Server verbënnt, erlaabt Schreiwen an Dateien an engem bestëmmten Dossier z'änneren, awer net ze läschen.

D'Haaptkomponente vu SELinux sinn:

  • Politik Duerchféierung Server - Den Haaptmechanismus fir den Zougangskontroll z'organiséieren.
  • System Sécherheetspolitik Datebank.
  • Interaktioun mam LSM Event Interceptor.
  • Selinuxfs - Pseudo-FS, d'selwecht wéi /proc a montéiert an /sys/fs/selinux. Dynamesch populéiert vum Linux Kernel beim Runtime an enthält Dateien mat SELinux Statusinformatioun.
  • Zougang Vector Cache - En Hëllefsmechanismus fir d'Produktivitéit ze erhéijen.

Linux Sécherheetssystemer
Wéi SELinux funktionnéiert

Et funktionnéiert alles esou.

  1. E bestëmmte Sujet, a SELinux Begrëffer, mécht eng zulässlech Aktioun op en Objet no engem DAC Check, wéi am Top Bild gewisen. Dës Ufro fir eng Operatioun ze maachen geet un den LSM Event Interceptor.
  2. Vun do aus gëtt d'Ufro, zesumme mam Thema an Objet Sécherheetskontext, un de SELinux Abstraction and Hook Logic Modul weidergeleet, dee verantwortlech ass fir d'Interaktioun mam LSM.
  3. D'Entscheedungsautoritéit iwwer den Zougang vun engem Sujet zu engem Objet ass de Policy Enforcement Server an et kritt Daten vum SELinux AnHL.
  4. Fir Entscheedungen iwwer Zougang oder Verweigerung ze huelen, dréit de Policy Enforcement Server op den Access Vector Cache (AVC) Caching Subsystem fir déi meescht benotzt Regelen.
  5. Wann eng Léisung fir déi entspriechend Regel net am Cache fonnt gëtt, da gëtt d'Ufro un d'Sécherheetspolitik Datebank weidergeleet.
  6. D'Sichresultat vun der Datebank an der AVC gëtt op de Policy Enforcement Server zréckginn.
  7. Wann déi fonnt Politik mat der ugefrote Handlung entsprécht, ass d'Operatioun erlaabt. Soss ass d'Operatioun verbueden.

Gestioun SELinux Astellungen

SELinux funktionnéiert an engem vun dräi Modi:

  • Duerchféierung - Strikt Anhale vun der Sécherheetspolitik.
  • Permissive - Violatioun vu Restriktiounen ass erlaabt; eng entspriechend Notiz gëtt am Journal gemaach.
  • Behënnert - Sécherheetspolitike sinn net a Kraaft.

Dir kënnt gesinn a wéi engem Modus SELinux ass mat dem folgenden Kommando.

[admin@server ~]$ getenforce
Permissive

Änneren de Modus virum Neistart, zum Beispill, setzen se op Duerchféierung, oder 1. De permissive Parameter entsprécht dem numeresche Code 0.

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

Dir kënnt och de Modus änneren andeems Dir d'Datei ännert:

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

Den Ënnerscheed mat setenfoce ass datt wann de Betribssystem booten, gëtt de SELinux Modus am Aklang mat dem Wäert vum SELINUX Parameter an der Konfiguratiounsdatei gesat. Zousätzlech ginn d'Ännerunge fir d'Ëmsetzung vun <=> behënnert nëmmen a Kraaft, andeems d' /etc/selinux/config Datei geännert gëtt an no engem Neistart.

Kuckt e kuerze Statusbericht:

[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

Fir SELinux Attributer ze gesinn, benotzen e puer Standard Utilities den -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

Am Verglach zum normalen Output vun ls -l ginn et e puer zousätzlech Felder am folgenden Format:

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

Dat lescht Feld bezeechent eppes wéi eng Sécherheetsklassifikatioun a besteet aus enger Kombinatioun vun zwee Elementer:

  • s0 - Bedeitung, och als Lowlevel-Highlevel Intervall geschriwwen
  • c0, c1… c1023 - Kategorie.

Änneren Zougang Configuratioun

Benotzt semodule fir SELinux Moduler ze lueden, ze addéieren an ze läschen.

[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 - удалить модуль

Éischt Equipe Semanage Login verbënnt den SELinux Benotzer mam Betribssystem Benotzer, déi zweet weist eng Lëscht. Schlussendlech läscht de leschte Kommando mam -r Schalter d'Mapping vun SELinux Benotzer op OS Konten. Eng Erklärung vun der Syntax fir MLS / MCS Range Wäerter ass an der viregter Sektioun.

[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

Equipe semanage Benotzer benotzt fir Mappingen tëscht SELinux Benotzer a Rollen ze managen.

[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

Kommando Parameteren:

  • -a Benotzerdefinéiert Roll Mapping Entrée;
  • -l Lëscht vun passenden Benotzer a Rollen;
  • -d Benotzer Roll Mapping Entrée läschen;
  • -R Lëscht vu Rollen, déi dem Benotzer verbonne sinn;

Dateien, Ports a Boolean Wäerter

All SELinux Modul bitt eng Rei vu Dateitagging Regelen, awer Dir kënnt och Är eege Reegelen addéieren wann néideg. Zum Beispill wëlle mir datt de Webserver Zougangsrechter zum /srv/www Dossier huet.

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

Den éischte Kommando registréiert nei Markéierungsregelen, an déi zweet setzt d'Dateitypen am Aklang mat den aktuellen Regelen zréck, oder éischter setzt.

Och TCP / UDP Ports sinn esou markéiert datt nëmmen déi entspriechend Servicer op hinnen lauschtere kënnen. Zum Beispill, fir datt de Webserver um Port 8080 lauschtert, musst Dir de Kommando ausféieren.

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

Eng bedeitend Unzuel vu SELinux Moduler hunn Parameteren déi boolesch Wäerter huelen. Déi ganz Lëscht vun esou Parameteren kann mat getsebool gesi ginn -a. Dir kënnt boolesch Wäerter mat Setsebool änneren.

[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

Workshop, kritt Zougang zu der Pgadmin-Web Interface

Loosst eis e praktescht Beispill kucken: mir hunn pgadmin7.6-web op RHEL 4 installéiert fir d'PostgreSQL Datebank ze administréieren. Mir sinn e bëssen zu Fouss gaangen Quest mat den Astellungen vun pg_hba.conf, postgresql.conf an config_local.py, Dossier Permissiounen setzen, installéiert déi fehlend Python Moduler vu pip. Alles ass prett, mir starten a kréien 500 Interne Serverfehler.

Linux Sécherheetssystemer

Mir fänken un mat den typesche Verdächtegen, kontrolléiert /var/log/httpd/error_log. Et ginn e puer interessant Entréen do.

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

Zu dësem Zäitpunkt wäerten déi meescht Linux Administrateuren staark verlockt ginn setencorce 0 ze lafen, an dat wäert d'Enn dovun sinn. Éierlech gesot, ech hunn dat déi éischte Kéier gemaach. Dëst ass natierlech och e Wee eraus, awer wäit vum beschten.

Trotz den ëmständlechen Designen kann SELinux userfrëndlech sinn. Installéiert just de setroubleshoot Package a kuckt de Systemprotokoll.

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

Notéiert w.e.g. datt den auditd Service op dës Manéier nei gestart gëtt, an net mat systemctl, trotz der Präsenz vu systemd am OS. Am System Logbuch wäert uginn net nëmmen d'Tatsaach vun Spär, mä och de Grond an Wee fir de Verbuet ze iwwerwannen.

Linux Sécherheetssystemer

Mir féieren dës Kommandoen aus:

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

Mir kontrolléieren den Zougang zu der pgadmin4-Websäit, alles funktionnéiert.

Linux Sécherheetssystemer

Linux Sécherheetssystemer

Source: will.com

Setzt e Commentaire