Линукс дээрх файлын зөвшөөрөл

Сайн уу. Бид ажилдаа идэвхтэй орж байгаа бөгөөд XNUMX-р сард олон хүчирхэг хөөргөлтүүдийг бэлдэж байна. Үүнээс гадна хүн бүрийн дуртай хичээлийн шинэ урсгалын элсэлтээ зарлалаа. "Linux администратор". Нээлтийн өмнө бид хэрэгцээтэй материалын орчуулгыг хуваалцдаг уламжлалтай.

Линукс дээрх файлын зөвшөөрөл

Файлын зөвшөөрөл нь SUID гүйцэтгэгдэх файлуудын аюулгүй хувилбарыг санал болгодог боловч эхэндээ бага зэрэг ойлгомжгүй мэт санагдаж магадгүй юм.


Хоёртын файл гэдгийг бид бүгд мэднэ ӨМНӨД нь аюулгүй байдлын үүднээс буруу шийдвэр. Аз болоход, хэрэв таны програм хязгаарлагдмал эрх шаарддаг бол илүү үр дүнтэй арга бий файлын зөвшөөрөл.

Хэрэв та дээрх нийтлэлийг дэлгэрэнгүй уншихаас зайлсхийхийг хүсвэл би танд бага зэрэг цаг хэмнэх болно: Үндсэндээ файлын зөвшөөрөл нь root хэлбэрээр ажилладаг процессуудыг зөвшөөрдөг тул тодорхой боломжуудыг хадгалахын тулд ямар нэгэн зүйл хийхийг зөвшөөрдөг, хязгаарлагдмал. энэ жагсаалтТэд давуу эрхээ хасч, эрхгүй хэрэглэгч удирдаж байх үед. Энэ нь хэрвээ халдагчид буферийн хэт ачаалал эсвэл бусад мөлжлөгийг ашиглан процессыг эвдэж чадвал процесст шаардлагатай хамгийн бага эрхээс өөр давуу талыг ашиглах боломжгүй болно гэсэн үг юм.

Зөвшөөрөл нь ихэвчлэн root хэлбэрээр ажилладаг үйлчилгээнд маш сайн байдаг, гэхдээ тушаалын мөрийн хэрэгслүүдийн талаар юу хэлэх вэ? Аз болоход, танд тохирох хэрэгслүүдийг суулгасан тохиолдолд үүнийг бас дэмждэг. Хэрэв та Ubuntu ашиглаж байгаа бол багц хэрэгтэй болно libcap2-bin. Та мөн хуучны бус цөмийг ажиллуулах хэрэгтэй болно (хувилбараас 2.6.24).

Эдгээр функцууд нь зөвшөөрлийг SUID битийн тохиргоотой адил гүйцэтгэх боломжтой файлуудтай холбох боломжийг олгодог, гэхдээ зөвхөн тусгай багц зөвшөөрлийн хувьд. Хэрэгсэл setcap файлд зөвшөөрөл нэмэх, устгахад ашигладаг.

Эхний алхам бол шаардлагатай зөвшөөрлөө сонгох явдал юм. Энэ нийтлэлд зориулж сүлжээний оношилгооны хэрэгсэл байдаг гэж би бодож байна tracewalkашиглах боломжтой байх ёстой түүхий залгуурууд. Энэ нь ихэвчлэн програмыг root хэлбэрээр ажиллуулахыг шаарддаг боловч үзэх үед жагсаалт Зөвхөн зөвшөөрөл л шаардлагатай болж байна CAP_NET_RAW.

Та хоёртын файл байрладаг лавлахад байгаа гэж үзвэл tracewalk, та энэ зөвшөөрлийг дараах байдлаар нэмж болно:

sudo setcap cap_net_raw=eip tracewalk

Дагаврыг одоохондоо үл тоомсорло =eip Шийдвэрлэхийн тулд би энэ талаар хэдэн секундын дараа ярих болно. Зөвшөөрлийн нэр жижиг үсгээр бичигдсэн болохыг анхаарна уу. Та одоо зөвшөөрлөө зөв тохируулсан эсэхээ шалгах боломжтой:

