Maxsus ruxsatlar: setuid, setgid va sticky bit
Oddiy rwx bitlari jarayon faylni o'qiy, unga yoza yoki uni bajara oladimi-yo'qligini hal qiladi. Amalda yana ikki savol tug'iladi: bajariladigan fayl ishga tushgach, qaysi identifikator bilan ishlaydi va umumiy katalogdagi faylni kim o'chira oladi? Linux ikkalasiga ham uchta maxsus rejim biti bilan javob beradi: set-user-ID (setuid), set-group-ID (setgid) va sticky bit.
Fayl ruxsatlari maqolasida jarayon identifikatori rwx bilan qanday solishtirilishi, Egalik maqolasida esa shu identifikatorning UID/GID i aslida qayerdan kelishi ko'rib chiqilgan. Maxsus bitlar xuddi shu rejim maydonida saqlanadi, lekin kernel bajarish va katalog amallarini qanday talqin qilishini o'zgartiradi va bir vaqtning o'zida o'zining hujum yuzasini ham olib keladi.
Warning
Quyidagi <path> va <group> kabi to'ldiriladigan joylar aynan yoziladigan qiymat emas — biror narsani ishga tushirishdan oldin ularni tekshirilgan haqiqiy qiymat bilan almashtiring. < yoki > belgisi bor buyruqni shell’ga to'g'ridan-to'g'ri ko'chirib qo'ymang.
Quyida bu uch bit rwx yonida qanday joylashishini va ularning sakkizlik qiymatlarini qanday o'qishni; ls -l dagi s, S, t va T belgilarini; setuid va setgid bajariladigan faylda jarayonning effective UID/GID ini qanday o'zgartirishini; katalogdagi setgid yangi fayllarga katalog guruhini qanday meros qilib berishini; sticky bit nimani himoya qilishini va nimani qilmasligini ko'rib chiqamiz. Shuningdek, maxsus bitlarni stat, find, findmnt va paket vositalari bilan zaxira nusxa, tekshiruv qadami va rollback’ga tayangan holda audit qilishni o'rganamiz.
Maxsus bitlar rejim ichida qayerda turadi
Oddiy rejim uchta sakkizlik raqam bilan yoziladi: egasi, guruh va boshqalar. Maxsus bitlar shu uchtasining oldidagi to'rtinchi raqamni egallaydi:
| Maxsus bit | Sakkizlik qiymati | Simvolik o'zgartirish | Asosiy vazifasi |
|---|---|---|---|
| setuid | 4 |
u+s, u-s |
bajariladigan faylni uning egasining effective UID i bilan ishga tushirish |
| setgid | 2 |
g+s, g-s |
bajariladigan faylni uning guruhi bilan ishga tushirish yoki katalogga o'z guruhini meros qilib berish |
| sticky | 1 |
+t, -t |
umumiy katalogda o'chirish va qayta nomlashni cheklash |
Masalan:
Bu sonlar qo'shiladi: 4 + 2 = 6, 2 + 1 = 3, uchalasi birga esa 7 bo'ladi. Son sakkizlik ekanini ko'rinib turishi uchun ba’zan 04755 kabi bosh nol bilan yoziladi.
Rejimni bir necha shaklda tekshiring:
stat %a xom bitlarni beradi, %A va ls -l esa simvolik ko'rinishni beradi. ls -l qatori oxiridagi + ACL borligini bildirishi mumkin; maxsus bitlar ACL’lar o'rnini bosmaydi.
s, S, t va T nimani anglatadi
Maxsus bit alohida ustunga ega emas — u tegishli bajarish belgisi o'rnida ko'rsatiladi:
- egasining bajarish o'rnida
s: setuid o'rnatilgan va egasi uchun bajarish huquqi ham bor. - egasining bajarish o'rnida
S: setuid o'rnatilgan, lekin egasi uchun bajarish huquqi yo'q. - guruhning bajarish o'rnida
s: setgid o'rnatilgan va guruh uchun bajarish huquqi ham bor. - guruhning bajarish o'rnida
S: setgid o'rnatilgan, lekin guruh uchun bajarish huquqi yo'q. - boshqalarning bajarish o'rnida
t: sticky o'rnatilgan va boshqalar uchun bajarish huquqi ham bor. - boshqalarning bajarish o'rnida
T: sticky o'rnatilgan, lekin boshqalar uchun bajarish huquqi yo'q.
Masalan:
-rwsr-xr-x 4755 root:root /usr/bin/passwd
drwxrws--- 2770 root:catalog-editors /srv/catalog/shared
drwxrwxrwt 1777 root:root /tmp
-rwS------ 4600 ali:ali mode-sample
Oxirgi qatordagi katta S "kuchliroq setuid" degani emas. Aksincha: egasining bajarish huquqisiz bu oddiy fayl umuman bajariladigan dastur sifatida ishga tushmaydi va bunday rejim birikmasi odatda xato yoki chala qolgan sozlama bo'ladi.
Note
Oddiy faylda setgid tozalangan guruh bajarish biti bilan birga — yuqorida ko'rsatilgan guruhdagi S — tarixan majburiy fayl qulflashni (mandatory locking) so'rash uchun ham ishlatilgan. Bu mexanizm ishonchsiz deb hisoblanadi va Linux 5.15 dan beri qo'llab-quvvatlanmaydi. Hozirgi tizimda yangi qulflash mexanizmini shu rejim birikmasi atrofida loyihalamang.
Bajariladigan faylda setuid qanday ishlaydi
Jarayonning real UID i uni kim ishga tushirganini ko'rsatadi; effective UID esa kirish tekshiruvlarining ko'pchiligida ishlatiladigan identifikator. Oddiy bajariladigan faylda ikkalasi ham chaqiruvchiga tegishli. setuid biti bor native bajariladigan fayl execve(2) orqali ishga tushganda kernel effective UID ni fayl egasiga almashtiradi; real UID esa o'zgarmaydi.
Soddalashtirilgan oqim:
ali runs the executable
│
▼
the kernel checks mode and mount/process restrictions
│
▼
if setuid is honored: real UID=ali, effective UID=the file's owner
│
▼
the program performs only whatever privileged action its own code allows
Ubuntu’dagi keng tarqalgan misol:
Namunaviy natija:
Oddiy foydalanuvchi o'z parolini o'zgartirganda passwd himoyalangan hisob ma’lumotlarini yangilashi kerak. setuid root foydalanuvchiga ixtiyoriy root shell bermaydi: argumentlarni, chaqirayotgan foydalanuvchining identifikatorini va aslida qaysi amallarga ruxsat berilishini qat’iy tekshirish dasturning o'z vazifasi.
Note
Aniq rejim distributivga, paket versiyasiga va qotirish (hardening) siyosatiga bog'liq. Ba’zi tarixiy dasturlar setuid o'rniga Linux capabilities, imtiyozli xizmat yoki boshqa mexanizmdan foydalanadi. Internetda topilgan ro'yxatni tizimingiz uchun haqiqat deb qabul qilmang — lokal faylni tekshiring.
setuid har doim ham qo'llanavermaydi
Quyidagi holatlarda Linux setuid/setgid orqali yangi huquq bermaydi:
- fayl turgan fayl tizimi
nosuidbilan mount qilingan; - chaqirayotgan jarayonda
no_new_privso'rnatilgan; - jarayon tegishli
ptracekuzatuvi ostida; - bajariladigan fayl interpretator orqali ishlaydigan skript — Linux skriptlardagi setuid/setgid bitlarini e’tiborsiz qoldiradi.
Mount kontekstini faqat o'qish orqali tekshirish:
Agar nosuid ko'rinsa, bit diskda saqlangan bo'lsa ham, imtiyozga o'tish sodir bo'lmaydi. Kernel versiyasiga qarab bajariladigan fayl oddiy huquqlar bilan ishga tushishi yoki umuman xato bilan tugashi mumkin.
Danger
Shell skriptga chmod u+s qilib imtiyoz mexanizmi qurishga urinmang. Linux skriptlar uchun bu bitni e’tiborsiz qoldiradi; boshqa platformalarda xatti-harakat boshqacha bo'lishi mumkin. Haqiqatan imtiyoz talab qiladigan vazifa uchun tor sudoers qoidasi, ko'rib chiqilgan native yordamchi dastur, tizim xizmati yoki o'rinli bo'lsa, minimal capability modeli xavfsizlik tekshiruvidan o'tsin.
Nega setuid bajariladigan fayl xavfli
setuid root dasturidagi argumentlarni tahlil qilish, muhit o'zgaruvchilari bilan ishlash, vaqtinchalik fayl yaratish, poyga holati, kutubxona yoki undan chaqiriladigan tashqi buyruqdagi xato oddiy foydalanuvchini root huquqiga olib chiqishi mumkin. Ayniqsa, imtiyozsiz hisob faylga yoki uning ota kataloglaridan biriga yoza olsa, hujumchi bajariladigan faylni butunlay almashtira oladi.
setuid bitini qo'shishdan oldin kamida:
- vazifani
sudo, xizmat yoki capability bilan torroq ifodalash mumkinmi-yo'qligini tekshiring; - bajariladigan fayl va uning har bir ota katalogining egaligi va rejimini audit qiling;
- binar fayl qayerdan kelganini va qaysi paketga tegishli ekanini aniqlang;
- mount, MAC siyosati va
no_new_privskontekstini tekshiring; - o'zgarishni monitoring va rollback rejasi bilan o'zgarishlar qaydiga yozing.
Bajariladigan fayldagi va katalogdagi setgid
Bajariladigan fayldagi setgid kernelga jarayonning effective GID ini fayl guruhiga almashtirishni buyuradi. Real GID va qo'shimcha guruhlar o'z-o'zidan almashtirilmaydi. Simvolik ko'rinishda s guruhning bajarish o'rnida chiqadi:
Lekin katalogdagi setgid jarayon identifikatorini umuman oshirmaydi. U yangi fayl va ichki kataloglar yaratuvchi jarayonning o'z guruhi o'rniga ota katalogning guruhini meros qilib olishini ta’minlaydi. Yangi ichki kataloglar odatda setgid bitini ham meros qilib oladi.
Egalik maqolasidagi umumiy katalog muammosi aynan shunday hal qilinadi:
stat -c '%A %a %U:%G %n' -- <team_directory>
chmod g+s -- <team_directory>
stat -c '%A %a %U:%G %n' -- <team_directory>
Masalan, root:catalog-editors ga tegishli 2770 katalogda guruh a’zosi yangi fayl yaratsa, bu faylning guruhi odatda foydalanuvchining o'z asosiy guruhi emas, catalog-editors bo'ladi.
Muhim chegaralar:
- setgid faqat keyin yaratiladigan obyektlarga ta’sir qiladi — mavjud fayllarning guruhini o'zgartirmaydi;
- u yangi faylning
rwbitlarini bermaydi — ular so'ralgan rejim,umaskva har qanday default ACL dan keladi; - yangi ichki katalog setgid ni meros qilib oladi, lekin uning ichidagi kirish bitlari baribir
umaskyoki default ACL ga bog'liq; - agar foydalanuvchi katalog guruhining a’zosi bo'lmasa yoki ACL ruxsat bermasa, setgid o'zi unga kirish huquqini yaratmaydi.
Qisqasi, setgid "guruhni izchil saqlash" vazifasini bajaradi. O'sha guruhga yozish huquqini berish esa umask maqolasida ko'rib chiqilgan rejim, ACL va umask siyosatining alohida masalasi.
Note
GNU chmod katalogdagi mavjud setuid/setgid bitlarini ba’zi uch yoki to'rt raqamli sonli rejim o'zgarishlarida saqlab qolishi mumkin. Maqsad bitni olib tashlash bo'lsa, chmod g-s -- <directory> kabi aniq simvolik shakldan foydalaning va natijani stat bilan tasdiqlang. Katalogdagi setuid ma’nosi platformalarda bir xil emas; Linux umumiy katalog holati uchun setgid dan foydalanadi.
Sticky bit katalog yozuvlarini himoya qiladi
Katalogda w va x huquqiga ega foydalanuvchi odatda undagi istalgan yozuvni, hatto boshqa birovga tegishlisini ham o'chira yoki qayta nomlay oladi. Sticky bit bu qoidani toraytiradi: faylni o'chirish yoki qayta nomlash uchun fayl egasi, katalog egasi yoki tegishli imtiyozga ega jarayon bo'lish kerak.
Klassik misol:
Ubuntu Server’dagi odatiy natija:
1777 har bir foydalanuvchiga katalogdan foydalanishga ruxsat beradi; oxiridagi t esa bir foydalanuvchi u yerdagi boshqa foydalanuvchining katalog yozuvini o'chirishi yoki qayta nomlashini cheklaydi.
Sticky bit quyidagilarni qilmaydi:
- fayl mazmunini o'qishni cheklamaydi;
- faylning o'zida
whuquqi bor foydalanuvchiga uning mazmunini o'zgartirishni taqiqlamaydi; - fayl nomlarini taxmin qiladigan, symlink’lar ortidan ehtiyotsiz boradigan, poyga holatlariga ega yoki vaqtinchalik fayllarni xavfsiz yaratmaydigan dasturni avtomatik tuzatmaydi;
- boshqa katalogga nusxalashga yoki faylning o'z kirish rejimiga ta’sir qilmaydi.
Demak, 1777 xavfsiz saqlash joyi emas. Dastur vaqtinchalik faylni xavfsiz API orqali, oldindan taxmin qilib bo'lmaydigan nom va 0600 kabi mos rejim bilan yaratishi kerak.
Xavfsiz laboratoriya
Bu laboratoriya faqat ~/lab/special-permissions ichida ishlaydi, sudo talab qilmaydi va imtiyozli bajariladigan fayl yaratmaydi. setuid namunasi hech qanday yangi identifikator bermaydi, u joriy foydalanuvchiga tegishli — u faqat rejim belgisi qanday ko'rinishini o'rganish uchun mavjud.
Avval maqsad hali mavjud emasligini tasdiqlang:
0 qaytsa, davom eting:
mkdir -m 0700 -p ~/lab/special-permissions
mkdir ~/lab/special-permissions/shared
mkdir ~/lab/special-permissions/dropbox
chmod 2770 ~/lab/special-permissions/shared
chmod 1777 ~/lab/special-permissions/dropbox
touch ~/lab/special-permissions/shared/report.txt
mkdir ~/lab/special-permissions/shared/reports
touch ~/lab/special-permissions/mode-sample
chmod 4600 ~/lab/special-permissions/mode-sample
Natijani bitta izchil formatda ko'ring:
Namunaviy, tegishli parcha:
d drwxrws--- 2770 ali:ali /home/ali/lab/special-permissions/shared
f -rw-r--r-- 644 ali:ali /home/ali/lab/special-permissions/shared/report.txt
d drwxr-sr-x 2755 ali:ali /home/ali/lab/special-permissions/shared/reports
d drwxrwxrwt 1777 ali:ali /home/ali/lab/special-permissions/dropbox
f -rwS------ 4600 ali:ali /home/ali/lab/special-permissions/mode-sample
Host nomi, foydalanuvchi va aniq oddiy bitlar umask ingizga qarab farq qiladi. Muhim kuzatuvlar:
sharedguruhning bajarish o'rnidasni ko'rsatadi, bu uni setgid katalog sifatida belgilaydi;- yangi ichki katalog
reportssetgid bitini meros qilib olgan; report.txtguruhni meros qilib olgan, lekin uning o'z rejimi faqat setgid tufayli0660ga aylanmagan;dropboxoxiridagitsticky va boshqalarning bajarish biti ikkalasi ham borligini ko'rsatadi;mode-sampledagiSegasining bajarish huquqi yo'qligini ko'rsatadi.
mode-sample ga egasining bajarish bitini qo'shing va belgi qanday o'zgarishini kuzating:
chmod u+x ~/lab/special-permissions/mode-sample
stat -c '%A %a %U:%G %n' \
~/lab/special-permissions/mode-sample
Kutilgan rejim:
Fayl bo'sh va boshqa UID ga tegishli emas — uni ishga tushirishga urinmang. Bu mashq haqiqiy imtiyozga o'tishni emas, rejim yozuvini ko'rsatdi.
Maxsus bitlarni find bilan audit qilish
Laboratoriyada uchta maxsus bitdan istalganini topish:
GNU find da /7000 setuid, setgid yoki sticky dan kamida bittasi borligini bildiradi. Aniqroq qidiruvlar:
find ~/lab/special-permissions -xdev -type f -perm -4000 \
-printf 'setuid %m %u:%g %p\n'
find ~/lab/special-permissions -xdev -perm -2000 \
-printf 'setgid %m %u:%g %p\n'
find ~/lab/special-permissions -xdev -type d -perm -1000 \
-printf 'sticky %m %u:%g %p\n'
-perm -4000 ko'rsatilgan barcha bitlar bo'lishini talab qiladi; bu yerda faqat bitta bit so'ralgani uchun u setuid obyektlarni topadi. /6000 esa setuid yoki setgid dan birortasiga mos keladi:
Bu production uchun mos, faqat o'qiydigan audit, lekin katta daraxtda u sezilarli disk (I/O) yuki va kirish logi trafigini qo'shishi mumkin. Cheklangan kataloglar ichini ko'rish uchun sudo kerak. Qidiruvni muayyan mount yoki ilova ildizi bilan chegaralang; / va uning virtual fayl tizimlarini o'ylamasdan aylanib chiqmang.
Warning
Audit natijasiga -exec chmod, -delete yoki boshqa tuzatishni ulamang. Qonuniy setuid/setgid bajariladigan fayldan bitni olib tashlash login, parolni o'zgartirish, rejalashtirish yoki boshqa tizim funksiyasini buzishi mumkin. Natija — faqat tekshirilishi kerak bo'lgan nomzodlar ro'yxati.
Har bir topilmani qanday tekshirish kerak
Masalan, <found_file> uchun:
target='<found_file>'
stat -c '%A %a %u:%g %U:%G %n' -- "$target"
namei -l -- "$target"
findmnt -no TARGET,VFS-OPTIONS,FS-OPTIONS --target "$target"
file -- "$target"
So'ng distributivga mos vosita bilan paket manbasini aniqlang.
Debian/Ubuntu:
RHEL oilasi:
Agar rpm -Vf hech narsa chiqarmasa, tekshirilgan atributlar paketlar bazasida qayd etilgan holatga mos keladi. Agar u belgilar chiqarsa, ularni rpm(8) ga ko'ra talqin qiling. dpkg-query -S faqat yo'lni qaysi paket olib kelganini ko'rsatadi — joriy rejim kutilganidek ekanini isbotlamaydi. Ikkala oilada ham natijani konfiguratsiyani boshqarish tizimidagi asosiy holat (baseline), ishlab chiqaruvchining xavfsizlik bildirishnomalari va o'zgarishlar tarixi bilan solishtiring.
Quyidagilar jiddiy ogohlantirish belgilari:
- setuid/setgid bajariladigan faylga egasidan boshqa hisob yoki guruh yoza oladi;
- ota kataloglardan biriga ishonchsiz foydalanuvchi yoza oladi;
- binar faylni paketga yoki tasdiqlangan deploy manbasiga bog'lab bo'lmaydi;
- bit yaqinda paydo bo'lgan va unga mos o'zgarish qaydi yo'q;
- bajariladigan fayl shell, interpretator yoki ixtiyoriy plugin/hook yuklaydi;
- imtiyozli dastur foydalanuvchi boshqaradigan konfiguratsiya, muhit o'zgaruvchilari yoki nisbiy
PATHga tayanadi.
Amaliy vaziyat: umumiy katalogda guruhlar tarqalib ketishi
Muammo: /srv/catalog/shared dan catalog-editors guruhi foydalanadi. Turli foydalanuvchilar yaratgan yangi fayllar har bir foydalanuvchining o'z asosiy guruhiga tushib qolyapti va bu hamkorlikni buzyapti. Maqsad — mavjud daraxt bo'ylab ko'r-ko'rona rekursiv o'zgarish qilmasdan, yangi obyektlar uchun guruh merosini yoqish.
Bu production’da rejim va egalikni o'zgartiradi. Avval test host yoki snapshot, ikkinchi administrator sessiyasi, tekshirilgan guruh a’zolari ro'yxati va rollback faylini tayyorlang.
1. Hech narsani o'zgartirmasdan joriy holatni tekshiring
getent group catalog-editors
stat -c '%A %a %u:%g %U:%G %n' -- /srv/catalog/shared
namei -l -- /srv/catalog/shared
findmnt -no TARGET,VFS-OPTIONS,FS-OPTIONS --target /srv/catalog/shared
So'ng mavjud obyektlarni bir daraja chuqurlikda ko'ring:
Guruh mavjudligini, kerakli foydalanuvchilar uning a’zosi ekanini va katalog boshqa fayl tizimi yoki symlink emasligini tasdiqlang.
2. Rollback ma’lumotlarini saqlang
Agar ACL vositalari o'rnatilgan bo'lsa, metama’lumotlar zaxira nusxasini oling:
( umask 077
sudo getfacl -p /srv/catalog/shared \
> ~/catalog-shared.before.acl
)
stat -c '%A %a %U:%G %n' ~/catalog-shared.before.acl
umask 077 faqat shu subshell ichida yaratilgan zaxira nusxaga ta’sir qiladi va uni boshqa lokal foydalanuvchilardan yopiq saqlaydi — bu keyingi maqolada chuqurroq yoritiladi. Zaxira nusxaning mazmunini ham tekshiring:
Zaxira nusxani umumiy katalogning o'ziga qo'ymang. U ACL’lar, oddiy rejim va egalikni tiklaydi — fayl mazmunining zaxira nusxasi emas.
3. Eng kichik o'zgarish
Egasi o'zgarmaydi; faqat guruh va katalogning setgid biti sozlanadi:
Bu buyruqlar rekursiv emas. Mavjud fayllarning guruhi va rejimi o'zgarishsiz qoladi.
4. Yangi sessiyada tekshiring
stat -c '%A %a %U:%G %n' -- /srv/catalog/shared
sudo -u <group_member> -- touch /srv/catalog/shared/.inheritance-test
stat -c '%A %a %U:%G %n' \
/srv/catalog/shared/.inheritance-test
Test faylning guruhi catalog-editors bo'lishi kerak. Guruh unga yoza oladimi-yo'qmi, yaratayotgan foydalanuvchining umask i va har qanday default ACL ga bog'liq — setgid o'zi buni kafolatlamaydi.
Test faylni aniq tekshiring, so'ng uni o'chiring:
stat -c '%A %a %U:%G %n' \
/srv/catalog/shared/.inheritance-test
sudo rm -i -- /srv/catalog/shared/.inheritance-test
Warning
rm faylni hech qanday axlat qutisiga ko'chirmaydi. Bu buyruq faqat yuqorida yaratilgan aynan .inheritance-test faylini nishonga oladi, -i esa tasdiq so'raydi. Bu yerda boshqa nom yoki wildcard ishlatmang.
5. Rollback
Agar natija siyosatga mos kelmasa:
sudo setfacl --restore="$HOME/catalog-shared.before.acl"
stat -c '%A %a %U:%G %n' -- /srv/catalog/shared
setfacl --restore zaxira nusxadan egasi, guruhi, rejimi va ACL ni tiklaydi — uni boshqa host yoki yo'lga ko'r-ko'rona qo'llamang. Agar zaxira nusxa bo'lmasa, oldingi stat qiymatlaridan kelib chiqib, aniq rollback uchun chgrp va chmod g-s buyruqlarini o'zgarish rejangizga oldindan yozib qo'ying.
Katalog ichida allaqachon mavjud obyektlarning guruhini tuzatish — alohida migratsiya: har bir fayl kimga tegishli ekanini, hard link’larni, ACL’larni va hozir ochiq turgan fayllarni tekshirmasdan chgrp -R ni ishga tushirmang.
Keng tarqalgan xatolar
setuid skript root sifatida ishlaydi deb kutish
Linux interpretator orqali ishlaydigan skriptlardagi setuid/setgid bitlarini e’tiborsiz qoldiradi. Aylanib o'tadigan wrapper yozish o'rniga vazifani tor siyosat yoki tekshirilgan xizmat interfeysi atrofida loyihalang.
Katta S yoki T ni kuchliroq ruxsat deb o'qish
Katta harf tegishli bajarish/qidirish biti yo'qligini bildiradi. Bajariladigan fayldagi S yoki ichiga kirish mumkin bo'lishi kerak bo'lgan katalogdagi T odatda qo'shimcha himoya emas, buzilgan yoki chala rejim belgisi.
setgid katalog har bir faylni guruh yoza oladigan qiladi deb o'ylash
setgid guruh egaligini meros qilib beradi. Kirish bitlarini so'ralgan rejim, umask va har qanday default ACL hal qiladi.
Sticky bit fayl mazmunini himoya qiladi deb o'ylash
Sticky bit katalog ichidagi o'chirish va qayta nomlash qarorlarini boshqaradi. Agar faylning o'zi guruh yoki boshqalarga yozishga ruxsat bersa, uning mazmunini baribir o'zgartirish mumkin.
Internetdagi "barcha setuid fayllar" ro'yxatiga ishonish
Paketlar, versiyalar va qotirish siyosati har xil bo'ladi. Haqiqiy ma’lumot manbai — lokal stat, paket egasi, mount holati va tekshirilgan asosiy holat (baseline).
Audit topgan barcha bitlarni birdaniga olib tashlash
Qonuniy imtiyozli dasturlar ishlamay qolishi mumkin. Har bir topilmaning vazifasi, manbasi, yozish mumkin bo'lgan yo'llari va mumkin bo'lgan muqobil mexanizmini alohida tekshiring.
chmod 0755 katalogdagi setgid ni har doim tozalaydi deb kutish
GNU chmod ba’zi sonli rejim o'zgarishlarida katalogning maxsus bitlarini saqlab qolishi mumkin. Maqsadni chmod g-s bilan aniq ko'rsating, so'ng stat bilan tasdiqlang.
nosuid ni yagona kerakli himoya deb hisoblash
nosuid setuid/setgid va file capabilities orqali imtiyozga o'tishni cheklaydi, lekin oddiy bajariladigan fayl, o'qib bo'ladigan maxfiy ma’lumot, yozish mumkin bo'lgan kod yoki interpretator orqali ishga tushiriladigan skript bilan bog'liq muammolarni o'zi hal qilmaydi.
Mashqlar
/usr/bin/passwd,/tmpva/var/tmpuchunstatnatijasini qayd eting. Har birsyokitqaysi oddiy bajarish biti bilan bir o'rinda turishini tushuntiring.- Xavfsiz laboratoriyani quring.
mode-sampledagiSnisga aylantiring, so'ngchmod u-sbilan oddiyxga qaytaring va har bir qadamdan keyin sonli va simvolik rejimni qayd eting. sharedichida fayl va ichki katalog yarating. Ularning guruhi, setgid biti va kirish rejimini solishtiring va qaysi qism merosdan, qaysi qismumaskdan kelganini aniqlang.find ... -perm -2000nifind ... -perm /6000bilan solishtiring. Har bir topilma yordamida "barcha bitlar" va "birorta bit" ma’nolarini tushuntiring./usryoki alohida test mount uchun faqat o'qiydigan setuid/setgid audit rejasini yozing. Unga-xdev, paket egaligi, ota kataloglar,nosuid, asosiy holat (baseline) va rollback qarorini kiriting — topilmalarga avtomatikchmodulamang.
Mashqni bajardim deyish uchun: har bir bit uchun obyekt turini, sonli va simvolik rejimni, kernel ta’sirini, cheklovlarini, audit usulini va o'rinli bo'lsa, xavfsizroq muqobilini ayta olishingiz kerak.
Laboratoriyani tugatganingizda avval maqsadni tekshiring:
Agar faqat laboratoriya obyektlari ko'rinsa:
Warning
rm -rI laboratoriya daraxtini ortga qaytarish imkoniyatisiz o'chiradi. Bu yerda ishlatilgan absolyut maqsad uy katalogingiz ichidagi aniq yo'l; buyruqni faqat o'qiydigan find natijasini tekshirmasdan ishga tushirmang.
Manbalar
- Linux man-pages:
execve(2): https://man7.org/linux/man-pages/man2/execve.2.html - Linux man-pages:
inode(7): https://man7.org/linux/man-pages/man7/inode.7.html - Linux man-pages:
fcntl_locking(2): https://man7.org/linux/man-pages/man2/fcntl_locking.2.html - GNU Coreutils qo'llanmasi: mode structure: https://www.gnu.org/software/coreutils/manual/html_node/Mode-Structure.html
- GNU Coreutils qo'llanmasi: changing special mode bits: https://www.gnu.org/software/coreutils/manual/html_node/Changing-Special-Mode-Bits.html
- GNU Coreutils qo'llanmasi: directory setuid and setgid: https://www.gnu.org/software/coreutils/manual/html_node/Directory-Setuid-and-Setgid.html
- GNU Coreutils qo'llanmasi:
chmodinvocation: https://www.gnu.org/software/coreutils/manual/html_node/chmod-invocation.html - GNU Findutils qo'llanmasi: numeric modes: https://www.gnu.org/software/findutils/manual/html_node/find_html/Numeric-Modes.html
- util-linux:
findmnt(8): https://man7.org/linux/man-pages/man8/findmnt.8.html