Кіраўніцтва для пачаткоўцаў па SELinux

Кіраўніцтва для пачаткоўцаў па SELinux

Пераклад артыкула падрыхтаваны для студэнтаў курса "Бяспека Linux"

SELinux або Security Enhanced Linux – гэта палепшаны механізм кіравання доступам, распрацаваны Агенцтвам нацыянальнай бяспекі ЗША (АНБ ЗША) для прадухілення зламысных уварванняў. Ён рэалізуе прымусовую (або мандатную) мадэль кіравання доступам (англ. Mandatory Access Control, MAC) па-над існуючай дыскрэцыйнай (або выбарчай) мадэлі (англ. Discretionary Access Control, DAC), гэта значыць дазволаў на чытанне, запіс, выкананне.

У SELinux ёсць тры рэжыму:

  1. забеспячэнне - забарона доступу на падставе правілаў палітыкі.
  2. Дазваляльны - вядзенне лога дзеянняў, якія парушаюць палітыку, якія ў рэжыме enforcing былі б забароненыя.
  3. Інвалід - поўнае адключэнне SELinux.

Па змаўчанні налады знаходзяцца ў /etc/selinux/config

Змяненне рэжымаў SELinux

Каб даведацца пра бягучы рэжым запусціце

$ getenforce

Для змены рэжыму на permissive запусціце наступную каманду

$ setenforce 0

або, для змены рэжыму з які дазваляе на выкананне, выканайце

$ setenforce 1

Калі вам трэба цалкам адключыць SELinux, тое гэта можна зрабіць толькі праз файл канфігурацыі

$ vi /etc/selinux/config

Для адключэння зменіце параметр SELINUX наступным чынам:

SELINUX=disabled

Настройка SELinux

Кожны файл і працэс пазначаецца кантэкстам SELinux, у якім утрымоўваецца дадатковая інфармацыя, такая як карыстач, роля, тып і г.д. Калі вы ўпершыню ўключаеце SELinux, то спачатку трэба наладзіць кантэкст і пазнакі. Працэс прызначэння пазнак і кантэксту вядомы як маркіроўка. Каб пачаць маркіроўку, у файле канфігурацыі зменім рэжым на які дазваляе.

$ vi /etc/selinux/config
SELINUX=permissive

Пасля ўстаноўкі рэжыму які дазваляе, створым у корані пусты схаваны файл з імем autorelabel

$ touch /.autorelabel

і перазагрузім кампутар

$ init 6

Заўвага: мы выкарыстоўваем рэжым які дазваляе для маркіроўкі, паколькі выкарыстанне рэжыму выкананне можа прывесці да краху сістэмы падчас перазагрузкі.

Не хвалюйцеся, калі загрузка затрымаецца на нейкім файле, маркіроўка займае некаторы час. Пасля завяршэння маркіроўкі і загрузкі вашай сістэмы вы можаце перайсці да файла канфігурацыі і ўсталяваць рэжым выкананне, а таксама запусціць:

$ setenforce 1

Цяпер вы паспяхова ўключылі SELinux на сваім кампутары.

Маніторым логі

Магчыма, у вас узніклі нейкія памылкі падчас маркіроўкі ці падчас працы сістэмы. Каб праверыць, ці працуе ваш SELinux правільна і не ці блакуе ён доступ да якога-небудзь порта, з дадаткам і т. д. трэба паглядзець логі. Лог SELinux знаходзіцца ў /var/log/audit/audit.logале вам не трэба чытаць яго цалкам, каб знайсці памылкі. Можна выкарыстоўваць утыліту audit2why для пошуку памылак. Запусціце наступную каманду:

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

У выніку вы атрымаеце спіс памылак. Калі памылак у логу не было, то ніякіх паведамленняў адлюстроўвацца не будзе.

Настройка палітыкі SELinux

Палітыка SELinux - гэта набор правіл, якімі кіруецца механізм бяспекі SELinux. Палітыка вызначае набор правіл для канкрэтнага асяроддзя. Цяпер мы вывучым як наладжваць палітыкі, каб дазволіць доступ да забароненых сэрвісаў.

1. Лагічныя значэння (перамыкачы)

Пераключальнікі (booleans) дазваляюць змяняць часткі палітыкі падчас працы, без неабходнасці стварэння новых палітык. Яны дазваляюць уносіць змены без перазагрузкі ці перакампіляванні палітык SELinux.

