Caniatâd Ffeil yn Linux

Helo i gyd. Rydym wrthi'n dechrau gweithio ac eisoes yn paratoi llawer o lansiadau pwerus ym mis Ionawr. Ymhlith eraill, mae cofrestriad wedi'i gyhoeddi ar gyfer ffrwd newydd o hoff gwrs pawb. "Gweinyddwr Linux". Wrth ragweld y lansiad, rydym yn draddodiadol yn rhannu cyfieithiadau o ddeunydd defnyddiol.

Caniatâd Ffeil yn Linux

Mae caniatadau ffeil yn cynnig dewis arall diogel i weithrediadau SUID, ond gallant ymddangos ychydig yn ddryslyd ar y dechrau.


Rydym i gyd yn gwybod bod binaries DE yn penderfyniad gwael o safbwynt diogelwch. Yn ffodus, os oes angen rhai breintiau cyfyngedig ar eich cais, mae yna ffordd fwy effeithlon o'r enw caniatadau ffeil.

Byddaf yn arbed peth amser i chi os ydych am osgoi darllen yr erthygl uchod yn fanwl: Yn y bôn, mae caniatâd ffeiliau yn caniatáu prosesau sy'n rhedeg fel gwraidd ac felly'n cael gwneud rhywbeth i gadw galluoedd penodol, cyfyngedig y rhestr honpan fyddant yn gollwng breintiau ac yn cael eu rhedeg gan ddefnyddiwr di-freintiedig. Mae hyn yn golygu, os bydd ymosodwr yn llwyddo i gyfaddawdu proses gan ddefnyddio gorlif byffer neu gamfanteisio arall, ni fydd yn gallu manteisio ar unrhyw beth heblaw am rai breintiau bach sydd eu hangen ar y broses mewn gwirionedd.

Mae caniatâd yn wych ar gyfer gwasanaethau sydd fel arfer bob amser yn rhedeg fel gwraidd, ond beth am gyfleustodau llinell orchymyn? Yn ffodus, mae hyn hefyd yn cael ei gefnogi ar yr amod bod y cyfleustodau cywir wedi'u gosod gennych. Os ydych chi'n defnyddio Ubuntu, bydd angen y pecyn arnoch er enghraifft libcap2-bin. Bydd angen i chi hefyd redeg cnewyllyn nad yw'n hynafol (o fersiwn 2.6.24).

Mae'r swyddogaethau hyn yn caniatáu i ganiatadau fod yn gysylltiedig â ffeiliau gweithredadwy, yn debyg i osod y did SUID, ond dim ond ar gyfer set benodol o ganiatadau. Cyfleustodau setcap a ddefnyddir i ychwanegu a dileu caniatadau o ffeil.

Y cam cyntaf yw dewis y caniatâd sydd ei angen arnoch. Er mwyn yr erthygl hon, rwy'n cymryd bod yna offeryn diagnostig rhwydwaith o'r enw tracewalk, a ddylai allu defnyddio socedi amrwd. Mae hyn fel arfer yn ei gwneud yn ofynnol i'r cais gael ei redeg fel gwraidd, ond wrth wylio y rhestr mae'n troi allan mai dim ond caniatâd sydd ei angen CAP_NET_RAW.

Gan dybio eich bod yn y cyfeiriadur lle mae'r deuaidd wedi'i leoli tracewalk, gallwch ychwanegu'r caniatâd hwn fel hyn:

sudo setcap cap_net_raw=eip tracewalk

Anwybyddwch yr ôl-ddodiad am y tro =eip i'w ddatrys, byddaf yn siarad am hynny mewn ychydig eiliadau. Sylwch fod enw'r caniatâd mewn llythrennau bach. Gallwch nawr wirio a ydych wedi ffurfweddu caniatâd yn gywir gyda:

setcap -v cap_new_raw=eip tracewalk

Neu gallwch restru'r holl ganiatadau a osodwyd ar gyfer gweithredadwy penodol:

getcap tracewalk

Er gwybodaeth, gallwch hefyd ddileu pob caniatâd o'r gweithredadwy gyda:

setcap -r tracewalk

Ar y pwynt hwn, dylech allu rhedeg y gweithredadwy fel defnyddiwr di-freintiedig, a dylai allu gweithio gyda socedi amrwd, ond heb fod ag unrhyw un o'r breintiau eraill sydd gan y defnyddiwr gwraidd.

Felly beth mae'r ôl-ddodiad rhyfedd hwn yn ei olygu? =eip? Mae hyn yn gofyn am rywfaint o ddealltwriaeth o natur caniatadau. Mae gan bob proses dair set o ganiatadau − effeithiol, etifeddol a ganiateir:

  • Effeithiol Caniatadau yw'r rhai sy'n diffinio'r hyn y gall proses ei wneud mewn gwirionedd. Er enghraifft, ni all ddelio â socedi amrwd os CAP_NET_RAW nad yw yn y set effeithiol.
  • Ar gael caniatadau yw'r rhai y caniateir i broses eu cael os yw'n gofyn iddynt ddefnyddio'r alwad briodol. Maent yn atal proses rhag gwneud unrhyw beth mewn gwirionedd oni bai ei bod wedi'i hysgrifennu'n benodol i ofyn am y caniatâd hwnnw. Mae hyn yn caniatáu i brosesau gael eu hysgrifennu i ychwanegu caniatâd critigol at y set effeithiol dim ond ar gyfer y cyfnod pan fydd eu hangen mewn gwirionedd.
  • Etifeddol caniatadau yw'r rhai y gellir eu hetifeddu yn y set hygyrch o'r broses plentyn silio. Yn ystod llawdriniaeth fork() neu clone() mae'r broses plentyn bob amser yn cael copi o ganiatadau'r broses rhiant gan ei fod yn dal i redeg yr un gweithredadwy bryd hynny. Defnyddir set etifeddadwy pan exec() (neu gyfwerth) yn cael ei alw i ddisodli'r ffeil weithredadwy am ffeil arall. Ar y pwynt hwn, mae set y broses sydd ar gael yn cael ei chuddio gan y set etifeddadwy i gael y set hygyrch a ddefnyddir ar gyfer y broses newydd.

