SELinux-ийн анхан шатны гарын авлага

SELinux-ийн анхан шатны гарын авлага

Курсын оюутнуудад зориулан бэлтгэсэн нийтлэлийн орчуулга "Linux аюулгүй байдал"

SELinux буюу Security Enhanced Linux нь АНУ-ын Үндэсний аюулгүй байдлын агентлагаас (NSA) хортой халдлагаас урьдчилан сэргийлэх зорилгоор боловсруулсан хандалтын хяналтын сайжруулсан механизм юм. Энэ нь албадан (эсвэл заавал) хандалтын хяналтын загварыг (Англи хэлний Mandatory Access Control, MAC) одоо байгаа үзэмжтэй (эсвэл сонгомол) загвар (Англи хэлний Discretionary Access Control, DAC) дээр, өөрөөр хэлбэл унших, бичих, гүйцэтгэх зөвшөөрлийг хэрэгжүүлдэг.

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. Логик утгууд (шилжүүлэгч)

Свичүүд (boolean) нь шинэ бодлого үүсгэх шаардлагагүйгээр ажиллах үед бодлогын зарим хэсгийг өөрчлөх боломжийг олгодог. Эдгээр нь танд 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

Контекстийг семанаж ашиглан өөрчилсний дараа restorecon команд нь файл болон лавлахуудын үндсэн контекстийг ачаална. Манай вэб сервер одоо фолдероос файл унших боломжтой болно /home/dan/htmlУчир нь энэ фолдерын хамгаалалтын контекстийг өөрчилсөн httpd_sys_content_t.

3. Орон нутгийн бодлогыг бий болгох

Дээрх аргууд танд ашиггүй бөгөөд audit.log-д алдаа (avc/denial) гарч болзошгүй. Ийм зүйл тохиолдоход та орон нутгийн бодлогыг бий болгох хэрэгтэй. Та дээр дурдсанчлан audit2why ашиглан бүх алдааг олох боломжтой.

Та алдааг арилгахын тулд орон нутгийн бодлогыг үүсгэж болно. Жишээлбэл, бид httpd (apache) эсвэл smbd (samba) -тай холбоотой алдаа гаргаж, бид алдааг олж, тэдгээрт зориулсан бодлогыг үүсгэдэг:

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-д илүү таатай байх болно гэж найдаж байна.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх