SFTP की अनुमति दें, लेकिन SSH को अस्वीकृत करें?


94

मैं कुछ दोस्तों और छोटे ग्राहकों के लिए बहुत कम होस्टिंग कंपनी शुरू कर रहा हूं, कुछ भी बड़ा नहीं है।

मैं अपने "क्लाइंट" को सर्वर पर अपनी फ़ाइलों को प्रबंधित करने का अधिकार देना चाहता हूं। मैं FTP से नफरत करता हूं क्योंकि यह सुरक्षित नहीं है और यह मेरी राय में अप्रचलित है।

इसलिए मैं अपने उपयोगकर्ताओं को SFTP के माध्यम से कनेक्ट करने की अनुमति देना चाहता हूं, लेकिन उन्हें SSH के माध्यम से कनेक्ट करने की अनुमति नहीं देता। (मुझे पता है, मुझे पता है, एसएफटीपी एसएसएच का उपयोग कर रहा है)। लेकिन मैं सोच रहा था कि क्या यह संभव है?

इसलिए मुझे सर्वर पर एक एफ़टीपी सेवा स्थापित नहीं करनी होगी और सब कुछ भयानक होगा!

जवाबों:


121

संस्करण 4.9 ओपनएसएसएच के साथ शुरू करना (सेंटोस में उपलब्ध नहीं है 5.x लेकिन चेरोटडायरेक्टोरी फ़ीचर का बैकपोर्ट किया गया था) का internal-sftpसब्सक्रिप्शन है:

Subsystem sftp internal-sftp

और फिर अन्य उपयोग ब्लॉक करें:

Match group sftponly
     ChrootDirectory /home/%u
     X11Forwarding no
     AllowTcpForwarding no
     ForceCommand internal-sftp

अपने उपयोगकर्ताओं को sftponlyसमूह में जोड़ें । आपको चेरोट के /कारण उपयोगकर्ता के होमडायरेक्टरी को बदलना होगा और /home/userइसके स्वामित्व में होना चाहिए root। मैं /bin/falseउपयोगकर्ता के शेल के रूप में भी सेट करूँगा ।


वाह! सुपर कमाल! मैं इसका परीक्षण करूंगा और सत्यापन के लिए यहां वापस आऊंगा। आपका बहुत बहुत धन्यवाद!
टॉमी बी।

चेरोटडायरेक्टरी चीज़ के लिए +1!
काइल हॉजसन

