OpenVPN-д root өгөхгүйгээр CAP_NET_ADMIN өгөх
Хэрэглэгчийн эрхгүй хэрэглэгчээр эхэлдэг юнит дээр зөв чадварын багц шаардлагатай хэвээр. Нэгж, ажиллаж буй процесс, exec хил хязгаарыг энэ дарааллаар шалгана уу.
Үйлчилгээ эхэлдэг, бүртгэл tun төхөөрөмжийг нээж чадахгүй гэж гомдоллодог, маршрутууд хэзээ ч гарч ирдэггүй. Өөрийн shell дотор capsh --print ажиллуулбал cap_net_admin яг тэнд байна, энэ нь алдааг боломжгүй мэт харагдуулна. Таны shell болон нэгжийн хооронд ялгаатай зүйл бол эрхийн шилжилт, цөмийн чадвар өгөх хүсэл биш. Доорх дөрвөн шалгалтыг дарааллаар хийж, ялгааг тайлбарласан эхнийх дээр зогсоно уу.
Дутуу чадварыг нуугдсан төхөөрөмжөөс ялгана уу
Бүртгэлийн мөрөөс хоёр алдаа ижил харагдана. CAP_NET_ADMIN чадваргүй процесс туннелийн интерфейсийг үүсгэж эсвэл тохируулж чадахгүй, sandbox нь /dev/net/tun нуудаг процесс үүнийг эхнээс нь нээж чадахгүй. Чадвар нэмэх нь хоёр дахь тохиолдлыг засахгүй.
Ямар нэгэн зүйлийг засахаас өмнө төхөөрөмж үйлчилгээний нэрийн орон зайд байгаа эсэхийг шалгана уу. PrivateDevices=yes нь tun зангилааг бүрэн устгадаг нийтлэг хатууруулах мөр, харин хязгаарласан ProtectSystem тохиргооны замыг зөвшөөрлийн алдаа мэт уншигдахаар зөвхөн уншигдахаар болгож чадна. Хоёулаа туннелийг дурдсан бүртгэлийн мөрүүд үүсгэдэг тул бурууг чадварт өгдөг. Эхлээд зангилаа байгаа, нээгдэж байгааг баталж, дараа нь үргэлжлүүлнэ үү.
Та аль чадварын багцыг харж байгаагаа мэдээрэй
Linux зөвшөөрөгдсөн, үр дүнтэй, өвлөгдөх, хязгаарлах болон орчны багцуудыг хадгалдаг бөгөөд root бус хэрэглэгчийн exec-ийг даван туулдаг нь орчны багц юм. Бинар дээрх файлын чадварууд exec үед зөвшөөрөгдсөн болон үр дүнтэй эрхийг шилжүүлж чадна, гэхдээ гинжин хэлхээнд ямар нэг зүйл энэ шилжүүлгийг хаахгүй байх хугацаанд л.
Энд sudo хүмүүсийг төөрөгдүүлдэг. sudo -u-ээр ажиллуулсан команд шинэ эрхийн шилжилт эхлүүлж, орчны багц алга болдог тул root-оор амжилттай болдог мөнөөх шалгалт тэнд бүтэлгүйтдэг. Үйлчилгээний менежер бас өөр нэг шилжилт бөгөөд нэгж хэлэхгүй бол орчны юу ч өгдөггүй.
Чадварыг нэгжид өг, бүрхүүлд биш
Төхөөрөмж үүсгэж, маршрут суулгах шаардлагатай туннелийн хамгийн бага үйлчилгээний хэсэг иймэрхүү харагдана.
[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 процесс эхлэхээс өмнө эрхийг орчны багцад хийнэ, CapabilityBoundingSet процесс тэр жагсаалтаас гадуур юу ч барихаас сэргийлнэ. NoNewPrivileges=yes setuid эсвэл файлын чадвараар эрх олгохыг хаадаг бол нэгжийн тодорхой өгсөн чадвар хэвээр үйлчилнэ. CAP_NET_BIND_SERVICE-г үйлчилгээ доогуур порт холбох шаардлагатай үед л нэмээрэй, CAP_SYS_ADMIN-г форумын сэдэв тэгсэн гэсэн шалтгаанаар хэзээ ч бүү нэмээрэй.
Хэрэв нэгж бинарыг sudo дотор боож байвал бүрхүүлийг авна уу. systemd аль хэдийн User=-г хэрэглэдэг бөгөөд тэр нэмэлт давхарга нь орчны багц хоосон байх хамгийн магадлалтай шалтгаан.
Нэгжийн файл дээр биш, ажиллаж буй процесс дээр шалгана уу
Менежер бодитоор юу хэрэглэснийг уншаад, дараа нь түүний үүсгэсэн процессыг уншина уу.
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Хэрэв нэгж чадварыг жагсаасан ч CapEff-д байхгүй хэвээр бол ямар нэг drop-in тохиргоог дарж байна эсвэл ExecStartPre алхам орчныг өөрчилж байна. Үндсэн файлыг эрх бүхий гэж үзэхээс өмнө drop-in хавтаснаас нэгжийн нэрийг хай, учир нь хожуу гарсан файл чимээгүй ялдаг. Нэгж болон процесс хоёулаа чадварыг харуулж байтал туннель бүтэлгүйтсээр байвал хязгаарлах багцыг өргөтгөхийн оронд төхөөрөмж, замын шалгалт руу буцаарай. Үүнийг өргөтгөх нь жинхэнэ шалтгааныг нууж, үйлчилгээг урьдхаас илүү эрхтэй үлдээдэг.
Эхлэсний дараа эрхээ орхихыг илүүд үзээрэй
OpenVPN эрхтэй эхэлж, дараа нь өөрийн user болон group сонголтоор эрхгүй бүртгэл рүү бууж чадна, persist-key, persist-tun нь туннелийг цаашид ашиглахуйц байлгана. Ийм зохион байгуулалт процесс эрх барьдаг цонхыг нарийсгадаг бөгөөд бүх демоныг байнгын чадвартайгаар эрхгүй эхлүүлэхээс илүү тохиромжтой байдаг.
Аль загварыг сонгосон ч нэгжийг дахин эхлүүлж, дахин ачаалсны дараа шалгалтыг давтана уу, учир нь интерактив root shell-ээс ажиллаж байтал ачаалах үед бүтэлгүйтдэг үйлчилгээ ихэвчлэн чадвар, төхөөрөмж эсвэл файлын зөвшөөрлийн ялгаа байдаг. Нэгжийн тохиргоог процессын чадварын гаралтын хажууд бичиж үлдээгээрэй, ингэснээр дараагийн хянагч багц шинэчлэл эсвэл drop-in хил хязгаарыг зөөсөн эсэхийг харж болно.