SSH शेल एक्सेस सक्षम करें लेकिन SFTP एक्सेस को अक्षम करें


21

मैंने इस प्रश्न का एक व्यवहार्य उत्तर खोजा है, और अधिकांश उत्तरों में सलाह है कि इसे क्यों न करें। हालाँकि, यहाँ का परिदृश्य है, और यह आवश्यक बनाता है:

मेरे पास एक कंसोल ऐप है, और प्रत्येक उपयोगकर्ता .profile में, ऐप के लिए एक स्टार्टअप कमांड है, और सीधे इसे शुरू करने वाले कमांड के बाद, एक "निकास" कमांड है, जो उन्हें सिस्टम से बाहर लॉग करता है। मैं केवल यह चाहता हूं कि वे इस कंसोल ऐप को इसके द्वारा दिए गए इंटरफेस के माध्यम से एक्सेस करने में सक्षम हों। स्टार्टअप पर, ऐप उपयोगकर्ता को ग्राहकों की एक सूची के साथ प्रस्तुत करता है जिसे ऐप के माध्यम से एक्सेस किया जा सकता है, प्रत्येक क्लाइंट के पास अपनी डेटा निर्देशिका होती है। उपयोगकर्ताओं को केवल उन ग्राहकों तक पहुंच प्रदान की जाती है, जिनके लिए उन्हें एक्सेस की आवश्यकता होगी।

अब यहाँ समस्या है: यदि मैं उपयोगकर्ताओं को SSH एक्सेस देता हूँ, तो वे SFTP क्लाइंट का उपयोग करके भी लॉग इन कर पाएंगे, जो उन्हें ऐप के लिए डेटा निर्देशिकाओं तक सीधी पहुँच प्रदान करेगा, जो बहुत ही अवांछनीय है, क्योंकि वह भी देगा उन्हें डेटा निर्देशिकाओं तक पहुंच प्राप्त होनी चाहिए, जिनके लिए उनकी पहुंच नहीं होनी चाहिए।

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


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

3
इसके अतिरिक्त आप अपने उपयोगकर्ताओं को "क्रोटिंग" करने पर विचार कर सकते हैं। और अतिरिक्त डेटा एक्सेस के लिए, यह एक डिजाइन मुद्दे की तरह दिखता है
डेनिस नोल्टे

2
इसके लिए उपयोग करना .profileगलत समाधान की तरह लगता है। मेरा मानना ​​है कि एक वैकल्पिक शेल के साथ उपयोगकर्ता को स्थापित करने से बहुत अधिक समझ में आएगा।
कास्परड

3
.profileपहुँच को प्रतिबंधित करने के लिए चाल का उपयोग करने की कोशिश न करें , क्योंकि यह बाईपास के लिए तुच्छ है। (विवरण के लिए मेरा जवाब देखें)
अलेक्सई तोरामो

जवाबों:


22

संपादित करें:

यदि यह स्पष्ट नहीं है, तो निम्नलिखित उत्तर को SFTP को सर्वर पर शेल एक्सेस के साथ किसी भी व्यक्ति द्वारा उपयोग करने से रोकने की एक सुरक्षित विधि के रूप में इरादा नहीं है। यह सिर्फ एक उत्तर है जो बताता है कि बाहरी दृश्यता से इसे कैसे अक्षम किया जाए। उपयोगकर्ता स्तर की सुरक्षा के बारे में चर्चा के लिए, @cpast और @Aleksi Torhamo से उत्तर देखें। यदि सुरक्षा आपका ध्यान है, तो यह उत्तर उचित नहीं है। यदि सरल सेवा दृश्यता आपका ध्यान केंद्रित है, तो यह आपका उत्तर है।

अब हम मूल उत्तर जारी रखते हैं:


Sshd_config (और फिर से शुरू करें sshd) में sftp सपोर्ट पर टिप्पणी करें :

#Subsystem sftp /usr/lib/openssh/sftp-server


1
कभी-कभी लाइन भी हो सकती हैSubsystem sftp internal-sftp
कोंडायबास

1
मेरे पास है Subsystem sftp /usr/libexec/sftp-server लेकिन इसने चाल चली। बहुत-बहुत धन्यवाद
sosaisapunk

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

