Овде ћете добити одговоре на важна питања о животу, универзуму и свему у Линук-у уз побољшану безбедност.
„Важна истина да ствари нису увек онакве какве изгледају опште је позната...“
-Даглас Адамс, Аутостоперски водич кроз галаксију
Сигурност. Повећана поузданост. Преписка. Полици. Четири коњаника апокалипсе сисадмин. Поред наших свакодневних задатака – надгледање, прављење резервних копија, имплементација, конфигурисање, ажурирање, итд. – такође смо одговорни за безбедност наших система. Чак и оне системе у којима добављач треће стране препоручује да онемогућимо побољшану безбедност. Осећа се као посао Етхан Хунт из „Мисија: немогућа“.
Суочени са овом дилемом, неки систем администратори одлучују да узму плава пилула, јер мисле да никада неће знати одговор на велико питање живота, универзума и свега тога. А као што сви знамо, тај одговор је 42.
У духу Аутостоперског водича кроз галаксију, ево 42 одговора на важна питања о контроли и употреби. СЕЛинук на вашим системима.
1. СЕЛинук је систем присилне контроле приступа, што значи да сваки процес има ознаку. Свака датотека, директоријум и системски објекат такође имају ознаке. Правила политике контролишу приступ између означених процеса и објеката. Кернел спроводи ова правила.
2. Два најважнија концепта су: Означавање — ознаке (датотеке, процеси, портови, итд.) и Спровођење типа (који изолује процесе један од другог на основу типова).
4. Сврха обезбеђивања безбедности на више нивоа (Сигурност на више нивоа - МЛС) је управљање процесима (доменима) на основу нивоа безбедности података које ће користити. На пример, тајни процес не може да прочита строго поверљиве податке.
5. Обезбеђивање безбедности у више категорија (Вишекатегоријска безбедност - МЦС) штити сличне процесе једни од других (на пример, виртуелне машине, ОпенСхифт машине, СЕЛинук сандбокови, контејнери, итд.).
6. Опције кернела за промену режима СЕЛинук при покретању:
autorelabel=1 → доводи до тога да систем покреће поновно означавање
selinux=0 → кернел не учитава СЕЛинук инфраструктуру
enforcing=0 → учитавање у дозвољеном режиму
7. Ако треба да поново означите цео систем:
# touch /.autorelabel
#reboot
Ако системско означавање садржи велики број грешака, можда ћете морати да покренете систем у дозвољеном режиму да би примедба успела.
8. Да бисте проверили да ли је СЕЛинук омогућен: # getenforce
9. Да бисте привремено омогућили/онемогућили СЕЛинук: # setenforce [1|0]
КСНУМКС. Провера СЕЛинук статуса: # sestatus
КСНУМКС. Конфигурациони фајл: /etc/selinux/config
КСНУМКС. Како функционише СЕЛинук? Ево примера означавања за Апацхе веб сервер:
Скрипта за покретање: /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
КСНУМКС. СЕЛинук смернице/апликације могу да садрже грешке, укључујући:
Необичне путање кода
Конфигурације
Преусмеравање стандардног излаза
Дескриптор датотеке цури
Извршна меморија
Лоше изграђене библиотеке
Отворите карте (немојте слати извештај Бугзили; Бугзила нема СЛА).
КСНУМКС.Ваше информације могу бити угроженеако имате ограничене домене који покушавају да:
КСНУМКС. Ако дође до СЕЛинук грешке, користите евиденцију 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
Уверите се да СЕЛинук ради у дозвољеном режиму: # 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
КСНУМКС. Да бисте покренули команду или скрипту у одређеној датотеци, улози и корисничком контексту: