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 સાથે કેવી રીતે સમજવી. યાદ રાખવાની પેટર્ન સરળ છે: દરેક સ્ટેટસ કોડ અલગ તબક્કાનું નામ આપે છે, અને ફક્ત એપ્લિકેશનની પોતાની ભૂલો જ એપ્લિકેશનનું વર્ણન કરે છે.