OpenVPN ਪ੍ਰੋਫਾਈਲ ਲੋਡ ਹੋਣ ਦੇ ਬਾਵਜੂਦ ca.crt ਨਹੀਂ ਲੱਭਦਾ
ਪ੍ਰੋਫਾਈਲ ਦਾ ਪਾਥ ਇਸ ਦੇ ਅੰਦਰ ਦੀਆਂ ਫਾਈਲਾਂ ਦਾ ਆਧਾਰ ਨਹੀਂ ਹੈ। ਵੇਖੋ ਕਿ ਪੂਰਨ --config ਵੀ ca.crt ’ਤੇ ਕਿਉਂ ਅਸਫਲ ਹੁੰਦਾ ਹੈ ਅਤੇ ਲਾਂਚ ਉੱਤਰ ਕਿਵੇਂ ਤੈਅ ਕਰਦਾ ਹੈ।
ਸੇਵਾ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ, ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਬਿਨਾਂ ਕਿਸੇ ਸ਼ਿਕਾਇਤ ਦੇ ਪੜ੍ਹਦੀ ਹੈ ਅਤੇ ਫਿਰ ਇੱਕ ਅਜਿਹੀ ਲਾਈਨ ’ਤੇ ਮਰ ਜਾਂਦੀ ਹੈ ਜੋ ਬੇਸੰਬੰਧ ਲੱਗਦੀ ਹੈ: ਇਹ ca.crt ਨਹੀਂ ਖੋਲ੍ਹ ਸਕਦੀ। ਸਰਟੀਫਿਕੇਟ ਵਿੱਚ ਕੁਝ ਨਹੀਂ ਬਦਲਿਆ, ਅਤੇ unit ਫਾਈਲ ਵਿੱਚ ਪ੍ਰੋਫਾਈਲ ਦਾ ਪਾਥ ਪੂਰਨ ਹੈ। ਇਹੀ ਸੁਮੇਲ ਸੰਕੇਤ ਹੈ। ਤੁਹਾਡੇ ਦਿੱਤੇ ਪਾਥ ਦੀ ਇੱਕ ਫਾਈਲ ਲੱਭਦੀ ਹੈ, ਅਤੇ ਉਸ ਫਾਈਲ ਦੇ ਅੰਦਰਲੇ ਨਾਮ ਪੂਰੀ ਤਰ੍ਹਾਂ ਕਿਤੇ ਹੋਰ ਹੱਲ ਹੁੰਦੇ ਹਨ, ਇਸ ਲਈ ਪੂਰੀ ਤਰ੍ਹਾਂ ਯੋਗ ਦਿਖਦਾ ਲਾਂਚ ਵੀ ਕਿਸੇ ਦੇ ਨਾ ਸੋਚੇ ਡਾਇਰੈਕਟਰੀ ਤੋਂ ਆਪਣੀਆਂ ਚਾਬੀਆਂ ਪੜ੍ਹ ਸਕਦਾ ਹੈ।
ਅਸਫਲਤਾ ਦੇ ਕਾਰਨ ਥੋੜ੍ਹੇ ਹਨ, ਅਤੇ ਉਨ੍ਹਾਂ ਨੂੰ ਕ੍ਰਮ ਵਿੱਚ ਵੱਖ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ: ਉਹ ਆਧਾਰ ਡਾਇਰੈਕਟਰੀ ਜੋ ਪ੍ਰਕਿਰਿਆ ਕੋਲ ਅਸਲ ਵਿੱਚ ਸੀ, ਸੇਵਾ ਦਾ ਲਾਂਚ ਸੰਦਰਭ, ਅਤੇ ਪਾਥ ਸਹੀ ਹੋਣ ਤੋਂ ਬਾਅਦ ਫਾਈਲ ਦੁਆਲੇ ਦੀਆਂ ਇਜਾਜ਼ਤਾਂ ਜਾਂ ਸੈਂਡਬਾਕਸ। ਹਰ ਇੱਕ ਵੱਖਰਾ ਨਿਸ਼ਾਨ ਛੱਡਦਾ ਹੈ — 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 ਅਤੇ ਸੈਂਡਬਾਕਸ
ਸਹੀ ਆਧਾਰ ਡਾਇਰੈਕਟਰੀ ਵੀ ਉਹੀ ਸੁਨੇਹਾ ਦੇ ਸਕਦੀ ਹੈ, ਕਿਉਂਕਿ ਹੱਲ ਅਤੇ ਪਹੁੰਚ ਵੱਖਰੇ ਕਦਮ ਹਨ। ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਹਰ ਮੂਲ ਡਾਇਰੈਕਟਰੀ ’ਤੇ ਚਲਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਅਤੇ ਫਾਈਲ ’ਤੇ ਪੜ੍ਹਨ ਦੀ ਇਜਾਜ਼ਤ ਚਾਹੀਦੀ ਹੈ, ਅਤੇ ਫਾਈਲਸਿਸਟਮ ਦਾ ਹਿੱਸਾ ਲੁਕਾਉਣ ਵਾਲੀ ਸੇਵਾ 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
ਪਾਥ ਲੋਡਿੰਗ ਸਫਲ ਹੋਣ ’ਤੇ ਵੀ ਪ੍ਰਮਾਣਿਕਤਾ ਅਤੇ ਰੂਟਿੰਗ ਆਪਣੀਆਂ ਅਸਫਲਤਾਵਾਂ ਵਾਲੇ ਵੱਖਰੇ ਪੜਾਅ ਹਨ, ਅਤੇ ਜੋ ਕਨੈਕਸ਼ਨ ਉੱਠਦਾ ਹੈ ਪਰ ਕੋਈ ਟ੍ਰੈਫਿਕ ਨਹੀਂ ਲੰਘਾਉਂਦਾ ਉਹ ਵੱਖਰੀ ਜਾਂਚ ਹੈ। ਇੱਥੋਂ ਦਾ ਸੁਧਾਰ ਸਿਰਫ਼ ਇਸ ਬਾਰੇ ਹੈ ਕਿ ਫਾਈਲਾਂ ਕਿਸ ਡਾਇਰੈਕਟਰੀ ਤੋਂ ਆਈਆਂ, ਅਤੇ ਇਹ ਕਾਲ ਵਿੱਚ ਦਿਖਣਾ ਚਾਹੀਦਾ ਹੈ, ਆਖਰੀ ਵਾਰ ਹੱਥੀਂ ਚਲਾਉਣ ਵਾਲੇ ਨੂੰ ਯਾਦ ਰਹਿਣ ਦੀ ਥਾਂ।
ਜੇ ਪ੍ਰੋਫਾਈਲ ਕਿਸੇ ਸੰਰਚਨਾ ਮੈਨੇਜਰ ਰਾਹੀਂ ਤੈਨਾਤ ਹੁੰਦਾ ਹੈ, ਤਾਂ ਆਧਾਰ ਡਾਇਰੈਕਟਰੀ ਜਾਂ ਪੂਰਨ ਫਾਈਲ ਨਾਮ ਉੱਥੇ ਵੀ ਰੱਖੋ। ਇੱਕ ਹੋਸਟ ’ਤੇ ਹੱਥੀਂ ਕੀਤਾ ਸੁਧਾਰ ਇਸ ਸਮੱਸਿਆ ਦਾ ਉਹ ਸੰਸਕਰਣ ਹੈ ਜੋ ਅਗਲੇ ਮੁੜ-ਨਿਰਮਾਣ ਤੋਂ ਬਾਅਦ ਵਾਪਸ ਆਉਂਦਾ ਹੈ।