1
यह सच नहीं है। उपयोगकर्ता जो भी कमांड का उपयोग कर चाहते हैं, उसे चला सकते हैं ssh user@host command, क्योंकि .profileयदि आप ऐसा करते हैं, तो यह बिल्कुल भी नहीं चलेगा, और इस तरह आपका ऐप बिल्कुल भी शुरू नहीं होगा। वे केवल कहकर पूर्ण शेल एक्सेस प्राप्त कर सकते हैं ssh -t user@host bash। बस इसे आज़माएँ और आप देखेंगे। सबसिस्टम सिर्फ एक आदेश उपनाम है; यदि वे पहले sftp का उपयोग कर सकते हैं, तो वे अभी भी इसका उपयोग कर सकते हैं - और कोई अन्य कमांड जो वे चाहते हैं। मेरा जवाब नीचे पढ़ें।
अलेक्सी तोहारामो

1
@sosaisapunk: नहीं, मुद्दा यह है कि आप इसे ssh के साथ कर सकते हैं, लेकिन ऐसा नहीं है .profileक्योंकि यह सुरक्षा के लिए नहीं है और आसानी से बायपास हो जाता है। अपने जवाब में, मैंने इसे ssh के साथ करने के तीन अलग-अलग तरीकों को सूचीबद्ध किया। संक्षेप में, अपने ऐप के इनवोकेशन को .profileशेल स्क्रिप्ट से स्थानांतरित करें और या तो 1) शेल स्क्रिप्ट सेट करें क्योंकि उपयोगकर्ता का शेल 2) शेल स्क्रिप्ट को 3 ForceCommandमें (ठीक से मिलान किया गया) के रूप में sshd_configसेट करें, सार्वजनिक-कुंजी प्रमाणीकरण पर स्विच करें और सेट करें के रूप में खोल स्क्रिप्ट commandमें .ssh/authorized_keys। (इसके अलावा, आपको @name का उपयोग करना चाहिए ताकि लोगों को टिप्पणियों के बारे में सूचित किया जाए)
एलेक्सी तोरहामो

28

जैसा कि दूसरों ने उल्लेख किया है, अक्षम करना sftpकहीं भी पर्याप्त नहीं है - अप्रतिबंधित sshपहुंच वाला उपयोगकर्ता किसी भी फ़ाइल को देख सकता है, जिसे उनके खाते में देखने की अनुमति है, वे संशोधित करने की अनुमति वाली किसी भी चीज़ को संशोधित कर सकते हैं और आसानी से कुछ भी डाउनलोड कर सकते हैं जिसे वे अपने स्वयं के लिए पढ़ सकते हैं। मशीन। उन्हें ऐसा करने से रोकने का एकमात्र तरीका वास्तव में उनकी पहुंच को प्रतिबंधित करना है। .profileउपयोगकर्ताओं को प्रतिबंधित करने के लिए इस पर भरोसा करना भी आदर्श नहीं है , क्योंकि यह ऐसा नहीं है (संपादित करें: जैसा कि अलेक्सई ने अपने जवाब में उल्लेख किया है, यह वास्तव में बाईपास के लिए तुच्छ है .profile; इसके बारे में बात .profileयह है कि यह सुविधा के लिए है, सुरक्षा नहीं, इसलिए यह नहीं है। उपयोगकर्ता को प्रतिबंधित करने का इरादा है। सुरक्षा के लिए डिज़ाइन की गई चीज़ों का उपयोग करें, नीचे की चीज़ों की तरह, सुरक्षा प्रदान करने के लिए)।

ऐसा करने के दो मूल तरीके हैं: आप उन्हें फ़ाइल अनुमतियों के माध्यम से प्रतिबंधित कर सकते हैं, या उन्हें केवल अपने कंसोल ऐप को निष्पादित करने के लिए मजबूर कर सकते हैं। दूसरा तरीका बेहतर है: उन उपयोगकर्ताओं को असाइन करें जिन्हें कंसोल ऐप को एक समूह में प्रतिबंधित किया जाना चाहिए (जैसेcustomers ) ; फिर, sshd_configनिम्न पंक्तियों को जोड़ें:

Match Group customers
ForceCommand /path/to/app