setcap -v cap_new_raw=eip tracewalk

Эсвэл та өгөгдсөн гүйцэтгэх файлд тохируулсан бүх зөвшөөрлийг жагсааж болно:

getcap tracewalk

Лавлагааны хувьд та дараах байдлаар гүйцэтгэгдэх файлаас бүх зөвшөөрлийг устгаж болно:

setcap -r tracewalk

Энэ үед та гүйцэтгэх файлыг эрхгүй хэрэглэгчийн хувьд ажиллуулах боломжтой байх ёстой бөгөөд энэ нь raw залгууруудтай ажиллах чадвартай байх ёстой, гэхдээ үндсэн хэрэглэгчдэд байгаа бусад давуу эрхгүй байх ёстой.

Тэгвэл энэ хачирхалтай дагавар юу гэсэн үг вэ? =eip? Энэ нь зөвшөөрлийн мөн чанарын талаар тодорхой ойлголттой байхыг шаарддаг. Процесс бүр гурван багц зөвшөөрөлтэй - үр дүнтэй, удамшлын болон зөвшөөрөгдсөн:

  • Үр дүнтэй Зөвшөөрөл нь үйл явц нь юу хийж болохыг тодорхойлдог зөвшөөрөл юм. Жишээлбэл, хэрэв энэ нь түүхий залгууруудтай харьцаж чадахгүй CAP_NET_RAW үр дүнтэй багцад ороогүй байна.
  • Боломжтой Зөвшөөрөл нь процесс нь зохих дуудлагыг ашиглан хүссэн тохиолдолд авахыг зөвшөөрдөг зөвшөөрөл юм. Тэд тусгайлан зөвшөөрөл хүсэхээр бичигдээгүй л бол процессыг ямар нэгэн зүйл хийхээс сэргийлдэг. Энэ нь зөвхөн шаардлагатай үед л чухал зөвшөөрлийг үр дүнтэй багцад нэмэхийн тулд процессуудыг бичих боломжийг олгодог.
  • Өв залгамжлах Зөвшөөрөл нь үүсгэсэн хүүхдийн процессын хүртээмжтэй багцад өвлөгдөж болох зөвшөөрөл юм. Мэс заслын үед fork() буюу clone() Хүүхдийн процесс нь тухайн үед ижил гүйцэтгэгдэх файлыг ажиллуулж байгаа тул эх процессын зөвшөөрлийн хуулбарыг үргэлж өгдөг. Удамшдаг олонлогийг хэзээ ашигладаг exec() (эсвэл түүнтэй адилтгах) нь гүйцэтгэгдэх файлыг өөр файлаар солихын тулд дуудагддаг. Энэ үед шинэ процесст ашиглах боломжтой багцыг авахын тулд процессын боломжтой багцыг удамшлын багцаар далдалсан болно.

Тиймээс хэрэгсэл setcap өгөгдсөн гүйцэтгэгдэх файлд эдгээр гурван багцын зөвшөөрлийг тусад нь нэмэх боломжийг бидэнд олгодог. Файлын зөвшөөрлийн хувьд бүлгүүдийн утгыг арай өөрөөр тайлбарладаг болохыг анхаарна уу:

  • Боломжтой файлын зөвшөөрөл гэдэг нь түүнийг дуудсан эх процесст байхгүй байсан ч гүйцэтгэгдэх файлд үргэлж бэлэн байдаг зөвшөөрлүүд юм. Тэднийг "албадан" зөвшөөрөл гэж нэрлэдэг байсан.
  • Өв залгамжлагдсан файлын зөвшөөрөл нь дуудлагын процессын зөвшөөрлийг устгахад ашиглаж болох нэмэлт маскыг тодорхойлдог. Эдгээр нь дуудлагын процессын удамшсан багцаас гадна үйлчилдэг тул зөвшөөрөл нь зөвхөн хоёр багцад байгаа тохиолдолд л өвлөгдөнө.
  • Үр дүнтэй файлын зөвшөөрлүүд нь үнэндээ багц биш, зөвхөн нэг бит бөгөөд хэрэв тохируулсан бол энэ нь боломжтой багцыг бүхэлд нь шинэ процессын үр дүнтэй багцад хуулж авна гэсэн үг юм. Үүнийг тусгайлан хүсэлт гаргахаар бичээгүй процессуудад зөвшөөрөл нэмэхэд ашиглаж болно. Энэ нь нэг бит учраас хэрэв та үүнийг ямар нэгэн зөвшөөрөлд тохируулсан бол бүх зөвшөөрөлд тохируулсан байх ёстой. Та үүнийг хуучин бит гэж үзэж болно, учир нь энэ нь тэдгээрийг дэмждэггүй програмуудад зөвшөөрлийг ашиглахыг зөвшөөрдөг.

