Иҷозатҳои файл дар Linux

Салом ба ҳама. Мо фаъолона ба кор шуруъ карда истодаем ва аллакай дар мохи январь бисьёр стартхои пуриктидор тайёр карда истодаем. Дар байни дигарон, бақайдгирӣ барои ҷараёни нави курси дӯстдоштаи ҳама эълон карда шудааст. "Администратори Linux". Дар арафаи оғози кор, мо ба таври анъанавӣ тарҷумаҳои маводи муфидро мубодила мекунем.

Иҷозатҳои файл дар Linux

Иҷозатҳои файл алтернативаи бехатарро ба иҷрошавандаҳои SUID пешниҳод мекунанд, аммо дар аввал метавонад каме печида ба назар расад.


Ҳамаи мо медонем, ки бинарӣ ЧАНУБЙ инҳоянд қарори бад аз нуқтаи назари амният. Хушбахтона, агар аризаи шумо баъзе имтиёзҳои маҳдудро талаб кунад, роҳи самараноктаре вуҷуд дорад иҷозатҳои файл.

Агар шумо хоҳед, ки ба таври муфассал аз хондани мақолаи дар боло овардашуда худдорӣ кунед, ман шуморо каме вақт сарфа мекунам: Аслан, иҷозатҳои файл ба равандҳое иҷозат медиҳанд, ки ҳамчун реша кор мекунанд ва аз ин рӯ иҷозат дода мешавад, ки барои нигоҳ доштани қобилиятҳои муайян коре кунанд. ин рӯйхатвақте ки онҳо имтиёзҳоро тарк мекунанд ва аз ҷониби корбари беимтиёз идора карда мешаванд. Ин маънои онро дорад, ки агар ҳамлакунанда бо истифода аз изофаи буферӣ ё дигар эксплуататсия равандро вайрон кунад, онҳо наметавонанд аз чизе ғайр аз имтиёзҳои ҳадди ақал, ки раванд воқеан ниёз доранд, истифода баранд.

Иҷозатҳо барои хидматҳое, ки одатан ҳамеша ҳамчун реша кор мекунанд, бузурганд, аммо дар бораи утилитаҳои сатри фармон чӣ гуфтан мумкин аст? Хушбахтона, ин инчунин дастгирӣ мешавад, агар шумо утилитаҳои дурустро насб карда бошед. Агар шумо Ubuntu-ро истифода баред, масалан, ба шумо баста лозим мешавад libcap2-bin. Ба шумо инчунин лозим меояд, ки ядрои ғайриархаикӣ (аз версияи 2.6.24).

Ин функсияҳо имкон медиҳанд, ки иҷозатҳоро бо файлҳои иҷрошаванда, монанд ба танзими бит SUID, вале танҳо барои маҷмӯи мушаххаси иҷозатҳо алоқаманд кунанд. Утилита setcap барои илова ва хориҷ кардани иҷозатҳо аз файл истифода мешавад.

Қадами аввал ин интихоб кардани иҷозатҳое, ки ба шумо лозим аст. Ба хотири ин мақола, ман тахмин мекунам, ки як воситаи ташхиси шабакавӣ вуҷуд дорад tracewalk, ки бояд истифода бурда тавонанд розеткаҳои хом. Ин одатан талаб мекунад, ки барнома ҳамчун реша иҷро карда шавад, аммо ҳангоми дидан рӯйхат маълум мешавад, ки танхо ичозат лозим аст CAP_NET_RAW.

Фарз мекунем, ки шумо дар директорияе ҳастед, ки бинарӣ ҷойгир аст tracewalk, шумо метавонед ин иҷозатро ба таври зерин илова кунед:

sudo setcap cap_net_raw=eip tracewalk

Ҳоло ба суффикс аҳамият надиҳед =eip барои ҳалли, ман дар ин бора дар як чанд сония гап мезанам. Дар хотир доред, ки номи иҷозат бо ҳарфҳои хурд аст. Шумо ҳоло метавонед тафтиш кунед, ки оё шумо иҷозатҳоро дуруст танзим кардаед бо:

setcap -v cap_new_raw=eip tracewalk

Ё шумо метавонед ҳамаи иҷозатҳои барои иҷрошавандаи додашударо номбар кунед:

getcap tracewalk

Барои истинод, шумо инчунин метавонед ҳамаи иҷозатҳоро аз файли иҷрошаванда бо:

setcap -r tracewalk

Дар ин лаҳза, шумо бояд файли иҷрошавандаро ҳамчун корбари беимтиёз иҷро кунед ва он бояд бо розеткаҳои хом кор кунад, аммо ҳеҷ гуна имтиёзҳои дигареро, ки корбари реша дорад, надошта бошад.

Пас, ин суффикси аҷиб чӣ маъно дорад? =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 табдил додани он ба таври назаррас беҳтар аст. Чунин ба назар мерасад, ки ҳалли маъмултарин ин навиштани файли иҷрошавандаи алоҳида дар C ё муодили он аст, ки метавонад амалиёти заруриро иҷро кунад ва онро аз скрипт даъват кунад. Ин ба равише, ки 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 январ баргузор мегардад.

Манбаъ: will.com

Илова Эзоҳ