ਇੱਕ OpenVPN ਹੁੱਕ ਆਪਣੀ ਸਕ੍ਰਿਪਟ ਦੇ ਕੋਲ ਵਾਲੀ ਫ਼ਾਈਲ ਕਿਉਂ ਨਹੀਂ ਲੱਭ ਸਕਦਾ
ਹੁੱਕ ਵਿੱਚ ਸਾਪੇਖ ਪਾਥ ਸਕ੍ਰਿਪਟ ਦੀ ਬਜਾਏ ਪ੍ਰਕਿਰਿਆ ਦੇ ਹਿਸਾਬ ਨਾਲ ਹੱਲ ਹੁੰਦੇ ਹਨ। ਉਹਨਾਂ ਨੂੰ __file__ ਨਾਲ ਐਂਕਰ ਕਰੋ, ਫਿਰ ਅਨੁਮਤੀਆਂ ਤੋਂ ਪਹਿਲਾਂ ਨੇਮਸਪੇਸ ਅਤੇ ਪਛਾਣ ਜਾਂਚੋ।
ਜਿਹੜੇ ਹੁੱਕ ਬਿਨਾਂ ਗਲਤੀ ਚੱਲਦੇ ਹਨ ਅਤੇ ਫਿਰ ਵੀ ਗੁੰਮ ਫ਼ਾਈਲ ਦੀ ਰਿਪੋਰਟ ਕਰਦੇ ਹਨ, ਉਹ ਆਮ ਤੌਰ ’ਤੇ ਗਲਤ ਥਾਂ ਵੇਖ ਰਹੇ ਹੁੰਦੇ ਹਨ, ਆਪਣੇ ਕੰਮ ਵਿੱਚ ਫੇਲ੍ਹ ਨਹੀਂ ਹੋ ਰਹੇ। ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਸਾਪੇਖ ਪਾਥ ਪ੍ਰਕਿਰਿਆ ਦੀ ਕਾਰਜਕਾਰੀ ਡਾਇਰੈਕਟਰੀ ਦੇ ਹਿਸਾਬ ਨਾਲ ਹੱਲ ਹੁੰਦੇ ਹਨ, ਅਤੇ ਸੇਵਾ ਉਹ ਕਾਰਜਕਾਰੀ ਡਾਇਰੈਕਟਰੀ ਲੈ ਕੇ ਸ਼ੁਰੂ ਹੁੰਦੀ ਹੈ ਜੋ ਤੁਸੀਂ ਨਹੀਂ ਚੁਣੀ। ਸਕ੍ਰਿਪਟ ਦੇ ਕੋਲ ਵਾਲੀ ਫ਼ਾਈਲ ਅਤੇ ਪ੍ਰਕਿਰਿਆ ਵੱਲੋਂ ਖੋਲ੍ਹੀ ਫ਼ਾਈਲ ਉਦੋਂ ਹੀ ਇੱਕ ਹੀ ਚੀਜ਼ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਕੁਝ ਉਹਨਾਂ ਨੂੰ ਐਂਕਰ ਕਰਦਾ ਹੈ। ਇਹੀ ਫ਼ਰਕ ਅਨੁਮਤੀ ਦੀ ਸਮੱਸਿਆ ਵਜੋਂ ਗਲਤ ਪੜ੍ਹੀਆਂ ਜਾਂਦੀਆਂ ਹੁੱਕ ਅਸਫਲਤਾਵਾਂ ਦਾ ਵੱਡਾ ਹਿੱਸਾ ਸਮਝਾਉਂਦਾ ਹੈ।
ਅਨੁਮਤੀਆਂ ਤੋਂ ਪਹਿਲਾਂ ਪਾਥ ਜਾਂਚੋ, ਕਿਉਂਕਿ ਗਲਤ ਫ਼ਾਈਲ ’ਤੇ ਅਨੁਮਤੀ ਦੀ ਗਲਤੀ ਫਿਰ ਵੀ ਗਲਤ ਫ਼ਾਈਲ ਹੈ।
ਸਾਪੇਖ ਪਾਥ ਫ਼ਾਈਲ ਦੀ ਬਜਾਏ ਪ੍ਰਕਿਰਿਆ ਦੇ ਹਿਸਾਬ ਨਾਲ ਹੱਲ ਹੁੰਦਾ ਹੈ
ਜਦੋਂ ਸਕ੍ਰਿਪਟ open("policy.json") ਨੂੰ ਕਾਲ ਕਰਦੀ ਹੈ, ਕਰਨਲ ਉਹ ਨਾਮ ਪ੍ਰਕਿਰਿਆ ਦੀ ਮੌਜੂਦਾ ਕਾਰਜਕਾਰੀ ਡਾਇਰੈਕਟਰੀ ਦੇ ਹਿਸਾਬ ਨਾਲ ਹੱਲ ਕਰਦਾ ਹੈ। ਸਕ੍ਰਿਪਟ ਦੀ ਆਪਣੀ ਥਾਂ ਤੋਂ ਕੁਝ ਵੀ ਉਸ ਖੋਜ ਵਿੱਚ ਸ਼ਾਮਲ ਨਹੀਂ ਹੁੰਦਾ। OpenVPN ਆਪਣੀ ਚੁਣੀ ਡਾਇਰੈਕਟਰੀ ਤੋਂ ਹੁੱਕ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ, ਅਤੇ cd ਚੋਣ ਉਹ ਬਦਲ ਸਕਦੀ ਹੈ, ਇਸ ਲਈ ਆਪਣੇ ਫੋਲਡਰ ਤੋਂ ਹੱਥ ਨਾਲ ਜਾਂਚੀ ਸਕ੍ਰਿਪਟ ਡੀਮਨ ਵੱਲੋਂ ਚਲਾਉਣ ’ਤੇ ਵੱਖਰਾ ਵਿਵਹਾਰ ਕਰਦੀ ਹੈ। ਹੱਥ ਦੀ ਜਾਂਚ ਪਾਸ ਹੁੰਦੀ ਹੈ, ਸੇਵਾ ਚਲਾਉਣਾ ਫੇਲ੍ਹ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਲੌਗ ਲਾਈਨ ਸਿਰਫ਼ ਗੁੰਮ ਨਾਮ ਦਾ ਜ਼ਿਕਰ ਕਰਦੀ ਹੈ।
Python ਸਕ੍ਰਿਪਟ ਦੀ ਥਾਂ __file__ ਵਜੋਂ ਪ੍ਰਗਟ ਕਰਦਾ ਹੈ, ਅਤੇ ਇਹੀ ਐਂਕਰ ਕਰਨਾ ਸੰਭਵ ਬਣਾਉਂਦਾ ਹੈ। Path(__file__).resolve().parent / "policy.json" ਪ੍ਰਕਿਰਿਆ ਦੀ ਬਜਾਏ ਫ਼ਾਈਲ ਤੋਂ ਪਾਥ ਬਣਾਉਂਦਾ ਹੈ। ਉਹ ਇੱਕ ਲਾਈਨ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰਾਂ ਵਿੱਚ ਕੁਝ ਬਦਲੇ ਬਿਨਾਂ ਕਾਰਜਕਾਰੀ ਡਾਇਰੈਕਟਰੀ ਦੀ ਨਿਰਭਰਤਾ ਹਟਾ ਦਿੰਦੀ ਹੈ।
ਪਾਥ ਨੂੰ ਜਾਣ-ਬੁੱਝ ਕੇ ਐਂਕਰ ਕਰੋ, ਫਿਰ ਵੇਖੋ resolve ਕੀ ਕਰਦਾ ਹੈ
resolve() ਪ੍ਰਤੀਕਾਤਮਕ ਲਿੰਕਾਂ ਦਾ ਪਿੱਛਾ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ ਹੁੱਕ ਨੂੰ ਉਸਦੀ ਥਾਂ ’ਤੇ ਲਿੰਕ ਕਰਨ ਵਾਲੀ ਸਥਾਪਨਾ ਲਿੰਕ ਦੇ ਟਾਰਗਿਟ ’ਤੇ ਐਂਕਰ ਹੁੰਦੀ ਹੈ, ਲਿੰਕ ਰੱਖਣ ਵਾਲੀ ਡਾਇਰੈਕਟਰੀ ’ਤੇ ਨਹੀਂ। ਸੰਸਕਰਣ ਵਾਲੀ ਤੈਨਾਤੀ ਲਈ ਆਮ ਤੌਰ ’ਤੇ ਇਹੀ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਪ੍ਰਤੀਕਾਤਮਕ ਲਿੰਕ ਦੇ ਕੋਲ ਡੇਟਾ ਦੀ ਉਮੀਦ ਕਰਨ ਵਾਲੇ ਖਾਕੇ ਲਈ ਇਹ ਗਲਤ ਹੈ। ਤੈਨਾਤੀ ਦਾ ਮਤਲਬ ਕੀ ਹੈ ਇਹ ਤੈਅ ਕਰੋ, ਅਤੇ ਉਤਪਾਦਨ ਵਿੱਚ ਫ਼ਰਕ ਲੱਭਣ ਦੀ ਬਜਾਏ ਉਸ ਅਨੁਸਾਰ ਕੋਡ ਲਿਖੋ। Path(__file__).parent ਤੋਂ ਬਿਨਾਂ resolve() ਲਿੰਕ ਦੀ ਆਪਣੀ ਡਾਇਰੈਕਟਰੀ ਰੱਖਦਾ ਹੈ।
ਜੇ ਡੇਟਾ ਪ੍ਰੋਗਰਾਮ ਦਾ ਨਹੀਂ, ਇੰਸਟੈਂਸ ਦਾ ਹੈ, ਤਾਂ ਸੰਰਚਨਾ ਤੋਂ ਪੂਰਨ ਪਾਥ ਲਵੋ। ਥਾਂ ਨੂੰ ਹਾਰਡਕੋਡ ਕਰਨਾ ਹੁੱਕ ਨੂੰ ਇੱਕ ਹੀ ਹੋਸਟ ਖਾਕੇ ਨਾਲ ਬੰਨ੍ਹ ਦਿੰਦਾ ਹੈ।
ਚਾਰ ਹੱਦਾਂ ਕ੍ਰਮ ਵਿੱਚ ਪਾਰ ਕਰੋ
ਕਾਰਜਕਾਰੀ ਡਾਇਰੈਕਟਰੀ ਤੋਂ ਸ਼ੁਰੂ ਕਰੋ: ਯੂਨਿਟ ਦੀ WorkingDirectory, OpenVPN ਦੀ cd ਚੋਣ ਅਤੇ exec ਤੋਂ ਪਹਿਲਾਂ ਡਾਇਰੈਕਟਰੀ ਬਦਲਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਰੈਪਰ ਦੀ ਤੁਲਨਾ ਕਰੋ। ਫਿਰ ਹੱਲ ਹੋਈ ਥਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ, ਕਿਉਂਕਿ ਕਿਸੇ ਹੋਰ ਤੈਨਾਤੀ ਵਿੱਚ ਸਮਾਨ ਨਾਮ ਵਾਲੀ ਫ਼ਾਈਲ ਖੋਜ ਦਾ ਜਵਾਬ ਦੇ ਕੇ ਗਲਤੀ ਲੁਕਾ ਸਕਦੀ ਹੈ। ਅੱਗੇ ਫ਼ਾਈਲ ਸਿਸਟਮ ਦਾ ਨਜ਼ਰੀਆ ਆਉਂਦਾ ਹੈ: chroot ਜਾਂ ਸੇਵਾ ਦਾ ਮਾਊਂਟ ਨੇਮਸਪੇਸ ਹੋਸਟ ਦੇ ਪੂਰਨ ਪਾਥ ਨੂੰ ਸਿੱਧਾ ਗੈਰਹਾਜ਼ਰ ਕਰ ਸਕਦੇ ਹਨ। ਅੰਤ ਵਿੱਚ ਪਹੁੰਚ ਪਛਾਣ, ਜੋ ਦਿੱਖ ਤੋਂ ਵੱਖਰਾ ਸਵਾਲ ਹੈ।
ProtectHome ਅਤੇ PrivateTmp ਵੱਖ-ਵੱਖ ਥਾਵਾਂ ਲੁਕਾਉਂਦੇ ਹਨ, ਅਤੇ ਹੋਸਟ ਤੋਂ ਲਈ ਡਾਇਰੈਕਟਰੀ ਸੂਚੀ ਵਿੱਚ ਦੋਵਾਂ ਵਿੱਚੋਂ ਕੋਈ ਨਹੀਂ ਦਿਸਦਾ। ਸ਼ੈੱਲ ਵਿੱਚ root ਲਈ ਮੌਜੂਦ ਪਾਥ ਯੂਨਿਟ ਦੇ ਨੇਮਸਪੇਸ ਅੰਦਰ ਅਦਿੱਖ ਹੋ ਸਕਦਾ ਹੈ, ਅਤੇ ਇਸੇ ਲਈ ਸੇਵਾ ਤੋਂ ਬਾਹਰ ਉਹੀ ਕਮਾਂਡ ਜਾਂਚਣਾ ਬਹੁਤ ਘੱਟ ਸਾਬਤ ਕਰਦਾ ਹੈ।
ਸੇਵਾ ਨੂੰ ਵਧਾਏ ਬਿਨਾਂ ਖੋਜ ਠੀਕ ਕਰੋ
ਪਾਥ ਐਂਕਰ ਕਰਨਾ ਸਿਰਫ਼ ਪਹਿਲੀ ਹੱਦ ਹੱਲ ਕਰਦਾ ਹੈ। ਇਹ ਸੇਵਾ ਵੱਲੋਂ ਲੁਕਾਈ ਡਾਇਰੈਕਟਰੀ ਨੂੰ ਪ੍ਰਗਟ ਨਹੀਂ ਕਰਦਾ, ਅਤੇ ਇਹ ਬਿਨਾਂ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਵਾਲੇ ਖਾਤੇ ਨੂੰ ਸਿਰਫ਼ root ਲਈ ਵਾਲੀ ਫ਼ਾਈਲ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਦਿੰਦਾ। script-security ਵਧਾਉਣਾ ਇਹ ਬਦਲਦਾ ਹੈ ਕਿ OpenVPN ਕਿਹੜੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਚਲਾਏਗਾ; ਸਾਪੇਖ ਨਾਮ ਕਿੱਥੇ ਹੱਲ ਹੁੰਦਾ ਹੈ ਇਸ ’ਤੇ ਇਸਦਾ ਕੋਈ ਅਸਰ ਨਹੀਂ। ਪੂਰੀ ਸੇਵਾ ਲਈ ਕਾਰਜਕਾਰੀ ਡਾਇਰੈਕਟਰੀ ਬਦਲਣਾ ਸਮੱਸਿਆ ਤੋਂ ਵੱਧ ਵਿਆਪਕ ਹੈ, ਕਿਉਂਕਿ ਹਰ ਹੋਰ ਸਾਪੇਖ ਸਰਟੀਫਿਕੇਟ, ਲੌਗ ਜਾਂ ਸਹਾਇਕ ਪਾਥ ਉਸ ਨਾਲ ਤੁਰਦਾ ਹੈ।
ਸੰਕੀਰਣ ਸੁਧਾਰ ਚੁਣੋ: ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਨਿਰਧਾਰਿਤ ਪਾਥ, ਇੰਸਟੈਂਸ ਡੇਟਾ ਲਈ ਸਪਸ਼ਟ ਸੰਰਚਨਾ ਮੁੱਲ, ਅਤੇ ਹੁੱਕ ਜਿਸ ਖਾਤੇ ਹੇਠ ਅਸਲ ਵਿੱਚ ਚੱਲਦਾ ਹੈ ਉਸ ਨਾਲ ਮੇਲ ਖਾਂਦੀ ਫ਼ਾਈਲ ਮਾਲਕੀ।
ਹੱਦ ਦਾ ਨਾਮ ਲੈਣ ਵਾਲੇ ਸਬੂਤ ਦਰਜ ਕਰੋ
ਲਾਭਦਾਇਕ ਅਸਫਲਤਾ ਰਿਪੋਰਟ ਵਿੱਚ ਤਿੰਨ ਚੀਜ਼ਾਂ ਹੁੰਦੀਆਂ ਹਨ: ਹੁੱਕ ਵੱਲੋਂ ਕੋਸ਼ਿਸ਼ ਕੀਤਾ ਸਹੀ ਪਾਥ, ਉਹ ਵਾਤਾਵਰਣ ਜਿਸਨੇ ਇਹ ਪੈਦਾ ਕੀਤਾ, ਅਤੇ ਕਿਹੜੀ ਹੱਦ ਨੇ ਮਨਾਹੀ ਕੀਤੀ। ਫ਼ਾਈਲ ਦੀ ਸਮੱਗਰੀ ਨਾ ਡੋਲ੍ਹ ਕੇ ਹੱਲ ਹੋਇਆ ਪਾਥ ਅਤੇ ਅਪਵਾਦ ਛਾਪੋ। ਇਹ ਤ੍ਰਿਕ ਗਲਤ ਐਂਕਰ ਨੂੰ ਲੁਕੇ ਹੋਏ ਮਾਊਂਟ ਤੋਂ ਅਤੇ ਅਨੁਮਤੀ ਦੀ ਨਾਮਨਜ਼ੂਰੀ ਤੋਂ ਵੱਖ ਕਰਦਾ ਹੈ, ਅਤੇ ਇਹ ਤਿੰਨ ਵੱਖਰੇ ਸੁਧਾਰ ਹਨ।
root ਟਰਮੀਨਲ ਤੋਂ ਫ਼ਾਈਲ ਪੜ੍ਹ ਸਕਦਾ ਹੈ ਇਹ ਦਾਅਵਾ ਉਹਨਾਂ ਸਵਾਲਾਂ ਵਿੱਚੋਂ ਇੱਕ ਦਾ ਜਵਾਬ ਦਿੰਦਾ ਹੈ ਅਤੇ ਬਾਕੀ ਕਿਸੇ ਦਾ ਨਹੀਂ। ਇਸਦੀ ਬਜਾਏ ਸੇਵਾ ਦੇ ਆਪਣੇ ਸੰਦਰਭ ਤੋਂ ਜਾਂਚੋ।