Курстун студенттери үчүн даярдалган макаланын котормосу
SELinux же Security Enhanced Linux – бул зыяндуу интрузиялардын алдын алуу үчүн АКШнын Улуттук коопсуздук агенттиги (NSA) тарабынан иштелип чыккан жетүүнү башкаруунун өркүндөтүлгөн механизми. Ал учурдагы дискрециялык (же тандалма) моделдин (англисче Discretionary Access Control, DAC), башкача айтканда, окууга, жазууга, аткарууга уруксаттардын үстүнө аргасыз (же милдеттүү) кирүүнү башкаруу моделин (English Mandatory Access Control, MAC) ишке ашырат.
SELinux үч режими бар:
- ишке ашыруу — саясаттын эрежелеринин негизинде кирүүдөн баш тартуу.
- Уруксат берүүчү — саясатты бузган иш-аракеттердин журналын жүргүзүү, ага аткаруу режиминде тыюу салынат.
- өчүрүлгөн — SELinuxту толук өчүрүү.
Демейки боюнча, орнотуулар киргизилген /etc/selinux/config
SELinux режимдерин өзгөртүү
Учурдагы режимди билүү үчүн чуркаңыз
$ getenforce
Уруксат берүүчү режимди өзгөртүү үчүн төмөнкү буйрукту аткарыңыз
$ 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. Логикалык баалуулуктар (которгучтар)
Которгучтар (логикалык) жаңы саясаттарды түзбөстөн, иштөө убагында саясаттын бөлүктөрүн өзгөртүүгө мүмкүндүк берет. Алар SELinux саясаттарын кайра жүктөөсүз же кайра компиляциялоосуз өзгөртүү киргизүүгө мүмкүндүк берет.
мисал
Келгиле, биз FTP окуу/жазуу аркылуу колдонуучунун үй каталогун бөлүшкүбүз келет дейли, жана биз аны мурунтан эле бөлүшкөнбүз, бирок ага кирүүгө аракет кылганыбызда эч нерсе көрбөйбүз. Себеби, SELinux саясаты FTP серверине колдонуучунун үй каталогун окууга жана жазууга жол бербейт. FTP сервери үй каталогдоруна кире алгыдай кылып саясатты өзгөртүшүбүз керек. Келгиле, бул үчүн кандайдыр бир өчүргүчтөр бар-жогун карап көрөлү
$ semanage boolean -l
Бул команда учурдагы абалы (күйгүзүү же өчүрүү) жана сүрөттөлүшү менен жеткиликтүү которгучтарды тизмелейт. Ftp үчүн гана натыйжаларды табуу үчүн grep кошуу менен издөөңүздү тактай аласыз:
$ 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'
Туура коопсуздук контекстти тапкандан кийин контекстти өзгөртүү үчүн семанажды да колдонобуз. /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. Жергиликтүү саясаттарды түзүү
Жогорудагы ыкмалар сизге пайдасыз болуп, audit.log сайтында каталарды (avc/denial) аласыз. Бул болгондо, сиз жергиликтүү саясатты түзүшүңүз керек. Жогоруда айтылгандай, 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
Биздин жергиликтүү саясаттар жүктөлүп алынды жана биз мындан ары audit.log сайтында эч кандай avc же denail албашыбыз керек.
Бул менин SELinuxту түшүнүүгө жардам берүү аракетим болду. Бул макаланы окугандан кийин SELinux менен өзүңүздү ыңгайлуу сезесиз деп ишенем.
Source: www.habr.com