Linuxda fayl ruxsatnomalari

Hammaga salom. Biz faol ishlayapmiz va yanvar oyida ko'plab kuchli ishga tushirishlarni tayyorlamoqdamiz. Boshqalar qatorida, barchaning sevimli kursining yangi oqimiga ro'yxatga olish e'lon qilindi. "Linux administratori". Ishga tushirish arafasida biz an'anaviy ravishda foydali materiallarning tarjimalarini baham ko'ramiz.

Linuxda fayl ruxsatnomalari

Fayl ruxsatnomalari SUID bajariladigan fayllarga xavfsiz alternativani taklif qiladi, lekin dastlab biroz chalkash tuyulishi mumkin.


Biz hammamiz bilamizki, ikkilik SUID ular xavfsizlik nuqtai nazaridan noto'g'ri qaror. Yaxshiyamki, agar sizning arizangiz ba'zi cheklangan imtiyozlarni talab qilsa, samaraliroq usul mavjud fayl ruxsatlari.

Yuqoridagi maqolani batafsil o'qishdan qochmoqchi bo'lsangiz, vaqtingizni tejayman: Aslida, fayl ruxsatlari ildiz sifatida ishlaydigan jarayonlarga ruxsat beradi va shuning uchun ma'lum imkoniyatlarni saqlab qolish uchun biror narsa qilishga ruxsat beriladi, cheklangan. bu ro'yxatular imtiyozlardan voz kechganda va imtiyozsiz foydalanuvchi tomonidan boshqarilsa. Bu shuni anglatadiki, agar tajovuzkor bufer to'lib ketishi yoki boshqa ekspluatatsiya yordamida jarayonni buzishga muvaffaq bo'lsa, ular jarayon uchun zarur bo'lgan ba'zi minimal imtiyozlardan boshqa hech narsadan foydalana olmaydi.

Ruxsatlar odatda har doim root sifatida ishlaydigan xizmatlar uchun juda yaxshi, ammo buyruq qatori yordam dasturlari haqida nima deyish mumkin? Yaxshiyamki, bu sizga to'g'ri yordam dasturlari o'rnatilgan bo'lsa ham qo'llab-quvvatlanadi. Agar siz Ubuntu dan foydalansangiz, masalan, sizga paket kerak bo'ladi libcap2-bin. Bundan tashqari, eski bo'lmagan yadroni ishga tushirishingiz kerak bo'ladi (versiyadan 2.6.24).

Ushbu funktsiyalar ruxsatlarni SUID bitini o'rnatishga o'xshash bajariladigan fayllar bilan bog'lash imkonini beradi, lekin faqat ma'lum ruxsatlar to'plami uchun. Qulaylik setcap faylga ruxsatlarni qo'shish va o'chirish uchun ishlatiladi.

Birinchi qadam kerakli ruxsatlarni tanlashdir. Ushbu maqola uchun men tarmoq diagnostikasi deb nomlangan vosita bor deb o'ylayman tracewalk, qaysi foydalanish imkoniyatiga ega bo'lishi kerak xom rozetkalar. Bu odatda dasturni root sifatida ishga tushirishni talab qiladi, lekin ko'rish paytida ro'yxati ma'lum bo'lishicha, faqat ruxsat kerak CAP_NET_RAW.

Ikkilik joylashgan katalogda ekanligingizni taxmin qiling tracewalk, siz ushbu ruxsatni quyidagicha qo'shishingiz mumkin:

sudo setcap cap_net_raw=eip tracewalk

Hozircha qo'shimchaga e'tibor bermang =eip hal qilish uchun, men bu haqda bir necha soniya ichida gaplashaman. E'tibor bering, ruxsatnoma nomi kichik harf bilan yozilgan. Endi siz ruxsatlarni to'g'ri sozlaganingizni tekshirishingiz mumkin:

setcap -v cap_new_raw=eip tracewalk

Yoki berilgan bajariladigan fayl uchun oʻrnatilgan barcha ruxsatlarni roʻyxatlashingiz mumkin:

getcap tracewalk

Malumot uchun, shuningdek, bajariladigan fayldan barcha ruxsatlarni quyidagi bilan olib tashlashingiz mumkin:

setcap -r tracewalk

Ushbu nuqtada siz bajariladigan faylni imtiyozsiz foydalanuvchi sifatida ishga tushirishingiz kerak va u xom rozetkalar bilan ishlay olishi kerak, lekin ildiz foydalanuvchisi ega bo'lgan boshqa imtiyozlarga ega bo'lmasligi kerak.

Xo'sh, bu g'alati qo'shimcha nimani anglatadi? =eip? Bu ruxsatlarning mohiyatini biroz tushunishni talab qiladi. Har bir jarayon uchta ruxsatnomaga ega - samarali, meros qilib olinadigan va ruxsat etilgan:

  • Samarali Ruxsatlar - bu jarayon aslida nima qilishi mumkinligini belgilaydigan ruxsatlar. Misol uchun, agar u xom rozetkalar bilan shug'ullana olmaydi CAP_NET_RAW samarali to'plamda emas.
  • Mavjud ruxsatlar - bu jarayon tegishli qo'ng'iroq orqali so'rasa, ruxsat etiladigan ruxsatlardir. Ular, agar u ruxsat so'rash uchun maxsus yozilmagan bo'lsa, jarayonni aslida biror narsa qilishiga to'sqinlik qiladi. Bu jarayonlarni samarali to'plamga faqat talab qilinadigan davr uchun muhim ruxsatlarni qo'shish uchun yozish imkonini beradi.
  • Merosli ruxsatlar tug'ilgan bola jarayonining mavjud to'plamida meros qilib olinishi mumkin bo'lgan ruxsatlardir. Jarrohlik paytida fork() yoki clone() bola jarayoniga har doim ota-ona jarayonining ruxsatnomalarining nusxasi beriladi, chunki u o'sha paytda ham bir xil bajariladigan faylni ishga tushiradi. Irsiy to'plam qachon ishlatiladi exec() (yoki ekvivalenti) bajariladigan faylni boshqasiga almashtirish uchun chaqiriladi. Ushbu nuqtada, jarayonning mavjud to'plami yangi jarayon uchun foydalaniladigan kirish mumkin bo'lgan to'plamni olish uchun meros qilib olinadigan to'plam tomonidan maskalanadi.