-р дамжуулан зөвшөөрлийг зааж өгөхдөө setcap гурван үсэг e, i и p холбоотой үр дүнтэй, удамшдаг, хүртээмжтэй тус тус тохируулна. Тиймээс, өмнөх техникийн үзүүлэлтүүд:

sudo setcap cap_net_raw=eip tracewalk

... тогтоол болохыг харуулж байна CAP_NET_RAW боломжтой болон удамшдаг олонлогт нэмэгдэх ба үр дүнтэй битийг мөн тохируулах ёстой. Энэ нь файл дээр өмнө нь тохируулсан бүх зөвшөөрлийг хүчингүй болгоно. Олон зөвшөөрлийг нэгэн зэрэг тохируулахын тулд таслалаар тусгаарласан жагсаалтыг ашиглана уу:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Зөвшөөрлийн гарын авлага Энэ бүгдийг илүү дэлгэрэнгүй авч үзсэн боловч энэ нийтлэл юу болж байгааг бага зэрэг тайлсан гэж найдаж байна. Цөөн хэдэн анхааруулга, заль мэх л үлдлээ.

Нэгдүгээрт, файлын чадварууд нь симболын холбоосуудтай ажиллахгүй - та тэдгээрийг хоёртын файлд (жишээ нь, симболын зорилт) ашиглах хэрэгтэй.

Хоёрдугаарт, тэд тайлбарласан скрипттэй ажилладаггүй. Жишээлбэл, хэрэв танд зөвшөөрөл олгохыг хүсч буй Python скрипт байгаа бол та үүнийг Python орчуулагч руу өөрөө оноох ёстой. Мэдээжийн хэрэг, энэ нь аюулгүй байдлын асуудал байж болзошгүй, учир нь тэр орчуулагчаар гүйцэтгэсэн бүх скриптүүд заасан зөвшөөрөлтэй байх болно, гэхдээ энэ нь үүнийг SUID болгохоос хамаагүй дээр хэвээр байна. Хамгийн түгээмэл шийдвэрлэх арга бол шаардлагатай үйлдлүүдийг хийж, скриптээс дуудаж чадах С хэл дээр эсвэл түүнтэй адилтгах программыг тусад нь бичих явдал юм. Энэ нь хоёртын файлыг ашигладаг Wireshark-ын ашигладаг аргатай төстэй юм /usr/bin/dumpcap давуу эрхтэй үйлдлүүдийг гүйцэтгэх:

$ getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

Гуравдугаарт, хэрэв та орчны хувьсагчийг ашиглавал файлын зөвшөөрлийг идэвхгүй болгоно LD_LIBRARY_PATH аюулгүй байдлын тодорхой шалтгаанаар(1). Үүнтэй адил зүйл хамаарна LD_PRELOAD, Миний мэдэж байгаагаар.

1. Халдагчид стандарт номын сангуудын аль нэгийг нь сольж, ашиглах боломжтой учраас LD_LIBRARY_PATHөөрийн номын сангаа системийн нэгээс илүүтэйгээр дуудахыг албадах, тиймээс дуудаж буй програмтай ижил эрх бүхий өөрийн дурын кодтой байх.

Тэгээд л болоо. Хичээлийн хөтөлбөрийн талаарх дэлгэрэнгүй мэдээллийг эндээс авах боломжтой 24-р сарын XNUMX-нд болох вэбинар.

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

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