PAM அங்கீகாரம் கையால் இயங்குகிறது ஆனால் OpenVPN சேவையாகத் தோல்வியடைகிறது
root ஷெல்லில் இருந்து இயங்கி systemd கீழ் தோல்வியடையும் PAM உள்நுழைவு கடவுச்சொல்லை அல்ல, உதவியாளரைச் சுட்டுகிறது. சிறப்புரிமைகள், கோப்பு அணுகல் மற்றும் SELinux ஆகியவற்றைப் பிரிக்கவும்.
PAM வழியாக அங்கீகாரம், வாடிக்கையாளரைக் கையால் இயக்கும்போது வெற்றியடையலாம், systemd அதே சுயவிவரத்தைத் தொடங்கியதும் AUTH_FAILED உடன் தோல்வியடையலாம். அந்த இயக்கங்களுக்கு இடையே கடவுச்சொல் மாறுவதில்லை; மாறுவது PAM-ஐக் கேள்வி கேட்கும் செயல்முறையைச் சுற்றியுள்ள கட்டுப்பாடுகளின் தொகுப்பே. PAM தன் சொந்த அடையாளச் சான்றுகளை மாற்றும் திறன் கடினப்படுத்தப்பட்ட unit நீக்குவது சரியாக அதுவேயாகும், அத்தகைய உதவியாளர் வழியாகப் பதிலளிக்கிறது. திறன்களின் பட்டியலைத் தொடுவதற்கு முன் அந்த உதவியாளரையும் அதற்குத் தேவையான எல்லையையும் கண்டறியுங்கள்.
unix_chkpwd என்பது PAM கேள்விக்குப் பதிலளிக்கும் பைனரி
உள்ளூர் கடவுச்சொல் அங்கீகாரத்துடன், pam_unix hash கோப்பை அரிதாகவே தானே படிக்கிறது. இது unix_chkpwd-ஐ இயக்குகிறது; விநியோகங்கள் அதை setuid root அல்லது setgid shadow ஆக நிறுவுகின்றன, இதனால் /etc/shadow-ஐப் படிக்கத் தகுதியற்ற ஒரு செயல்முறைக்காக ஒரு கடவுச்சொல்லைச் சரிபார்க்க முடியும். அந்த அடையாளத்தைப் பெறும் திறனை நீக்கினால், உதவியாளர் சரிபார்ப்பை முடிக்க முடியாது, எனவே module வழக்கமான அங்கீகாரத் தோல்வியைத் திருப்பித் தருகிறது.
பின்னர் தோல்வி, வாடிக்கையாளர் காணக்கூடிய ஒவ்வொரு பதிவிலும் அடையாளச் சான்று சிக்கலாகத் தெரிகிறது. அதுதான் பொறி: வாடிக்கையாளர் PAM சொன்னதைத் தெரிவிக்கிறது, PAM மட்டும் ஸ்டாக் இல்லை என்றது என்று தெரிவிக்கிறது. root ஆக உதவியாளரைக் கையால் இயக்குவதும் எதையும் நிரூபிக்காது, ஏனெனில் அது சேவை ஒருபோதும் பயன்படுத்தாத சிறப்புரிமைப் பாதையைப் பயன்படுத்துகிறது. systemd உண்மையில் ஏற்றிய unit-ஐப் படியுங்கள், பின்னர் செய்த முயற்சிக்கான கணினிப் பதிவைப் படியுங்கள். அந்த இரண்டு பார்வைகள் sandbox சிக்கலைத் தவறான கடவுச்சொல் சிக்கலில் இருந்து பிரிக்கின்றன.
கடவுச்சொல் பதிவைப் படிக்கும் முன் unit-ஐப் படியுங்கள்
தொகுக்கப்பட்ட unit நீங்கள் எழுதாத drop-in ஒன்றைக் கொண்டிருக்கலாம், பயனுள்ள கட்டமைப்பு இணைந்த முடிவாகும். systemd காணும் வடிவில் unit-ஐ, உதவியாளர் தன்னை உயர்த்திக்கொள்ள முடியுமா என்பதைத் தீர்மானிக்கும் sandbox அமைப்புகளுடன் அச்சிடுங்கள். இந்தக் கட்டத்தில் படிக்க-மட்டும் ஆய்வு போதுமானது.
systemctl cat [email protected]
systemctl show [email protected] -p User -p Group -p CapabilityBoundingSet -p AmbientCapabilities -p NoNewPrivileges
journalctl -u [email protected] -bமுதல் கட்டளை unit-உம் அதன் drop-in-களும் எங்கிருந்து வருகின்றன என்பதைக் காட்டுகிறது; இது முக்கியம், ஏனெனில் மாதங்களுக்கு முன் சேர்க்கப்பட்ட மேலெழுதல் அது ஏன் இருக்கிறது என்ற நினைவை விட நீண்ட காலம் வாழ்கிறது. இரண்டாவது, அடுத்த இரு பிரிவுகள் சார்ந்திருக்கும் sandbox மதிப்புகளை அச்சிடுகிறது.
நீங்கள் காண்பதை அதே விநியோகம் மற்றும் பதிப்பின் செயல்படும் ஹோஸ்ட்டுடன் ஒப்பிடுங்கள். User, CapabilityBoundingSet அல்லது NoNewPrivileges இல் உள்ள வேறுபாடு உறுதியான துப்பு; உரை குறிப்புகளில் உள்ள வேறுபாடு அல்ல. எதையும் மாற்றும் முன் மதிப்புகளை எழுதி வையுங்கள், ஏனெனில் நகரும் இலக்குடன் பின்னர் ஒப்பிடுவது எதையும் நிரூபிக்காது. சேவை சிறப்புரிமையற்ற கணக்காக காலியான எல்லைத் தொகுப்புடன் இயங்கினால், உதவியாளரிடம் வேலை செய்ய கிட்டத்தட்ட எதுவும் இல்லை.
அடையாளச் சான்று மாற்றம், கோப்பு அணுகல் மற்றும் கொள்கை ஆகியவை மூன்று எல்லைகள்
exec நேரத்தில் நடப்பதில் தொடங்குங்கள். setuid பைனரி அல்லது file capabilities கொண்ட கோப்பு அடையாளச் சான்று மாற்றத்தைத் தூண்டுகிறது, எனவே விளையும் அடையாளம் அழைப்பவரின் தொடர்ச்சி அல்ல. எல்லைத் தொகுப்பு அத்தகைய பைனரி பெறக்கூடியதை வரம்பிடுகிறது, NoNewPrivileges setuid, setgid மற்றும் file capabilities பெறுவதை முழுமையாகத் தடுக்கிறது. இந்த மூன்றில் எதுவும் உதவியாளரை நிறுத்தி, சேவையின் மற்ற எல்லா பணிகளையும் பாதிப்பின்றி வைத்திருக்கும்.
அடுத்து, பரந்த விருப்பார்ந்த தவிர்ப்பைக் குறுகிய படிப்பு அணுகலில் இருந்து பிரிக்கவும். CAP_DAC_OVERRIDE கிட்டத்தட்ட எல்லா இடங்களிலும் விருப்பார்ந்த சரிபார்ப்புகளைத் தவிர்க்கிறது, CAP_DAC_READ_SEARCH தன் சொந்த கூடுதல் அதிகாரங்களுடன் படித்தல் மற்றும் அடைவு கடத்தலை உள்ளடக்குகிறது. இவை வெவ்வேறு தாக்க வீச்சுகள் கொண்ட வெவ்வேறு கருவிகள், இரண்டில் ஒன்றும் PAM shadow கோப்பைப் படிக்கட்டும் என்று எழுதும் வழி அல்ல.
இறுதியாக, கட்டாயக் கொள்கை இந்தச் செயலை அனுமதிக்கிறதா என்று கேளுங்கள். Linux திறன் SELinux-ஐ மேலெழுதாது, அதை வைத்திருப்பது வகை அமலாக்க விதி பற்றி எதையும் நிரூபிக்காது. கோப்பு அணுகல் மறுப்பையும் திறன் மறுப்பையும் வெவ்வேறு சான்றுகளாகக் கருதுங்கள், ஏனெனில் அவை வெவ்வேறு திருத்தங்களையும் பெரும்பாலும் வெவ்வேறு உரிமையாளர்களையும் குறிப்பிடுகின்றன. denied என்ற ஒற்றைச் சொல்லுக்குப் பதிலாக பதிவின் ஒவ்வொரு புலத்தையும் படியுங்கள். எந்த இயங்கக்கூடிய கோப்பு செயலைச் செய்தது, எந்த domain-இல் இயங்கியது, எந்த வகை இலக்கைத் தொட்டது, எந்த வகைப் பொருள் ஈடுபட்டது மற்றும் கொள்கை எந்த அனுமதியை மறுத்தது - இவை ஒவ்வொன்றும் விடையை வேறு வழியில் குறுக்குகின்றன.
மறுப்பை தணிக்கைப் பதிவிலிருந்து வெளியே எடுங்கள்
enforcing முறையில் உள்ள ஹோஸ்ட்டில், தணிக்கைத் தடமே மறுப்பைப் பதிவு செய்யும் ஒரே இடம். சமீபத்திய நிகழ்வுகளைக் கேட்டு, நீங்கள் விசாரணையைத் தொடங்கிய நேரத்துடன் அல்ல, தோல்வியடைந்த உள்நுழைவின் நேரமுத்திரையுடன் ஒப்பிட்டுப் படியுங்கள்.
ausearch -m AVC,USER_AVC -ts recentகாலியான முடிவு குற்றமற்றதற்கான சான்று அல்ல. அது தணிக்கை சேகரிக்கவில்லை என்றோ, உங்கள் சாளரம் முயற்சியைத் தவறவிட்டது என்றோ பொருள், இரண்டு சாத்தியங்களும் கொள்கையை விலக்கும் முன் விலக்கப்பட வேண்டும்.
Red Hat-இன் SELinux சரிசெய்தல் வழிகாட்டி லேபிள் மற்றும் கட்டமைப்புச் சரிபார்ப்புகளை அனுமதி விதிகளை உருவாக்குவதற்கு முன் வைக்கிறது, இது இந்தச் சிக்கலுக்கும் சரியான வரிசையாகும். தவறாக லேபிளிடப்பட்ட உதவியாளர் பைனரியும் கொள்கையில் உள்ள இடைவெளியும் ஒத்த மறுப்புகளை உருவாக்குகின்றன ஆனால் வெவ்வேறு திருத்தங்கள் தேவை. லேபிள் தவறுக்கு அனுமதி விதி உருவாக்குவது குறையை மறைத்து, அடுத்த தொகுப்பு புதுப்பிப்பு அதை மீண்டும் கொண்டுவர விடுகிறது. கொள்கை எழுதும் முன் நிறுவப்பட்ட உதவியாளரின் லேபிளை உறுதிப்படுத்துங்கள்.
ஒரு ஏற்கப்பட்ட மற்றும் ஒரு நிராகரிக்கப்பட்ட உள்நுழைவால் மாற்றத்தை நிரூபியுங்கள்
நீங்கள் நிரூபித்த எல்லையை மட்டும் மாற்றி, பின்னர் இரு விளைவுகளையும் சோதியுங்கள். அங்கீகாரம் பெற வேண்டிய கணக்கு வெற்றியடைய வேண்டும், தவறான கடவுச்சொல் கொண்ட கணக்கு இன்னும் தோல்வியடைய வேண்டும். ஒவ்வொரு முயற்சியும் வெற்றியடையச் செய்யும் மாற்றம் அங்கீகாரத்தைச் சரிசெய்வதற்குப் பதிலாக நீக்கிவிட்டது.
உண்மையான இணைப்பு முயற்சியைச் செய்து, உடனே பின்னர் journal-ஐப் படியுங்கள். திருத்தத்தை நிரூபிக்கும் வரி அந்த முயற்சிக்கான pam_unix(openvpn:auth) பதிவே: அது அங்கீகாரம் வெற்றி என்று கூற வேண்டும், எந்த AVC பதிவும் அதே வினாடியைக் கொண்டிருக்கக் கூடாது.
journalctl -u [email protected] -n 30 --no-pager
ss -tnp | grep openvpnசெயல்படும் tunnel-க்கு மீண்டும் இணைப்பும் தேவை, ஏனெனில் sandbox மாற்றங்கள் இரண்டாவது இணைப்பை முதல் இணைப்பை விட அடிக்கடி உடைக்கின்றன. மீண்டும் இணைந்த பிறகு நிறுவப்பட்ட socket-ஐச் சரிபார்த்து, அதே unit இன்னும் அதற்குச் சேவை செய்கிறது என்பதை உறுதிப்படுத்துங்கள்.