VPN ಡೀಮನ್ ನ ಸಂಪರ್ಕ hook ಗಳು ಡೀಮನ್ ಆಗಿ ಚಲಿಸುತ್ತವೆ, ಮತ್ತು ಸಾಮಾನ್ಯವಾಗಿ ಅದು ಅವು root ಆಗಿ ಚಲಿಸುತ್ತವೆ ಎಂದರ್ಥ. ಆ hook ಗಳಲ್ಲಿ ಒಂದು ಯಾರೊಬ್ಬರ ಮನೆ ಕೋಶದಲ್ಲಿ ಬರೆದಾಗ ಅಥವಾ ಡೆಸ್ಕ್ ಟಾಪ್ ಸಹಾಯಕವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗ, ನೀವು ಒಂದು ಜಾಲ ಘಟನೆಗೆ ಯಾವುದೇ ಸ್ಥಳೀಯ ಬಳಕೆದಾರರಾಗಿ ವರ್ತಿಸುವ ಸಾಮರ್ಥ್ಯ ನೀಡಿದ್ದೀರಿ. ಸಾಮಾನ್ಯ ಸಣ್ಣ ದಾರಿ, ಅಂದರೆ ಪರಿಸರ ಚರದಿಂದ ಬಳಕೆದಾರ ಹೆಸರು ಓದಿ ಅದನ್ನು ಮುಂದೆ ಕಳುಹಿಸುವುದು, ಇದನ್ನು ಸರಿಪಡಿಸುವುದಿಲ್ಲ. ಅದು ಕ್ರಿಯೆಗೆ ಮರುಲೇಬಲ್ ಮಾಡುತ್ತದೆ ಹೊರತು ಯಾವ ಖಾತೆ ಅದನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಬದಲಿಸುವುದಿಲ್ಲ. ಕೆಲಸ ಮಾಡುವುದು ಮೂರು ಭಾಗಗಳ ಹಸ್ತಾಂತರ, ಅದರಲ್ಲಿ ವಿಶೇಷಾಧಿಕಾರ ಹಂತ ಏನಾಯಿತು ಎಂದು ಹೇಳುತ್ತದೆ ಮತ್ತು ಪ್ರತ್ಯೇಕ ಘಟಕ ಸರಿಯಾದ ಗುರುತಿನಲ್ಲಿ ಕ್ರಿಯೆ ಮಾಡುತ್ತದೆ.

ಪರಿಸರದಲ್ಲಿನ ಬಳಕೆದಾರ ಹೆಸರು ಗುರುತಿನ ಸ್ವಿಚ್ ಅಲ್ಲ

Unix ಪ್ರಕ್ರಿಯೆ ಏನನ್ನು ಮುಟ್ಟಬಹುದು ಎಂಬುದನ್ನು ಅದರ ಪರಿಣಾಮಕಾರಿ ಬಳಕೆದಾರ ID ನಿಂದ ನಿರ್ಧರಿಸುತ್ತದೆ, ಅದರ ಪರಿಸರದ ತಂತುಗಳಿಂದ ಅಲ್ಲ. USER=alice ಹೊಂದಿಸುವುದು ಅಥವಾ LOGNAME ರಫ್ತು ಮಾಡುವುದು ನಿರ್ಲಕ್ಷ್ಯ ಸಾಫ್ಟ್ ವೇರ್ ತನ್ನ ಔಟ್ ಪುಟ್ ನಲ್ಲಿ ಏನನ್ನು ಮುದ್ರಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಬದಲಿಸುತ್ತದೆ; ಕಡತ ಮಾಲೀಕತ್ವ ಪರಿಶೀಲನೆಗಳಲ್ಲಿ ಏನನ್ನೂ ಬದಲಿಸುವುದಿಲ್ಲ. ಆ ಚರ ಹೊಂದಿಸಿರುವ ಸ್ಥಿತಿಯಲ್ಲಿ root ಆಗಿ ಚಲಿಸುವ hook ಇನ್ನೂ root ಆಗಿಯೇ Alice ರ ಕಡತಗಳನ್ನು ತೆರೆಯುತ್ತದೆ.

ಹೆಸರುಗಳೂ ಒಂದೇ ಹೆಸರಲ್ಲ. ದೂರಸ್ಥ ಪ್ರವೇಶ ಲಾಗಿನ್, ಸ್ಥಳೀಯ Unix ಖಾತೆ ಮತ್ತು ಪ್ರಮಾಣಪತ್ರದ ಸಾಮಾನ್ಯ ಹೆಸರು ಮೂರು ಗುರುತಿಸುವಿಕೆಗಳು, ಅವು ಹೆಚ್ಚಾಗಿ ಹೊಂದಿಕೆಯಾಗುತ್ತವೆ ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಆಗುವುದಿಲ್ಲ. 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 ಸ್ಥಿತಿ ಕಡತವನ್ನು ಯಾರೂ ಓದಲಾಗದ ಲಾಗ್ ಆಗಿ ಬದಲಿಸುತ್ತದೆ. ಕ್ರಿಯೆಯನ್ನು ಐಡೆಂಪೊಟೆಂಟ್ ಮಾಡಿ, ಅಥವಾ ಅವಧಿ ಕೀಲಿಯ ಒಂದೇ ದಾಖಲೆಯನ್ನು ಬದಲಿಸಲು ಬಿಡಿ.

ಕೊನೆಯದಾಗಿ, ಹಾನಿಯ ತ್ರಿಜ್ಯವನ್ನು ಘಟಕದೊಳಗೇ ಮಿತಿಗೊಳಿಸಿ: ಸ್ಥಿತಿ ಕೋಶದ ಹೊರಗೆ ಓದಲು ಮಾತ್ರ ಸಾಧ್ಯವಾದ ಕಡತ ವ್ಯವಸ್ಥೆ ನೋಟ, ಹೊಸ ವಿಶೇಷಾಧಿಕಾರಗಳಿಲ್ಲ, ಮತ್ತು ಸ್ಪಷ್ಟ ಕಾಲಮಿತಿ. ಡೀಮನ್ ಮತ್ತು ಬಳಕೆದಾರ ಕ್ರಿಯೆಯ ನಡುವಿನ ಪ್ರತ್ಯೇಕತೆ ತನ್ನದೇ ಆದ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿದೆ, ಆದರೆ ಕ್ರಿಯೆ ನೀವು ಅನುಮೋದಿಸಿದ ಒಂದೇ ವಿಷಯವನ್ನು ಬಿಟ್ಟು ಬೇರೆ ಏನನ್ನೂ ಮಾಡಲಾಗದಿದ್ದಾಗ ಅದು ಇನ್ನೂ ಹೆಚ್ಚು ಮೌಲ್ಯದ್ದಾಗಿದೆ.

ಸಂಬಂಧಿತ ಲೇಖನಗಳು