VPN ਕਨੈਕਸ਼ਨ ਤੋਂ ਬਾਅਦ ਦੀ ਕਾਰਵਾਈ ਡੈਮਨ ਵਜੋਂ ਨਹੀਂ, ਵਰਤੋਂਕਾਰ ਵਜੋਂ ਚਲਾਓ
USER=alice ਕਹਿਣ ਵਾਲਾ ਵਾਤਾਵਰਣ ਚਲ ਇਹ ਨਹੀਂ ਬਦਲਦਾ ਕਿ hook ਕਿਸ ਖਾਤੇ ਵਜੋਂ ਚੱਲਦਾ ਹੈ। ਘਟਨਾ, ਟ੍ਰਿਗਰ ਅਤੇ ਕਾਰਵਾਈ ਵੱਖ ਕਰੋ, ਫਿਰ UID ਸਿੱਧ ਕਰੋ।
VPN ਡੈਮਨ ਉੱਤੇ ਕਨੈਕਸ਼ਨ hook ਡੈਮਨ ਵਜੋਂ ਚੱਲਦੇ ਹਨ, ਅਤੇ ਆਮ ਤੌਰ ’ਤੇ ਇਸ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਉਹ root ਵਜੋਂ ਚੱਲਦੇ ਹਨ। ਜਿਸ ਪਲ ਉਨ੍ਹਾਂ hookਾਂ ਵਿੱਚੋਂ ਇੱਕ ਕਿਸੇ ਦੀ ਹੋਮ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਲਿਖਦਾ ਹੈ ਜਾਂ ਡੈਸਕਟਾਪ ਸਹਾਇਕ ਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ, ਤੁਸੀਂ ਇੱਕ ਨੈੱਟਵਰਕ ਘਟਨਾ ਨੂੰ ਕਿਸੇ ਵੀ ਸਥਾਨਕ ਵਰਤੋਂਕਾਰ ਵਜੋਂ ਕੰਮ ਕਰਨ ਦੀ ਸਮਰੱਥਾ ਦੇ ਦਿੱਤੀ ਹੈ। ਆਮ ਛੋਟਾ ਰਾਹ, ਯਾਨੀ ਵਾਤਾਵਰਣ ਚਲ ਤੋਂ ਵਰਤੋਂਕਾਰ ਨਾਮ ਪੜ੍ਹ ਕੇ ਅੱਗੇ ਭੇਜਣਾ, ਇਸ ਨੂੰ ਠੀਕ ਨਹੀਂ ਕਰਦਾ। ਇਹ ਸਿਰਫ਼ ਕਾਰਵਾਈ ਨੂੰ ਦੁਬਾਰਾ ਲੇਬਲ ਕਰਦਾ ਹੈ, ਪਰ ਇਹ ਨਹੀਂ ਬਦਲਦਾ ਕਿ ਕਿਹੜਾ ਖਾਤਾ ਇਸ ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ। ਜੋ ਕੰਮ ਕਰਦਾ ਹੈ ਉਹ ਤਿੰਨ ਹਿੱਸਿਆਂ ਵਾਲਾ ਹਸਤਾਂਤਰ ਹੈ, ਜਿਸ ਵਿੱਚ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਵਾਲਾ ਕਦਮ ਦੱਸਦਾ ਹੈ ਕਿ ਕੀ ਹੋਇਆ ਅਤੇ ਇੱਕ ਵੱਖਰੀ ਇਕਾਈ ਸਹੀ ਪਛਾਣ ਹੇਠ ਕਾਰਵਾਈ ਕਰਦੀ ਹੈ।
ਵਾਤਾਵਰਣ ਵਿੱਚ ਵਰਤੋਂਕਾਰ ਨਾਮ ਪਛਾਣ ਦਾ ਸਵਿੱਚ ਨਹੀਂ ਹੈ
ਯੂਨਿਕਸ ਇਹ ਤੈਅ ਕਰਦਾ ਹੈ ਕਿ ਕੋਈ ਪ੍ਰਕਿਰਿਆ ਕੀ ਛੂਹ ਸਕਦੀ ਹੈ, ਉਸ ਦੇ ਪ੍ਰਭਾਵੀ ਵਰਤੋਂਕਾਰ ID ਤੋਂ, ਉਸ ਦੇ ਵਾਤਾਵਰਣ ਦੀਆਂ ਸਤਰਾਂ ਤੋਂ ਨਹੀਂ। USER=alice ਸੈੱਟ ਕਰਨਾ ਜਾਂ LOGNAME ਨਿਰਯਾਤ ਕਰਨਾ ਇਹ ਬਦਲਦਾ ਹੈ ਕਿ ਲਾਪਰਵਾਹ ਸਾਫ਼ਟਵੇਅਰ ਆਪਣੇ ਆਉਟਪੁੱਟ ਵਿੱਚ ਕੀ ਛਾਪਦਾ ਹੈ; ਫਾਈਲ ਮਾਲਕੀ ਦੀਆਂ ਜਾਂਚਾਂ ਵਿੱਚ ਇਹ ਕੁਝ ਨਹੀਂ ਬਦਲਦਾ। ਉਸ ਚਲ ਨਾਲ root ਵਜੋਂ ਚੱਲਦਾ hook ਅਜੇ ਵੀ root ਵਜੋਂ ਹੀ Alice ਦੀਆਂ ਫਾਈਲਾਂ ਖੋਲ੍ਹਦਾ ਹੈ।
ਨਾਮ ਵੀ ਇੱਕੋ ਨਾਮ ਨਹੀਂ ਹਨ। ਦੂਰਸਥ ਪਹੁੰਚ ਲੌਗਇਨ, ਸਥਾਨਕ ਯੂਨਿਕਸ ਖਾਤਾ ਅਤੇ ਸਰਟੀਫਿਕੇਟ ਦਾ ਆਮ ਨਾਮ ਤਿੰਨ ਪਛਾਣਕਰਤਾ ਹਨ ਜੋ ਅਕਸਰ ਮਿਲਦੇ ਹਨ ਅਤੇ ਕਦੇ-ਕਦੇ ਨਹੀਂ। a.smith ਵਜੋਂ ਪ੍ਰਮਾਣਿਤ ਹੋਣ ਵਾਲੇ ਵਰਤੋਂਕਾਰ ਕੋਲ ਸਥਾਨਕ ਖਾਤਾ ਬਿਲਕੁਲ ਨਹੀਂ ਹੋ ਸਕਦਾ, ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਸੇਵਾ ਰਾਹੀਂ asmith ਉੱਤੇ ਮੈਪ ਹੋ ਸਕਦਾ ਹੈ। ਇੱਕ ਸਤਰ ਤਿੰਨੇ ਭੂਮਿਕਾਵਾਂ ਨਿਭਾਉਂਦੀ ਹੈ ਇਹ ਮੰਨਣ ਵਾਲਾ ਕੋਈ ਵੀ ਡਿਜ਼ਾਈਨ ਪਹਿਲੇ ਠੇਕੇਦਾਰ ਉੱਤੇ ਟੁੱਟ ਜਾਵੇਗਾ।
ਇਸ ਲਈ ਪਹਿਲਾ ਸਵਾਲ «ਕਿਹੜਾ ਵਰਤੋਂਕਾਰ ਜੁੜਿਆ ਹੈ» ਨਹੀਂ, ਸਗੋਂ «ਕਿਹੜੇ ਸਥਾਨਕ ਖਾਤੇ ਨੂੰ ਇਹ ਕਾਰਵਾਈ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਹੈ» ਹੈ। ਇਸ ਦਾ ਜਵਾਬ ਆਪਣੇ ਖਾਤਾ ਡੇਟਾਬੇਸ ਤੋਂ ਦਿਓ, ਕਲਾਇੰਟ ਵੱਲੋਂ ਭੇਜੇ ਗਏ ਤੋਂ ਨਹੀਂ:
id -u alice
getent passwd alice | cut -d: -f1,3,6
stat -c '%U:%G %a %n' /home/alice/.local/state/vpn-status.json
ਤੀਜਾ ਹੁਕਮ ਉਹ ਹੈ ਜਿਸ ਨੂੰ ਲੋਕ ਛੱਡ ਦਿੰਦੇ ਹਨ। ਜੇ ਟਾਰਗੈਟ ਫਾਈਲ root ਦੀ ਮਾਲਕੀ ਵਿੱਚ ਹੈ ਕਿਉਂਕਿ ਪਿਛਲੇ hook ਨੇ ਇਸ ਨੂੰ ਬਣਾਇਆ ਸੀ, ਤਾਂ ਸਹੀ ਢੰਗ ਨਾਲ ਸੰਰਚਿਤ ਵਰਤੋਂਕਾਰ ਕਾਰਵਾਈ systemd ਸਮੱਸਿਆ ਵਰਗੀ ਦਿਖਣ ਵਾਲੀ, ਪਰ ਨਾ ਹੋਣ ਵਾਲੀ ਇਜਾਜ਼ਤ ਗਲਤੀ ਨਾਲ ਅਸਫਲ ਹੋਵੇਗੀ।
ਡੈਮਨ ਆਪਣੀ ਥਾਂ ’ਤੇ ਹੀ ਰਹਿੰਦਾ ਹੈ
VPN ਸੇਵਾ ਦਾ ਆਪਣਾ User= Alice ਉੱਤੇ ਬਦਲਣਾ ਗਲਤ ਲੀਵਰ ਹੈ। ਇਹ ਬਦਲਦਾ ਹੈ ਕਿ ਡੈਮਨ ਇੰਟਰਫੇਸ ਕਿਵੇਂ ਬਾਈਂਡ ਕਰਦਾ ਹੈ, ਕੁੰਜੀਆਂ ਕਿਵੇਂ ਪੜ੍ਹਦਾ ਹੈ, ਆਪਣੀ ਸਥਿਤੀ ਫਾਈਲ ਕਿਵੇਂ ਲਿਖਦਾ ਹੈ ਅਤੇ ਰੂਟ ਕਿਵੇਂ ਸੰਭਾਲਦਾ ਹੈ, ਅਤੇ ਇਹ ਸਾਰਾ ਖ਼ਤਰਾ ਇੱਕ ਕੰਮ ਕਰ ਰਹੀ ਇਕਾਈ ਵਿੱਚ ਪਾ ਦਿੰਦਾ ਹੈ। ਡੈਮਨ ਨੂੰ ਆਪਣੇ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਚਾਹੀਦੇ ਹਨ; ਅਗਲੀ ਕਾਰਵਾਈ ਨੂੰ ਨਹੀਂ।
ਇਕਾਈ ਨੂੰ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ ਦੇਖੋ ਕਿ ਇਹ ਅਸਲ ਵਿੱਚ ਕੀ ਕਰ ਰਹੀ ਹੈ। ਦੋ ਹੁਕਮ ਤੁਹਾਨੂੰ ਲਾਗੂ ਕਰਨ ਦੀ ਪਛਾਣ ਅਤੇ ਲਾਗੂ ਹੋ ਰਹੀਆਂ ਸਹੀ ਹੁਕਮ ਸਤਰਾਂ ਦੱਸਦੇ ਹਨ, ਓਵਰਰਾਈਡ ਵੱਲੋਂ ਜੋੜਿਆ ਸਭ ਕੁਝ ਵੀ ਸ਼ਾਮਲ ਹੈ:
systemctl show -p User -p Group -p ExecStart openvpn-server@server
systemctl cat openvpn-server@server
ਡਿਫਾਲਟ ਪੈਕੇਜ ਇੰਸਟਾਲ ਵਿੱਚ ਡੈਮਨ root ਹੁੰਦਾ ਹੈ ਅਤੇ --up ਸਕ੍ਰਿਪਟ ਇਸ ਨੂੰ ਵਿਰਾਸਤ ਵਿੱਚ ਲੈਂਦੀ ਹੈ। ਮੰਨਣ ਦੀ ਥਾਂ ਇਸ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ, ਕਿਉਂਕਿ ਸਖ਼ਤ ਕੀਤੀ ਵੰਡ ਨੇ ਇਸ ਨੂੰ ਸਮਰਪਿਤ ਖਾਤੇ ਉੱਤੇ ਭੇਜਿਆ ਹੋ ਸਕਦਾ ਹੈ, ਅਤੇ ਹੱਥ ਨਾਲ ਲਿਖਿਆ drop-in hook ਨੂੰ ਵੱਖਰੇ ਨਿਯਮਾਂ ਵਾਲੇ ਰੈਪਰ ਰਾਹੀਂ ਚਲਾ ਸਕਦਾ ਹੈ।
ਤਿੰਨ ਨਾਮਿਤ ਹਿੱਸੇ, ਇੱਕ ਤੰਗ ਟ੍ਰਿਗਰ
ਸੰਭਾਲ ਵਿੱਚ ਟਿਕਣ ਵਾਲੀ ਵਿਵਸਥਾ ਵਿੱਚ ਇੱਕ ਘਟਨਾ, ਇੱਕ ਟ੍ਰਿਗਰ ਅਤੇ ਇੱਕ ਕਾਰਵਾਈ ਹੁੰਦੀ ਹੈ। ਡੈਮਨ ਦੱਸਦਾ ਹੈ ਕਿ ਨਾਮਿਤ ਸੈਸ਼ਨ ਉੱਪਰ ਆਇਆ ਹੈ। ਟ੍ਰਿਗਰ ਉਸ ਛੋਟੀ ਹਕੀਕਤ ਨੂੰ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ ਅਤੇ ਇੱਕ ਨਿਸ਼ਚਿਤ ਕਾਰਵਾਈ ਮੰਗਦਾ ਹੈ। ਕਾਰਵਾਈ ਉਸ ਸਥਾਨਕ ਖਾਤੇ ਹੇਠ ਚੱਲਦੀ ਹੈ ਜਿਸ ਦੀ ਮਾਲਕੀ ਵਿੱਚ ਛੋਹੀਆਂ ਫਾਈਲਾਂ ਹਨ। ਜ਼ੰਜੀਰ ਵਿੱਚ ਕੁਝ ਵੀ ਮਨਮਾਨੀ ਹੁਕਮ ਮਾਰਗ ਸਵੀਕਾਰ ਨਹੀਂ ਕਰਦਾ।
ਕਾਰਵਾਈ ਆਪ ਇੱਕ ਆਮ ਸੇਵਾ ਇਕਾਈ ਹੈ, ਅਤੇ ਪਛਾਣ ਇਸ ਦੇ ਅੰਦਰ ਇੱਕ ਨਿਰਦੇਸ਼ ਹੈ:
[Service]
Type=oneshot
User=alice
Group=alice
ExecStart=/usr/local/bin/refresh-vpn-status --slot %i
ਧਿਆਨ ਦਿਓ ਕਿ User=alice ਪੂਰੀ ਇਕਾਈ ਉੱਤੇ ਲਾਗੂ ਹੁੰਦਾ ਹੈ, ਅਤੇ systemd ਇੱਕ ਅਜਿਹਾ ਅਪਵਾਦ ਦਰਜ ਕਰਦਾ ਹੈ ਜੋ ਜਾਣਨ ਯੋਗ ਹੈ: + ਉਪਸਰਗ ਵਾਲਾ ਹੁਕਮ ਇਸ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ ਪੂਰੇ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰਾਂ ਨਾਲ ਚੱਲਦਾ ਹੈ। ਉਹ ਉਪਸਰਗ ਇੱਕੋ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਵਾਲੇ ਕਦਮ ਲਈ ਜਾਇਜ਼ ਸਾਧਨ ਹੈ ਅਤੇ ਹੁਣੇ ਬਣਾਈ ਗਈ ਵੱਖਰਤਾ ਨੂੰ ਰੱਦ ਕਰਨ ਦਾ ਸੁਵਿਧਾਜਨਕ ਤਰੀਕਾ ਹੈ, ਇਸ ਲਈ ਉਸ ਇਕਾਈ ਵਿੱਚ ਕਿਸੇ ਵੀ + ਨੂੰ ਸਮੀਖਿਆ ਵਿੱਚ ਜਾਇਜ਼ ਠਹਿਰਾਉਣ ਯੋਗ ਚੀਜ਼ ਮੰਨੋ।
ਟ੍ਰਿਗਰ ਦਾ ਇਨਪੁੱਟ ਘੱਟੋ-ਘੱਟ ਅਤੇ ਗੁਪਤ-ਰਹਿਤ ਰੱਖੋ। ਸੈਸ਼ਨ ਪਛਾਣਕਰਤਾ, ਮੈਪ ਕੀਤਾ ਖਾਤਾ ਅਤੇ ਸਮਾਂ-ਛਾਪ ਆਮ ਤੌਰ ’ਤੇ ਲੋੜੀਂਦਾ ਸਭ ਕੁਝ ਹਨ। ਕਦੇ ਵੀ ਸੀਮਾ ਪਾਰ ਸ਼ੈੱਲ ਟੁਕੜਾ, ਚੱਲਣਯੋਗ ਫਾਈਲ ਦਾ ਮਾਰਗ ਜਾਂ ਕਲਾਇੰਟ ਵੱਲੋਂ ਦਿੱਤਾ ਵਾਤਾਵਰਣ ਬਲਾਕ ਨਾ ਭੇਜੋ, ਕਿਉਂਕਿ ਪ੍ਰਾਪਤ ਕਰਨ ਵਾਲੇ ਪਾਸੇ ਕੋਲ ਜਾਇਜ਼ ਮੁੱਲ ਅਤੇ ਇੰਜੈਕਟ ਕੀਤੇ ਮੁੱਲ ਵਿੱਚ ਫ਼ਰਕ ਕਰਨ ਦਾ ਕੋਈ ਤਰੀਕਾ ਨਹੀਂ ਹੈ।
ਅਸਲ ਵਿੱਚ ਚੱਲੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ
ਸੰਰਚਨਾ ਸਮੀਖਿਆ ਸਬੂਤ ਨਹੀਂ ਹੈ। ਮਨਜ਼ੂਰ ਪਰਖ ਕਨੈਕਸ਼ਨ ਤੋਂ ਬਾਅਦ, ਫਾਈਲ ਨੂੰ ਛੋਹਣ ਵਾਲੇ UID ਅਤੇ ਡੈਮਨ ਵੱਲੋਂ ਅਜੇ ਵਰਤੇ ਜਾ ਰਹੇ UID ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ:
stat -c '%U %G %y %n' /home/alice/.local/state/vpn-status.json
ps -o user=,pid=,cmd= -p "$(pgrep -o -f 'openvpn --daemon')"
systemd-run --uid=alice --pipe /usr/local/bin/refresh-vpn-status --dry-run
ਪਹਿਲੀ ਸਤਰ ਵਿੱਚ Alice ਅਤੇ ਤੁਹਾਡੀ ਪਰਖ ਵਿੰਡੋ ਦੇ ਅੰਦਰ ਸਮਾਂ-ਛਾਪ ਦਿਖਣਾ ਚਾਹੀਦਾ ਹੈ। ਦੂਜੀ ਵਿੱਚ ਅਜੇ ਵੀ root ਜਾਂ ਪੈਕੇਜ ਦਾ ਸੇਵਾ ਖਾਤਾ ਦਿਖਣਾ ਚਾਹੀਦਾ ਹੈ, ਜੋ ਸਿੱਧ ਕਰਦਾ ਹੈ ਕਿ ਡੈਮਨ ਹਿਲਿਆ ਨਹੀਂ। ਤੀਜੀ ਅਸਲ ਦੁਬਾਰਾ ਜੁੜਨ ਦੀ ਉਡੀਕ ਕੀਤੇ ਬਿਨਾਂ ਕਾਰਵਾਈ ਦੀਆਂ ਇਜਾਜ਼ਤਾਂ ਪਰਖਣ ਦਾ ਸਭ ਤੋਂ ਸਸਤਾ ਤਰੀਕਾ ਹੈ।
ਜੇ ਫਾਈਲ ਦਾ ਮਾਲਕ Alice ਹੈ ਪਰ ਉਸ ਦਾ ਸਮੂਹ ਜਾਂ ਮੋਡ ਚਲਾਉਣਾਂ ਵਿਚਕਾਰ ਬਦਲ ਗਿਆ ਹੈ, ਤਾਂ ਤਰਕ ਗਲਤੀ ਦੀ ਥਾਂ UMask= ਜਾਂ ਡਾਇਰੈਕਟਰੀ ਇਜਾਜ਼ਤ ਦਾ ਫ਼ਰਕ ਲੱਭੋ। ਜੇ ਸਮਾਂ-ਛਾਪ ਬਿਲਕੁਲ ਨਹੀਂ ਹਿਲਿਆ, ਤਾਂ ਟ੍ਰਿਗਰ ਕਦੇ ਚੱਲਿਆ ਹੀ ਨਹੀਂ, ਅਤੇ ਲਾਭਦਾਇਕ ਅਗਲਾ ਕਦਮ ਦੂਜਾ ਕਲਾਇੰਟ ਦੁਬਾਰਾ ਜੁੜਨਾ ਨਹੀਂ, ਸਗੋਂ ਕਾਰਵਾਈ ਇਕਾਈ ਲਈ journalctl -u ਹੈ।
ਕਨੈਕਸ਼ਨ ਘਟਨਾ ਅਜੇ ਵੀ ਕੀ ਸਿੱਧ ਨਹੀਂ ਕਰਦੀ
ਸਥਾਪਿਤ ਟਨਲ ਇੱਕ ਹਕੀਕਤ ਹੈ। ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਨਹੀਂ ਕਿ ਡੈਸਕਟਾਪ ਸੈਸ਼ਨ ਖੁੱਲ੍ਹਾ ਹੈ, ਸੈਸ਼ਨ ਬਸ ਪਹੁੰਚਯੋਗ ਹੈ, ਜਾਂ ਕਾਰਵਾਈ ਜੋ ਨਿੱਜੀ ਸਰੋਤ ਚਾਹੁੰਦੀ ਹੈ ਉਹ ਹੁਣ ਉਪਲਬਧ ਹੈ। Alice ਦੇ UID ਹੇਠਲੀ oneshot ਇਕਾਈ ਕੋਲ ਉਸ ਦੀ ਪਛਾਣ ਹੈ ਅਤੇ ਉਸ ਦੇ ਸੈਸ਼ਨ ਤੋਂ ਕੁਝ ਨਹੀਂ, ਇਸ ਲਈ ਗ੍ਰਾਫ਼ਿਕਲ ਬਸ ਲੋੜੀਂਦੀ ਹਰ ਚੀਜ਼ ਨੂੰ ਸਮਰਥਿਤ ਵਰਤੋਂਕਾਰ-ਸੈਸ਼ਨ ਵਿਵਸਥਾ ਰਾਹੀਂ ਜਾਣਾ ਪਵੇਗਾ ਅਤੇ ਇਹ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨਾ ਪਵੇਗਾ ਕਿ ਉਹ ਲਾਗ ਆਉਟ ਹੋਣ ’ਤੇ ਕੀ ਹੁੰਦਾ ਹੈ।
ਦੁਬਾਰਾ ਜੁੜਨਾ ਵੀ ਦੁਹਰਾਇਆ ਜਾਂਦਾ ਹੈ। ਰੇਲ ਵਿੱਚ ਸੁੱਤਾ ਲੈਪਟਾਪ ਇੱਕ ਘੰਟੇ ਵਿੱਚ ਦਰਜਨ ਭਰ ਕਨੈਕਸ਼ਨ ਘਟਨਾਵਾਂ ਪੈਦਾ ਕਰ ਸਕਦਾ ਹੈ, ਅਤੇ ਹਰ ਵਾਰ ਇੱਕ ਸਤਰ ਜੋੜਨ ਵਾਲਾ hook ਸਥਿਤੀ ਫਾਈਲ ਨੂੰ ਅਜਿਹੇ ਲਾਗ ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ ਜੋ ਕੋਈ ਪੜ੍ਹ ਨਹੀਂ ਸਕਦਾ। ਕਾਰਵਾਈ ਨੂੰ ਆਈਡੈਂਪੋਟੈਂਟ ਬਣਾਓ, ਜਾਂ ਸੈਸ਼ਨ-ਕੁੰਜੀ ਵਾਲਾ ਇੱਕੋ ਰਿਕਾਰਡ ਬਦਲਣ ਦਿਓ।
ਅੰਤ ਵਿੱਚ, ਇਕਾਈ ਦੇ ਅੰਦਰ ਹੀ ਨੁਕਸਾਨ ਦਾ ਘੇਰਾ ਸੀਮਤ ਕਰੋ: ਸਥਿਤੀ ਡਾਇਰੈਕਟਰੀ ਤੋਂ ਬਾਹਰ ਸਿਰਫ਼-ਪੜ੍ਹਨਯੋਗ ਫਾਈਲਸਿਸਟਮ ਨਜ਼ਾਰਾ, ਨਵੇਂ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਨਹੀਂ, ਅਤੇ ਸਪੱਸ਼ਟ ਸਮਾਂ-ਸੀਮਾ। ਡੈਮਨ ਅਤੇ ਵਰਤੋਂਕਾਰ ਕਾਰਵਾਈ ਵਿਚਕਾਰ ਵੱਖਰਤਾ ਆਪਣੇ ਆਪ ਵਿੱਚ ਕੀਮਤੀ ਹੈ, ਪਰ ਕਾਰਵਾਈ ਤੁਹਾਡੇ ਮਨਜ਼ੂਰ ਕੀਤੇ ਇੱਕ ਕੰਮ ਤੋਂ ਬਿਨਾਂ ਹੋਰ ਕੁਝ ਨਾ ਕਰ ਸਕੇ ਤਾਂ ਇਹ ਕਿਤੇ ਵੱਧ ਕੀਮਤੀ ਹੈ।