सार्वजनिक कुंजी ssh प्राधिकरण के लिए खाता अनलॉक कैसे करें, लेकिन पासवर्ड प्राधिकरण के लिए नहीं?


32

Ssh मुझे लॉगिन नहीं करने देगा, क्योंकि खाता लॉक है। मैं ssh पर सार्वजनिक कुंजी प्राधिकरण के लिए अपने सर्वर पर उपयोगकर्ता को अनलॉक करना चाहता हूं, लेकिन पासवर्ड-एड लॉगिन सक्षम नहीं करता हूं।

मैंने कोशिश की:

# passwd -u username
passwd: unlocking the password would result in a passwordless account.
You should set a password with usermod -p to unlock the password of this account.

प्रामाणिक लॉग प्रविष्टियाँ:

Mar 28 00:00:00 vm11111 sshd[11111]: User username not allowed because account is locked
Mar 28 00:00:00 vm11111 sshd[11111]: input_userauth_request: invalid user username [preauth]

आपको (IMHO) को सभी उपयोगकर्ताओं के लिए ऐसा करना चाहिए ... पूरे sshd के लिए इसे करते समय एक सरल विन्यास
Skaperen

passwd -uएक बुरा विचार है। जाइल्स बाइल द्वारा उत्तर देखें।
पीटर जेनकिंस

जवाबों:


15

खाता अनलॉक करें और उपयोगकर्ता को @Skaperen सुझाव के अनुसार एक जटिल पासवर्ड दें।

संपादित करें /etc/ssh/sshd_configऔर यह सुनिश्चित करें :

PasswordAuthentication no

