СЕЛинук цхеат схеет за систем администраторе: 42 одговора на важна питања

Превод чланка је припремљен посебно за студенте курса "Линук администратор".

СЕЛинук цхеат схеет за систем администраторе: 42 одговора на важна питања

Овде ћете добити одговоре на важна питања о животу, универзуму и свему у Линук-у уз побољшану безбедност.

„Важна истина да ствари нису увек онакве какве изгледају опште је позната...“

-Даглас Адамс, Аутостоперски водич кроз галаксију

Сигурност. Повећана поузданост. Преписка. Полици. Четири коњаника апокалипсе сисадмин. Поред наших свакодневних задатака – надгледање, прављење резервних копија, имплементација, конфигурисање, ажурирање, итд. – такође смо одговорни за безбедност наших система. Чак и оне системе у којима добављач треће стране препоручује да онемогућимо побољшану безбедност. Осећа се као посао Етхан Хунт из „Мисија: немогућа“.

Суочени са овом дилемом, неки систем администратори одлучују да узму плава пилула, јер мисле да никада неће знати одговор на велико питање живота, универзума и свега тога. А као што сви знамо, тај одговор је 42.

У духу Аутостоперског водича кроз галаксију, ево 42 одговора на важна питања о контроли и употреби. СЕЛинук на вашим системима.

1. СЕЛинук је систем присилне контроле приступа, што значи да сваки процес има ознаку. Свака датотека, директоријум и системски објекат такође имају ознаке. Правила политике контролишу приступ између означених процеса и објеката. Кернел спроводи ова правила.

2. Два најважнија концепта су: Означавање — ознаке (датотеке, процеси, портови, итд.) и Спровођење типа (који изолује процесе један од другог на основу типова).

3. Исправан формат етикете user:role:type:level (опционо).

4. Сврха обезбеђивања безбедности на више нивоа (Сигурност на више нивоа - МЛС) је управљање процесима (доменима) на основу нивоа безбедности података које ће користити. На пример, тајни процес не може да прочита строго поверљиве податке.

5. Обезбеђивање безбедности у више категорија (Вишекатегоријска безбедност - МЦС) штити сличне процесе једни од других (на пример, виртуелне машине, ОпенСхифт машине, СЕЛинук сандбокови, контејнери, итд.).

6. Опције кернела за промену режима СЕЛинук при покретању:

  • autorelabel=1 → доводи до тога да систем покреће поновно означавање
  • selinux=0 → кернел не учитава СЕЛинук инфраструктуру
  • enforcing=0 → учитавање у дозвољеном режиму

7. Ако треба да поново означите цео систем:

# touch /.autorelabel
#reboot

Ако системско означавање садржи велики број грешака, можда ћете морати да покренете систем у дозвољеном режиму да би примедба успела.

8. Да бисте проверили да ли је СЕЛинук омогућен: # getenforce

9. Да бисте привремено омогућили/онемогућили СЕЛинук: # setenforce [1|0]

КСНУМКС. Провера СЕЛинук статуса: # sestatus

КСНУМКС. Конфигурациони фајл: /etc/selinux/config

КСНУМКС. Како функционише СЕЛинук? Ево примера означавања за Апацхе веб сервер:

  • Бинарно представљање: /usr/sbin/httpd→httpd_exec_t
  • Конфигурациони директоријум: /etc/httpd→httpd_config_t
  • Директоријум датотека евиденције: /var/log/httpd → httpd_log_t
  • Директоријум садржаја: /var/www/html → httpd_sys_content_t
  • Скрипта за покретање: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Процес: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Портови: 80/tcp, 443/tcp → httpd_t, http_port_t

Процес који се покреће у контексту httpd_t, може да комуницира са означеним објектом httpd_something_t.

КСНУМКС. Многе команде прихватају аргумент -Z да видите, креирате и промените контекст:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Контексти се успостављају када се датотеке креирају на основу контекста њиховог родитељског директоријума (са неким изузецима). РПМ-ови могу успоставити контексте као током инсталације.

КСНУМКС. Постоје четири главна узрока СЕЛинук грешака, који су детаљније описани у тачкама 15-21 у наставку:

  • Проблеми са етикетирањем
  • Због нечега што СЕЛинук треба да зна
  • Грешка у СЕЛинук политици/апликацији
  • Ваше информације могу бити угрожене

КСНУМКС. Проблем са етикетирањем: ако су ваше датотеке у /srv/myweb су погрешно означени, приступ може бити одбијен. Ево неколико начина да ово поправите:

  • Ако знате етикету:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Ако знате датотеку са еквивалентним ознакама:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Враћање контекста (за оба случаја):
    # restorecon -vR /srv/myweb

КСНУМКС. Проблем са етикетирањем: ако преместите датотеку уместо да је копирате, датотека ће задржати свој оригинални контекст. Да бисте решили овај проблем:

  • Промените команду контекста са ознаком:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Промените команду контекста са ознаком везе:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Вратите контекст (за оба случаја): # restorecon -vR /var/www/html/

КСНУМКС. Ако СЕЛинук који треба да знатеда ХТТПД слуша на порту 8585, реците СЕЛинук-у:

# semanage port -a -t http_port_t -p tcp 8585

