SELinux үчүн башталгыч үчүн колдонмо

SELinux үчүн башталгыч үчүн колдонмо

Курстун студенттери үчүн даярдалган макаланын котормосу "Linux коопсуздугу"

SELinux же Security Enhanced Linux – бул зыяндуу интрузиялардын алдын алуу үчүн АКШнын Улуттук коопсуздук агенттиги (NSA) тарабынан иштелип чыккан жетүүнү башкаруунун өркүндөтүлгөн механизми. Ал учурдагы дискрециялык (же тандалма) моделдин (англисче Discretionary Access Control, DAC), башкача айтканда, окууга, жазууга, аткарууга уруксаттардын үстүнө аргасыз (же милдеттүү) кирүүнү башкаруу моделин (English Mandatory Access Control, MAC) ишке ашырат.

SELinux үч режими бар:

  1. ишке ашыруу — саясаттын эрежелеринин негизинде кирүүдөн баш тартуу.
  2. Уруксат берүүчү — саясатты бузган иш-аракеттердин журналын жүргүзүү, ага аткаруу режиминде тыюу салынат.
  3. өчүрүлгөн — 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

Комментарий кошуу