SFTP के साथ पासवर्ड-कम बैकअप प्रतिबंधित करें


11

मुझे अपने कंप्यूटर में द्वैधता का उपयोग करते हुए एक सर्वर का बैकअप लेने की आवश्यकता है:

duplicity /etc sftp://backup@my.dynamic.ip.address//home/backup

इससे पहले कि यह किया जा सके, मुझे निम्न कार्य करके पासवर्ड-कम पहुंच की अनुमति देने की आवश्यकता है:

$ ssh-keygen
$ ssh-copy-id backup@my.dynamic.ip.address
$ ssh backup@my.dynamic.ip.address

मेरा प्रश्न यह है कि मैं जनरेट की जाने वाली सार्वजनिक कुंजी में केवल इस SFTP स्थानांतरण के लिए कमांड को कैसे प्रतिबंधित करूं?

command="restrict to sftp",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…

और जब से मैं एक गतिशील आईपी पते पर हूं, मैं अपने आईपी परिवर्तन को हर बार "लापता होस्ट" समस्या से कैसे दूर कर सकता हूं?



1
"लापता होस्ट समस्या": StrictHostKeyChecking का उपयोग करें = ssh के लिए कोई विकल्प नहीं है
मार्की

@ मार्की, धन्यवाद, सेटिंग ssh_config पर।
प्रश्न अतिप्रवाह

जवाबों:


15

प्रश्न 1

मेरा प्रश्न यह है कि मैं जनरेट की जाने वाली सार्वजनिक कुंजी में केवल इस SFTP स्थानांतरण के लिए कमांड को कैसे प्रतिबंधित करूं?

इसे करने के 2 तरीके हैं।

1. - sshd के माध्यम से प्रतिबंध

इस विधि में आपके SSH डेमॉन के भीतर SFTP सुविधा स्थापित करना शामिल है sshd। इसे /etc/ssh/sshd_configकॉन्फ़िगरेशन फ़ाइल के माध्यम से नियंत्रित किया जाता है । नोट: यह उपयोगकर्ता backupको केवल सर्वर में SFTP के लिए अनुमति देने के लिए प्रतिबंधित करेगा ।

# /etc/ssh/sshd_config

Subsystem       sftp    internal-sftp

## You want to put only certain users (i.e users who belongs to sftpusers 
## group) in the chroot jail environment. Add the following lines at the end 
## of /etc/ssh/sshd_config

Match User backup
  ForceCommand internal-sftp

2. - अधिकृत_की के माध्यम से प्रतिबंधित

इस पद्धति में sshd_configफ़ाइल में कोई परिवर्तन शामिल नहीं है । आप उस उपयोगकर्ता के लिए एक SSH कुंजी को उस command=सुविधा के माध्यम से सीमित कर सकते हैं जिसे आपने अपने प्रश्न में पहले ही उल्लेख किया है। ट्रिक यह है कि आप किस कमांड में शामिल हैं। आप इस command=लाइन में SFTP सर्वर डाल सकते हैं , जिसका प्रभाव आपकी sshd_configफ़ाइल में SFTP सर्वर सेट करने के समान है ।

# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host

नोट: यदि उपयोगकर्ता के पास पहुंच है ~/.ssh/authorized_keys, तो वे इसे पढ़ और / या संशोधित कर सकते हैं। उदाहरण के लिए, वे इसे डाउनलोड कर सकते हैं, इसे संपादित कर सकते हैं, और इसे खोलकर अलग कर सकते हैं commmand=..., शेल सहित अनपेक्षित कमांड एक्सेस दे सकते हैं। यदि उपयोगकर्ता के पास लिखने की पहुंच है ~/.ssh, तो वे फ़ाइल को केवल अनलिंक और रीक्रिएट कर सकते हैं, या chmodइसे एक्सेस लिख सकते हैं। कई संभावित समाधान मौजूद हैं, जैसे ~/.ssh/authorized_keysफाइलों को गैर-उपयोगकर्ता-योग्य जगह पर रखना, जैसे कि:

Match Group sftponly
    AuthorizedKeysFile      /etc/ssh/authorized_keys/%u

प्रश्न 2

और जब से मैं एक गतिशील आईपी पते पर हूं, मैं अपने आईपी परिवर्तन को हर बार "लापता होस्ट" समस्या से कैसे दूर कर सकता हूं?

यह फ़ाइल के from=भीतर भी फीचर का उपयोग करने के लिए पेचीदा लेकिन उल्लेखनीय है authorized_keys। यहाँ हम, केवल मेजबान से पहुंच को सीमित करने कर रहे हैं somehost.dyndns.org

से = "somehost.dyndns.org", कमांड = "/ usr / libexec / opensh / sftp-server", नो-पोर्ट-फ़ॉरवर्डिंग, नो-X11-फ़ॉरवर्डिंग, नो-एजेंट-फ़ॉरवर्डिंग, नो-पीटीटी ssh-dss AAAAC8ghi9ldw9ldw == बैकअप @ होस्ट

अतिरिक्त सेटिंग्स के बाद command=समान रूप से महत्वपूर्ण हैं, क्योंकि वे आगे भी SSH कुंजी के उपयोग को सीमित करेंगे।

सुविधाओं का टूटना

  • from='hostname1,hostname2,'' - निर्दिष्ट आईपी या होस्टनाम पैटर्न से पहुंच को प्रतिबंधित करता है
  • command='command' - प्रमाणीकरण के बाद निर्दिष्ट कमांड चलाता है
  • no-pty - एक pty आवंटित नहीं करता है (इंटरैक्टिव लॉगिन की अनुमति नहीं देता है)
  • no-port-forwarding - पोर्ट अग्रेषण की अनुमति नहीं देता है
  • no-X11-forwarding - उपयोगकर्ता प्रदर्शन X11 GUIs को निकालने में सक्षम नहीं होगा
  • no-agent-forwarding - उपयोगकर्ता इस होस्ट के माध्यम से अन्य आंतरिक होस्टों को अग्रेषित करने में सक्षम नहीं होगा

"लापता ज्ञात होस्ट" के बारे में संदेश से छुटकारा पाने के लिए आप ग्राहक से इस SSH विकल्प को जोड़ सकते हैं जब यह इस तरह से जुड़ता है:

$ ssh -o StrictHostKeyChecking=no ....

ssh_configइस स्विच के बारे में पूरी जानकारी के लिए , मैन पेज देखें ।

उपयोगकर्ता के खोल को प्रतिबंधित करना

ऊपर दिए गए दोनों समाधानों के लिए, आप फ़ाइल backupमें इस उपयोगकर्ता के शेल को सीमित करके उपयोगकर्ता को लॉक करना चाहेंगे /etc/passwd। आमतौर पर आप इसे सेट करना चाहते हैं scponly, लेकिन इसके लिए अन्य विकल्प भी हैं। इसे देखें U & L Q & A शीर्षक: " क्या आपको ऐसा करने के तरीकों के लिए एससीपी के लिए एक शेल की आवश्यकता है? "

के उपयोग /sbin/nologinकरता है, तो आप से chroot सुविधा का उपयोग करने का विकल्प चुन सकते भी इस्तेमाल किया जा sshd_configके रूप में में उल्लिखित # 1 ऊपर। हालाँकि, यदि आप # 2 में उल्लिखित विधि का उपयोग करने का विकल्प चुनते हैं , तो आपको scponlyउपयोगकर्ता के शेल के लिए उपयोग करना होगा या कुछ और करना होगा /etc/passwd


बोनस - ऊपर # 2 का विस्तार

यदि आपको इस उपयोगकर्ता के लिए आदेशों के एक समूह को उजागर करने की आवश्यकता है, तो आप यह भी कर सकते हैं। एक स्क्रिप्ट बनाएं जैसे /home/backup/commands.sh:

#!/bin/sh

