status=200/CHDIR: systemd OpenVPN-ను ఎప్పుడూ ప్రారంభించలేదు
CHDIR వైఫల్యం అంటే systemd ఒక డైరెక్టరీలోకి ప్రవేశించలేకపోయింది, OpenVPN ప్రొఫైల్ను చదవలేకపోయింది అని కాదు. VPN కాన్ఫిగరేషన్ను తాకే ముందు unit చదవండి.
సేవ విఫలమవుతుంది, లాగ్లు spawn మరియు ఒక డైరెక్టరీని ప్రస్తావిస్తాయి, మొదటి ప్రవృత్తి VPN కాన్ఫిగరేషన్ను తనిఖీ చేయడం. ఆ ఫైల్ నుండి ఇంకా ఏమీ చదవబడలేదు. systemd ప్రక్రియను సిద్ధం చేస్తున్నప్పుడు, ఎగ్జిక్యూటబుల్ నడవకముందే విఫలమైంది, కాబట్టి ఏ parser, ఏ సర్టిఫికెట్ మరియు ఏ రిమోట్ హోస్ట్ సంప్రదించబడలేదు. స్టేటస్ కోడ్ను OpenVPN గురించి కాకుండా systemd గురించి ప్రకటనగా చదవడమే దీన్ని చిన్న దర్యాప్తుగా మారుస్తుంది.
అప్లికేషన్ ముందు స్టేటస్ కోడ్ చదవండి
సేవ పేరు తర్వాత వచ్చే సంఖ్యా కోడ్ విఫలమైన దశను సూచిస్తుంది. డైరెక్టరీ వైఫల్యం CHDIR స్టేటస్గా నివేదించబడుతుంది, అయితే నడపలేని ఎగ్జిక్యూటబుల్ పూర్తిగా వేరే కోడ్. రెండూ సారాంశ పంక్తిలో ఒకేలా కనిపిస్తాయి, వాటి కారణాల్లో ఏమీ ఉమ్మడిగా లేదు.
ఈ భేదం ముఖ్యం ఎందుకంటే సవరణలు వేర్వేరు ఫైళ్లలో ఉన్నాయి. CHDIR వైఫల్యం ఒక మార్గం మరియు సేవ దాన్ని ఎలా చూస్తుంది అనే దానికి సంబంధించినది. Exec వైఫల్యం బైనరీ, దాని ఇంటర్ప్రెటర్ లేదా సంబంధం లేని mountకు సంబంధించినది. VPN రిమోట్ పాయింట్, సైఫర్ జాబితా లేదా సర్టిఫికెట్ మార్గాన్ని మార్చడం వీటిలో దేన్నీ సరిచేయదు.
వైఫల్యం ప్రారంభంలో ఉందా, విజయవంతమైన నడక తర్వాత కాదా అని నిర్ధారించండి. నిన్న సేవ నడుస్తూ ఉండి, ఇప్పుడు అదే దశలో విఫలమైతే, డైరెక్టరీ, దాని అనుమతులు లేదా unit తానే ఏదో మారింది, ఆ మార్పే వెతకాల్సిన సాక్ష్యం.
unit ఎక్కడ ఉండాలనుకుంటోందో అడగండి
మీరు ఇన్స్టాల్ అయిందని అనుకునే ఫైల్ను కాకుండా ప్రభావవంతమైన unit చదవండి, ఎందుకంటే drop-in ఫైళ్లు ప్రధాన unitను ఎప్పుడూ మార్చకుండానే పని డైరెక్టరీని ఓవర్రైడ్ చేయగలవు. show అవుట్పుట్ ప్రశ్నకు నేరుగా సమాధానం ఇస్తుంది:
systemctl cat [email protected]
systemctl show [email protected] -p WorkingDirectory -p RootDirectory -p User -p ProtectHome
journalctl -u [email protected] -b --no-pager | tail -30
upstream సర్వర్ టెంప్లేట్ కోసం పని డైరెక్టరీ సర్వర్ కాన్ఫిగరేషన్ డైరెక్టరీ మరియు ఇన్స్టాన్స్ పేరు దాని లోపలి ప్రొఫైల్ను ఎంచుకుంటుంది. కాబట్టి branch అనే ఇన్స్టాన్స్ అదే డైరెక్టరీలో తన ఫైల్ను ఆశిస్తుంది, మరెక్కడో ఉంచిన ప్రొఫైల్ పని డైరెక్టరీ షరతును అసలు నెరవేర్చదు.
unit ఏమి కోరుతోంది, ఏమి ఉంది అనేది పోల్చండి. ముందు ఉన్న మార్గం, ఇప్పుడు వేరే చోటుకు సూచించే సింబాలిక్ లింక్, లేదా ఇప్పుడు ఏ డైరెక్టరీతోనూ సరిపోలని ఇన్స్టాన్స్ పేరు—ఇవన్నీ ఇదే వైఫల్యాన్ని కలిగించే సాధారణ మార్పులు.
మార్గాన్ని సేవ చూసే విధంగా తనిఖీ చేయండి
మీ shell మరియు సేవ ఫైల్ సిస్టమ్ యొక్క ఒకే దృశ్యాన్ని పంచుకోవు. కాన్ఫిగర్ చేసిన రూట్ డైరెక్టరీ లేదా root image unit లోపల సంపూర్ణ మార్గం అర్థాన్ని మారుస్తుంది, హోస్ట్లో స్పష్టంగా ఉన్న మార్గం ఆ పేరు స్థలంలో ఉండకపోవచ్చు. చేతితో చేసే పరీక్షను నమ్మే ముందు unit సెట్టింగ్లు చదవండి.
అనుమతులు సమస్యను పెంచుతాయి. సేవ ఒక నిర్దిష్ట వినియోగదారుగా నడుస్తుంది, ఆ వినియోగదారు లక్ష్యాన్ని చేరుకోవడానికి ప్రతి మాతృ డైరెక్టరీని దాటగలగాలి, లక్ష్యాన్ని మాత్రమే చదవడం సరిపోదు. root చదవగలిగే కానీ సేవ వినియోగదారు దాటలేని డైరెక్టరీ కనిపించని మార్గం లాంటి వైఫల్యాన్ని కలిగిస్తుంది.
namei -l /etc/openvpn/server
systemctl show [email protected] -p ProtectSystem -p ReadOnlyPaths
కఠినీకరణ సెట్టింగ్లు కూడా ఈ చిత్రంలో భాగం. హోమ్ డైరెక్టరీలను దాచే లేదా ఫైల్ సిస్టమ్లో కొంత భాగాన్ని చదవడానికి-మాత్రమే చేసే unit తనకు కాన్ఫిగర్ చేసిన పనినే చేస్తుంది, పని డైరెక్టరీ sandbox ఇంకా బయటపెట్టే చోట ఉండాలి.
యజమానిని సరిచేయండి, తర్వాత మరో లోపం కోసం ఎదురుచూడండి
లేఅవుట్ లేదా unitను ఆ కాన్ఫిగరేషన్ యజమాని ద్వారా సరిచేయండి. ప్రొఫైల్ను ఆశించిన డైరెక్టరీలోకి తరలించడం లేఅవుట్ తప్పు అయినప్పుడు సరైన సవరణ, కానీ ప్రవేశించలేని డైరెక్టరీని అది వివరించదు, కాబట్టి దాన్ని సాధారణ సమాధానంగా తీసుకోకండి.
కాన్ఫిగరేషన్ చెట్టుపై అనుమతులను విస్తరించే లేదా sandbox తొలగించే షార్ట్కట్ను ఎదిరించండి. రెండూ లక్షణాన్ని తొలగిస్తాయి, అదే సమయంలో అక్కడ ఉద్దేశపూర్వకంగా పెట్టిన రక్షణలను తొలగిస్తాయి, తదుపరి వైఫల్యాన్ని వివరించడం కష్టమవుతుంది.
ఇన్స్టాన్స్ను మళ్లీ ప్రారంభించి, విజయాన్ని ఊహించకుండా తదుపరి సంఘటన చదవండి. తదుపరి సంభావ్య లోపం OpenVPN తన కాన్ఫిగరేషన్ ఫైల్ను తెరవలేకపోవడం, ఇది పురోగతి: పని డైరెక్టరీలోకి ప్రవేశించాం, parser ఇప్పుడు నడుస్తోంది. అక్కడి నుండి unit యొక్క వాస్తవ ఫైల్ మ్యాపింగ్ను అనుసరించండి, నెట్వర్క్ సమస్య పరిష్కారం వైపు తిరిగి వెళ్లకండి.
systemd యొక్క ఎగ్జిక్యూషన్ సూచన పని డైరెక్టరీ రూట్ డైరెక్టరీలు మరియు sandboxతో ఎలా వివరించబడుతుందో నిర్వచిస్తుంది. గుర్తుంచుకోవాల్సిన నమూనా సులభం: ప్రతి స్టేటస్ కోడ్ వేరే దశను సూచిస్తుంది, అప్లికేషన్ యొక్క సొంత లోపాలే అప్లికేషన్ను వివరిస్తాయి.