यह क्या करता है ताकि इसे बनाया जाए ताकि उस समूह के उपयोगकर्ताओं के सभी कनेक्शन कंसोल ऐप खोलें; वे sftpसर्वर टूल सहित कुछ और शुरू नहीं कर सकते । यह उन्हें सिस्टम के साथ और कुछ भी करने से रोकता है, और इसके विपरीत .profile, स्वयं SSH सर्वर का उपयोग करता है ( .profileशेल में उन्हें प्रतिबंधित करता है)ForceCommand अन्य चीजों को करने से भी रोकता है जिसमें शेल शुरू करना शामिल नहीं है)। इसके विपरीत .profile, यह एक सुरक्षा चीज के रूप में बनाया गया है; यह विशेष रूप से दुर्भावनापूर्ण उपयोगकर्ता को इसका विरोध करने के लिए बनाया गया है।

कंसोल को चलाने के लिए एक नया उपयोगकर्ता बनाने में (शायद अवर) विकल्प शामिल होगा। फिर आप उस उपयोगकर्ता के डेटा निर्देशिकाओं को प्रतिबंधित करेंगे, उस उपयोगकर्ता के स्वामित्व वाले कंसोल ऐप को सेट करें, और u+sप्रोग्राम पर सेट करें। यह setuidबिट है; इसका अर्थ है कि कोई व्यक्ति जो कंसोल प्रोग्राम चलाता है, प्रोग्राम के मालिक की अनुमति से ऐसा करता है। इस तरह, उपयोगकर्ता के पास स्वयं निर्देशिकाओं तक पहुंच नहीं है, वे केवल कार्यक्रम के माध्यम से प्राप्त करते हैं। हालाँकि, आपको शायद इसका उपयोग करना चाहिए ForceCommand, क्योंकि यह "बस इस कार्यक्रम को चलाने" के लिए सभी पहुंच को प्रतिबंधित करता है।


4
मुझे लगता है कि ForceCommandSSH पोर्ट अग्रेषण को रोकने नहीं है जोड़ना चाहते हैं ।
nyuszika7h

1
वास्तव में, भरोसा करना .profile"आदर्श नहीं" से अधिक है; यह आसानी से बायपास हो जाता है (विवरण के लिए मेरा उत्तर देखें) और इस प्रकार सुरक्षा का केवल गलत अर्थ है, कोई सुरक्षा प्रदान नहीं करता है।
अलेक्सी तोहारामो

@AleksiTorhamo आह। मुझे संदेह था कि आप इसे बायपास कर सकते हैं, लेकिन यह निश्चित नहीं था कि (मुझे आमतौर पर संदेह है कि सुरक्षा के लिए इच्छित चीजें बायपास करने योग्य नहीं हैं)। कैसे पर विवरण के लिए धन्यवाद!
cpast

15

इसके साथ करने का प्रयास न करें .profile क्योंकि यह कोई सुरक्षा प्रदान नहीं करता है और वास्तव में कुछ भी नहीं रोकता है!

इससे कोई फर्क नहीं पड़ता कि आप क्या डालते हैं .profile, क्योंकि आप इसे ssh कमांड लाइन पर चलाने के लिए एक कमांड देकर बाईपास कर सकते हैं, जैसे ssh user@host command:। आप अभी भी सामान्य शेल एक्सेस प्राप्त कर सकते हैं ssh -t user@host bash

Sftp सबसिस्टम को अक्षम करना, जैसे किसी अन्य उत्तर में वर्णित है, बिल्कुल भी मदद नहीं करता है। सबसिस्टम अनिवार्य रूप से कमांड के लिए केवल उपनाम हैं, और आप अभी भी सामान्य रूप से sftp का उपयोग कर सकते हैं sftp -s /path/to/sftp-executable user@host

जैसे cpast और कुछ टिप्पणीकारों ने कहा है, आपको पहुँच को प्रतिबंधित करने के लिए उचित तंत्र का उपयोग करना चाहिए। अर्थात्,

  • का प्रयोग करें ForceCommandमेंsshd_config
  • Passwordless लॉगिन और प्रयोग करें command="..."में.ssh/authorized_keys
  • उपयोगकर्ता के शेल को ऐसी चीज़ में बदलें जो उपयोगकर्ता को प्रतिबंधित करता है

