कुछ उपयोगकर्ताओं के लिए sftp को निष्क्रिय कैसे करें, लेकिन ssh को सक्षम रखें?


12

मेरी परियोजना को कुछ उपयोगकर्ताओं के लिए sftp को निष्क्रिय करने की आवश्यकता है, लेकिन उन उपयोगकर्ताओं को अभी भी ssh से कनेक्ट करने की आवश्यकता है। किसी को पता है कि यह कैसे लागू करने के लिए?

मैंने फ़ाइल को बदलने के लिए सुझाव देखे हैं /etc/ssh/sshd_config, लेकिन मुझे यकीन नहीं है कि क्या बदलना है।


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

जवाबों:


7

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

ऐसा करने का तरीका Matchसशर्त ब्लॉक * का उपयोग कर रहा है ।

Match User bob
Subsystem   sftp  /bin/false

अधिक जानकारी के लिए अनुभाग के sshd_config(5)नीचे देखें Match, और मिलान करें Group

* इसे करने का एक से अधिक तरीका है।


7
यह मेरे लिए काम नहीं कर रहा है। त्रुटि: एक मैच ब्लॉक के भीतर निर्देशक 'सबसिस्टम' की अनुमति नहीं है
chrw

गलत उत्तर क्योंकि मैच ब्लॉक में सबसिस्टम की अनुमति नहीं है
माइक

6

इसका कोई मतलब नहीं है, यह बेकार अस्पष्टता के माध्यम से सुरक्षा है। कोई भी उपयोगकर्ता जो एसएसएच कर सकता है, वह किसी भी फाइल को ट्रांसफर करने में सक्षम होगा जिसे वे एसएसएच सत्र के माध्यम से पढ़ सकते हैं। यदि आप ऐसा करने की अनुमति रखते हैं, तो आप भी लिख सकेंगे।

उदाहरण के लिए, आप ssh के माध्यम से डाउनलोड कर सकते हैं / etc / passwd निम्नलिखित विधि का उपयोग कर (कोई scp / sftp सत्र आवश्यक नहीं): ssh foo@bar.com "cat / etc / passwd"> passwdcopy

यदि आप इसे SSH के माध्यम से अपनी स्क्रीन पर देख सकते हैं, तो आप इसे एक फ़ाइल के रूप में आसानी से कॉपी कर सकते हैं।

इसका एकमात्र तरीका यह होगा कि यदि आपके पास एक कस्टम प्रतिबंधित शेल है जो सुरक्षा नीति लागू करता है।

हालाँकि, इसका उलटा अर्थ यह है कि (ssh शेल को निष्क्रिय करना लेकिन scp / sftp को सक्षम करना) सक्षम है क्योंकि आप sftp / scp के माध्यम से मनमाने आदेशों को निष्पादित करने में सक्षम नहीं हैं जो आप ssh शेल के माध्यम से कर सकते हैं।

पुनश्च: मैं मान रहा हूँ कि आप जो एसएसएच शेल दे रहे हैं वह एक मानक शेल है जो मनमाने ढंग से निष्पादन की अनुमति देता है। यदि यह मामला नहीं है, तो इसे देखें: किसी विशिष्ट उपयोगकर्ता या समूह के लिए sftp सबसिस्टम कैसे निष्क्रिय करें? और sshd_config के सबसिस्टम कॉन्फिगर विकल्प पर एक नज़र डालें।


4
Match Group nosft
Subsystem   sftp  /bin/false

मैं इसके लिए एक समूह का उपयोग करना पसंद करता हूं।

यह उन उपयोगकर्ताओं के साथ संयोजन में उपयोगी है जिनके पास गोले प्रतिबंधित हैं। मैं कभी-कभी किसी क्लाइंट को ssh एक्सेस देता हूं ताकि वे अपने शेल के स्क्रिप्ट को अपने डेटा को डंप करने के लिए अपने डेटाबेस के एक वर्ग-डंप तक पहुंच सकें। उन्हें scp से काटना भी एक अच्छा विचार है। catफ़ाइल को ssh पर ट्रांसफर करने के लिए उनके पास चलाने की सुविधा नहीं है ।


3
Directive 'Subsystem' is not allowed within a Match block
पेट्रीक

गलत उत्तर क्योंकि मैच ब्लॉक में सबसिस्टम की अनुमति नहीं है
माइक

4

विश्व स्तर पर SFTP को सक्षम करना और केवल कुछ उपयोगकर्ताओं के लिए SFTP को अक्षम करना संभव है।

यदि आप अपने उपयोगकर्ता को नियमित शेल प्रांप्ट प्राप्त करना चाहते हैं तो यह काम नहीं करता है। न ही यह समझ में आता है, जैसा कि आपके पास शेल एक्सेस होने पर आप अधिकांश सामान को दरकिनार कर सकते हैं। यह केवल तभी काम करेगा जब आप केवल एक विशिष्ट कार्यक्रम को एक्सेस देना चाहते हैं।

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

मेल मिलाना

उपयोगकर्ताओं के एक सेट से मिलान करने के लिए, आप SSH को Matchकीवर्ड से कॉन्फ़िगर कर सकते हैं । से sshd_config(5)मैनुअल:

Match
        ...

        The arguments to Match are one or more criteria-pattern pairs or the
        single token All which matches all criteria.  The available criteria
        are User, Group, Host, LocalAddress, LocalPort, and Address.  The
        match patterns may consist of single entries or comma-separated
        lists and may use the wildcard and negation operators described in
        the PATTERNS section of ssh_config(5).

        ...