Прыклад
Выкажам здагадку, мы жадаем падаць агульны доступ да хатняга каталога карыстача па FTP на чытанне і запіс, і мы ўжо расшарылі яго, але пры спробе доступу мы нічога не бачым. Гэта злучана з тым, што палітыка SELinux забараняе FTP-серверу чытаць і пісаць у хатнім каталогу карыстача. Нам трэба змяніць палітыку, каб FTP-сервер мог звяртацца да хатніх каталогаў. Паглядзім, ці ёсць для гэтага якія-небудзь перамыкачы, выканаўшы

$ semanage boolean -l

Гэтая каманда выдасць спіс даступных перамыкачоў з іх бягучым станам (уключана/on ці выключана/off) і апісаннем. Вы можаце ўдакладніць пошук, дадаўшы grep, каб знайсці вынікі, якія адносяцца толькі з ftp:

$ semanage boolean -l | grep ftp

і знойдзеце наступнае

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

Гэты перамыкач выключаны, таму мы ўключым яго з дапамогай setsebool $ setsebool ftp_home_dir on

Цяпер наш ftp-дэман зможа атрымаць доступ да хатняга каталога карыстальніка.
Заўвага: вы таксама можаце атрымаць спіс даступных перамыкачоў без апісання, выканаўшы getsebool -a

2. Пазнакі і кантэкст

Гэта найболей распаўсюджаны спосаб рэалізацыі палітыкі SELinux. Кожны файл, тэчка, працэс і порт пазначаюцца кантэкстам SELinux:

  • Для файлаў і тэчак пазнакі захоўваюцца як пашыраныя атрыбуты ў файлавай сістэме і могуць быць прагледжаныя наступнай камандай:
    $ ls -Z /etc/httpd
  • Для працэсаў і партоў маркіроўкай кіруе ядро, і можна паглядзець гэтыя пазнакі наступным чынам:

працэс

$ ps –auxZ | grep httpd

порт

$ netstat -anpZ | grep httpd

Прыклад
Цяпер давайце разгледзім прыклад, каб лепш зразумець пазнакі і кантэкст. Дапушчальны, у нас ёсць вэб-сервер, які замест каталога /var/www/html/ использует /home/dan/html/. SELinux палічыць гэта парушэннем палітыкі, і вы не зможаце праглядаць вашыя вэб-старонкі. Гэта таму, што мы не ўсталявалі кантэкст бяспекі, злучаны з HTML-файламі. Для прагляду кантэксту бяспекі па змаўчанні выкарыстоўвайце наступную каманду:

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

Тут мы атрымалі httpd_sys_content_t у якасці кантэксту для html-файлаў. Нам трэба ўсталяваць гэты кантэкст бяспекі для нашага бягучага каталога, які зараз мае наступны кантэкст:

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

Альтэрнатыўная каманда для праверкі кантэксту бяспекі файла ці каталога:

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

Мы таксама будзем выкарыстоўваць semanage для змены кантэксту, пасля таго як знойдзем правільны кантэкст бяспекі. Каб змяніць кантэкст /home/dan/html, выканайце наступныя каманды:

$ 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

Пасля таго, як кантэкст зменены з дапамогай semanage, каманда restorecon загрузіць кантэкст па змаўчанні для файлаў і каталогаў. Наш вэб-сервер зараз зможа чытаць файлы з тэчкі /home/dan/html, паколькі кантэкст бяспекі для гэтай тэчкі быў зменены на httpd_sys_content_t.

3. Стварэнне лакальных палітык

Могуць узнікнуць сітуацыі, калі вышэйпаказаныя метады бескарысныя для вас, і вы атрымліваеце памылкі (avc/denial) у audit.log. Калі такое адбываецца, тое трэба стварыць лакальную палітыку (Local policy). Усе памылкі вы можаце знайсці з дапамогай audit2why, як было апісана вышэй.

Для ўхілення памылак можна стварыць лакальную палітыку. Напрыклад, мы атрымліваем памылку, звязаную з httpd (apache) або smbd (samba), мы grep'аем памылкі і ствараем для іх палітыку:

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

Тут http_policy и smb_policy - Гэта назвы лакальных палітык, якія мы стварылі. Цяпер нам трэба загрузіць гэтыя створаныя лакальныя палітыкі ў бягучую палітыку SELinux. Гэта можна зрабіць наступным чынам:

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

Нашы лакальныя палітыкі былі загружаныя, і мы не павінны больш атрымліваць ніякіх avc ці denail у audit.log.

Гэта была мая спроба дапамагчы вам зразумець SELinux. Я спадзяюся, што пасля прачытання гэтага артыкула вы будзеце адчуваць сябе з SELinux больш камфортна.

Крыніца: habr.com

Дадаць каментар