case $SSH_ORIGINAL_COMMAND in
  "diskspace")
    df -h
    ;;
  "dirlist")
    ls -1
    ;;
  "apache_restart")
    /etc/init.d/apache restart
    ;;
  *)
    echo "Unknown command"
esac

आप फिर authorized_keysफ़ाइल को इस तरह सेट करते हैं :

command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host

backupउपयोगकर्ता तो जैसे इन आदेशों को चलाने कर सकते हैं:

# diskspace
$ ssh -q user@remote_host diskspace
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/dev-root   39G  2.2G   35G   6% /

# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql

संदर्भ


इस बात से सावधान रहें कि आप उपयोगकर्ता को कौन सी आज्ञाओं का उपयोग करने की अनुमति देते हैं या उपयोगकर्ता के पास पूर्ण शेल प्राप्त करने की क्षमता हो सकती है। एक उदाहरण के रूप में, यदि आप किसी को आसानी से प्रवेश दे सकते हैं:! / Bin / bash or:! / Bin / someotherprogram।
rking

@rking - हाँ है कि कह बिना चला जाता है ...
SLM

मुझे इस तरह के एक विस्तृत जवाब देने के लिए धन्यवाद। कमांड प्रतिबंध सही काम करता है। लेकिन दो समस्याएं हैं। 1) डायनेमिक आईपी मेरे कंप्यूटर को संदर्भित करता है, सर्वर को नहीं। अधिकृत_कील्स फ़ाइल के "से" फ़ील्ड में होस्टनाम केवल उस पते को प्रतिबंधित करता है जिससे सर्वर मेरे कंप्यूटर तक पहुंच सकता है और मेरे कंप्यूटर पर "लापता ज्ञात होस्ट" समस्या को हल करने के लिए कुछ भी नहीं करता है। 2) मेरे कंप्यूटर पर बैकअप उपयोगकर्ता के लिए शेल लॉगिन को अक्षम करने /sbin/nologinसे सर्वर को SFTP के साथ मेरे कंप्यूटर तक पहुंचने से रोका जा सकेगा। यह मैंने कोशिश की।
क्वेश्चन ओवरफ्लो

1
गलतफहमी के लिए खेद है। सर्वर S क्लाइंट बन जाता है जब यह मेरे कंप्यूटर C. के लिए बैकएंड SFTP कनेक्शन करता है। "अनुपलब्ध ज्ञात होस्ट" समस्या तब होती है जब सर्वर S बैकअप कर रहा होता है जो अपने ssh known_hostsफ़ाइल में सूचीबद्ध नहीं है । मार्की ने अपनी टिप्पणी में सही समाधान प्रदान किया। fromमें पैरामीटर authorized_keysअपने कंप्यूटर सी पर फ़ाइल केवल स्थान है जहाँ से आप एस सी से कनेक्ट कर सकते प्रतिबंधित करता है
प्रश्न ओवरफ्लो

हां, कृपया संपादन करने के लिए आगे बढ़ें। वैसे मुझे एहसास है कि /sbin/nologinकाम करता है अगर मैं बल कमांड का उपयोग करता हूं जिसके internal-sftpबजाय /usr/libexec/openssh/sftp-serverआपने प्रमाणपत्र पर निर्दिष्ट किया है। मुझे लगता है कि ये दो अलग-अलग उपप्रणालियाँ हैं। और पूर्व के लिए एक क्रोकेट निर्देशिका बनाना बहुत अधिक सीधे आगे है।
प्रश्न ओवरफ्लो

0

प्रतिबंधित शैल

आपको इस तरह के स्कूपली या आरएसएच को प्रतिबंधित शेल असाइन करना होगा।

जब आप scp या sftp का उपयोग करते हैं तो आप ssh पर दूरस्थ साइट से जुड़ रहे होते हैं और फिर दूरस्थ शेल एक scp प्रॉसेस या sftp प्रक्रिया को निष्पादित करता है। आपको एक प्रतिबंधित शेल की आवश्यकता है जो केवल scp या sftp लॉगिन को लॉक करने की अनुमति देता है।

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