जांचें कि लाइन टिप्पणी नहीं है ( #शुरुआत में) और फ़ाइल को सहेजें। अंत में, sshdसेवा को पुनरारंभ करें ।

ऐसा करने से पहले, सुनिश्चित करें कि आपका सार्वजनिक कुंजी प्रमाणीकरण पहले काम कर रहा है।

यदि आपको उपयोगकर्ताओं के केवल एक (या छोटी संख्या) के लिए ऐसा करने की आवश्यकता है, तो PasswordAuthenticationसक्षम छोड़ें और इसके बजाय उपयोग करें Match User:

Match User miro, alice, bob
    PasswordAuthentication no

फ़ाइल के निचले भाग पर रखें क्योंकि यह अगले Matchकमांड या EOF तक मान्य है ।

आप उपयोग Match Group <group name>या नकार भी कर सकते हैंMatch User !bloggs

जैसा कि आप टिप्पणियों में उल्लेख करते हैं, आप इसे उल्टा भी कर सकते हैं ताकि पासवर्ड प्रमाणीकरण कॉन्फ़िगरेशन के मुख्य भाग में अक्षम हो और Matchकुछ उपयोगकर्ताओं के लिए इसे सक्षम करने के लिए कथनों का उपयोग करें:

PasswordAuthentication no
.
.
.
Match <lame user>
    PasswordAuthentication yes

मुझे लगता है कि Miro सिर्फ एक उपयोग के लिए पासवर्ड को निष्क्रिय करना चाहता था । लेकिन मेरी पिछली टिप्पणी देखें
स्केपरन

@ शेपरन - आप अच्छी तरह से सही हो सकते हैं। मैंने अपना उत्तर थोड़ा बदल दिया है।
garethTheRed

यह Matchवाक्यविन्यास अच्छा लग रहा है, लेकिन मैं इसे उलटने की कोशिश कर रहा हूं। (कुछ लंगड़ा) उपयोगकर्ताओं के लिए पासवर्ड-एड लॉगिन सक्षम करें।
क्रैविमीर

@ मेरो - यह एक अच्छा विचार है, मैंने इसे भविष्य के संदर्भ के लिए अपने जवाब में जोड़ दिया है।
garethTheRed

37

आप जो कुछ भी करते हैं, वह passwd -uखाली पासवर्ड फ़ील्ड के साथ छोड़ दिया गया राज्य में खाता न छोड़ें : जो पासवर्ड दर्ज किए बिना लॉगिन की अनुमति देता है (एसएसएच को छोड़कर, क्योंकि एसएसएच उस से इनकार करता है)।

पासवर्ड न होने के लिए खाते को बदलें, लेकिन अनलॉक किया जाए। पासवर्ड डेटाबेस में पासवर्ड हैश किसी भी स्ट्रिंग का हैश नहीं है, तो एक खाते में कोई पासवर्ड नहीं है। परंपरागत रूप से, एक-वर्ण स्ट्रिंग जैसे कि *या उसके !लिए उपयोग किया जाता है।

लॉक्ड खाते पासवर्ड फ़ील्ड में एक विशेष मार्कर का उपयोग करते हैं जो स्ट्रिंग को किसी भी स्ट्रिंग का हैश नहीं होने का कारण बनता है। मार्कर प्रणाली-निर्भर है। लिनक्स पर, passwdकमांड !शुरुआत में एक पासवर्ड लगाकर लॉक किए गए पासवर्ड को खोलती है, और ओपनएसएसएच अकाउंट को लॉक के रूप में मानती है यदि फ़ील्ड के साथ शुरू होता है !। अन्य यूनिक्स वेरिएंट समान लेकिन समान तंत्र का उपयोग नहीं करते हैं, इसलिए ध्यान रखें कि यदि आपका पासवर्ड डेटाबेस एक विषम नेटवर्क के बीच साझा किया गया है।

लिनक्स पर, आप SSH पहुंच (कुछ अन्य प्रमाणीकरण विधि के साथ, आमतौर पर एक महत्वपूर्ण जोड़ी) की अनुमति देते हुए पासवर्ड-आधारित एक्सेस को एक खाते में अक्षम कर सकते हैं।

usermod -p '*' username

उपयोगकर्ता खाता वापस पासवर्ड में बदलने में सक्षम नहीं होगा, क्योंकि इसके लिए उन्हें एक वैध पासवर्ड दर्ज करना होगा।

यदि आप चाहें, तो आप पासवर्ड प्रमाणीकरण को अस्वीकार करने के लिए SSH को कॉन्फ़िगर कर सकते हैं, भले ही खाते में पासवर्ड हो। आपको अभी भी SSH के लिए खाते को लॉक न करने पर विचार करने की व्यवस्था करने की आवश्यकता होगी, इसलिए लिनक्स पर उदाहरण के लिए आपको !पासवर्ड फ़ील्ड से निकालने की आवश्यकता होगी (लेकिन फ़ील्ड को खाली न करें - इसे *ऊपर बताए अनुसार सेट करें )। SSH के लिए पासवर्ड प्रमाणीकरण को अक्षम करने के PasswordAuthenticationलिए /etc/sshd_configया /etc/ssh/sshd_config(आपके सिस्टम पर जो भी हो) के लिए एक निर्देश जोड़ें । एक का उपयोग करें Matchबनाने के लिए है कि यह निर्देश केवल एक विशिष्ट उपयोगकर्ता के लिए लागू खंड; Matchब्लॉक दिखाई देने चाहिए

…
Match User username
    PasswordAuthentication no

6
धन्यवाद - usermod -p '*' usernameएक आकर्षण काम किया!
होमी ज़वागस्त्र

1
OpenSSHd लॉक उपयोगकर्ताओं (यानी पासवर्ड !उपसर्ग के साथ हैश ) को किसी अन्य प्रमाणीकरण विधि के साथ लॉगिन करने की अनुमति देता है यदि UsePAM yesवह सेट है sshd_config। यह संभवतः सबसे अधिक वितरण (जैसे फेडोरा के साथ) के साथ डिफ़ॉल्ट है।
मैक्सक्लेपज़िग

1
मेरे पास PAM के बिना एक एम्बेडेड सिस्टम है, इसलिए '*'बनाम '!'अंतर सुपर उपयोगी है।
जपकोट्टा

8

यदि आप पहले से ही मजबूत कुंजियों का उपयोग कर रहे हैं, तो आपको पासवर्ड सक्षम या सेट करने की आवश्यकता नहीं है, और आपको वास्तव में नहीं करना चाहिए। बस एक मौजूदा सत्र से अपने खाते (sudo passwd -l उपयोगकर्ता नाम) को फिर से लॉक करें और अपने SSH कॉन्फ़िगरेशन को ठीक करें।

ऐसा होने का कारण संभवतः यह है कि आपने डिफ़ॉल्ट SSH डेमॉन सेटिंग्स (/ / / ssh / sshd_config) में से एक को संपादित किया है।

इसे / etc / ssh / sshd_config में बदलें और SSH को पुनरारंभ करें:

UsePAM yes

सामान्य तौर पर, जब तक आपके पास PAM को निष्क्रिय करने का वास्तव में अच्छा कारण नहीं है, मैं आपको इसे सक्षम रखने की सलाह देता हूं; SSH के भीतर PAM को सक्षम करने से आप अभी भी लॉग इन कर सकते हैं, यहां तक ​​कि हटाए गए पासवर्ड के साथ भी। आप जो भी करते हैं, एक खाली पासवर्ड या समान सेट न करें ... पासवर्ड फ़ील्ड को लॉक करने का मतलब यह नहीं है कि आपके पूरे खाते को लॉक कर दिया जाए।

SSH के साथ खिलवाड़ करते समय त्वरित टिप: अपने SSH कॉन्फ़िगरेशन में परिवर्तन करते समय एक और सत्र खुला रखें (दूसरी विंडो में), और फिर परीक्षण करें कि आप अभी भी लॉग इन कर सकते हैं; यदि आप अनजाने में अपनी पहुंच को तोड़ देते हैं, तो इसे ठीक करने के लिए अपने वर्तमान सत्र का उपयोग करें।

(डिस्क्लेमर: मैं उपयोगकर्ता नाम पर काम करता हूं, जो एसएसएच कुंजी प्रबंधन सॉफ्टवेयर प्रदान करता है।)


0

मुझे CentOS 7 पर यह समस्या थी। मैं एक नियमित डेबियन-आधारित लिनक्स उपयोगकर्ता हूं इसलिए मैं पानी से बाहर मछली थी। मैंने देखा कि कुछ सर्वरों में इसने काम किया और सिर्फ एक में यह नहीं हुआ। ऑडिट.लॉग ने कहा कि कुछ भी उपयोगी नहीं है और सिक्योर.लॉग ने भी कुछ नहीं दिया। मैंने पाया कि केवल वास्तविक अंतर उन फाइलों और निर्देशिकाओं के बीच कुछ सुरक्षा संदर्भ अंतर थे जो काम करते थे और जो नहीं थे। के साथ सुरक्षा प्राप्त करें

sudo ls -laZ <user-home>/.ssh

निर्देशिका की (मैं sshd_config पर बहुत सारी चूक मान रहा हूं)।

आपको कुछ ssh_home_tऔर user_home_tविशेषताओं को देखना चाहिए । यदि आप नहीं करते हैं, chconतो लापता विशेषताओं को जोड़ने के लिए कमांड का उपयोग करें ।

उदाहरण के लिए

home="$(getent passwd <user> | cut -d: -f6)"
sudo chcon -R unconfined_u:object_r:ssh_home_t:s0 "$home".ssh
sudo chcon unconfined_u:object_r:user_home_t:s0 "$home"

मेरे मामले में, मेरा संदेह यह है कि उपयोगकर्ता एक गैर मानक तरीके से बनाया गया था। उनके घर में एक निर्देशिका थी /var/lib

अधिक जानकारी: https://www.linuxquestions.org/questions/linux-security-4/selinux-preventing-ssh-login-with-~-ssh-authorized_keys-41755959538/


-2

खाता अनलॉक करें और पासवर्ड को कुछ यादृच्छिक स्ट्रिंग में बदलें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.