පැතිකඩ පූරණය වුවද 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
එම ඇමතුම ආකෘතියකි, තවත් කෙනෙකුගේ පැතිකඩක් දියත් කිරීමේ උපදෙසක් නොවේ. එය ලබා දෙන්නේ නිශ්චිතතාවයි: දාමයේ සෑම සාපේක්ෂ නාමයකම පදනම ක්රියාවලිය ආරම්භ කළ ඕනෑම shell හෝ කළමනාකරුවෙකුගෙන් උරුම නොවී විධානයේ ප්රකාශ කෙරේ. විකල්පය ද එසේම වලංගු වන අතර සේවාවකට බොහෝ විට වඩා හොඳය: වැඩ කරන නාමාවලිය තිබෙන්නට හරින්න සහ පැතිකඩ තුළ යොමු කළ සෑම ගොනුවක්ම නිරපේක්ෂ කරන්න.
ඔබ තෝරන කුමක් වුවද, පළමු අසාර්ථකත්වය නොව මුළු දාමයම විග්රහ කරන්න. පැතිකඩකට තවත් වින්යාස ගොනුවක් ඇද ගත හැක, ඇතුළත් කළ ගොනුවේ සාපේක්ෂ නම් ඒවා ඇතුළත් කළ ගොනුවේ නාමාවලියට නොව එම ක්රියාවලි නාමාවලියට සාපේක්ෂව විසඳා ගනී. ලොග් මාර්ග, සත්යාපන ගොනු සහ සහායක ස්ක්රිප්ට එකම නියමය අනුගමනය කරයි.
සේවාව වෙනත් තැනක ආරම්භ වේ
පැතිකඩ නාමාවලියේ අන්තර්ක්රියාකාරී shell එකක් ඇසුරුම් කළ 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
මාර්ග පූරණය සාර්ථක වුවද සත්යාපනය සහ මාර්ගගත කිරීම තමන්ගේම අසාර්ථකත්ව සහිත වෙනස් අවස්ථා වේ, සහ සම්බන්ධතාවය ඉහළ ගොස් කිසිදු ගමන් ප්රවාහයක් නොගෙන යන්නේ නම් එය වෙනත් විමර්ශනයකි. මෙහි නිවැරදි කිරීම ගොනු පැමිණියේ කුමන නාමාවලියකින් ද යන්නට පමණක් අදාළ වන අතර, එය ඇමතුම තුළ දෘශ්යමාන විය යුතුය, අවසන් වරට අතින් ධාවනය කළ අයට මතක තබා ගැනීම වෙනුවට.
පැතිකඩ වින්යාස කළමනාකරුවකු විසින් යොදවන්නේ නම්, මූලික නාමාවලිය හෝ නිරපේක්ෂ ගොනු නාම එහිද තබන්න. එක් සත්කාරකයක අතින් කළ නිවැරදි කිරීම මෙම ගැටලුවේ ඊළඟ නැවත ගොඩනැගීමෙන් පසු නැවත පැමිණෙන පිටපතයි.