सुरक्षा कारणों से उपयोगकर्ता शेल अक्षम करें


58

हमारे पास कई उपयोगकर्ता खाते हैं जो हम स्वचालित कार्यों के लिए बनाते हैं जिनके लिए ठीक-ठाक अनुमतियों की आवश्यकता होती है, जैसे कि सिस्टम में फ़ाइल स्थानांतरण, निगरानी आदि।

हम इन उपयोगकर्ता खातों को कैसे लॉक करते हैं ताकि इन "उपयोगकर्ताओं" के पास कोई शेल न हो और लॉगिन करने में सक्षम न हों? हम इस संभावना को रोकना चाहते हैं कि कोई व्यक्ति इन उपयोगकर्ता खातों में से एक के रूप में एसएसएच कर सकता है।

जवाबों:


63

आप usermodउपयोगकर्ता के लॉगिन शेल को बदलने के लिए कमांड का उपयोग कर सकते हैं ।

usermod -s /sbin/nologin myuser

या

usermod -s /usr/sbin/nologin myuser

यदि आपका OS / sbin / nologin प्रदान नहीं करता है, तो आप शेल को NOOP कमांड जैसे / बिन / गलत पर सेट कर सकते हैं:

usermod -s /bin/false myuser

1
/bin/falseसे अधिक सामान्य लगता है /bin/true
jw013

@ jw013 मैं अपना उत्तर अपडेट करता हूं, लेकिन दोनों को ठीक काम करना चाहिए।
जोर्डनम

1
ध्यान दें कि डेबियन पर, nologinवास्तव में पाया जाना है/usr/sbin/nologin
xebeche

यह मेरा पहला विचार था, दुर्भाग्य से कुछ उपयोगकर्ता खातों का 'वैध' उपयोग सेटिंग करते समय अक्षम हो जाता हैnologin
जेवियर

2
@ jw013 वास्तव में मेरे पास /usr/local/bin/maybeकौन से गीत हैं जो /dev/urandomउन दोनों के बीच चयन करते हैं। शायद मुझे इसका उपयोग करना चाहिए: D
hegez

21

लॉगिन शेल को बदलना जरूरी नहीं है कि उपयोगकर्ताओं को प्रमाणित करने से रोका जाए (कुछ सेवाओं को छोड़कर जो यह जांचते हैं कि उपयोगकर्ता के शेल का उल्लेख है /etc/shells)।

लोग अभी भी विभिन्न सेवाओं को प्रमाणित करने में सक्षम हो सकते हैं जो आपके सिस्टम को यूनिक्स उपयोगकर्ताओं को प्रदान करता है, और अभी भी कुछ कार्यों को करने के लिए अधिकृत किया जा सकता है, भले ही वे सीधे मनमाना आदेश न चलाएं।

शेल को बदलने /bin/falseया करने /usr/sbin/nologinसे केवल उन सेवाओं पर कमांड चलाने से रोका जा सकेगा जिनका उपयोग कमांड चलाने के लिए किया जा सकता है (कंसोल लॉगिन, ssh, telnet, rlogin, rexec ...), इसलिए केवल कुछ सेवाओं के लिए प्राधिकरण को प्रभावित करें ।

उदाहरण sshके लिए, यह अभी भी उन्हें पोर्ट अग्रेषण करने की अनुमति देता है।

passwd -lपासवर्ड प्रमाणीकरण अक्षम हो जाएगा, लेकिन उपयोगकर्ता अभी भी अन्य प्रमाणीकरण तरीकों (जैसे उपयोग करने के लिए अनुमति दी जा सकती authorized_keysसाथ ssh)।

साथ pamकम से कम लिनक्स पर, आप उपयोग कर सकते हैं pam_shellsएक की अनुमति दी खोल (उन में उल्लेख के साथ उपयोगकर्ताओं के लिए प्रमाणीकरण या प्राधिकरण को प्रतिबंधित करने के मॉड्यूल /etc/shells)। के लिए ssh, आप इसे अन्य प्रमाणीकरण विधियों (जैसे ) के अलावाaccount प्रमाणीकरण sshdउपयोग के लिए प्राधिकरण ( ) स्तर पर करना चाहेंगे , या आप इसे (जैसे और दोस्तों) में निर्देशों के साथ कर सकते हैं ।pam authorized_keyssshd_config/etc/ssh/sshd_configAllowUsers

