Ceadan faidhle ann an Linux

Hi uile. Tha sinn gu gnìomhach a’ faighinn a-steach don obair agus tha sinn mu thràth ag ullachadh mòran chuirmean cumhachdach san Fhaoilleach. Am measg eile, chaidh clàradh ainmeachadh airson sruth ùr den chùrsa as fheàrr leis a h-uile duine. "Rianadair Linux". Le dùil ris an fhoillseachadh, bidh sinn gu traidiseanta a’ roinn eadar-theangachaidhean de stuthan feumail.

Ceadan faidhle ann an Linux

Tha ceadan faidhle a’ tabhann roghainn eile sàbhailte an àite SUID executables, ach faodaidh iad a bhith beagan troimh-chèile an toiseach.


Tha fios againn uile gu bheil binaries SUIDHEACHADH an e droch cho-dhùnadh bho shealladh tèarainteachd. Gu fortanach, ma tha feum aig an tagradh agad air sochairean cuibhrichte, tha dòigh nas èifeachdaiche air a ghairm ceadan faidhle.

Sàbhalaidh mi beagan ùine dhut ma tha thu airson an artaigil gu h-àrd a sheachnadh gu mionaideach: Gu bunaiteach, tha ceadan faidhle a’ ceadachadh pròiseasan a ruitheas mar fhreumh agus mar sin tha cead aca rudeigin a dhèanamh gus comasan sònraichte a chumail, cuibhrichte an liosta seonuair a bheir iad seachad sochairean agus gu bheil iad air an ruith le neach-cleachdaidh gun bhuannachd. Tha seo a’ ciallachadh ma thèid aig neach-ionnsaigh air pròiseas a mhilleadh le bhith a’ cleachdadh tar-shruth bufair no brath eile, cha bhith e comasach dhaibh brath a ghabhail air rud sam bith ach na sochairean as lugha a dh’ fheumas am pròiseas.

Tha ceadan math airson seirbheisean a bhios mar as trice a’ ruith mar bhunait, ach dè mu dheidhinn goireasan loidhne-àithne? Gu fortanach, tha seo cuideachd a’ faighinn taic fhad ‘s a tha na goireasan ceart agad air an stàladh. Ma tha thu a’ cleachdadh Ubuntu, mar eisimpleir bidh feum agad air a’ phacaid libcap2-bin. Feumaidh tu cuideachd kernel neo-àrsaidh a ruith (bho dreach 2.6.24).

Leigidh na gnìomhan sin le ceadan a bhith co-cheangailte ri faidhlichean so-ghnìomhaichte, coltach ri bhith a’ suidheachadh am pìos SUID, ach dìreach airson seata ceadan sònraichte. Goireas setcap air a chleachdadh gus ceadan bho fhaidhle a chur ris agus a thoirt air falbh.

Is e a’ chiad cheum na ceadan a tha a dhìth ort a thaghadh. Air sgàth an artaigil seo, tha mi a 'gabhail ris gu bheil inneal breithneachaidh lìonra ris an canar tracewalk, a bu chòir a bhith comasach air a chleachdadh socaidean amh. Mar as trice feumaidh seo an aplacaid a ruith mar fhreumh, ach nuair a choimheadas e an liosta thionndaidh e a-mach nach eil feum air ach cead CAP_NET_RAW.

A’ gabhail ris gu bheil thu san eòlaire far a bheil am binary suidhichte tracewalk, faodaidh tu an cead seo a chur ris mar seo:

sudo setcap cap_net_raw=eip tracewalk

Na leig seachad an iar-leas airson a-nis =eip airson fuasgladh, bruidhnidh mi mu dheidhinn sin ann an diog no dhà. Thoir an aire gu bheil an t-ainm cead ann an litrichean beaga. Faodaidh tu a-nis dearbhadh a bheil thu air ceadan a rèiteachadh gu ceart le:

setcap -v cap_new_raw=eip tracewalk

No faodaidh tu a h-uile cead a chaidh a shuidheachadh airson gnìomh sònraichte a liostadh:

getcap tracewalk

Airson fiosrachadh, faodaidh tu cuideachd a h-uile cead a thoirt air falbh bhon cho-ghnìomhaiche le:

setcap -r tracewalk

Aig an ìre seo, bu chòir gum biodh e comasach dhut an gnìomh a ruith mar neach-cleachdaidh gun bhuannachd, agus bu chòir dha a bhith comasach air obrachadh le socaidean amh, ach gun a bhith aig gin de na sochairean eile a tha aig a’ chleachdaiche freumh.

Mar sin dè a tha an iar-leasachan neònach seo a’ ciallachadh? =eip? Feumaidh seo beagan tuigse air nàdar nan ceadan. Tha trì seataichean de cheadan aig gach pròiseas − èifeachdach, sealbhach agus ceadaichte:

  • Èifeachdach Is e ceadan an fheadhainn a tha a’ mìneachadh dè as urrainn do phròiseas a dhèanamh. Mar eisimpleir, chan urrainn dha dèiligeadh ri socaidean amh ma tha CAP_NET_RAW chan eil e san t-seata èifeachdach.
  • Ri fhaighinn is e ceadan an fheadhainn a tha ceadaichte do phròiseas ma dh’iarras e orra a’ ghairm iomchaidh a chleachdadh. Bidh iad a’ cur casg air pròiseas bho bhith a’ dèanamh dad mura deach a sgrìobhadh gu sònraichte gus an cead sin iarraidh. Leigidh seo le pròiseasan a bhith air an sgrìobhadh gus ceadan èiginneach a chur ris an t-seata èifeachdach a-mhàin airson na h-ùine nuair a tha feum orra.
  • oighreachail Is e ceadan an fheadhainn a dh'fhaodar a shealbhachadh anns an t-seata ruigsinneach den phròiseas leanabh sìolachaidh. Rè obair-lannsa fork() no clone() tha pròiseas an leanaibh an-còmhnaidh a’ faighinn leth-bhreac de cheadan a’ phròiseas phàrant leis gu bheil e fhathast a’ ruith an aon rud a ghabhas coileanadh aig an àm sin. Bithear a’ cleachdadh seata oighreachail nuair a exec() (no co-ionann) air a ghairm gus fear eile a chuir an àite an fhaidhle so-ghnìomhaichte. Aig an ìre seo, tha an seata pròiseas a tha ri fhaighinn air a chuartachadh leis an t-seata oighreachail gus an seata ruigsinneach fhaighinn a thèid a chleachdadh airson a’ phròiseas ùr.

Mar sin an goireas setcap a’ leigeil leinn ceadan nan trì seataichean sin a chur ris gu neo-eisimeileach airson gnìomh sònraichte. Thoir an aire gu bheil brìgh bhuidhnean air a mhìneachadh beagan eadar-dhealaichte airson ceadan faidhle:

  • Ri fhaighinn Is e ceadan faidhle an fheadhainn a tha an-còmhnaidh rim faighinn le faidhle so-ghnìomhaichte, eadhon ged nach robh iad aig a’ phròiseas pàrant a dh ’ainmich e. B’ e ceadan “èignichte” a bh’ orra.
  • Oidhreachd bidh ceadan faidhle a’ mìneachadh masg a bharrachd a ghabhas cleachdadh cuideachd gus ceadan a thoirt air falbh bho sheata a’ phròiseas gairm. Bidh iad a’ buntainn a bharrachd air an t-seata shealbhaichte den phròiseas gairm, agus mar sin chan fhaighear an cead ach ma tha e anns an dà sheata.
  • Èifeachdach chan eil ann an ceadan faidhle ach beagan, chan e seata, agus ma tha e air a shuidheachadh, tha e a’ ciallachadh gu bheil an seata iomlan a tha ri fhaighinn cuideachd air a chopaigeadh a-steach do sheata èifeachdach a’ phròiseis ùr. Faodar seo a chleachdadh gus ceadan a chur ri pròiseasan nach deach a sgrìobhadh gu sònraichte airson an iarraidh. Leis gu bheil e aon phìos, ma shuidhicheas tu e airson cead sam bith, feumaidh e a bhith air a shuidheachadh airson a h-uile cead. Faodaidh tu smaoineachadh air mar pìos dìleab oir tha e air a chleachdadh gus ceadan a chleachdadh le tagraidhean nach eil a’ toirt taic dhaibh.

