Destûrên Pelê di Linux de

Silav hemû. Em bi awayekî aktîf dikevin nava xebatê û jixwe di meha Çile de gelek destanên bi hêz amade dikin. Di nav yên din de, qeydkirin ji bo qursek nû ya qursa bijare ya her kesî hate ragihandin. "Rêveberê Linux". Li hêviya destpêkirinê, em bi kevneşopî wergerên materyalên kêrhatî parve dikin.

Destûrên Pelê di Linux de

Destûrên pelan alternatîfek ewledar pêşkêşî pêkanînên SUID dikin, lê di destpêkê de dibe ku hinekî tevlihev xuya bike.


Em hemû dizanin ku binar BAŞÛR in biryareke xerab ji aliyê ewlehiyê ve. Xwezî, heke serîlêdana we hin îmtiyazên tixûbdar hewce dike, rêyek jêhatîtir heye ku jê re tê gotin destûrên pelê.

Ger hûn bixwazin ji xwendina gotara li jor bi hûrgulî dûr bisekinin ez ê demek we xilas bikim: Di bingeh de, destûrên pelan rê dide pêvajoyên ku wekî root dimeşin û ji ber vê yekê destûr tê dayîn ku tiştek bikin da ku hin kapasîteyên xwe biparêzin, bi sînor. vê lîsteyêgava ku ew îmtiyazan davêjin û ji hêla bikarhênerek bêdestûr ve têne rêve kirin. Ev tê vê wateyê ku heke êrîşkarek bi rê ve bibe ku pêvajoyek bi karanîna zêdebûnek tampon an îstismarek din tawîz bide, ew ê nikaribin ji bilî hin îmtiyazên hindiktirîn ên ku pêvajo bi rastî hewce dike sûd werbigirin.

Destûr ji bo karûbarên ku bi gelemperî her gav wekî root têne xebitandin pir girîng in, lê di derheqê karûbarên rêza fermanê de çi? Xwezî, ev jî tê piştgirî kirin bi şertê ku hûn karûbarên rast sazkirî bin. Heke hûn Ubuntu bikar tînin, hûn ê mînakî pakêtê hewce bikin libcap2-bin. Her weha hûn ê hewce bikin ku kernelek ne-arkaîk (ji guhertoya 2.6.24).

Van fonksiyonan dihêle ku destûr bi pelên îcrakar re têkildar bin, mîna danîna bit SUID, lê tenê ji bo komek destûrek taybetî. Utility setcap ji bo zêdekirin û rakirina destûrên ji pelek tê bikar anîn.

Gava yekem ev e ku hûn destûrên ku hûn hewce ne hilbijêrin. Ji bo xatirê vê gotarê, ez texmîn dikim ku amûrek tespîtkirina torê heye ku jê re tê gotin tracewalk, ku divê bikaribe bikar bîne soketên xav. Ev bi gelemperî hewce dike ku serîlêdan wekî root were xebitandin, lê dema ku tê dîtin navnîş derdikeve holê ku tenê destûr lazim e CAP_NET_RAW.

Bihesibînin ku hûn di pelrêça ku binary lê ye de ne tracewalk, hûn dikarin vê destûrê wiha lê zêde bikin:

sudo setcap cap_net_raw=eip tracewalk

Ji bo niha paşgira paşgira paşguh nekin =eip ji bo çareseriyê, ez ê di nav çend saniyan de qala wê bikim. Bala xwe bidinê ku navê destûrê bi tîpên piçûk e. Naha hûn dikarin kontrol bikin ka we destûr bi rêkûpêk mîheng kirine:

setcap -v cap_new_raw=eip tracewalk

An jî hûn dikarin hemî destûrên ku ji bo darvekerek diyarkirî hatine destnîşan kirin navnîş bikin:

getcap tracewalk

Ji bo referansê, hûn dikarin hemî destûrên ji îcrakarê jî jêbirin bi:

setcap -r tracewalk

Di vê nuqteyê de, divê hûn bikaribin wekî bikarhênerek bêdestûr bi darvekirinê bimeşînin, û divê ew bikaribe bi soketên xav re bixebite, lê ne xwediyê îmtiyazên din ên ku bikarhênerê root heye tune.

Îcar ev paşgira xerîb tê çi wateyê? =eip? Ji bo vê yekê hin têgihîştina cewhera destûran hewce dike. Her pêvajo sê komek destûr hene - bi bandor, mîras û destûr:

  • Tesîrane Destûr ew in ku diyar dikin ka pêvajoyek bi rastî dikare çi bike. Mînakî, ew nikare bi soketên xav re mijûl bibe heke CAP_NET_RAW ne di seta bi bandor de ye.
  • Berdeste destûr ew in ku pêvajoyek destûr dide ku hebe heke ew wan bi karanîna banga guncan bixwaze. Ew rê nadin ku pêvajoyek bi rastî tiştek bike heya ku ew bi taybetî hatî nivîsandin ku destûrnameya gotinê bixwaze. Ev dihêle ku pêvajo bêne nivîsandin da ku destûrên krîtîk li koma bandorker tenê ji bo heyama ku ew bi rastî hewce ne zêde bikin.
  • Inheritable destûr ew in ku dikarin di koma gihîştî ya pêvajoya zaroka şilkirî de werin mîras kirin. Di dema emeliyatê de fork() an clone() pêvajoya zarokê her gav kopiyek ji destûrên pêvajoya dêûbav tê dayîn ji ber ku ew hîn jî di wê nuqteyê de heman îcrakar dimeşe. Komek mîras tê bikaranîn dema ku exec() (an jî hevwate) tê gazî kirin ku pelê îcrakar bi yekî din biguhezîne. Di vê nuqteyê de, koma berdest a pêvajoyê ji hêla mîrasê ve tê mask kirin da ku koma gihîştî ya ku dê ji bo pêvajoya nû were bikar anîn were bidestxistin.