हालांकि सावधान रहें कि वैश्विक पीएएम प्राधिकरण में कुछ प्रतिबंधों को जोड़ना संभवतः cronउन उपयोगकर्ताओं के रूप में नौकरियों को चलाने से रोक देगा ।


धन्यवाद। फिर आप निम्नलिखित स्कीमा को क्या सुझाएंगे: मुझे एक उपयोगकर्ता बनाने की आवश्यकता है जिसे sftp या sshfs के माध्यम से अपने होम फ़ोल्डर तक पहुंचने की आवश्यकता है, लेकिन वह एक शेल के साथ लॉगिन करने में सक्षम नहीं होना चाहिए। क्या यह भी संभव है? मैं पीएएम मॉड्यूल की तरह गिर गया गोटो समाधान हो सकता है लेकिन मुझे यह सब समझ में नहीं आता है:|
स्टीफन


4

आप /etc/passwdफ़ाइल को संपादित करते हैं और उपयोगकर्ताओं के शेल को /bin/bashया से बदल /bin/shदेते हैं/sbin/nologin


8
उत्तर सही है, लेकिन हाथ से संपादन / आदि / पासवार्ड की सिफारिश नहीं की जानी चाहिए।
जोर्डनम

3
क्यों? यह कुछ ऐसा है जो हम लंबे समय से कर रहे हैं जब तक मैं एक पेशेवर sys व्यवस्थापक रहा हूं। (अब के बारे में 20 साल) वास्तव में, सभी linux / unix distros में संशोधन / etc / passwd या / etc / group के लिए उपकरण नहीं होते हैं .. जब तक कि आप Yast या Smit जैसी किसी चीज़ का उपयोग नहीं करते हैं, जो ऐसे उपकरण हैं जो सेटिंग्स और ओवर-राइट को कैश करते हैं। उन्हें हाथ से संपादन करने में कोई हानि नहीं है।
मार्क कोहेन

6
एक उपयोगकर्ता के बजाय, हाथ से संपादन करके "सभी के लॉगिन को तोड़ता है" गलती करना बहुत आसान है।
जोर्डनम

2
@ जोर्डनम: वहाँ है vipwजो उस तरह की गलती को रोकता है।
यूडोक्सोस

4

सबसे पहले, पासवर्ड का उपयोग करके अक्षम करें passwd -l username

विकल्प manके passwdलिए पृष्ठ पर भी ध्यान दें -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

1
यह वांछनीय नहीं हो सकता है। उदाहरण के लिए ईमेल तक पहुंचने के लिए उन्हें अपने सिस्टम खाते पर पासवर्ड की आवश्यकता हो सकती है।
जोर्डनम

1
कुछ ईमेल सिस्टम अपने स्वयं के पासवर्ड तंत्र का उपयोग करने की अनुमति देते हैं। मैं एक ईमेल केवल पासवर्ड के साथ Dovecot और Exim का उपयोग करता हूं। यह सर्वर पर वेबमेल का उपयोग करने की अनुमति देता है मैं अपने सिस्टम पासवर्ड का उपयोग नहीं करूंगा। वर्चुअल ईमेल डोमेन को अपने पासवर्ड की आवश्यकता होती है क्योंकि वे सर्वर पासवर्ड सिस्टम के लिए युग्मित नहीं होते हैं।
बिलथोर

2

आप chsh कमांड का उपयोग कर सकते हैं:

~# chsh myuser

अनुरोध किए जाने पर नए शेल विवरण दर्ज करें:

Login Shell [/bin/sh]: /bin/nologin

या कम संस्करण:

~# chsh myuser -s /bin/nologin

0

उपयोगकर्ता को लॉगिंग से रोकने के लिए और यहां तक ​​कि ssh से अधिक प्रमाणीकरण जो पोर्ट फ़ॉरवर्डिंग को सक्षम बनाता है (जैसा कि यहां स्टीफन बताया गया है ), मैं उपयोगकर्ता को सिस्टम के nobodyउपयोगकर्ता के समान होने के लिए संशोधित करता हूं :

  • /etc/shadow( उचित क्षेत्र में *या उसके साथ !!) अवरुद्ध पासवर्ड प्रमाणीकरण
  • अक्षम शेल /etc/passwd(जैसे /sbin/nologinउचित क्षेत्र में)
  • में केवल पढ़ने के लिए घर /etc/passwd(जैसे /उचित क्षेत्र में)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.