Iṣẹ́ náà bẹ̀rẹ̀, àkọsílẹ̀ ń ráhùn pé kò lè ṣí ẹ̀rọ tun, àwọn ọ̀nà kò sì fi hàn rárá. Ṣe capsh --print nínú ṣẹ́ẹ̀lì rẹ kí cap_net_admin wà níbẹ̀ gan-an, èyí tí ó mú kùnà náà dàbí ohun tí kò ṣeé ṣe. Ohun tí ó yàtọ̀ láàrin ṣẹ́ẹ̀lì rẹ àti ẹ̀ka náà ni ìṣípòpadà àǹfààní, kì í ṣe ìfẹ́ kọ̀mpútà àárín láti fúnni ní agbára náà. Lọ nípasẹ̀ àwọn ìṣàyẹ̀wò mẹ́rin tí ó wà nísàlẹ̀ ní ìtẹ̀lé, kí ó sì dúró ní èyí àkọ́kọ́ tí ó ṣàlàyé àlàfo náà.

Ya agbára tí ó ṣáàsì kúrò sí ẹ̀rọ tí ó pamọ́

Àwọn kùnà méjì dàbí ọ̀kan náà láti orí ìlà àkọsílẹ̀. Ìlànà tí kò ní CAP_NET_ADMIN kò lè dá tàbí ṣètò ojú-ọ̀nà tunnel, ìlànà tí sandbox rẹ̀ fi /dev/net/tun pamọ́ kò sì lè ṣí i rárá. Fífi agbára kún kò ní tún ọ̀ràn kejì ṣe.

Ṣàyẹ̀wò bóyá ẹ̀rọ náà wà nínú ààyè orúkọ iṣẹ́ náà kí o tó ṣàtúnṣe ohunkóhun. PrivateDevices=yes jẹ́ ìlà ìfẹ́kúù kan tí ó wọ́pọ̀ tí ó yọ kókó tun kúrò pátápátá, ProtectSystem tí ó ní ààlà sì lè sọ ọ̀nà ìṣètò di àkọ́kọ́-àkọsílẹ̀ ní ọ̀nà tí a ó kà bí àṣìṣe àṣẹ. Àwọn méjèèjì ń dá àwọn ìlà àkọsílẹ̀ tí ó mẹ́nubà tunnel, ìdí nìyẹn tí a fi ń dá agbára lẹ́bi. Kọ́kọ́ jẹ́rìí pé kókó náà wà àti pé ó ṣeé ṣí, lẹ́yìn náà tẹ̀síwájú.

Mọ àkójọpọ̀ agbára tí o ń wò

Linux ń tọ́jú àwọn àkójọpọ̀ tí a gbà láàyè, tí ó ní ipa, tí ó lè jogún, tí ó ní ààlà àti ti àyíká, àkójọpọ̀ àyíká ni èyí tí ó yè kúrò lẹ́yìn exec láti ọ̀dọ̀ olùlò tí kì í ṣe root. Àwọn agbára fáìlì lórí binary lè fi àwọn ẹ̀tọ́ tí a gbà láàyè àti tí ó ní ipa lélẹ̀ ní exec, ṣùgbọ́n nígbà tí kò bá sí ohunkóhun nínú ẹ̀wọ̀n tí ó dè é.

Níbí ni sudo ti ń tàn àwọn ènìyàn jẹ. Àṣẹ tí a ń ṣe nípasẹ̀ sudo -u bẹ̀rẹ̀ ìṣípòpadà àǹfààní tuntun, àkójọpọ̀ àyíká sì pàdánù, nítorí náà ìṣàyẹ̀wò kan náà tí ó ṣàṣeyọrí gẹ́gẹ́ bí root kùnà níbẹ̀. Olùṣàkóso iṣẹ́ jẹ́ ìṣípòpadà mìíràn, kò sì fúnni ní ohunkóhun ti àyíká àyàfi bí ẹ̀ka náà bá sọ bẹ́ẹ̀.

Fúnni ní agbára nínú ẹ̀ka, kì í ṣe nínú ìbòrí

Apá iṣẹ́ tí ó kéré jùlọ fún tunnel tí ó nílò láti dá ẹ̀rọ kan àti láti fi àwọn ọ̀nà sórí ẹ̀rọ rí báyìí.