Nuair a thèid ceadan a shònrachadh tro setcap tri litrichean e, i и p thoir iomradh air èifeachdach, so-ruigsinneach agus ruigsinneach seataichean fa leth. Mar sin, an sònrachadh na bu tràithe:

sudo setcap cap_net_raw=eip tracewalk

... a' nochdadh gu bheil an rùn CAP_NET_RAW feumar a chur ris na seataichean a tha rim faighinn agus a tha rim faighinn agus gum feumar am pìos èifeachdach a shuidheachadh cuideachd. Bidh seo a’ dol thairis air ceadan sam bith a chaidh a shuidheachadh roimhe air an fhaidhle. Gus iomadh cead a shuidheachadh aig an aon àm, cleachd liosta dealaichte le cromag:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Stiùireadh cead a’ bruidhinn mu dheidhinn seo gu lèir ann am barrachd mionaideachd, ach an dòchas gu bheil am post seo air mìneachadh beagan a dhèanamh air na tha a’ dol. Chan eil ach beagan rabhaidhean agus cleasan air fhàgail airson iomradh a thoirt orra.

An toiseach, chan obraich comasan faidhle le symlinks - feumaidh tu an cur an sàs anns an fhaidhle binary fhèin (ie targaid a’ symlink).

San dàrna h-àite, chan eil iad ag obair le sgriobtaichean mìneachaidh. Mar eisimpleir, ma tha sgriobt Python agad a tha thu airson cead a shònrachadh dha, feumaidh tu a shònrachadh don eadar-theangair Python fhèin. Gu follaiseach tha seo na chùis tèarainteachd a dh’ fhaodadh a bhith ann oir bidh an cead ainmichte aig a h-uile sgriobt a thèid a chuir gu bàs leis an eadar-theangair sin, ged a tha seo fhathast gu math nas fheàrr na bhith ga dhèanamh SUID. Tha e coltach gur e an dòigh-obrach as cumanta a bhith a’ sgrìobhadh gnìomh air leth ann an C no a leithid a dh’ fhaodas na h-obraichean riatanach a dhèanamh agus a ghairm bho sgriobt. Tha seo coltach ris an dòigh-obrach a chleachd Wireshark a bhios a’ cleachdadh binary /usr/bin/dumpcap gus gnìomhan sochair a dhèanamh:

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

San treas àite, tha ceadan faidhle à comas ma chleachdas tu caochladair àrainneachd LD_LIBRARY_PATH airson adhbharan tèarainteachd follaiseach(1). Tha an aon rud a 'buntainn ri LD_PRELOAD, cho fad 's is aithne dhomh.

1. Leis gum faod neach-ionnsaigh gu follaiseach aon de na leabharlannan àbhaisteach agus cleachdadh a chuir an àite LD_LIBRARY_PATHgus toirt air an leabharlann aige a bhith air a ghairm an àite an t-siostam aon, agus mar sin a chòd neo-riaghailteach fhèin a chuir gu bàs leis na h-aon sochairean ris an tagradh gairm.

Sin e. Gheibhear tuilleadh fiosrachaidh mu phrògram a’ chùrsa aig webinar, a thèid a chumail air 24 Faoilleach.

Source: www.habr.com

Cuir beachd ann