Àwọn agbára Linux wo ni ìlànà VPN rẹ nílò?
Ìṣètò ìlà-ìsọ̀rọ̀, àwọn ọ̀nà, àyè sí ẹ̀rọ àti àwọn socket déédé jẹ́ àwọn ẹ̀tọ́ ọ̀tọ̀. Dárúkọ iṣẹ́ tí ó kùnà kí o tó fúnni ní CAP_NET_ADMIN.
Démonù VPN nílò àwọn iṣẹ́ nẹ́tíwọ́kì alágbára pàtàkì bí ó tilẹ̀ jẹ́ pé àwọn ohun-èlò déédé ń ṣí àwọn socket tí ń jáde láìsí agbára kankan. Nínú àlàfo yẹn ni ọ̀pọ̀lọpọ̀ àṣìṣe agbára ti ń bẹ̀rẹ̀: ẹnìkan rí àṣìṣe àṣẹ, ó fúnni ní gbogbo àkójọ, iṣẹ́ sì ń ṣiṣẹ́ fún àwọn ìdí tí ẹnikẹ́ni kò lè ṣàlàyé rẹ̀ lẹ́yìn. Ìrìn àwọn ìlànà tí ó wà nísàlẹ̀ ń bẹ̀rẹ̀ láti inú iṣẹ́ tí ó kùnà, ó so ó mọ́ agbára kan, lẹ́yìn náà ó yẹ àyíká tí ìlànà náà ń ṣiṣẹ́ nínú rẹ̀ gẹ́gẹ́ bí ó ti rí. Ṣíṣe bí root tí kò ní ààlà jẹ́ ìdáhùn tí ó tọ́ fún àwọn ìfilélẹ̀ kan, ṣùgbọ́n ó yẹ kí ó jẹ́ ìpinnu kì í ṣe àìlópin ìpilẹ̀.
Bẹ̀rẹ̀ láti inú iṣẹ́ tí ó kùnà
Ka àṣìṣe náà kí o tó ka ìwé ìkọ́ni. «A kò gba iṣẹ́ náà láàyè» nígbà ìyípadà ìlà-ìsọ̀rọ̀, kíkọ̀ láti ṣí kókó ẹ̀rọ àti ìkùnà bind lórí ibùdó kékeré jẹ́ àwọn ìṣòro mẹ́ta ọ̀tọ̀ pẹ̀lú àwọn àṣẹ mẹ́ta ọ̀tọ̀. Tí ìlànà bá bẹ̀rẹ̀ tí ó sì kùnà ní ìyípadà ọ̀nà àkọ́kọ́ nìkan, ìyẹn tún sọ pé ṣíṣe ìlà-ìsọ̀rọ̀ ti ṣẹ́gun tẹ́lẹ̀, èyí tí ó ń dín ìdáhùn kù.
Tún ìkùnà náà ṣe pẹ̀lú iṣẹ́ tí ó dúró, lẹ́yìn náà bẹ̀rẹ̀ rẹ̀ ní iwájú lábẹ́ olùlò kan náà tí ìmúṣẹ bá gbà á. Àṣìṣe tí o lè rí dára ju ìlà àkọsílẹ̀ tí o ní láti dífọ́, ó sì ń fi ìyàtọ̀ láàrin ìṣòro agbára àti ìkọ̀ láti SELinux tàbí AppArmor hàn kedere.
So iṣẹ́ kọ̀ọ̀kan mọ́ agbára kan
Tábìlì jẹ́ àwòrán ìbẹ̀rẹ̀, kì í ṣe àròpo ìwé ìmúṣẹ:
| Operation | Usual authority | Watch for |
|---|---|---|
| Create or configure tun/tap | CAP_NET_ADMIN in the relevant namespace | Creating the device and opening it are separate steps |
| Add routes, rules, firewall entries | CAP_NET_ADMIN | Same capability, different namespace than you think |
| Open /dev/net/tun | Device permissions, not a capability | Group membership or a udev rule may be enough |
| Raw sockets | CAP_NET_RAW | Needed by some user-space tunnel implementations |
| Bind a port below 1024 | CAP_NET_BIND_SERVICE | Irrelevant for most modern tunnel ports |
Àwọn ìlà méjì nínú tábìlì yẹn ni àwọn ènìyàn ń dà pọ̀. Ṣíṣí /dev/net/tun jẹ́ ìbéèrè àṣẹ fáìlì; bíbẹ kérúbù pé kí ó ṣètò ohun tí o ṣí jẹ́ ìbéèrè agbára. Fífúnni ní CAP_NET_ADMIN kò tún kókó ẹ̀rọ tí olùlò iṣẹ́ rẹ kò lè kà ṣe, àti títún kókó náà kò fún ọ ní agbára ọ̀nà. Yẹ àwọn méjèèjì kí o tó yí èyíkéyìí padà.
WireGuard nínú kérúbù àti àwọn ètò ọ̀nà-ìsàlẹ̀ nínú àyè olùlò kò tún ní àwọn àìní kan náà. Ọ̀nà mọ́dùùlù kérúbù ń ṣètò ìlà-ìsọ̀rọ̀ tí ó wà tẹ́lẹ̀ nípasẹ̀ netlink, nígbà tí ìmúṣẹ nínú àyè olùlò lè tún nílò ẹ̀rọ àti, fún àwọn ọ̀nà gbígbé kan, socket àìtọ́.
Ka àyíká: iṣẹ́, kọ́ńtẹ́nà tàbí shell
Agbára kan nínú ààyè orúkọ nẹ́tíwọ́kì ti olùgbàlejò lè ní ipa tí ó pọ̀ ju iṣẹ́ kan náà nínú àkójọ tí a ti yà sọ́tọ̀ mọ̀ọ́mọ̀ lọ. Àyíká ìṣiṣẹ́ kọ́ńtẹ́nà máa ń bẹ̀rẹ̀ pẹ̀lú àkójọ ààlà tí a dín kù; fífi NET_ADMIN kún kọ́ńtẹ́nà tí ó ń pín nẹ́tíwọ́kì olùgbàlejò jẹ́ àṣẹ tí ó tóbi ju fífi í kún ọ̀kan tí ó ní ààyè orúkọ nẹ́tíwọ́kì tirẹ̀ tí kò sì ní mount olùgbàlejò.
Fún àwọn ẹ̀ka systemd ka ohun tí a ń lò níti gidi kì í ṣe ohun tí fáìlì ẹ̀ka náà dà bí ẹni pé ó ń sọ: systemctl show -p CapabilityBoundingSet -p AmbientCapabilities ń jábọ̀ àwọn iye tí ó wúlò, tí drop-in tí o gbàgbé lè ti ṣètò. Bèèrè iye tí ó wúlò, kì í ṣe èyí tí a ní lọ́kàn rárá. Àwọn agbára ambient ṣe pàtàkì nítorí iṣẹ́ tí kì í ṣe root máa ń pàdánù àwọn agbára nípasẹ̀ exec láìsí wọn.
Fi ìṣètò tí àpò tàbí àwòrán ṣe àtìlẹ́yìn fún gẹ́gẹ́ bí ìpìlẹ̀. Má ṣe fi àwọn àṣẹ socket àìtọ́ tàbí ipò alágbára kún nítorí pé ìtọ́sọ́nà mìíràn ti kọ wọ́n fún irinṣẹ́ mìíràn; ìrònú yẹn kò gbé ohunkóhun lọ, ó sì ń ná ìpínyà tí o ti sanwó fún. Tí o bá ṣe àníàní, má ṣe fúnni ní ohunkóhun, kà àwọn àkọsílẹ̀ ìmúṣẹ fún iṣẹ́ pàtó tí o nílò.
Wo ohun tí ó ṣẹlẹ̀ lẹ́yìn tí àwọn ẹ̀tọ́ bá kù
Ọ̀pọ̀lọpọ̀ démonù máa ń bẹ̀rẹ̀ pẹ̀lú ẹ̀tọ́, wọ́n ń ṣètò ìlà-ìsọ̀rọ̀, lẹ́yìn náà wọ́n ń lọ sí olùlò tí kò ní ẹ̀tọ́, wọ́n sì ń pa ọ̀nà-ìsàlẹ̀ mọ́. Láti àkókò yẹn ìlànà kò lè fi ọ̀nà kún, kọ òfin odi-iná padà tàbí ṣí ẹ̀rọ alágbára tuntun; èyí dára títí tí ìsopọ̀ padà yóò fi nílò irú rẹ̀ gẹ́gẹ́. Kíkà fáìlì àti ṣíṣe àwọn ìkọ̀ lẹ́yìn náà lè kùnà fún ìdí kan náà.
Dán gbogbo ìgbésẹ̀ ayé wò kì í ṣe ìṣẹ́jú-àáyá àkọ́kọ́: ìbẹ̀rẹ̀, ìmúdọ̀tun tàbí ìsopọ̀ padà, àti ìmọ́tótó nígbà ìdúró. Ìmúṣẹ àkọ́kọ́ tí ó ṣẹ́gun kò fi hàn pé gbogbo iṣẹ́ alágbára tí ó tẹ̀le yóò ṣì ṣiṣẹ́, àti pé ìkùnà máa ń farahàn ní wákàtí mélòó kan lẹ́yìn nínú ìmújáde.
Àwọn ìmúṣẹ tí ń pa ọ̀nà-ìsàlẹ̀ mọ́ ní ṣíṣí káàkiri ìyípadà olùlò máa ń so èyí pọ̀ mọ́ àwọn àṣàyàn láti pa ọ̀nà-ìsàlẹ̀ àti àwọn kọ́kọ́rọ́ mọ́. Ní ẹ̀gbẹ́ systemd, ìbéèrè tí ó dọ́gba ni bóyá àkójọ agbára ẹ̀ka náà faradà ìyípadà olùlò tí o ṣètò.
Kọ àṣẹ tí a fún àti ìdí rẹ̀ sílẹ̀
Kọ àṣẹ pàtó, iṣẹ́ tí ó ń jẹ́ kí ó ṣeé ṣe àti àṣìṣe tí ó túnṣe. Ìlà kan nínú àwọn àkọsílẹ̀ ìfilélẹ̀ — «CAP_NET_ADMIN nínú ààyè orúkọ nẹ́tíwọ́kì ẹ̀ka, ó nílò fún àwọn ìyípadà ọ̀nà lẹ́yìn ìsopọ̀ padà» — tó láti dènà ẹni tí ó kàn láti tún àṣẹ náà gbòòrò.
Lẹ́yìn náà ka àkójọ tí ó wúlò lẹ́ẹ̀kan sí i lẹ́yìn gbogbo ìgbéga. Àwọn olùpèsè ń fi àwọn ẹ̀yà kún, àwọn àwòrán ń yí àwọn iye àìlópin padà, àti pé agbára tí kò nílò ní ọdún tó kọjá lè di ohun tí ó ń gbé e láìsí ẹni tí ó ṣàkíyèsí.