1
ऐसा करने के बाद, मेरे sftponly उपयोगकर्ता कैंट पहुंच ssh द्वारा और sftp द्वारा कनेक्ट करने में सक्षम है। हालाँकि यह किसी भी फाइल को नहीं देख सकता है! इन फ़ाइलों के बावजूद इस उपयोगकर्ता के लिए अनुमति है। :-(
एमिलियो निकोलस

3
यदि आप ऐसा करना चाहते हैं और अपने sshd_config में "/ usr / lib / opensh / sftp-server" के साथ एक प्रविष्टि पहले से मौजूद है, तो यहां देखें: serverfault.com/questions/660160/… "आंतरिक-sftp" नया है , बेहतर और आसान "
Xosofox

19

वहाँ एक खोल scponly यह क्या करता है। यह काट भी सकता है।


यह बहुत अच्छा होगा यदि आपको SFTP उपयोगकर्ताओं और SSH उपयोगकर्ताओं दोनों की आवश्यकता होती है। आप केवल शेल को केवल SFTP तक सीमित रखने वालों के लिए / etc / passwd में प्रतिस्थापित करते हैं।
ड्रैगोस

4

चेकआउट rshsh जो कि एक नकली खोल है जो sftp की अनुमति देता है लेकिन ssh से इनकार करता है

RSSH के बारे में अधिक

http://www.pizzashack.org/rssh/

RPMs

http://pkgs.repoforge.org/rssh/

आप ssh को sft, scp आदि जैसे अलग-अलग व्यवहारों की अनुमति देने / अस्वीकार करने के लिए कॉन्फ़िगर कर सकते हैं।


अच्छा लगा। यह sshd_config को बिना छुए कॉन्फ़िगर करने का सबसे आसान तरीका है। बस पासवार्ड फ़ाइल में शेल बदलें और किया।
टॉमफुमी

2

आप / etc / passwd को संशोधित कर सकते हैं और उस उपयोगकर्ता को एक नकली शेल दे सकते हैं ताकि वह ssh का उपयोग न कर सके।


11
क्या आपने यह परीक्षण किया?
छपना

8
जब मैं शेल को /bin/falseन तो ssh या sftp काम करने के लिए सेट करने का प्रयास करता हूं
ब्रैड मेस

2
/ बिन / असत्य किसी भी तरह के लॉगिन को अस्वीकार करना है, यह यहाँ सही दृष्टिकोण नहीं है। रॉब वाउटर्स का स्वीकृत उत्तर यह है कि आपको उपयोगकर्ताओं को केवल SFTP तक ही सीमित रखना चाहिए, शेल को बदलकर नहीं। यदि आप शेल को बदलना चाहते हैं तो @ स्टोन का एसेनर एक अच्छा विचार होगा।
jwbensley

1
इसलिए WHAT शेल का उपयोग यह मानकर किया जाना चाहिए कि बिन / बैश स्वीकार्य नहीं है और / बिन / गलत या / sbin / नॉलिन इनकार का उपयोग नहीं है?
पुटनिक

1

मैं उल्लेख के रूप में उपयोगकर्ता शेल / बिन / गलत के रूप में निर्दिष्ट करने की विधि का उपयोग करता हूं। हालाँकि, आपको यह सुनिश्चित करना होगा कि / bin / shell / etc / गोले में है। फिर यह ssh = no ftp = ok काम करता है।

मैं भी vsftpd का उपयोग करता हूं और इस
chroot_local_user = YES को /etc/vsftpd/vsftpd.conf में जोड़ता हूं ताकि ftp-ers अन्य को नहीं देख सके, फिर अपना।

इन सरल परिवर्तनों का लाभ प्रत्येक उपयोगकर्ता के लिए ssh config के लिए कोई कष्टप्रद विन्यास नहीं है।


1

लाइन ढूंढना UsePAM yesऔर टिप्पणी करना न भूलें :

#UsePAM yes

इसे अक्षम किए बिना, आपका SSH सर्वर पुनः लोड / पुनरारंभ करने पर क्रैश हो जाएगा। चूंकि आपको PAM के फैंसी कार्यों की आवश्यकता नहीं है, यह ठीक है।


0

कुछ चयनित उपयोगकर्ताओं के लिए केवल sftp को सक्षम करने के लिए ssh को कॉन्फ़िगर करना एक अच्छा विचार है और यह ठीक से काम करता है, बशर्ते कि आप scponlyया तो स्थापित करें या rssh

rsshठीक काम करता है, जब तक आपको जेल को कॉन्फ़िगर करने की आवश्यकता नहीं होती है, इस मामले में CHROOT मैनुअल द्वारा प्रदान किए गए निर्देशों का पालन करने का प्रयास करें, पागल है, जो rsshशेल के सहित "प्रत्येक उपयोगकर्ता जेल" के ठीक नीचे सिस्टम निष्पादक और लाइब्रेरी के बड़े हिस्से को "कॉपी" करता है। यह एक अंतरिक्ष-बर्बाद करने की विधि है।

scponly कॉन्फ़िगरेशन में गहरी समझ की आवश्यकता है, जो जेल सेटअप के मामले में लॉगिन अस्वीकृति की वर्तमान समस्या के लिए अग्रणी है।

जेल में ठीक से काम करने के साथ "एफ़टीपी" कार्यात्मकताओं की अनुमति देने का सीधा तरीका, सुरक्षित लेनदेन के लिए एसएसएल / टीएलएस समर्थन और "पुराने-लेकिन-काम कर रहे" वीएसएफटीपीडी का उपयोग करना है, जो जल्दी और सफाई से स्थापित होता है और सभी विन्यास सुविधाओं की आवश्यकता होती है और, अंतिम लेकिन कम से कम: यह काम करता है!

मौरीज़ियो।


0

सभी जवाब दुर्भाग्य से बेहद भ्रामक हैं: कृपया निम्नलिखित करें:

  1. सबसे पहले sftp यूजर और ग्रुप sftp बनाएं

  2. SFTP फ़ाइलों के लिए रूट के रूप में अलग निर्देशिका बनाएँ: sudo mkdir -p /home/sftpdir

  3. एक परीक्षण किया हुआ sshd_config फ़ाइल है जो SSH को पोर्ट 22 पर, लेकिन सुरक्षा कारणों से यादृच्छिक पोर्ट पर SFTP की अनुमति देता है
#$OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 38250 Port 22 PasswordAuthentication no 
ChallengeResponseAuthentication no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'. UsePAM yes X11Forwarding yes PrintMotd no
# Allow client to pass locale environment variables AcceptEnv LANG LC_*
#DenyUsers sftpuser

# override default of no subsystems Subsystem       sftp    internal-sftp 
Match group sftp 
Match User sftpuser 
Match LocalPort 38250 
ForceCommand internal-sftp 
ChrootDirectory /home/sftpdir 
PermitTunnel no 
AllowAgentForwarding no 
X11Forwarding no    
AllowTcpForwarding no
  1. एसडीएसडी सेवा की स्थिति को फिर से शुरू और जाँचें

    सुडो सेवा sshd पुनरारंभ

    सेवा sshd स्थिति

  2. एक शेल फ़ाइल बनाएँ। एक अधिसूचना संदेश प्रतिध्वनित करने के लिए निष्पादन जोड़ें

    sudo touch / bin / sftponly echo -e '#! / bin / sh \ necho "यह खाता केवल SFTP पहुंच तक सीमित है।"' सुडो टी-ए / बिन / sftponly

  3. निष्पादन की अनुमति दें और गोले फ़ाइल में संलग्न करें

    sudo chmod a + x / bin / sftponly echo "/ bin / sftponly" | सुडो टी-ए / आदि / गोले

  4. अंत में टेस्ट और आप कनेक्ट करने में सक्षम नहीं होना चाहिए।

  5. एक SSH कुंजी और मूल क्रिया के साथ SFTP ग्राहक का उपयोग करने का खाका:

    sftp -v -oPort = $ RANDOM_PORT -i ~ / .sh / $ SSH_KEY.pem sftpuser @ $ HOST

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