ప్రొఫైల్ లోడ్ అయినా OpenVPN ca.crt ను కనుగొనలేకపోతున్నది
ప్రొఫైల్ మార్గం దానిలోని ఫైళ్లకు ఆధారం కాదు. పూర్తి --config ఇప్పటికీ ca.crt పై ఎందుకు విఫలమవుతుంది మరియు ప్రారంభం సమాధానాన్ని ఎలా నిర్ణయిస్తుందో చూడండి.
సేవ ప్రారంభమవుతుంది, ప్రొఫైల్ ను ఎటువంటి ఫిర్యాదు లేకుండా చదువుతుంది, ఆపై సంబంధం లేనట్టు కనిపించే ఒక పంక్తిలో మరణిస్తుంది: అది ca.crt ను తెరవలేదు. సర్టిఫికెట్ లో ఏమీ మారలేదు, మరియు unit ఫైల్ లో ప్రొఫైల్ మార్గం పూర్తిగా ఉంది. ఆ కలయికే సూచన. మీరు ఇచ్చిన మార్గం ఒక ఫైల్ ను గుర్తిస్తుంది, ఆ ఫైల్ లోని పేర్లు పూర్తిగా వేరే చోట పరిష్కరించబడతాయి, కాబట్టి పూర్తిగా అర్హమైనట్టు కనిపించే ప్రారంభం కూడా ఎవరూ ఉద్దేశించని డైరెక్టరీ నుండి దాని కీలను చదవవచ్చు.
వైఫల్యానికి కొన్ని కారణాలే ఉన్నాయి, వాటిని క్రమంగా వేరు చేయడం మంచిది: ప్రక్రియకు నిజంగా ఉన్న మూల డైరెక్టరీ, సేవ యొక్క ప్రారంభ సందర్భం, మరియు మార్గం సరైన తర్వాత ఫైల్ చుట్టూ ఉన్న అనుమతులు లేదా sandbox. ప్రతి ఒక్కటి వేరే జాడను వదిలిస్తుంది — 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 మరియు sandbox
సరైన మూల డైరెక్టరీ కూడా అదే సందేశాన్ని ఇవ్వవచ్చు, ఎందుకంటే పరిష్కారం మరియు ప్రవేశం వేర్వేరు దశలు. ప్రక్రియకు ప్రతి మూల డైరెక్టరీలో అమలు అనుమతి మరియు ఫైల్ పై చదివే అనుమతి అవసరం, మరియు ఫైల్ సిస్టమ్ లో కొంత భాగాన్ని దాచే సేవా 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
మార్గ లోడింగ్ విజయవంతమైనా, ప్రామాణీకరణ మరియు రూటింగ్ తమ స్వంత వైఫల్యాలతో వేర్వేరు దశలే, మరియు కనెక్షన్ లేచి కూడా ట్రాఫిక్ దాటకపోతే అది మరొక దర్యాప్తు. ఇక్కడి సరిదిద్దడం ఫైళ్లు ఏ డైరెక్టరీ నుండి వచ్చాయి అనే దానికి మాత్రమే సంబంధించినది, మరియు అది పిలుపులో కనిపించాలి, చివరిసారి చేతితో నడిపినవారు గుర్తుంచుకోవడం కాదు.
ప్రొఫైల్ ఒక కాన్ఫిగరేషన్ మేనేజర్ ద్వారా విస్తరించబడితే, మూల డైరెక్టరీ లేదా పూర్తి ఫైల్ పేర్లను అక్కడ కూడా పెట్టండి. ఒక హోస్ట్ పై చేతితో చేసిన సరిదిద్దడం తదుపరి పునర్నిర్మాణం తర్వాత తిరిగి వచ్చే ఈ సమస్య యొక్క సంస్కరణ.