QGIS PostGIS SSH ಸುರಂಗ: TLS ಗಾಗಿ ಸರ್ವರ್ ಹೆಸರನ್ನು ಇಟ್ಟುಕೊಳ್ಳಿ
SSH ಫಾರ್ವರ್ಡ್ QGIS ಗೆ ಸ್ಥಳೀಯ ಪೋರ್ಟ್ ನೀಡುತ್ತದೆ, ಆದರೆ ಡೇಟಾಬೇಸ್ಗೆ TLS ಗಾಗಿ ಅದರ ನಿಜವಾದ ಹೆಸರು ಇನ್ನೂ ಬೇಕು. hostaddr ಮತ್ತು loopback ಶ್ರೋತೆಯೊಂದಿಗೆ libpq ಸೇವೆಯನ್ನು ಬಳಸಿ.
ಸುರಂಗ ಏಳುತ್ತದೆ, QGIS ಸಂಪರ್ಕಿಸುತ್ತದೆ, ಮತ್ತು ಲಾಗಿನ್ ಡೇಟಾಬೇಸ್ ಹೋಸ್ಟ್ನ ಬದಲು 127.0.0.1 ಎಂದು ಹೆಸರಿಸುವ ಪ್ರಮಾಣಪತ್ರ ದೋಷದೊಂದಿಗೆ ಸಾಯುತ್ತದೆ. ಮುಂದಿನ ಆಮಿಷದ ಹೆಜ್ಜೆ sslmode ಅನ್ನು ಸಡಿಲಗೊಳಿಸುವುದು, ಅದು ಪರಿಶೀಲನೆಯನ್ನು ಸದ್ದಿಲ್ಲದೆ ಮಾಡಿ ನೀವು ಮೊದಲಿನಿಂದಲೂ ಬಯಸಿದ ಗುರುತಿನ ಭರವಸೆಯನ್ನು ಎಸೆದುಬಿಡುತ್ತದೆ. ನಿಜವಾದ ಸಮಸ್ಯೆ ಎಂದರೆ ಸ್ಥಳೀಯ ಪೋರ್ಟ್ ಮತ್ತು ಸರ್ವರ್ನ ಹೆಸರು ಒಂದೇ ಕ್ಷೇತ್ರದಲ್ಲಿ ಸಂಗ್ರಹವಾಗುತ್ತವೆ. libpq ಸೇವಾ ನಮೂದು ಅವುಗಳನ್ನು ಬೇರ್ಪಡಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಸಾಕೆಟ್ ಫಾರ್ವರ್ಡ್ ಆದ ಪೋರ್ಟ್ಗೆ ಹೋಗುತ್ತದೆ, TLS ಇನ್ನೂ ಪ್ರಮಾಣಪತ್ರದ ಮೇಲೆ ಮುದ್ರಿತ ಹೆಸರನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ.
ಕ್ಲೈಂಟ್ ಯಾವುದಕ್ಕೆ ಸಂಪರ್ಕಿಸುತ್ತಿದೆ ಎಂದು ಭಾವಿಸುತ್ತದೆ
sslmode=verify-full ಅಡಿಯಲ್ಲಿ libpq ಸರ್ವರ್ ಒದಗಿಸುವ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಕೇಳಿದ ಹೋಸ್ಟ್ ಹೆಸರಿನೊಂದಿಗೆ ಹೋಲಿಸುತ್ತದೆ. ಆ ಹೆಸರು loopback ವಿಳಾಸವಾದರೆ, ಪ್ರಮಾಣಪತ್ರ ನಿಜವಾದ ಡೇಟಾಬೇಸ್ ಹೋಸ್ಟ್ಗೆ ಮಾನ್ಯವಾಗಿದ್ದರೂ ಹೋಲಿಕೆ ವಿಫಲವಾಗುತ್ತದೆ. SSH ಫಾರ್ವರ್ಡ್ ಯಾವ ಸಾಕೆಟ್ ಬೈಟ್ಗಳನ್ನು ಸಾಗಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಬದಲಿಸುತ್ತದೆ, ಕ್ಲೈಂಟ್ ನಿರೀಕ್ಷಿಸಬೇಕಾದ ಗುರುತನ್ನಲ್ಲ. ಆ ಎರಡು ಕಲ್ಪನೆಗಳು ಬೇರ್ಪಟ್ಟ ನಂತರ, ದೋಷವು ಇನ್ನು TLS ದೋಷದಂತೆ ಕಾಣುವುದಿಲ್ಲ.
ಫಾರ್ವರ್ಡ್ ಅಧಿಕಾರವೂ ಅಲ್ಲ. PostgreSQL SSH ಸರ್ವರ್ ಮಾಡುವ ಸಂಪರ್ಕಕ್ಕೆ ತನ್ನದೇ ನಿಯಮಗಳನ್ನು ಇನ್ನೂ ಅನ್ವಯಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಏನನ್ನಾದರೂ ಬದಲಿಸುವ ಮೊದಲು ಸಾಗಣೆ ಪದರ ಮತ್ತು ಡೇಟಾಬೇಸ್ ಪದರವನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಇರಿಸಿ.
ಫಾರ್ವರ್ಡ್ ಅನ್ನು loopback ಗೆ ಮಾತ್ರ ಬಂಧಿಸಿ
ಶ್ರೋತೆ QGIS ಯಂತ್ರದಲ್ಲೇ ಇರಬೇಕು, ಬೇರೆ ಎಲ್ಲೂ ಅಲ್ಲ. 127.0.0.1 ಅನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಹೆಸರಿಸುವುದು ಅದನ್ನು ಇತರ ಇಂಟರ್ಫೇಸ್ಗಳಿಂದ ದೂರವಿಡುತ್ತದೆ, ಆದರೆ ಬಿಟ್ಟುಬಿಟ್ಟ ಬೈಂಡ್ ವಿಳಾಸವು SSH ಕ್ಲೈಂಟ್ನ ಗೇಟ್ವೇ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಅವಲಂಬಿಸಿ ಪೋರ್ಟ್ ಅನ್ನು ಹೊರಕ್ಕೆ ತೆರೆಯಬಹುದು.
ssh -N -L 127.0.0.1:15432:127.0.0.1:5432 [email protected]ಎರಡನೇ ಕೊಲನ್ ನಂತರದ ಗಮ್ಯಸ್ಥಾನವು SSH ಸರ್ವರ್ ಕಡೆಯಿಂದ ಪರಿಹರಿಸಲ್ಪಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಈ ಉದಾಹರಣೆ PostgreSQL sshd ಇರುವ ಅದೇ ಹೋಸ್ಟ್ನಲ್ಲಿದೆ ಎಂದು ಊಹಿಸುತ್ತದೆ; ಬೇರೆ ಯಂತ್ರದಲ್ಲಿನ ಡೇಟಾಬೇಸ್ಗೆ ಆ ವಿಳಾಸ ಮತ್ತು ಅದರ ಅನುಮತಿಗಳು ಬೇಕು. ಸೆಷನ್ ಅನ್ನು -N ನೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸಿ ಇದರಿಂದ ಯಾವುದೇ ಶೆಲ್ ತೆರೆಯುವುದಿಲ್ಲ, ಹೋಸ್ಟ್-ಕೀ ಪರಿಶೀಲನೆಯನ್ನು ಮುಟ್ಟಬೇಡಿ, ಮತ್ತು QGIS ಅನ್ನು ದೂಷಿಸುವ ಮೊದಲು ಶ್ರೋತೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿ. ಪೋರ್ಟ್ ಈಗಾಗಲೇ ಬಳಕೆಯಲ್ಲಿದ್ದರೆ, ಫಾರ್ವರ್ಡ್ ಪ್ರಶ್ನೆಯ ಸಮಯದಲ್ಲಿ ಅಲ್ಲ, ಪ್ರಾರಂಭದಲ್ಲೇ ವಿಫಲವಾಗುತ್ತದೆ.
ಹೆಸರು ಮತ್ತು ಸಾಕೆಟ್ ಅನ್ನು ಒಂದೇ ಸೇವಾ ನಮೂದಿನಲ್ಲಿ ಇರಿಸಿ
ಸೇವಾ ಫೈಲ್ ಒಂದೇ ಸಂಪರ್ಕಕ್ಕೆ ಪರಿಶೀಲನಾ ಹೆಸರು ಮತ್ತು ಬೇರೆ ಸಾಕೆಟ್ ಗಮ್ಯಸ್ಥಾನವನ್ನು ಸಾಗಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. ನಮೂದನ್ನು libpq ಸೇವೆಗಳನ್ನು ಹುಡುಕುವ ಸ್ಥಳದಲ್ಲಿ ಉಳಿಸಿ, ಅಥವಾ PGSERVICEFILE ಅನ್ನು ಅದರ ಕಡೆಗೆ ತೋರಿಸಿ.
[gis-via-ssh]
host=db.geo.example
hostaddr=127.0.0.1
port=15432
dbname=gisdb
user=gis_reader
sslmode=verify-full
gssencmode=disable
sslrootcert=/path/to/approved-root.crtಇಲ್ಲಿ host ಪ್ರಮಾಣಪತ್ರ ಪರಿಶೀಲನೆಗಳಿಗೆ ಬಳಸುವ ಗುರುತನ್ನು ಉಳಿಸಿಕೊಳ್ಳುತ್ತದೆ, ಆದರೆ hostaddr ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಫಾರ್ವರ್ಡ್ ಆದ loopback ಪೋರ್ಟ್ಗೆ ಕಳುಹಿಸುತ್ತದೆ, ಮತ್ತು ಈ ವ್ಯವಸ್ಥೆ ಕೆಲಸ ಮಾಡಲು ಎರಡೂ ಬೇಕು. gssencmode=disable ಇಲ್ಲದಿದ್ದರೆ ಮೊದಲು GSSAPI ಗೂಢಲಿಪೀಕರಣವನ್ನು ಮಾತುಕತೆ ಮಾಡುತ್ತಿದ್ದ ಬಿಲ್ಡ್ಗಳಲ್ಲಿ ಮುಖ್ಯವಾಗಿದೆ, ಏಕೆಂದರೆ ಆ ಮಾರ್ಗವು ಈಗ ಸೆಟ್ ಮಾಡಿದ TLS ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸುತ್ತದೆ. QGIS ನ PostgreSQL ಸಂಪರ್ಕ ಸಂವಾದದಿಂದ ಹೆಸರಿನ ಮೂಲಕ ಸೇವೆಯನ್ನು ಉಲ್ಲೇಖಿಸಿ ಮತ್ತು ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಹಂಚಿದ ಫೈಲ್ ಒಳಗೆ ಅಲ್ಲ, ಸಾಮಾನ್ಯ ಪ್ರಾಂಪ್ಟ್ ಮೂಲಕ ನೀಡಿ. ಮೇಲಿನ ಹೆಸರುಗಳು ಮತ್ತು ಪಥಗಳು ಪ್ಲೇಸ್ಹೋಲ್ಡರ್ಗಳು; ಅವುಗಳನ್ನು ನಿಮ್ಮ ಸ್ವಂತ ಅನುಮೋದಿತ ಮೌಲ್ಯಗಳಿಂದ ಬದಲಾಯಿಸಿ.
ಸುರಂಗದ ನಂತರ PostgreSQL ಇನ್ನೂ ಏನನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ
ಸರ್ವರ್ SSH ಹೋಸ್ಟ್ನಿಂದ, ಈ ವ್ಯವಸ್ಥೆಯಲ್ಲಿ loopback ನಿಂದ ಬರುವ ಸಂಪರ್ಕವನ್ನು ನೋಡುತ್ತದೆ ಮತ್ತು ಅದನ್ನು ಕ್ರಮವಾಗಿ ಹೋಸ್ಟ್-ಆಧಾರಿತ ದೃಢೀಕರಣ ನಿಯಮಗಳೊಂದಿಗೆ ಹೊಂದಿಸುತ್ತದೆ. ನಿಮ್ಮ ಡೇಟಾಬೇಸ್ ಪಾತ್ರವು ಇನ್ನೂ ದೃಢೀಕರಣ ಮಾಡಬೇಕು, ಮತ್ತು SSH ಲಾಗಿನ್ ತಾನಾಗಿಯೇ ಯಾವುದೇ ಡೇಟಾಬೇಸ್ ಗುರುತನ್ನು ನೀಡುವುದಿಲ್ಲ. ಸರ್ವರ್ ಏನನ್ನು ನಂಬುತ್ತದೆ ಎಂಬುದನ್ನು ಪರಿಶೀಲಿಸಿ, ಕ್ಲೈಂಟ್ ಏನನ್ನು ಊಹಿಸಿತು ಎಂಬುದನ್ನಲ್ಲ.
psql "service=gis-via-ssh" -c "select inet_server_addr(), current_user"ಕೆಲಸ ಮುಗಿದಾಗ ಫಾರ್ವರ್ಡಿಂಗ್ ಸೆಷನ್ ಅನ್ನು ಮುಚ್ಚಿ; ಸ್ಥಳೀಯ ನಮೂದು ಆಗ ಕೆಲಸ ಮಾಡುವುದನ್ನು ನಿಲ್ಲಿಸುತ್ತದೆ ಮತ್ತು ಬೇರೆ ಏನೂ ಬದಲಾಗುವುದಿಲ್ಲ. ಡೇಟಾಬೇಸ್ಗೆ ಒಂದು ಮಾರ್ಗ ಇಡೀ GIS ಕ್ಲೈಂಟ್ಗೆ VPN ಅಲ್ಲ, ಮತ್ತು ಅದನ್ನು VPN ಎಂದು ಪರಿಗಣಿಸುವುದೇ ಮುಂದಿನ ಸಂಪರ್ಕ ತಪ್ಪಾಗಿ ನಿರ್ಣಯಿಸಲ್ಪಡುವ ಕಾರಣ.