Салом ба ҳама. Мо фаъолона ба кор шуруъ карда истодаем ва аллакай дар мохи январь бисьёр стартхои пуриктидор тайёр карда истодаем. Дар байни дигарон, бақайдгирӣ барои ҷараёни нави курси дӯстдоштаи ҳама эълон карда шудааст.
Иҷозатҳои файл алтернативаи бехатарро ба иҷрошавандаҳои 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
ки китобхонаи худро маҷбур созад, ки бартарӣ ба система даъват карда шавад ва аз ин рӯ дорои коди худсаронаи худро бо ҳамон имтиёзҳое, ки замимаи даъваткунанда иҷро шудааст, дошта бошад.
Ҳамааш ҳамин. Тафсилоти бештар дар бораи барномаи курсро метавонед дар ин ҷо пайдо кунед
Манбаъ: will.com