कुछ उदाहरण:

  • Match User eva "ईवा" उपयोगकर्ता से मेल खाता है
  • Match User stephen,maria "स्टीफन" और "मारिया" उपयोगकर्ताओं से मेल खाता है
  • Match Group wheel,adams,simpsons "पहिया", "एडम्स", "सिम्पसंस" समूहों से मेल खाता है

यदि आप अधिक जानकारी चाहते हैं, तो sshd_config(5)मैनुअल में लोड हैं ।

मजबूरन कमान

जब आप SSH के माध्यम से जुड़ते हैं तो आम तौर पर आपको उपयोगकर्ता का लॉगिन शेल मिलता है, लेकिन एक निश्चित कमांड को बाध्य करने के लिए SSH को कॉन्फ़िगर किया जा सकता है। SFTP सहित किसी भी SSH कनेक्शन के लिए कमांड को मजबूर किया जाता है, और इस प्रकार आपके पास इच्छित कमांड को बाध्य करने का विकल्प हो सकता है।

बल के कमांड को ForceCommandकीवर्ड के साथ कॉन्फ़िगर किया जा सकता है । से sshd_config(5)मैनुअल:

ForceCommand
        Forces the execution of the command specified by ForceCommand,
        ignoring any command supplied by the client and ~/.ssh/rc if
        present.  The command is invoked by using the user's login shell
        with the -c option.  This applies to shell, command, or subsystem
        execution.  It is most useful inside a Match block.  The command
        originally supplied by the client is available in the
        SSH_ORIGINAL_COMMAND environment variable.  Specifying a command of
        “internal-sftp” will force the use of an in-process sftp server that
        requires no support files when used with ChrootDirectory.  The
        default is “none”.

तो आप विवश कमांड का उपयोग करने के लिए मजबूर कर सकते हैं ForceCommand <your command>। उदाहरण के लिए:

Match User kim
        ForceCommand echo 'successful login man, congrats'

उदाहरण

मेरे मामले में, जहां मैं git एक्सेस देना चाहता हूं, मुझे केवल उपयोगकर्ता तक पहुंच की आवश्यकता है git-shell। यह वह खंड है जो मेरे git उपयोगकर्ताओं के लिए SFTP को निष्क्रिय करता है, साथ में कुछ सुरक्षा विकल्प भी:

Match Group git

        # have to do this instead of setting the login shell to `git-shell`,
        # to disable SFTP
        ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"

        # disable stuff we don't need
        AllowAgentForwarding no
        AllowTcpForwarding no
        AllowStreamLocalForwarding no
        PermitOpen none
        PermitTunnel no
        PermitTTY no
        X11Forwarding no

1
यह ओपी के सवाल का जवाब नहीं देता है, लेकिन यह मेरे लिए बहुत उपयोगी था कि मैं अपने स्वयं के उपयोग के मामले में क्या हासिल करना चाहता हूं
किदबर्ला

मैं सहमत नहीं हूँ। ओपी का सवाल है "कुछ उपयोगकर्ताओं के लिए sftp को कैसे निष्क्रिय किया जाए, लेकिन ssh को सक्षम रखें?", और यह उत्तर ऐसा करने का एक तरीका बताता है। खुशी है कि आप इसे वैसे भी उपयोगी पाया!
aude

अपने स्वयं के प्रवेश द्वारा "यह काम नहीं करता है यदि आप चाहते हैं कि आपका उपयोगकर्ता एक नियमित शेल प्रॉम्प्ट प्राप्त करे"। इसलिए यह ओपी की "
एसएचएस

ये एक अच्छा बिंदु है। मुझे लगता है कि मैं इस समाधान के साथ आया क्योंकि "न ही इसका कोई मतलब है, क्योंकि आप सबसे अधिक सामान को रोक सकते हैं यदि आपके पास शेल एक्सेस है।" लेकिन मुझे ओपी से पूछने के लिए बिल्कुल कोई रास्ता नहीं मिला, मैं अब सहमत हूं।
aude

यहाँ इस उत्तर का एक पूर्ण संस्करण है: serverfault.com/a/817482
aude

1
Match User bob
MaxSessions 0

परीक्षण और CentOS 6.6 पर काम कर रहा है। ध्यान दें कि सबसिस्टम को नए CentOS संस्करणों पर कम से कम मैच की अनुमति नहीं है। Sshd_config के मैनपेज में उन सीमित खोजशब्दों को सूचीबद्ध किया गया है जिनकी मिलान स्थिति के साथ अनुमति है।


0

आप रिवर्स करने के लिए स्कूपली को देख सकते हैं , केवल एससीपी / एसटीपीपी की अनुमति देते हैं लेकिन शेल एक्सेस नहीं है।

मैं @ नथन के साथ सहमत हूं, यह पूरी तरह से समझ में नहीं आता है। यदि आप मृत हैं, तो अपने / etc / ssh / sshd_config फ़ाइल को संपादित करने और निम्नलिखित पंक्ति को हटाने / टिप्पणी करने का प्रयास करें:

सबसिस्टम sftp / usr / libexec / opensh / sftp-server


0

उपयोगकर्ता के लिए कोई घर निर्देशिका न दें

usermod username -d /bin/false

सबसिस्टम sftp / usr / libexec / opensh / sftp-server को फाइल / etc / ssh / sshd_config में बदलकर सबसिस्टम sftp / dev / null / usr / libexec / /shsh / sftp-server में बदल दें।

फिर ssh को रीस्टार्ट करें

service ssh restart

यह मेरे लिए काम करता है, डेबियन।


-2

निम्नानुसार ~/authorized_keyउपयोगकर्ता कुंजी कॉन्फ़िगर करें:

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