Linux-da Fayl İcazələri

Hamıya salam. Biz fəal şəkildə işə başlayırıq və artıq yanvar ayında bir çox güclü təqdimatlar hazırlayırıq. Digərləri ilə yanaşı, hər kəsin sevimli kursunun yeni axını üçün qeydiyyat elan edildi. "Linux Administrator". Başlanğıc ərəfəsində biz ənənəvi olaraq faydalı materialların tərcümələrini paylaşırıq.

Linux-da Fayl İcazələri

Fayl icazələri SUID icra sənədlərinə təhlükəsiz alternativ təklif edir, lakin əvvəlcə bir az çaşdırıcı görünə bilər.


Biz hamımız bilirik ki, binaries CƏNUB var təhlükəsizlik baxımından pis qərar. Xoşbəxtlikdən, əgər tətbiqiniz bəzi məhdud imtiyazlar tələb edirsə, adlanan daha səmərəli bir yol var fayl icazələri.

Yuxarıdakı məqaləni təfərrüatı ilə oxumaqdan qaçmaq istəyirsinizsə, sizə bir az vaxta qənaət edəcəyəm: Əslində, fayl icazələri kök kimi işləyən proseslərə icazə verir və buna görə də müəyyən imkanları saxlamaq üçün nəsə etməyə icazə verilir, məhduddur. bu siyahıimtiyazları itirdikdə və imtiyazsız istifadəçi tərəfindən idarə olunduqda. Bu o deməkdir ki, təcavüzkar bufer daşması və ya digər istismardan istifadə edərək prosesi güzəştə getməyi bacararsa, onlar prosesin əslində ehtiyac duyduğu müəyyən minimal imtiyazlardan başqa heç nədən yararlana bilməyəcəklər.

İcazələr adətən həmişə kök kimi işləyən xidmətlər üçün əladır, lakin əmr satırı yardımçıları haqqında nə demək olar? Xoşbəxtlikdən, düzgün kommunalları quraşdırdığınız təqdirdə bu da dəstəklənir. Əgər siz Ubuntu istifadə edirsinizsə, məsələn, paketə ehtiyacınız olacaq libcap2-bin. Siz həmçinin qeyri-arxaik nüvəni (versiyadan 2.6.24).

Bu funksiyalar icazələrin SUID bitini təyin etməyə bənzər icra edilə bilən fayllarla əlaqələndirilməsinə imkan verir, lakin yalnız müəyyən icazələr dəsti üçün. Utility setcap fayla icazələr əlavə etmək və silmək üçün istifadə olunur.

İlk addım sizə lazım olan icazələri seçməkdir. Bu məqalənin xatirinə mən güman edirəm ki, adlı bir şəbəkə diaqnostikası vasitəsi var tracewalkistifadə edə bilməlidir xam rozetkalar. Bu, adətən proqramın kök kimi işlədilməsini tələb edir, lakin baxarkən siyahı belə çıxır ki, yalnız icazə tələb olunur CAP_NET_RAW.

İkilinin yerləşdiyi kataloqda olduğunuzu fərz etsək tracewalk, bu icazəni belə əlavə edə bilərsiniz:

sudo setcap cap_net_raw=eip tracewalk

Hələlik şəkilçiyə məhəl qoymayın =eip həlli üçün bir neçə saniyədən sonra bu barədə danışacağam. Qeyd edək ki, icazə adı kiçik hərflədir. İndi icazələri düzgün konfiqurasiya edib-etmədiyinizi yoxlaya bilərsiniz:

setcap -v cap_new_raw=eip tracewalk

Və ya verilmiş icra olunan fayl üçün təyin edilmiş bütün icazələri sadalaya bilərsiniz:

getcap tracewalk

İstinad üçün, siz həmçinin icra olunandan bütün icazələri silə bilərsiniz:

setcap -r tracewalk

Bu nöqtədə, siz icra olunan faylı imtiyazsız istifadəçi kimi işlədə bilməlisiniz və o, xam soketlərlə işləməyi bacarmalı, lakin kök istifadəçinin digər imtiyazlarından heç birinə malik olmamalıdır.

Bəs bu qəribə şəkilçi nə deməkdir? =eip? Bu, icazələrin mahiyyətini müəyyən qədər başa düşməyi tələb edir. Hər bir proses üç icazə dəstinə malikdir - effektiv, irsi və icazə verilən:

  • Effektiv İcazələr bir prosesin həqiqətən nə edə biləcəyini müəyyən edənlərdir. Məsələn, əgər xam sockets ilə məşğul ola bilməz CAP_NET_RAW effektiv dəstdə deyil.
  • Mövcuddur İcazələr, müvafiq zəngdən istifadə edərək, prosesin tələb etdiyi halda icazə verilən icazələrdir. Sözügedən icazə tələb etmək üçün xüsusi olaraq yazılmamışsa, bir prosesin həqiqətən bir şey etməsinə mane olurlar. Bu, yalnız faktiki tələb olunan dövr üçün effektiv dəstə kritik icazələr əlavə etmək üçün proseslərin yazılmasına imkan verir.
  • irsi icazələr yaranan uşaq prosesinin əlçatan dəstində miras alına bilən icazələrdir. Əməliyyat zamanı fork() və ya clone() uşaq prosesinə həmişə ana prosesin icazələrinin surəti verilir, çünki o, həmin nöqtədə hələ də eyni icraedici ilə işləyir. İrsi çoxluq zaman istifadə olunur exec() (və ya ekvivalenti) icra olunan faylı başqası ilə əvəz etmək üçün çağırılır. Bu nöqtədə, prosesin mövcud dəsti yeni proses üçün istifadə ediləcək əlçatan dəsti əldə etmək üçün irsi dəst tərəfindən maskalanır.