Felly y cyfleustodau setcap yn caniatáu inni ychwanegu caniatâd y tair set hyn yn annibynnol ar gyfer gweithredadwy penodol. Sylwch fod ystyr grwpiau yn cael ei ddehongli ychydig yn wahanol ar gyfer caniatâd ffeiliau:

  • Ar gael caniatadau ffeil yw'r rhai sydd bob amser ar gael i ffeil gweithredadwy, hyd yn oed os nad oedd gan y rhiant-broses a'i galwodd. Roedden nhw'n arfer cael eu galw'n drwyddedau “gorfodol”.
  • Etifeddwyd mae caniatadau ffeil yn diffinio mwgwd ychwanegol y gellir ei ddefnyddio hefyd i ddileu caniatadau o set y broses alw. Maent yn berthnasol yn ychwanegol at set etifeddol y broses alw, felly dim ond os yw'n bodoli yn y ddwy set y caiff y caniatâd ei etifeddu.
  • Effeithiol Dim ond un darn yw caniatadau ffeil mewn gwirionedd, nid set, ac os caiff ei osod, mae'n golygu bod y set gyfan sydd ar gael hefyd yn cael ei chopïo i set effeithiol y broses newydd. Gellir defnyddio hwn i ychwanegu caniatâd at brosesau na chawsant eu hysgrifennu'n benodol i ofyn amdanynt. Gan ei fod yn un did, os ydych chi'n ei osod ar gyfer unrhyw ganiatâd, rhaid ei osod ar gyfer pob caniatâd. Gallwch feddwl amdano fel darn etifeddiaeth oherwydd fe'i defnyddir i ganiatáu i geisiadau nad ydynt yn eu cefnogi ddefnyddio caniatâd.

Wrth nodi caniatâd trwy setcap tri llythyren e, i и p ymwneud â effeithiol, etifeddadwy a hygyrch setiau yn y drefn honno. Felly, y fanyleb gynharach:

sudo setcap cap_net_raw=eip tracewalk

...yn dangos bod y penderfyniad CAP_NET_RAW rhaid ychwanegu at y setiau sydd ar gael ac etifeddadwy a bod yn rhaid gosod y did effeithiol hefyd. Bydd hyn yn diystyru unrhyw ganiatadau a osodwyd yn flaenorol ar y ffeil. I osod sawl caniatâd ar unwaith, defnyddiwch restr wedi'i gwahanu gan goma:

sudo setcap cap_net_admin,cap_net_raw=eip tracewalk

Canllaw Caniatâd yn trafod hyn i gyd yn fanylach, ond gobeithio bod y post hwn wedi chwalu ychydig ar yr hyn sy'n digwydd. Dim ond ychydig o gafeatau a thriciau sydd ar ôl i'w crybwyll.

Yn gyntaf, nid yw galluoedd ffeil yn gweithio gyda symlinks - mae'n rhaid i chi eu cymhwyso i'r ffeil ddeuaidd ei hun (h.y. targed y cyswllt syml).

Yn ail, nid ydynt yn gweithio gyda sgriptiau wedi'u dehongli. Er enghraifft, os oes gennych sgript Python yr ydych am aseinio caniatâd iddo, rhaid i chi ei aseinio i'r cyfieithydd Python ei hun. Yn amlwg mae hwn yn fater diogelwch posibl oherwydd yna bydd gan bob sgript a weithredir gyda'r cyfieithydd hwnnw'r caniatâd penodol, er bod hyn yn dal yn sylweddol well na'i wneud yn SUID. Ymddengys mai'r ateb mwyaf cyffredin yw ysgrifennu gweithredadwy ar wahân yn C neu gyfwerth a all gyflawni'r gweithrediadau angenrheidiol a'i alw o sgript. Mae hyn yn debyg i'r dull a ddefnyddir gan Wireshark sy'n defnyddio deuaidd /usr/bin/dumpcap i gyflawni gweithrediadau breintiedig:

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

Yn drydydd, mae caniatâd ffeiliau wedi'u hanalluogi os ydych chi'n defnyddio newidyn amgylchedd LD_LIBRARY_PATH am resymau diogelwch amlwg(1). Mae'r un peth yn berthnasol i LD_PRELOAD, hyd y gwn i.

1. Gan y gall ymosodwr yn amlwg yn disodli un o'r llyfrgelloedd safonol a defnydd LD_LIBRARY_PATHi orfodi ei llyfrgell i gael ei galw yn hytrach na'r system yn un, ac felly cael ei chod mympwyol ei hun wedi'i weithredu gyda'r un breintiau â'r cais galw.

Dyna i gyd. Mae rhagor o fanylion am raglen y cwrs ar gael yn gweminar, a gynhelir ar Ionawr 24.

Ffynhonnell: hab.com

Ychwanegu sylw