OpenVPN профайл ачаалагдсан ч ca.crt-г олж чадахгүй
Профайлын зам доторх файлуудын суурь биш. Яагаад үнэмлэхүй --config ca.crt дээр бүтэлгүйтсээр байгаа, ачаалалт хариултыг хэрхэн тодорхойлдогыг үзээрэй.
Үйлчилгээ эхэлж, профайлыг ямар ч гомдолгүй унших ба дараа нь хамааралгүй мэт харагдах мөрөнд үхдэг: энэ нь ca.crt-г нээж чадахгүй. Гэрчилгээнд юу ч өөрчлөгдөөгүй, unit файл дахь профайлын зам нь үнэмлэхүй юм. Яг энэ хослол нь сэжүүр юм. Таны өгсөн зам нэг файлыг заадаг бөгөөд тэр файлын доторх нэрс огт өөр газарт шийдэгддэг тул бүрэн эрхтэй мэт харагдах ачаалалт хүний санаанд ороогүй хавтаснаас түлхүүрээ уншиж болно.
Алдаа хэдхэн шалтгаантай бөгөөд тэдгээрийг дарааллаар нь ялгах нь зүйтэй: процессын бодитоор байсан үндсэн хавтас, үйлчилгээний ачаалалтын нөхцөл, зам зөв болсны дараах файлын эргэн тойрны зөвшөөрөл эсвэл sandbox. Тус бүр өөр ул мөр үлдээдэг — unit дотор, процесст болон файлын системд.
Профайлын зам бол үндсэн хавтас биш
/tmp дотор эхэлж, /etc/vpn/prod/tenant-a.ovpn-г хүлээн авдаг процессыг төсөөлөөрэй. Тэр профайлын дотор ca ca.crt мөр харьцангуй замыг заана. Профайлыг олсон аргументад юу ч тэр нэрийг дахин бичихгүй тул процесс /tmp/ca.crt-г хайж, олдохгүй файлын талаар мэдээлнэ.
Төөрөгдүүлдэг нь алдааны дараалал юм. OpenVPN эхлээд тохиргоог задалж, дурдсан файлуудыг хүрэх үедээ нээдэг тул профайл дахь үсгийн алдаа ямар ч түлхүүрт хүрэхээс өмнө мэдээлэгддэг бол дутуу гэрчилгээ нь задлан шинжилгээ тэнд хүрсэн үед л гарч ирдэг. Тиймээс ачаалагдсан профайл нь синтакс зөв гэдгийн баталгаа, түүний нэрлэсэн файлууд олдсон гэдгийн биш.
Гарын авлага юуг ялгадаг: --config ба --cd
OpenVPN 2.6 гарын авлага хоёр өөр сонголтыг тайлбарладаг. Нэг нь тохиргооны файл ачаалдаг. Нөгөө нь тохиргоо, түлхүүр, скрипт болон бусад файлыг уншихаас өмнө процессын хавтсыг сольж, одоогийн хавтсыг дурдалгүйгээр үнэмлэхүй хавтсыг шаарддаг.
openvpn --cd /etc/vpn/prod --config tenant-a.ovpn
Тэр дуудлага бол хэлбэр, өөр хүний профайлыг ачаалах заавар биш. Үүний өгдөг зүйл бол тодорхой байдал: гинжин дэх харьцангуй нэр бүрийн суурь нь процессыг эхлүүлсэн ямар ч бүрхүүл эсвэл менежерээс өвлөгдөхгүйгээр тушаалд хэлэгддэг. Өөр хувилбар нь мөн адил хүчинтэй бөгөөд үйлчилгээнд ихэвчлэн дээр: ажлын хавтсыг тайван орхиж, профайлын доторх дурдсан файл бүрийг үнэмлэхүй болго.
Аль нэгийг сонгосон ч эхний бүтэлгүйтлийн оронд бүх гинжийг шалга. Профайл өөр тохиргооны файлыг татаж болох бөгөөд оруулсан файлын харьцангуй нэрс нь тэдгээрийг оруулсан файлын хавтас биш, ижил процессын хавтастай харьцуулан шийдэгддэг. Бүртгэлийн зам, баталгаажуулалтын файл, туслах скриптүүд ижил дүрмийг дагадаг.
Үйлчилгээ өөр газар эхэлдэг
Профайлын хавтас дахь интерактив бүрхүүл багцлагдсан unit-ийн талаар юу ч батлахгүй. Менежерүүд өөрийн ажлын хавтсыг тогтоодог, орчмын скрипт нь хоёртын файл ажиллахаас өмнө түүнийг дахин өөрчилж болно. Бүтэлгүйтэж буй unit нь дүгнэлт хийхэд үнэ цэнэтэй цорын ганц ачаалалт юм.
systemctl show -p WorkingDirectory -p ExecStart --value openvpn@tenant-a
ls -l /proc/$(pgrep -n openvpn)/cwd
Хоёр дахь тушаал амьд процесс бодитоор барьж буй хавтсыг харуулдаг бөгөөд орчмын скрипт оролцсон үед энэ нь unit файлаас илүү итгэлтэй. Хэрэв хоёулаа тохирохгүй бол хариулт нь орчмын скрипт, unit нь төөрөгдүүлсэн ул мөр.
Хайлтын дараа: зөвшөөрөл, chroot ба sandbox
Зөв үндсэн хавтас ч ижил мессежийг өгч болно, учир нь шийдэл ба хандалт нь тусдаа алхам. Процесст эх хавтас бүр дээр гүйцэтгэх зөвшөөрөл, файл дээр унших зөвшөөрөл хэрэгтэй бөгөөд файлын системийн нэг хэсгийг нуудаг үйлчилгээний unit нь процесс юу л харж чадахыг өөрчилдөг.
Гурван нийтлэг хувилбар ижил алдаа үүсгэдэг. Файл зөвхөн root-д уншигдах бөгөөд үйлчилгээ нээхээс өмнө эрхээс татгалздаг. unit нь профайлын хавтсыг оруулаагүй хамгаалалттай файлын системийн харагдац тогтоодог. Демон chroot-той ажилладаг тул хост дээр байгаа зам тэр харагдацын дотор байхгүй.
Зөвшөөрлийг сулруулахын оронд файлын эзэмшил, процессын таних тэмдгээр оношло. Энэ алдааг намжаахын тулд хувийн түлхүүрийг бүгдэд уншигдахаар болгох нь чанга бүтэлгүйтлийг чимээгүйгээр сольж байгаа хэрэг бөгөөд түлхүүр нь хавтасны та хамгийн бага илрүүлэхийг хүсэх хэсэг юм.
Засварыг өөрийн ачаалалтаар батал
Профайлтай холбоогүй хавтаснаас жинхэнэ unit-ийг дахин ачаалж, мөн адил эхлэлийн мөрийг ажигла. Дараа нь процесс ажиллахдаа зориулсан хавтсыг барьж байгаа, ачаалсан гэрчилгээ нь таны хүлээж буй зүйл гэдгийг батал.
systemctl restart openvpn@tenant-a
systemctl status openvpn@tenant-a --no-pager
journalctl -u openvpn@tenant-a -n 20 --no-pager
Замуудын ачаалалт амжилттай болсон ч баталгаажуулалт ба чиглүүлэлт нь өөрийн бүтэлгүйтэлтэй тусдаа үе шат хэвээр, холболт босч байгаа ч урсгал нэвтрүүлэхгүй бол тэр өөр мөрдөн шалгалт юм. Эндхийн засвар нь файлууд аль хавтаснаас ирсэн тухай л юм бөгөөд энэ нь дуудлагад харагдах ёстой, хамгийн сүүлд гараар ажиллуулсан хүний санаанд үлдэх ёсгүй.
Профайлыг тохиргооны менежерээр байршуулдаг бол үндсэн хавтас эсвэл үнэмлэхүй файлын нэрсийг тэнд ч байрлуул. Нэг хост дээр гараар хийсэн засвар нь дараагийн дахин бүтээлтийн дараа буцаж ирдэг энэ асуудлын хувилбар юм.