Beləliklə, kommunal setcap bizə bu üç dəstin icazələrini verilmiş icra olunan fayl üçün müstəqil əlavə etməyə imkan verir. Qeyd edək ki, qrupların mənası fayl icazələri üçün bir qədər fərqli şərh olunur:

  • Mövcuddur fayl icazələri icra edilə bilən fayl üçün həmişə mövcud olan icazələrdir, hətta onu çağıran ana prosesdə belə icazə yoxdur. Onları əvvəllər “məcburi” icazələr adlandırırdılar.
  • miras qalmış fayl icazələri zəng prosesinin dəstindən icazələri silmək üçün də istifadə edilə bilən əlavə maskanı müəyyən edir. Onlar çağırış prosesinin miras alınmış dəstinə əlavə olaraq tətbiq edilir, ona görə də icazə yalnız hər iki dəstdə mövcud olduqda miras alınır.
  • Effektiv fayl icazələri əslində bir dəst deyil, sadəcə bir bitdir və əgər qurulubsa, bu o deməkdir ki, bütün mövcud dəst də yeni prosesin effektiv dəstinə kopyalanır. Bu, tələb etmək üçün xüsusi olaraq yazılmamış proseslərə icazələr əlavə etmək üçün istifadə edilə bilər. Bir bit olduğundan, onu hər hansı icazə üçün təyin etsəniz, bütün icazələr üçün təyin edilməlidir. Siz onu köhnə bit kimi düşünə bilərsiniz, çünki o, icazələrin onları dəstəkləməyən tətbiqlər tərəfindən istifadə edilməsinə icazə vermək üçün istifadə olunur.

vasitəsilə icazələri təyin edərkən setcap üç hərf e, i и p aiddir effektiv, irsi və əlçatandır müvafiq olaraq təyin edir. Beləliklə, əvvəlki spesifikasiya:

sudo setcap cap_net_raw=eip tracewalk

...qətnamənin olduğunu göstərir CAP_NET_RAW mövcud və irsi çoxluqlara əlavə edilməli və effektiv bit də təyin edilməlidir. Bu, faylda əvvəllər təyin edilmiş icazələri ləğv edəcək. Eyni anda birdən çox icazə təyin etmək üçün vergüllə ayrılmış siyahıdan istifadə edin:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

İcazələr Bələdçisi bütün bunları daha ətraflı müzakirə edir, amma ümid edirəm ki, bu yazı baş verənləri bir az aydınlaşdırdı. Qeyd etmək üçün yalnız bir neçə xəbərdarlıq və hiylə var.

Birincisi, fayl imkanları simvolik bağlantılarla işləmir - onları ikili faylın özünə tətbiq etməlisiniz (yəni simvolik əlaqənin hədəfi).

İkincisi, onlar şərh edilmiş skriptlərlə işləmirlər. Məsələn, icazə vermək istədiyiniz Python skriptiniz varsa, onu Python tərcüməçisinin özünə təyin etməlisiniz. Aydındır ki, bu potensial təhlükəsizlik problemidir, çünki o zaman həmin tərcüməçi ilə icra edilən bütün skriptlər müəyyən icazəyə malik olacaq, baxmayaraq ki, bu, onu SUID etməkdən xeyli yaxşıdır. Ən ümumi həll yolu C və ya ekvivalentində lazımi əməliyyatları yerinə yetirə bilən və onu skriptdən çağıra bilən ayrıca icra olunan faylın yazılması kimi görünür. Bu, ikili sistemdən istifadə edən Wireshark tərəfindən istifadə edilən yanaşmaya bənzəyir /usr/bin/dumpcap imtiyazlı əməliyyatları yerinə yetirmək üçün:

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

Üçüncüsü, mühit dəyişənindən istifadə etsəniz, fayl icazələri deaktiv edilir LD_LIBRARY_PATH aşkar təhlükəsizlik səbəbləri üçün(1). Eyni şeyə aiddir LD_PRELOAD, Mən bildiyim qədərilə.

1. Təcavüzkar açıq-aydın standart kitabxanalardan birini əvəz edə və istifadə edə bilər LD_LIBRARY_PATHöz kitabxanasını sistem kitabxanasına üstünlük verməklə çağırmağa məcbur etmək və buna görə də zəng edən proqramla eyni imtiyazlarla icra edilən öz ixtiyari koduna sahib olmaq.

Hamısı budur. Kurs proqramı haqqında ətraflı məlumatı buradan əldə edə bilərsiniz 24 yanvarda baş tutacaq vebinar.

Mənbə: www.habr.com

Добавить комментарий