chroot yn methu ar OpenVPN: rheol AppArmor neu allu?
Nid yw ychwanegu llwybr at broffil AppArmor byth yn rhoi CAP_SYS_CHROOT, a gall chroot a wrthodwyd ddod o dri haen ar wahân. Penderfynwch pa un i'w newid.
Mae'r daemon yn cofnodi methiant chroot ac mae'r proffil yn edrych yn hael yn barod, felly'r atgyweiriad deniadol yw lledu rheol llwybr ac ailgychwyn. Fel arfer nid yw hynny'n newid dim, oherwydd mae chroot yn cael ei warchod gan fraint na allai'r proffil ei rhoi erioed. Mae penderfynu pa haen i'w chyffwrdd yn gofyn am dri gwiriad, ac maen nhw'n rhad: beth y caniateir i'r broses ei ddal, beth y mae'r polisi yn ei ganiatáu, a beth a dynnodd y lansiwr cyn i'r naill na'r llall o'r rheini fod o bwys.
Dau borth ar wahân, a dim ond un yn perthyn i AppArmor
Mae chroot angen CAP_SYS_CHROOT yn y gofod enw defnyddiwr y mae'r broses yn rhedeg ynddo. Fraint Linux arferol yw hon, ac mae'r cnewyllyn yn ei gwirio cyn i'r alwad wneud unrhyw beth â llwybrau. Ar wahân, gall proffil AppArmor sydd mewn modd gorfodi wrthod y gallu hyd yn oed pan fo gan y broses ef, oherwydd ymgynghorir â pholisi gorfodol yn ychwanegol at y credydau, nid yn eu lle. Mae'r gwahaniaeth yn bwysig yn ymarferol: mae'r ddwy haen yn byw mewn gwahanol ffeiliau ac fel arfer gwahanol bobl sy'n eu cynnal.
Mae'r ddau borth yn methu â'r un errno. Mae'r ddau yn cynhyrchu EPERM, ac mae'r ddau yn ymddangos fel cwyn caniatâd gyffredinol yng nghofnod y daemon, a dyna pam mae dyfalu am gynnwys y proffil yn gwastraffu cymaint o amser. Mae'r rheol llwybr yr oeddech ar fin ei hychwanegu yn rheoli mynediad ffeil ar ôl i chroot lwyddo; nid oes ganddi unrhyw berthynas â ph'un a yw'r llawdriniaeth yn cael ei chaniatáu o gwbl.
Mae trydydd porth yn sefyll uwchben y ddau. Os yw'r rheolwr gwasanaeth neu ryw lapio wedi cychwyn y broses heb y gallu yn ei set glo, ni all unrhyw newid AppArmor ei roi yn ôl, ac mae ychwanegu galluoedd at y proffil yn unig yn dogfennu bwriad na fydd y cnewyllyn yn ei barchu.
Darllenwch gyflwr y fraint cyn golygu polisi
Dechreuwch o'r broses sy'n rhedeg yn hytrach nag o'r ffurfweddiad rydych chi'n credu sy'n weithredol. Mae'r ffeil statws yn dangos pum masg gallu a'r fflag no-new-privileges, ac maen nhw'n ateb gwahanol gwestiynau:
grep -E '^(CapInh|CapPrm|CapEff|CapBnd|CapAmb|NoNewPrivs):' /proc/$(pidof openvpn)/status
sudo aa-status | grep -i openvpnCapEff yw'r set sy'n bwysig i'r alwad: mae gallu sy'n bresennol yn CapBnd ond yn absennol o CapEff yn cael ei ganiatáu gan y nenfwd ac nid yw'n cael ei ddal ar hyn o bryd. Mae CapAmb yn bwysig pan nad yw'r deuaidd yn freintiedig yn yr ystyr setuid arferol, oherwydd galluoedd amgylchynol yw'r ffordd y mae gwasanaeth yn cadw braint drwy exec heb alluoedd ffeil. Mae CapInh yn dal darnau y gellid eu hetifeddu drwy exec, ond dim ond pan fo set etifeddol y ffeil a weithredir yn caniatáu hynny, felly nid yw darn yno yn rhoi unrhyw beth ar ei ben ei hun.
Yna cadarnhewch pa broffil sydd mewn gwirionedd ynghlwm. Gall proses gael ei chyfyngu gan enw proffil na wnaethoch ei ddisgwyl, yn enwedig pan fo dosbarthiad yn anfon ei ffeil uned a'i broffil gyda'i gilydd, ac mae darllen /proc/PID/attr/current yn setlo hynny mewn un llinell. Cymharu eich ffeil wedi'i golygu â'r proffil y mae'r cnewyllyn yn ei adrodd yw y gwahaniaeth rhwng trwsio'r achos a golygu ffeil nad yw neb yn ei llwytho.
Ychwanegwch y rheol gallu dim ond pan fo'r trywydd archwilio'n dweud hynny
Mae cofnodion y cnewyllyn a'r archwiliad yn enwi'r haen sy'n gwrthod. Chwiliwch am wrthodiad sy'n cario'r llawdriniaeth capable a'r enw sys_chroot, ynghyd â'r proffil a'i cynhyrchodd. Os yw'r cofnod hwnnw'n bodoli, roedd y broses eisoes yn dal y gallu ac fe wrthododd AppArmor ef, a'r newid wedi'i dargedu yw rheol gallu y tu mewn i'r proffil go iawn:
capability sys_chroot,Cadwch ef fel darn yn y proffil sydd mewn gwirionedd ynghlwm, a gwirio'r allweddair yn erbyn cyfeirlyfr proffiliau apparmor.d yn hytrach na chopïo rheol o diwtorial diberthynas. Mae ei roi mewn include a rennir yn ei roi i bob rhaglen gyfyngedig sy'n tynnu'r ffeil honno, ac mae newid proffiliau i fodd cwyno yn cuddio'r gwrthodiad nesaf yn lle datrys hwn. Mae rheol y proffil yn tynnu gwrthodiad polisi; nid yw'n llunio braint, felly bydd proses na chafodd CAP_SYS_CHROOT yn ei set effeithiol erioed yn methu o hyd gyda'r rheol yn ei lle.
Os nad yw'r cofnod archwilio yn dangos unrhyw wrthodiad AppArmor o gwbl, rhowch y gorau i olygu'r proffil. Rydych chi'n edrych ar broblem credydau, ac mae'r gwaith sy'n weddill yn y ffeil uned neu yn y broses riant, nid yn iaith y polisi.
Mae'r rheolwr gwasanaeth yn cadw ei nenfwd ei hun
Mae systemd yn gosod set glo galluoedd ar gyfer pob gwasanaeth, ac yn ddiofyn mae'r set honno'n gul. Mae unrhyw beth a eithrir yno yn anghyraeddadwy i'r broses waeth beth mae'r proffil yn ei ddweud, a dyna pam y gall unedau calediedig fethu â llawdriniaeth a weithiodd pan gychwynnwyd y daemon â llaw. Mae'r cyfarwyddebau perthnasol yn hawdd eu darllen yn yr uned ac yn hawdd eu hanwybyddu pan fo'r rhaglen yn adrodd y methiant. Y drop-in a anfonir gan becyn dosbarthiad yw'r ffynhonnell arferol o nenfwd nad oes neb yn cofio ei ffurfweddu.
Mae codi'r nenfwd a rhoi'r gallu yn ddau newid, nid un. Mae cofnod yn y set glo yn dweud y caiff y broses ddal y gallu; nid yw'n ei ychwanegu at y set effeithiol, a gall NoNewPrivs atal dyrchafiad hwyrach rhag llwyddo hyd yn oed pan fo popeth arall yn cyd-fynd. Ychwanegwch yn unig yr hyn sydd ei angen ar y llawdriniaeth, cadwch weddill y caledu yn gyfan, a gwrthwynebwch y llwybr byr o roi pob gallu i wneud i un alwad basio.
Mae trefn yn bwysig yma hefyd. Newidiwch nenfwd yr uned yn gyntaf, gwiriwch fod CapEff bellach yn cynnwys y darn, ac yn unig wedyn penderfynwch a yw AppArmor yn dal i wrthod. Mae gwneud y ddau newid ar unwaith yn eich gadael yn dyfalu eto os bydd y methiant yn parhau.
Ar ôl i'r gwrthodiad glirio, gwiriwch y carchar ei hun
Mae chroot llwyddiannus yn symud y gwraidd, felly mae pob llwybr y mae'r daemon yn ei gyffwrdd wedyn yn cael ei ddatrys o fewn y goeden newydd. Bydd ffurfweddiad ar goll, nod dyfais absennol neu gyfeiriadur tystysgrif na chafodd ei gopïo bellach yn ymddangos fel gwall ffeil, ac mae'r gwall hwnnw'n broblem gynllun, nid yn broblem gallu. Darllenwch y digwyddiad nesaf yn lle ychwanegu caniatâd eang arall. Mae'r symudiad hefyd yn newid yr ystyr sydd i lwybr cymharol, a dyna pam mae canllawiau caledu yn mynnu llwybrau absoliwt yn ffurfweddiad y daemon.
Mae hefyd yn helpu i gofio beth nad yw chroot yn ei wneud. Ffin llwybr yw hi, nid blwch tywod: gall proses sy'n cadw'r fraint ddianc ohoni, a dyna pam mae'r gallu fel arfer yn cael ei ollwng ar ôl yr alwad a dyna pam y dylai'r cyfyngiad aros o amgylch y daemon. Cadw'r proffil AppArmor, y set glo galluoedd a'r cyfyngiadau system ffeiliau gyda'i gilydd yw pwynt yr ymarferiad, nid gweddill i'w dynnu pan fydd y gwasanaeth yn cychwyn.
Mae'r rheol penderfynu yn fyr. Os yw'r cofnod archwilio'n enwi AppArmor, ychwanegwch un rheol gallu at y proffil sydd ynghlwm. Os yw'r set effeithiol yn wag, trwsiwch nenfwd yr uned a threfn gollwng y fraint. Os nad y proffil yw'r un a olygwyd gennych, rhowch y gorau i olygu a dod o hyd i'r un go iawn.