Discretionary Access Control — obyekt egasi yoki egaga vakolat berilgan administrator kimga qanday access berilishini boshqaradigan xavfsizlik modeli. Unix fayl owner, group va mode bitlari, POSIX ACL hamda ko‘plab application permissionlari DAC misollaridir. “Discretionary” so‘zi egaga ruxsatni boshqalarga berish ixtiyori mavjudligini anglatadi.
Unix mode bitlari
Faylda owner UID, group GID va owner/group/other uchun read, write, execute bitlari mavjud. Kernel caller credentialini owner bilan solishtiradi; mos bo‘lsa owner bitlari, aks holda tegishli group yoki other bitlari qo‘llanadi. Bitlar ketma-ket “eng yaxshi ruxsatni qidirish” tarzida birlashtirilmaydi.
Katalog uchun read nomlarni ko‘rish, write entry yaratish/o‘chirish, execute esa path bo‘ylab qidirish huquqini bildiradi. Faylni o‘chirish ko‘pincha faylning o‘z write bitiga emas, parent katalog ruxsatiga bog‘liq.
Maxsus bitlar
Set-user-ID executable’ga exec paytida file owner credentialini berishi mumkin. Set-group-ID katalogda yangi fayllar parent groupini meros oladi. Sticky bit umumiy writable katalogda entry’ni faqat owner, directory owner yoki privileged process o‘chirishini cheklaydi.
Setuid dastur ishonchsiz argument, environment va file descriptorlarni qat’iy tekshiradi. Scriptlarda setuid semantikasi ko‘p tizimda xavfsizlik sabab qo‘llanmaydi.
ACL
POSIX ACL nomlangan qo‘shimcha user va grouplarga alohida ruxsat beradi. Mask entry nomlangan userlardan tashqari group class uchun maksimal effective huquqni cheklaydi. ls -ldagi mode bitlari ACL mavjudligida to‘liq siyosatni ko‘rsatmaydi.
Default ACL katalogdagi yangi childlarga boshlang‘ich ACL beradi. umask va default ACL o‘zaro ta’siri platforma qoidalariga muvofiq hisoblanadi. Nusxalash vositasi ACLni saqlamasa access o‘zgaradi.
Credential
Process real, effective va saved UID/GID hamda supplementary groupsga ega. Permission tekshiruvida odatda filesystem/effective credential ishlatiladi. User namespace mapping ID ko‘rinishini o‘zgartirishi mumkin.
Root DAC override capability’lariga ega bo‘lishi mumkin, ammo mandatory access control uni baribir cheklaydi. DACdan o‘tish MACdan o‘tishni anglatmaydi.
Cheklovlar
Egasi maxfiy faylni world-readable qilishi yoki nusxasini boshqalarga berishi mumkin. MAC markaziy siyosat bilan bu ixtiyorni cheklaydi. DAC shuningdek dastur ichidagi business authorizationni o‘zi ifodalamaydi; database row access alohida model talab qiladi.
Auditda path bilan birga inode owner, group, mode, ACL, parent directory va caller group membership qayd etiladi. Symlink va rename race’lari descriptor-based API bilan kamaytiriladi. Permission muammosini chmod 777 bilan yashirish least privilege’ni buzadi.
Umask
Process umask qiymati yangi fayl yoki katalog yaratishda so‘ralgan mode’dan ayrim bitlarni olib tashlaydi. U mavjud fayl permissionini o‘zgartirmaydi. Library aniq mode so‘rasa ham umask yakuniy natijaga ta’sir qiladi; security-sensitive dastur yaratgandan keyin effective mode’ni tekshiradi. Temporary file uchun atomik exclusive create va tor mode ishlatiladi, keyin chmod qilish oralig‘idagi ochiq oynadan qochiladi.
NFS talqini
Remote filesystemda UID/GID server tomonda talqin qilinadi. Client va server identity mapping mos bo‘lmasa owner boshqa userga aylanadi. Root squashing client rootini imtiyozsiz identityga map qilib server fayllarini himoya qiladi. Clientdagi mode ko‘rinishi server ACL yoki export policy sabab yetarli bo‘lmasligi mumkin. Audit qarorni qaysi qatlam rad etganini ajratadi.
TOCTOU
Path permissionini access bilan tekshirib, keyin alohida open qilish orasida attacker symlink yoki rename orqali targetni almashtirishi mumkin. Kernel permissionni haqiqiy openda tekshiradi. Directory file descriptor, openat va no-follow flaglar trusted rootga nisbatan atomikroq resolution beradi. Temporary directory sticky bitga ega bo‘lsa ham predictable filename xavfsiz emas.
Bog‘liq tushunchalar
file permission, POSIX ACL, ownership, umask, sticky bit, mandatory access control