Shunday qilib, yordamchi dastur setcap berilgan bajariladigan fayl uchun ushbu uchta to'plamning ruxsatlarini mustaqil ravishda qo'shish imkonini beradi. E'tibor bering, guruhlarning ma'nosi fayl ruxsatlari uchun biroz boshqacha talqin qilinadi:

  • Mavjud fayl ruxsatlari har doim bajariladigan fayl uchun mavjud bo'lgan ruxsatlardir, hatto uni chaqirgan asosiy jarayonda ular bo'lmasa ham. Ilgari ularni "majburiy" ruxsatnomalar deb atashgan.
  • Meroslangan fayl ruxsatlari qo'ng'iroq jarayoni to'plamidan ruxsatlarni olib tashlash uchun ham ishlatilishi mumkin bo'lgan qo'shimcha niqobni belgilaydi. Ular chaqiruv jarayonining meros to'plamiga qo'shimcha ravishda qo'llaniladi, shuning uchun ruxsat faqat ikkala to'plamda mavjud bo'lsa, meros qilib olinadi.
  • Samarali fayl ruxsatlari aslida to'plam emas, faqat bitta bitdir va agar o'rnatilgan bo'lsa, bu butun mavjud to'plam ham yangi jarayonning samarali to'plamiga ko'chiriladi degan ma'noni anglatadi. Bu ularni so'rash uchun maxsus yozilmagan jarayonlarga ruxsatlarni qo'shish uchun ishlatilishi mumkin. Bu bir bit bo'lgani uchun, agar siz uni biron bir ruxsat uchun o'rnatsangiz, u barcha ruxsatlar uchun o'rnatilishi kerak. Siz uni eski bit deb hisoblashingiz mumkin, chunki u ruxsatlarni qo'llab-quvvatlamaydigan ilovalar tomonidan foydalanishga ruxsat berish uchun ishlatiladi.

orqali ruxsatlarni belgilashda setcap uch harf e, i и p bilan bog'liq samarali, irsiy va foydalanish mumkin mos ravishda to'plamlar. Shunday qilib, oldingi spetsifikatsiya:

sudo setcap cap_net_raw=eip tracewalk

...rezolyutsiya ekanligini bildiradi CAP_NET_RAW mavjud va meros bo'ladigan to'plamlarga qo'shilishi kerak va samarali bit ham o'rnatilishi kerak. Bu faylga avval oʻrnatilgan ruxsatlarni bekor qiladi. Bir vaqtning o'zida bir nechta ruxsatlarni o'rnatish uchun vergul bilan ajratilgan ro'yxatdan foydalaning:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Ruxsatlar bo'yicha qo'llanma bularning barchasini batafsilroq muhokama qiladi, ammo umid qilamanki, bu post nima sodir bo'layotganini biroz tushundi. Faqat bir nechta ogohlantirish va hiyla-nayranglarni eslatib o'tish kerak.

Birinchidan, fayl imkoniyatlari symlinks bilan ishlamaydi - siz ularni ikkilik faylning o'ziga qo'llashingiz kerak (ya'ni simli havolaning maqsadi).

Ikkinchidan, ular talqin qilingan skriptlar bilan ishlamaydi. Misol uchun, agar sizda ruxsat bermoqchi bo'lgan Python skriptingiz bo'lsa, uni Python tarjimonining o'ziga belgilashingiz kerak. Shubhasiz, bu potentsial xavfsizlik muammosi, chunki u holda ushbu tarjimon bilan bajarilgan barcha skriptlar belgilangan ruxsatga ega bo'ladi, ammo bu uni SUID qilishdan ko'ra ancha yaxshi. Eng keng tarqalgan vaqtinchalik yechim C tilida alohida bajariladigan faylni yoki kerakli operatsiyalarni bajarishi va uni skriptdan chaqirishi mumkin bo'lgan ekvivalentini yozish kabi ko'rinadi. Bu ikkilikdan foydalanadigan Wireshark tomonidan qo'llaniladigan yondashuvga o'xshaydi /usr/bin/dumpcap imtiyozli operatsiyalarni bajarish uchun:

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

Uchinchidan, agar siz muhit o'zgaruvchisidan foydalansangiz, fayl ruxsatlari o'chiriladi LD_LIBRARY_PATH aniq xavfsizlik sabablari uchun(1). Xuddi shu narsa uchun ham amal qiladi LD_PRELOAD, bilishimcha.

1. Tajovuzkor standart kutubxonalardan birini almashtirishi va foydalanishi mumkinligi aniq LD_LIBRARY_PATHo'z kutubxonasini tizimdan ustun qo'yishga majburlash va shuning uchun qo'ng'iroq qiluvchi ilova bilan bir xil imtiyozlar bilan bajariladigan o'z ixtiyoriy kodiga ega bo'lish.

Ana xolos. Kurs dasturi haqida batafsil ma'lumotni quyidagi manzilda topishingiz mumkin 24 yanvar kuni bo'lib o'tadigan vebinar.

Manba: www.habr.com

a Izoh qo'shish