[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.conf

AmbientCapabilities fi ẹ̀tọ́ náà sínú àkójọpọ̀ àyíká kí ìlànà náà tó bẹ̀rẹ̀, CapabilityBoundingSet sì ń dènà ìlànà náà láti di ohunkóhun ní ìta àkójọ yẹn. NoNewPrivileges=yes ń dènà gbígba àǹfààní nípasẹ̀ setuid tàbí àwọn agbára fáìlì, nígbà tí agbára tí ẹ̀ka náà fúnni ní àfihàn ṣì ń ṣiṣẹ́. Fi CAP_NET_BIND_SERVICE kún nígbà tí iṣẹ́ náà bá nílò láti so ibùdó kéré mọ́, kí o má ṣe fi CAP_SYS_ADMIN kún rárá kìkì nítorí pé ọ̀rọ̀ àpéjọ kan ṣe bẹ́ẹ̀.

Bí ẹ̀ka náà bá fi binary náà sínú sudo, yọ ìbòrí náà kúrò. systemd ti ń lo User= tẹ́lẹ̀, ìpele àfikún yẹn ni ìdí tí ó ṣeé ṣe jùlọ tí àkójọpọ̀ àyíká fi ṣófo.

Ṣàyẹ̀wò lórí ìlànà tí ń ṣiṣẹ́, kì í ṣe fáìlì ẹ̀ka

Ka ohun tí olùṣàkóso náà lò ní ti gidi, lẹ́yìn náà ka ìlànà tí ó bí.

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")/status

Bí ẹ̀ka náà bá ṣe àkójọ agbára náà ṣùgbọ́n CapEff kò ní í síbẹ̀, drop-in kan ń yí ètò náà padà tàbí ìgbésẹ̀ ExecStartPre ń yí àyíká padà. Wá orúkọ ẹ̀ka náà nínú àwọn àkójọpọ̀ drop-in kí o tó ro pé fáìlì àkọ́kọ́ ni ó ní àṣẹ, nítorí fáìlì tí ó wá lẹ́yìn máa ń borí ní ìdákẹ́jẹ́. Bí ẹ̀ka àti ìlànà bá fi agbára hàn tí tunnel sì ṣì ń kùnà, padà sí àwọn ìṣàyẹ̀wò ẹ̀rọ àti ọ̀nà dípò fífẹ àkójọpọ̀ ààlà. Fífẹ̀ẹ́ rẹ̀ ń fi ìdí gidi pamọ́, ó sì fi iṣẹ́ náà sílẹ̀ pẹ̀lú àǹfààní tí ó pọ̀ ju ti tẹ́lẹ̀ lọ.

Yàn láti fi àwọn àǹfààní sílẹ̀ lẹ́yìn ìbẹ̀rẹ̀

OpenVPN lè bẹ̀rẹ̀ pẹ̀lú àǹfààní kí ó sì sọ̀ kalẹ̀ sí àkọsílẹ̀ tí kò ní àǹfààní nípasẹ̀ àwọn àṣàyàn user àti group tirẹ̀, pẹ̀lú persist-key àti persist-tun tí ń jẹ́ kí tunnel wà ní ṣíṣe lẹ́yìn náà. Ìṣètò yẹn ń dín ojú-ìwéjì tí ìlànà náà fi ní àwọn ẹ̀tọ́ kù, ó sì sábà bá a mu ju bíbẹ̀rẹ̀ gbogbo daemon láìsí àǹfààní pẹ̀lú àwọn agbára ayérayé.

Irú àwòrán tí o bá yàn, tún ẹ̀ka náà bẹ̀rẹ̀ kí o sì tún àwọn ìṣàyẹ̀wò ṣe lẹ́yìn àtúnsẹ̀, nítorí iṣẹ́ tí ó ń ṣiṣẹ́ láti inú ṣẹ́ẹ̀lì root oníbáraẹnisọ̀rọ̀ tí ó sì ń kùnà nígbà ìbẹ̀rẹ̀ sábà jẹ́ ìyàtọ̀ nínú agbára, ẹ̀rọ tàbí àṣẹ fáìlì. Kọ àwọn ètò ẹ̀ka náà lẹ́gbẹ̀ẹ́ àbájáde agbára ìlànà náà kí olùṣàyẹ̀wò tó ń bọ̀ lè rí bóyá ìmúdójúìwọ̀n àkójọ tàbí drop-in ti gbé ààlà náà.

Àwọn àpilẹ̀kọ tó jọra