Ji ber vê yekê kêrhatî setcap destûrê dide me ku em destûrên van sê koman serbixwe ji bo darvekerek diyar zêde bikin. Têbînî ku wateya koman ji bo destûrên pelan hinekî cûda tê şîrove kirin:

  • Berdeste Destûrên pelê ew in ku her gav ji pelek îcrakar re peyda dibin, hetta pêvajoya dêûbavê ku jê re tê gotin tune be jî. Berê ji wan re destûrnameyên "bi zorê" dihatin gotin.
  • mîrasî Destûrên pelê maskek zêde diyar dikin ku di heman demê de dikare were bikar anîn da ku destûrên ji koma pêvajoya bangê jêbirin. Ew ji bilî koma mîrasê ya pêvajoya bangkirinê bicîh dikin, ji ber vê yekê destûr tenê heke di her du koman de hebe tê mîras kirin.
  • Tesîrane Destûrên pelê bi rastî tenê bitek in, ne komek, û heke were danîn, ev tê vê wateyê ku tevahiya koma berdest jî di nav pêvajoyek bi bandor a pêvajoya nû de tê kopî kirin. Ev dikare were bikar anîn da ku destûrên li pêvajoyên ku bi taybetî nehatine nivîsandin ji bo daxwazkirina wan zêde bikin. Ji ber ku ew yek bit e, heke hûn wê ji bo destûrek saz bikin, divê ew ji bo hemî destûran were danîn. Hûn dikarin wê wekî piçûkek mîras bihesibînin ji ber ku ew tê bikar anîn da ku destûrên ji hêla serîlêdanên ku piştgirî nadin bikar bînin.

Dema ku destûrên bi rêya diyar dikin setcap sê tîp e, i и p behs kirin bi bandor, mîras û gihîştî sets bi rêzê ve. Ji ber vê yekê, taybetmendiya berê:

sudo setcap cap_net_raw=eip tracewalk

... nîşan dide ku biryar CAP_NET_RAW divê li setên berdest û mîras bête zêdekirin û ew bit jî divê were danîn. Ev ê destûrnameyên ku berê li ser pelê hatine destnîşan kirin derbas bike. Ji bo ku hûn bi yekcarî gelek destûran saz bikin, navnîşek ji hev veqetandî bikar bînin:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Rêbernameya Destûran van hemîyan bi hûrgulî nîqaş dike, lê hêvîdarim ku vê postê tiştê ku diqewime piçekî şêlandibe. Tenê çend hişyarî û hîle hene ku werin gotin.

Pêşîn, kapasîteyên pelan bi symlinkan re naxebitin - pêdivî ye ku hûn wan li pelê binary bixwe (ango armanca sîmgirêk) bicîh bikin.

Ya duyemîn, ew bi senaryoyên şirovekirî naxebitin. Mînakî, heke we nivîsarek Python heye ku hûn dixwazin destûr jê re bidin, divê hûn wê ji wergêra Python bixwe re bişînin. Eşkere ye ku ev pirsgirêkek ewlehiyê ya potansiyel e ji ber ku wê hingê hemî nivîsarên ku bi wê wergêr re têne darve kirin dê xwediyê destûra diyarkirî bin, her çend ev hîn jî ji çêkirina wê SUID çêtir çêtir e. Rêbaza herî gelemperî dixuye ku ew e ku meriv bi C-ya an jî hevwatedarek veqetandî binivîse ku dikare karûbarên pêwîst pêk bîne û jê re ji senaryoyekê bang bike. Ev dişibihe nêzîkatiya ku ji hêla Wireshark ve hatî bikar anîn ku binaryek bikar tîne /usr/bin/dumpcap ji bo pêkanîna operasyonên îmtiyazê:

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

Ya sêyemîn, ger hûn guhêrbarek jîngehê bikar bînin destûrnameyên pelan têne neçalak kirin LD_LIBRARY_PATH ji ber sedemên ewlehiyê yên eşkere(1). Heman tişt ji bo LD_PRELOAD, bi qasî ku ez dizanim.

1. Ji ber ku êrîşkarek eşkere dikare yek ji pirtûkxaneyên standard biguhezîne û bikar bîne LD_LIBRARY_PATHku zorê bide pirtûkxaneya xwe ku di tercîha pergalê de were gazî kirin, û ji ber vê yekê koda xweya kêfî bi heman îmtiyazên wekî serlêdana bangê ve hatî darve kirin.

Navê pêger. Agahiyên bêtir di derbarê bernameya qursê de hûn dikarin li vir bibînin webinar, ku dê di 24ê Çile de pêk were.

Source: www.habr.com

Add a comment