КСНУМКС. СЕЛинук који треба да знате Логичке вредности које дозвољавају да се делови СЕЛинук политике мењају током извршавања без знања да се СЕЛинук политика замењује. На пример, ако желите да хттпд шаље е-пошту, унесите: # setsebool -P httpd_can_sendmail 1

КСНУМКС. СЕЛинук који треба да знате логичке вредности за омогућавање/онемогућавање СЕЛинук подешавања:

  • Да бисте видели све логичке вредности: # getsebool -a
  • Да бисте видели опис сваког од њих: # semanage boolean -l
  • Да бисте подесили логичку вредност: # setsebool [_boolean_] [1|0]
  • За трајну инсталацију додајте -P. На пример: # setsebool httpd_enable_ftp_server 1 -P

КСНУМКС. СЕЛинук смернице/апликације могу да садрже грешке, укључујући:

  • Необичне путање кода
  • Конфигурације
  • Преусмеравање стандардног излаза
  • Дескриптор датотеке цури
  • Извршна меморија
  • Лоше изграђене библиотеке

Отворите карте (немојте слати извештај Бугзили; Бугзила нема СЛА).

КСНУМКС. Ваше информације могу бити угроженеако имате ограничене домене који покушавају да:

  • Учитајте модуле кернела
  • Онемогућите принудни режим СЕЛинук
  • Писати etc_t/shadow_t
  • Промените правила иптаблеса

КСНУМКС. СЕЛинук алати за развој модула политике:

# yum -y install setroubleshoot setroubleshoot-server

Поново покрените или поново покрените auditd након инсталације.

КСНУМКС. Користите

journalctl

да прикажете листу свих евиденција повезаних са setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

КСНУМКС. Користите journalctl да наведете све евиденције повезане са одређеном СЕЛинук ознаком. На пример:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

КСНУМКС. Ако дође до СЕЛинук грешке, користите евиденцију setroubleshoot нудећи неколико могућих решења.
На пример, од journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

КСНУМКС. Евидентирање: СЕЛинук бележи информације на много места:

  • / вар / лог / мессагес
  • /вар/лог/аудит/аудит.лог
  • /вар/либ/сетроублесхоот/сетроублесхоот_датабасе.кмл

КСНУМКС. Евидентирање: тражење СЕЛинук грешака у евиденцији ревизије:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

КСНУМКС. Да бисте пронашли СЕЛинук Аццесс Вецтор Цацхе (АВЦ) поруке за одређену услугу:

# ausearch -m avc -c httpd

КСНУМКС. Корисност audit2allow прикупља информације из евиденције забрањених операција, а затим генерише правила политике дозвола за СЕЛинук. На пример:

  • Да бисте направили човеку читљив опис зашто је приступ одбијен: # audit2allow -w -a
  • Да бисте видели правило примене типа које дозвољава одбијен приступ: # audit2allow -a
  • Да бисте креирали прилагођени модул: # audit2allow -a -M mypolicy
  • Опција -M креира датотеку за спровођење типа (.те) са наведеним именом и компајлира правило у пакет смерница (.пп): mypolicy.pp mypolicy.te
  • Да бисте инсталирали прилагођени модул: # semodule -i mypolicy.pp

КСНУМКС. Да бисте конфигурисали посебан процес (домен) да ради у дозвољеном режиму: # semanage permissive -a httpd_t

КСНУМКС. Ако више не желите да домен буде дозвољен: # semanage permissive -d httpd_t

КСНУМКС. Да бисте онемогућили све дозвољене домене: # semodule -d permissivedomains

КСНУМКС. Омогућавање смерница МЛС СЕЛинук: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Уверите се да СЕЛинук ради у дозвољеном режиму: # setenforce 0
Користите скрипту fixfilesда бисте били сигурни да су датотеке поново означене при следећем поновном покретању:

# fixfiles -F onboot # reboot

КСНУМКС. Креирајте корисника са одређеним МЛС опсегом: # useradd -Z staff_u john

Користећи команду useradd, мапирати новог корисника у постојећег корисника СЕЛинук (у овом случају, staff_u).

КСНУМКС. Да бисте видели мапирање између СЕЛинук и Линук корисника: # semanage login -l

КСНУМКС. Дефинишите одређени опсег за корисника: # semanage login --modify --range s2:c100 john

КСНУМКС. Да бисте исправили ознаку кућног именика корисника (ако је потребно): # chcon -R -l s2:c100 /home/john

КСНУМКС. Да бисте видели тренутне категорије: # chcat -L

КСНУМКС. Да бисте променили категорије или почели да креирате сопствене, уредите датотеку на следећи начин:

/etc/selinux/_<selinuxtype>_/setrans.conf

КСНУМКС. Да бисте покренули команду или скрипту у одређеној датотеци, улози и корисничком контексту:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t контекст датотеке
  • -r контекст улога
  • -u кориснички контекст

КСНУМКС. Контејнери који раде са онемогућеним СЕЛинуком:

  • Подман: # podman run --security-opt label=disable …
  • Доцкер: # docker run --security-opt label=disable …

КСНУМКС. Ако треба да дате контејнеру потпуни приступ систему:

  • Подман: # podman run --privileged …
  • Доцкер: # docker run --privileged …

А сада већ знате одговор. Зато вас молим: не паничите и омогућите СЕЛинук.

Референце:

Извор: ввв.хабр.цом

Додај коментар