Sanibonani nonke. Singena ngenkuthalo emsebenzini futhi sesivele silungiselela ukwethula okuningi okunamandla ngoJanuwari. Phakathi kokunye, ukubhaliswa kumenyezelwe ohlelweni olusha lwesifundo esiyintandokazi yawo wonke umuntu.
Izimvume zefayela zinikeza enye indlela ephephile yokusebenzisa i-SUID, kodwa ingabonakala idida kancane ekuqaleni.
Sonke siyazi ukuthi ama-binaries
Ngizokongela isikhathi esithile uma ufuna ukugwema ukufunda isihloko esingenhla ngokuningiliziwe: Empeleni, izimvume zefayela zivumela izinqubo ezisebenza njengempande futhi ngenxa yalokho zivunyelwe ukwenza okuthile ukuze kugcinwe amakhono athile, anomkhawulo.
Izimvume zinhle kumasevisi ahlala esebenza njengempande, kodwa kuthiwani ngezinsiza zomugqa womyalo? Ngenhlanhla, lokhu kuyasekelwa futhi uma unezinsiza ezifanele ezifakiwe. Uma usebenzisa Ubuntu, ngokwesibonelo uzodinga iphasela libcap2-bin
. Uzodinga futhi ukusebenzisa i-non-archaic kernel (kusuka kunguqulo 2.6.24).
Le misebenzi ivumela izimvume ukuthi zihlotshaniswe namafayela asebenzisekayo, afana nokusetha ibhithi ye-SUID, kodwa kuphela isethi ethile yezimvume. Isisetshenziswa setcap
esetshenziselwa ukwengeza nokukhipha izimvume efayeleni.
Isinyathelo sokuqala ukukhetha izimvume ozidingayo. Ngenxa yalesi sihloko, ngicabanga ukuthi kukhona ithuluzi lokuxilonga inethiwekhi elibizwa tracewalk
, okufanele ukwazi ukuyisebenzisa CAP_NET_RAW
.
Uma ucabanga ukuthi ukuhla lwemibhalo lapho okukhona kanambambili tracewalk
, ungakwazi ukwengeza le mvume kanje:
sudo setcap cap_net_raw=eip tracewalk
Unganaki isijobelelo okwamanje =eip
ukuthola isixazululo, ngizokhuluma ngalokho emizuzwaneni embalwa. Qaphela ukuthi igama lemvume libhalwe ngofeleba abancane. Manje ungahlola ukuthi izimvume uzilungiselele kahle yini nge:
setcap -v cap_new_raw=eip tracewalk
Noma ungafaka kuhlu zonke izimvume ezisethwe kokusebenzisekayo okunikeziwe:
getcap tracewalk
Ukuze uthole ireferensi, ungaphinda ususe zonke izimvume kokusebenzisekayo nge:
setcap -r tracewalk
Kuleli qophelo, kufanele ukwazi ukusebenzisa okusebenzisekayo njengomsebenzisi ongenamalungelo, futhi kufanele ikwazi ukusebenza ngamasokhethi aluhlaza, kodwa ingabi nawo amanye amalungelo umsebenzisi wempande anawo.
Ngakho sisho ukuthini lesi sijobelelo esiyinqaba? =eip
? Lokhu kudinga ukuqonda okuthile kwemvelo yezimvume. Inqubo ngayinye inamasethi amathathu ezimvume β ngempumelelo, ifa futhi kuvunyelwe:
- Isebenza kahle Izimvume yilezo ezichaza ukuthi inqubo empeleni ingayenza ini. Isibonelo, ayikwazi ukubhekana namasokhethi aluhlaza uma
CAP_NET_RAW
ayikho kusethi esebenzayo. - Iyatholakala izimvume yilezo inqubo evunyelwe ukuba nazo uma izicela zisebenzisa ucingo olufanele. Bavimbela inqubo ekwenzeni noma yini ngaphandle uma ibhalwe ngokuqondile ukuze icele imvume eshiwo. Lokhu kuvumela izinqubo ukuthi zibhalwe ukuze kwengezwe izimvume ezibalulekile kusethi esebenzayo kuphela ngesikhathi lapho zidingeka khona ngempela.
- Ifa izimvume yilezo ezingatholwa njengefa kusethi efinyelelekayo yenqubo yengane eyakhiwe. Ngesikhathi sokuhlinzwa
fork()
nomaclone()
inqubo yengane ihlale inikezwa ikhophi yezimvume zenqubo yomzali njengoba isasebenzisa okusebenzisekayo okufanayo ngaleso sikhathi. Isethi etholakala njengefa isetshenziswa umaexec()
(noma okulinganayo) kubizwa ukuze kufakwe elinye esikhundleni sefayela elisebenzisekayo. Kuleli qophelo, isethi etholakalayo yenqubo ifihlwa isethi etholwa njengefa ukuze kutholwe isethi efinyelelekayo ezosetshenziselwa inqubo entsha.
Ngakho uhlelo lokusebenza setcap
kusivumela ukuthi sengeze izimvume zalawa masethi amathathu ngokuzimela kokusebenzisekayo okunikeziwe. Qaphela ukuthi incazelo yamaqembu ihunyushwa ngokuhlukile kancane ngezimvume zefayela:
- Iyatholakala izimvume zefayela yilezo ezihlala zitholakala efayeleni elisebenzisekayo, noma ngabe inqubo yomzali eyibizile ibingenazo. Ayejwayele ukubizwa ngezimvume βeziphoqelelweβ.
- Ifa izimvume zefayela zichaza imaski eyengeziwe engasetshenziswa futhi ukususa izimvume kusethi yenqubo yokushaya. Asebenza ngaphezu kwesethi ezuzwe njengefa yenqubo yokushaya, ngakho imvume itholwa kuphela uma ikhona kuwo womabili amasethi.
- Isebenza kahle izimvume zefayela empeleni ziyingcosana nje eyodwa, hhayi isethi, futhi uma isethiwe, kusho ukuthi lonke isethi etholakalayo nalo likopishelwe kusethi esebenzayo yenqubo entsha. Lokhu kungasetshenziswa ukwengeza izimvume kuzinqubo ezingabhalwanga ngokuqondile ukuze zizicele. Njengoba iyibhithi eyodwa, uma uyisethela noma iyiphi imvume, kufanele isethelwe zonke izimvume. Ungacabanga ngayo njengengcezu yefa ngoba isetshenziselwa ukuvumela izimvume ukuthi zisetshenziswe izinhlelo zokusebenza ezingazisekeli.
Lapho ucacisa izimvume nge setcap
izinhlamvu ezintathu e
, i
ΠΈ p
Bukela ku ngempumelelo, ifa futhi kufinyeleleke amasethi ngokulandelana. Ngakho, imininingwane yangaphambilini:
sudo setcap cap_net_raw=eip tracewalk
...ikhombisa ukuthi isixazululo CAP_NET_RAW
kufanele kwengezwe kumasethi atholakalayo futhi atholakala njengefa nokuthi ibhithi elisebenzayo kufanele futhi limiswe. Lokhu kuzokhipha noma yiziphi izimvume ezisethwe ngaphambilini kufayela. Ukuze usethe izimvume eziningi ngesikhathi esisodwa, sebenzisa uhlu oluhlukaniswe ngokhefana:
sudo setcap cap_net_admin,cap_net_raw=eip tracewalk
Okokuqala, amandla efayela awasebenzi nama-symlink - kufanele uwasebenzise efayelini kanambambili ngokwalo (okungukuthi ithagethi ye-symlink).
Okwesibili, azisebenzi ngemibhalo ehunyushiwe. Isibonelo, uma uneskripthi se-Python ofuna ukusinikeza imvume, kufanele unikeze umhumushi we-Python uqobo. Ngokusobala lena inkinga yokuphepha engaba khona ngoba zonke izikripthi ezisetshenziswa nalowo mhumushi zizoba nemvume eshiwo, nakuba lokhu kusengcono kakhulu kunokukwenza i-SUID. Ukusebenza okuvame kakhulu kubonakala kuwukubhala okwehlukile okusebenzisekayo ku-C noma okulinganayo okungenza imisebenzi edingekayo futhi kuyibize ukusuka kuskripthi. Lokhu kufana nendlela esetshenziswa yi-Wireshark esebenzisa i-binary /usr/bin/dumpcap
ukwenza imisebenzi ethile:
$ getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
Okwesithathu, izimvume zefayela zivaliwe uma usebenzisa i-variable yemvelo LD_LIBRARY_PATH
ngezizathu zokuphepha ezisobala(1). Okufanayo kusebenza naku LD_PRELOAD
, ngolwazi ezinalo.
1. Njengoba umhlaseli ngokusobala angangena esikhundleni semitapo yolwazi ejwayelekile futhi ayisebenzise LD_LIBRARY_PATH
ukuphoqa ilabhulali yayo ukuthi ibizwe ngokuncamelayo kunesistimu eyodwa, futhi ngenxa yalokho ibe nekhodi yayo engasho lutho esetshenziswa ngamalungelo afanayo nohlelo lokusebenza lokushaya.
Yilokho kuphela. Imininingwane eyengeziwe ngohlelo lwezifundo ingatholakala kokuthi
Source: www.habr.com