टिप्पणियाँ:

  • command="..." केवल एक कुंजी के लिए लागू होता है, इसलिए यह पासवर्ड या किसी अन्य कुंजी का उपयोग करके उपयोगकर्ता के लिए ssh लॉगिन को प्रतिबंधित नहीं करता है
  • आप पोर्ट फ़ॉरवर्डिंग आदि को भी प्रतिबंधित करना चाह सकते हैं (पोर्ट फ़ॉरवर्डिंग, x11 फ़ॉरवर्डिंग, एजेंट फ़ॉरवर्डिंग और पीटीई आवंटन वे हैं जिनके बारे में मैंने सुना है)
    • AllowTcpForwarding आदि में sshd_config
    • no-port-forwarding आदि में .ssh/authorized_keys
  • यदि आपके पास अन्य डेमॉन (जैसे एफ़टीपी) चल रहे हैं, तो आपको यह सत्यापित करना चाहिए कि वे उपयोगकर्ता को अंदर नहीं जाने देते (कुछ डेमॉन उपयोगकर्ता के शेल के आधार पर यह निर्णय लेते हैं, इसलिए यदि आप इसे बदलते हैं, तो आप इसे फिर से जांचना चाह सकते हैं)
  • आप उपयोगकर्ता के शेल को एक स्क्रिप्ट में बदल सकते हैं जो वह करता है जो आप चाहते हैं; यह या तो तर्कों के बिना चलाया जाता है या पसंद किया जाता हैscript -c 'command-the-user-wanted-to-run'
  • दोनों ForceCommandऔर command="..."उपयोगकर्ता के शेल के माध्यम से कमांड चलाते हैं, इसलिए वे काम नहीं करते हैं यदि उपयोगकर्ता का शेल उदा। /bin/falseया/sbin/nologin

डिस्क्लेमर: मैं किसी भी तरह से इस मामले का कोई विशेषज्ञ नहीं हूं, इसलिए जब तक मैं कह सकता हूं कि यह .profileचीज सुरक्षित नहीं है, मैं वादा नहीं कर सकता कि कुछ अन्य तरीकों के साथ "गेटचा" नहीं है, जो मुझे नहीं पता के बारे में। वे जहां तक ​​जानते हैं, मैं सुरक्षित हूं, लेकिन मैं इंटरनेट पर गलत होने वाला पहला व्यक्ति नहीं हूं।


1
ऐसा लगता है कि के लिए कम से कम ForceCommandऔर साथ passwordless लॉगिन मजबूर command=में authorized_keys, जबकि यह पहले नजरअंदाज कर दिया गया है, उस सर्वर में बग के कारण की: यह है इरादा एक दुर्भावनापूर्ण उपयोगकर्ता के खिलाफ सुरक्षित होने की, और एक उपयोगकर्ता यह एक गंभीर जोखिम के रूप में गिना दरकिनार SSH सर्वर में (और इस प्रकार एक प्राथमिकता तय है)। जैसा कि आप इंगित करते हैं, .profileडिजाइन द्वारा बायपास करने योग्य है: जैसा कि इसे सुरक्षा सुविधा नहीं माना जाता है, इसे बायपास करने वाला उपयोगकर्ता शेल डेवलपर के दृष्टिकोण से पूरी तरह से ठीक है।
cpast

1
@ सीपी: हाँ, मैं पोर्ट फ़ॉरवर्डिंग जैसी अधिक सुविधाओं के अस्तित्व के बारे में सोच रहा था। मेरा मतलब है, अगर आपको नहीं पता था कि ssh पोर्ट अग्रेषण की अनुमति देता है और सिर्फ ForceCommandएक्सेस को प्रतिबंधित करने के लिए उपयोग किया जाता है, और एक डेमन था जो केवल स्थानीय स्तर पर कनेक्शनों को सुनता है और प्रमाणीकरण नहीं करता है, ssh उपयोगकर्ता अभी भी डेमन तक पहुंच सकता है। मैंने जिन विशेषताओं को सूचीबद्ध किया है, वे हैं। git होस्टिंग समाधान आमतौर पर अक्षम हो जाते हैं, और मैंने किसी भी अतिरिक्त "दुष्ट-दिखने वाले ForceCommand" को मैनपेज़ में नहीं देखा है, लेकिन मुझे किसी भी प्रकार का आधिकारिक नहीं मिला है "यह है कि आप सुरक्षित रूप से कैसे उपयोग करते हैं " -document अभी तक, या तो।
एलेक्सी तोहारामो

