Agħti CAP_NET_ADMIN lil OpenVPN mingħajr ma tagħtih root
Unità li tibda bħala utent mhux privileġġat xorta għandha bżonn is-sett korrett ta' kapaċitajiet. Iċċekkja l-unità, il-proċess ħaj u l-limitu exec, f'dan l-ordni.
Is-servizz jibda, il-log jilmenta li ma jistax jiftaħ l-apparat tun, u r-rotot qatt ma jidhru. Mexxi capsh --print fil-qoxra tiegħek u cap_net_admin hemmhekk, li jagħmel il-falliment jidher impossibbli. Dak li jvarja bejn il-qoxra tiegħek u l-unità huwa t-tranżizzjoni tal-privileġġi, mhux ir-rieda tal-qalba li tagħti l-kapaċità. Għaddi mill-erba verifiki hawn taħt fl-ordni u waqaf fl-ewwel waħda li tispjega d-differenza.
Issepara kapaċità nieqsa minn apparat moħbi
Żewġ fallimenti jidhru l-istess mil-linja tal-log. Proċess mingħajr CAP_NET_ADMIN ma jistax joħloq jew jikkonfigura l-interface tal-mina, u proċess li s-sandbox tiegħu taħbi /dev/net/tun ma jistax jiftħu xejn. Iż-żieda ta' kapaċitajiet mhix se ssewwi t-tieni każ.
Iċċekkja jekk l-apparat jeżistix ġewwa n-namespace tas-servizz qabel ma tibdel xejn. PrivateDevices=yes hija linja ta' tħaddim komuni li tneħħi n-nodu tun għal kollox, u ProtectSystem ristrett jista' jagħmel il-mogħdija tal-konfigurazzjoni taqra biss b'mod li jinqara bħala żball ta' permess. It-tnejn jipproduċu linji tal-log li jsemmu l-mina, u għalhekk il-kapaċitajiet jiġu akkużati. Ikkonferma l-ewwel li n-nodu hemm u jinfetaħ, imbagħad kompli.
Kun af liema sett ta' kapaċitajiet qed tara
Linux iżomm settijiet permessi, effettivi, ereditabbli, limitanti u ambjentali, u s-sett ambjentali huwa dak li jgħix minn exec minn utent li mhux root. Il-kapaċitajiet tal-fajl fuq il-binarju jistgħu jgħaddu drittijiet permessi u effettivi fl-exec, iżda biss sakemm xejn fil-katina ma jimblokka dak it-trasferiment.
Hawn sudo iqarraq bin-nies. Kmanda mħaddma permezz ta' sudo -u tibda tranżizzjoni ġdida ta' privileġġi u s-sett ambjentali jisparixxi, għalhekk l-istess verifika li tirnexxi bħala root tfalli hemm. Il-maniġer tas-servizzi huwa tranżizzjoni oħra, u ma jagħti xejn ambjentali sakemm l-unità ma tgħidx hekk.
Agħti l-kapaċità fl-unità, mhux f'wrapper
Sezzjoni minima tas-servizz għal mina li trid toħloq apparat u tinstalla rotot taqra hekk.
[Unit]
Description=OpenVPN client, office profile
After=network-online.target
[Service]
Type=notify
User=openvpn
Group=openvpn
NoNewPrivileges=yes
AmbientCapabilities=CAP_NET_ADMIN
CapabilityBoundingSet=CAP_NET_ADMIN
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/office.confAmbientCapabilities ipoġġi d-dritt fis-sett ambjentali qabel ma jibda l-proċess, u CapabilityBoundingSet ma jħallix il-proċess iżomm xi ħaġa barra minn dik il-lista. NoNewPrivileges=yes jimblokka l-kisba ta' privileġġi permezz ta' setuid jew kapaċitajiet tal-fajl, filwaqt li l-kapaċità li l-unità tagħti b'mod espliċitu għadha tapplika. Żid CAP_NET_BIND_SERVICE biss meta s-servizz irid jorbot port baxx, u qatt ma żżid CAP_SYS_ADMIN biss għax thread tal-forum għamel hekk.
Jekk l-unità ddawwar il-binarju permezz ta' sudo, neħħi l-wrapper. systemd diġà japplika User=, u dik is-saff żejjed hija l-aktar raġuni probabbli li s-sett ambjentali huwa vojt.
Ivverifika mal-proċess ħaj, mhux mal-fajl tal-unità
Aqra x'app lika l-maniġer fil-fatt, imbagħad aqra l-proċess li nissel.
unit=openvpn-client@office
systemctl show -p User -p AmbientCapabilities "$unit"
systemctl show -p MainPID --value "$unit" | xargs -r getpcaps
grep -E '^Cap(Eff|Amb)' /proc/$(systemctl show -p MainPID --value "$unit")/statusJekk l-unità telenka l-kapaċità u CapEff għadha ma għandhiex, xi drop-in qed jissupera s-setting jew pass ExecStartPre qed ibiddel l-ambjent. Fittex l-isem tal-unità fid-direttorji drop-in qabel ma tassumi li l-fajl ewlieni huwa l-awtorità, għax fajl aktar tard jirbaħ bil-kwiet. Jekk kemm l-unità kif ukoll il-proċess juru l-kapaċità u l-mina għadha tfalli, mur lura għall-verifiki tal-apparat u tal-mogħdija minflok ma twessa' s-sett limitanti. It-twessigħ tiegħu jaħbi l-kawża vera u jħalli s-servizz aktar privileġġat milli kien.
Ippreferi tħalli l-privileġġi wara l-bidu
OpenVPN jista' jibda b'privileġġi u mbagħad jinżel għal kont mhux privileġġat permezz tal-għażliet tiegħu user u group, filwaqt li persist-key u persist-tun iżommu l-mina użabbli wara. Dan l-arranġament idawwar it-tieqa li fiha l-proċess iżomm drittijiet, u spiss jaqbel aħjar milli tibda d-daemon kollu mhux privileġġat b'kapaċitajiet permanenti.
Liema mudell tagħżel, erġa' ibda l-unità u erġa' agħmel il-verifiki wara reboot, għax servizz li jaħdem minn qoxra root interattiva u jfalli fil-boot normalment huwa differenza fil-kapaċità, fl-apparat jew fil-permessi tal-fajl. Innota s-settings tal-unità ħdejn l-output tal-kapaċitajiet tal-proċess sabiex il-verifikatur li jmiss jara jekk aġġornament tal-pakkett jew drop-in ċaqlaqx il-limitu.