प्रश्न 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
संदर्भ