माना ~/.profileजाता है कि उपयोगकर्ता संपादन योग्य है और सुरक्षा के लिए मददगार नहीं है, लेकिन क्या आप cpast की तकनीक को इसमें डालकर सार्थक बना सकते हैं /etc/profile? आप इसे सही उपयोगकर्ताओं तक सीमित करने के लिए UID की जाँच कर सकते हैं।
चूजों

1
@ हिक्स: नहीं, इसमें ठीक यही समस्या है। समस्या यह नहीं है कि फ़ाइल उपयोगकर्ता-संपादन योग्य है; समस्या यह है कि दोनों फाइलों को पूरी तरह से बाईपास किया जा सकता है। फ़ाइलों को केवल लॉगिन गोले के लिए उपयोग किया जाता है, जो आपको केवल कहने पर मिलता है ssh user@host, लेकिन अगर आप ssh को कमांड चलाने के लिए कहते हैं - यानी। ssh user@host command- आपको अब एक लॉगिन शेल नहीं मिलता है और फाइलें बिल्कुल भी नहीं छूती हैं। तो आप तुच्छतापूर्वक बायपास कर सकते हैं जो किसी ने प्रतिबंधों को फाइलों के साथ बनाने की कोशिश की बस ssh को एक अतिरिक्त तर्क देकर।
हेंसी तोहारामो

2
@chicks: इसके अलावा, मुझे बस एहसास हुआ कि आपने cpast को संदर्भित किया है; cpast के उत्तर में विधि का उपयोग नहीं होता है .profile, यह उपयोग करता है sshd_configऔर सुरक्षित होना चाहिए। वह केवल .profileएक विधि के रूप में उल्लेख करता है जिसे आपको ऐसा करने के लिए उपयोग नहीं करना चाहिए।
अलेक्सी तोहारामो

1

SSH को सक्षम करना और SFTP को विश्व स्तर पर और प्रति उपयोगकर्ता / समूह दोनों में अक्षम करना संभव है।

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

वैश्विक स्तर पर

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

लापता उपतंत्र

SSH द्वारा उपयोग किए गए SFTP डेमॉन को Subsystemकीवर्ड के माध्यम से कॉन्फ़िगर किया जा सकता है । से sshd_config(5)मैनुअल:

Subsystem
        Configures an external subsystem (e.g. file transfer daemon).
        Arguments should be a subsystem name and a command (with optional
        arguments) to execute upon subsystem request.

        The command sftp-server(8) implements the “sftp” file transfer
        subsystem.

        Alternately the name “internal-sftp” implements an in-process
        “sftp” server.  This may simplify configurations using
        ChrootDirectory to force a different filesystem root on clients.

        By default no subsystems are defined.

अंतिम पंक्ति बताती है कि "sftp" के लिए किसी भी सबसिस्टम को परिभाषित नहीं करने के लिए यह पर्याप्त होना चाहिए।

झूठा झूठ

आप SSH द्वारा उपयोग किए जाने वाले SFTP डेमॉन को कुछ अनुपयोगी बनाकर SFTP को निष्क्रिय कर सकते हैं। उदाहरण के लिए, "sftp" सबसिस्टम को कॉन्फ़िगर करें /bin/false:

Subsystem sftp /bin/false

जब कुछ SFTP के माध्यम से लॉग इन करने की कोशिश करेगा, SSH डेमन "sftp डेमन" को स्पॉन करने की कोशिश करेगा /bin/false/bin/falseकार्यक्रम केवल एक बात करता है, और है कि त्रुटि कोड है। 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

मेरे मामले में, मैं केवल एक विशेष अधिकृत कुंजी (यानी, sshd_config फ़ाइल में कोई परिवर्तन नहीं) के लिए MySQL एक्सेस (SFTP एक्सेस और SSH टर्मिनल विंडो दोनों को छोड़कर) को अनुमति देना चाहता था। मैं निम्नलिखित के साथ ऐसा करने में कामयाब रहा। विशेष कुंजी के लिए ~ / .sh / अधिकृत_कीप विकल्प: कमांड = "/ usr / bin / echo 'केवल MySQL एक्सेस की अनुमति है।" ", no-pty, no-X11-forwarding, permopen। = "127.0.0.1:3306"
मार्टिन_एटीएस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.