टीएल; डीआर - जवाब के नीचे जाएं, "प्रतिबंध लागू करना"
प्रतिबंधित उपयोगकर्ता को जोड़ने के दो भाग होते हैं: 1. उपयोगकर्ता बनाना 2. SSH डेमॉन (sshd) कॉन्फ़िगर करना
Sshd कॉन्फ़िगर करना
SSH की संभावनाओं के बारे में जानने के लिए सबसे अच्छी जगह संबंधित मैनुअल पृष्ठों को पढ़कर है:
SSH क्लाइंट कहाँ क्रिया कर सकता है?
इससे पहले कि आप कुछ प्रतिबंधित कर सकते हैं, आपको एसएसएच की विशेषताओं को जानना होगा। मैन्युअल पृष्ठों की पैदावार के माध्यम से थूकना:
- शेल कमांड निष्पादित करता है
- फ़ाइल अपलोड sftp के माध्यम से
- पोर्ट फॉरवार्डिंग
- क्लाइंट फ़ॉर्वर्ड (अन) सर्वर के लिए पोर्ट का उपयोग करता है
- सर्वर क्लाइंट के लिए उसके पोर्ट को आगे करता है
- सर्वर क्लाइंट को एक अन्य होस्ट का एक पोर्ट फॉरवर्ड करता है (प्रॉक्सी-इश)
- X11 फ़ॉरवर्डिंग (प्रदर्शन फ़ॉरवर्डिंग)
- प्रमाणीकरण एजेंट अग्रेषण
- एक सुरंग उपकरण का अग्रेषण
से प्रमाणीकरण की धारा sshd (8) के मैनुअल पृष्ठ :
यदि क्लाइंट सफलतापूर्वक खुद को प्रमाणित करता है, तो सत्र की तैयारी के लिए एक संवाद दर्ज किया जाता है। इस समय ग्राहक एक pseudo-tty आवंटित करने, X11 कनेक्शन अग्रेषित करने, टीसीपी कनेक्शन अग्रेषित करने, या सुरक्षित चैनल पर प्रमाणीकरण एजेंट कनेक्शन अग्रेषित करने जैसी चीजों का अनुरोध कर सकता है
।
इसके बाद, क्लाइंट या तो शेल या कमांड के निष्पादन का अनुरोध करता है । पक्ष तब सत्र मोड में प्रवेश करते हैं। इस मोड में, दोनों ओर से किसी भी समय डेटा भेजा जा सकता है, और इस तरह के डेटा को सर्वर साइड पर शेल या कमांड से / और क्लाइंट साइड में यूजर टर्मिनल को अग्रेषित किया जाता है।
SSH सुविधाओं को प्रतिबंधित करने के लिए विकल्प
फ़ाइलें और उनके विकल्प जो व्यवहार को बदलते हैं:
~/.ssh/authorized_keys
- वे कुंजियाँ हैं जिन्हें जोड़ने की अनुमति है, जिन्हें विकल्प दिए जा सकते हैं:
command="command"
- उपयोगकर्ता द्वारा आपूर्ति की गई कमांड (यदि कोई है) को नजरअंदाज किया जाता है। ध्यान दें कि ग्राहक टीसीपी और / या एक्स 11 को अग्रेषित कर सकते हैं जब तक कि उन्हें स्पष्ट रूप से निषिद्ध नहीं किया जाता है । ध्यान दें कि यह विकल्प शेल, कमांड या सबसिस्टम निष्पादन पर लागू होता है।
no-agent-forwarding
- यह कुंजी प्रमाणीकरण के लिए उपयोग किए जाने पर प्रमाणीकरण एजेंट को अग्रेषित करती है।
no-port-forwarding
- यह कुंजी प्रमाणीकरण के लिए उपयोग किए जाने पर टीसीपी को अग्रेषित करती है
no-X11-forwarding
- "जब यह कुंजी प्रमाणीकरण के लिए उपयोग की जाती है तो X11 अग्रेषित करना बंद कर देता है।"
permitopen="host:port"
- स्थानीय 'ssh -L' पोर्ट को इस तरह अग्रेषित करना कि यह केवल निर्दिष्ट होस्ट और पोर्ट से कनेक्ट हो सके।
~/.ssh/environment
- इस फ़ाइल को लॉगिन पर पर्यावरण में पढ़ा जाता है (यदि यह मौजूद है)। पर्यावरण प्रसंस्करण डिफ़ॉल्ट रूप से अक्षम है और PermitUserEnvironment विकल्प के माध्यम से नियंत्रित किया जाता है
~/.ssh/rc
- उपयोगकर्ता के घर की निर्देशिका सुलभ होने से पहले चलाने के लिए इनिशियलाइज़ेशन रूटीन समाहित करता है।
/etc/ssh/sshd_config
- सिस्टम-वाइड कॉन्फ़िगरेशन फ़ाइल
AllowAgentForwarding
- निर्दिष्ट करता है कि ssh- एजेंट (1) अग्रेषण की अनुमति है या नहीं।
AllowTcpForwarding
ForceCommand
- "फोर्सकॉमैंड द्वारा निर्दिष्ट कमांड के निष्पादन को मजबूर करता है, क्लाइंट द्वारा दिए गए किसी भी कमांड को अनदेखा करता है और अगर मौजूद है तो / / .ssh / rc। कमांड को -c विकल्प के साथ उपयोगकर्ता के लॉगिन शेल का उपयोग करके आमंत्रित किया जाता है।"
GatewayPorts
- "निर्दिष्ट करता है कि क्या दूरस्थ होस्ट क्लाइंट के लिए अग्रेषित पोर्ट से कनेक्ट करने की अनुमति है। डिफ़ॉल्ट रूप से, sshd (8) लूपबैक पते पर दूरस्थ पोर्ट फ़ॉरवर्डिंग को बाइंड करता है। यह अन्य दूरस्थ होस्ट को अग्रेषित पोर्ट से कनेक्ट करने से रोकता है। GatewayPorts को निर्दिष्ट करने के लिए उपयोग किया जा सकता है। sshd को दूरस्थ पोर्ट फ़ॉरवर्डिंग को गैर-लूपबैक पतों पर बाँधने की अनुमति देनी चाहिए, इस प्रकार अन्य होस्ट को कनेक्ट करने की अनुमति मिलती है। "
PermitOpen
:
उन गंतव्यों को निर्दिष्ट करता है जिनमें टीसीपी पोर्ट अग्रेषण की अनुमति है। अग्रेषण विनिर्देश निम्नलिखित रूपों में से एक होना चाहिए:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
एकाधिक फ़ॉरवर्ड को व्हॉट्सएप के साथ अलग करके निर्दिष्ट किया जा सकता है। सभी प्रतिबंधों को हटाने और किसी भी अग्रेषण अनुरोध को अनुमति देने के लिए 'किसी भी' के तर्क का उपयोग किया जा सकता है। डिफ़ॉल्ट रूप से सभी पोर्ट अग्रेषण अनुरोधों की अनुमति है।
PermitTunnel
- निर्दिष्ट करता है कि क्या ट्यून (4) डिवाइस अग्रेषण की अनुमति है। डिफ़ॉल्ट 'नहीं' है
X11Forwarding
- निर्दिष्ट करता है कि X11 अग्रेषण की अनुमति है या नहीं। डिफ़ॉल्ट 'नहीं' है
प्रतिबंध लागू करना
सिस्टम-वाइड कॉन्फ़िगरेशन फ़ाइल को संशोधित करने की /etc/ssh/sshd_config
अनुमति देता है भले ही पासवर्ड-आधारित प्रमाणीकरण लागू हो या अगर ~/.ssh/authorized_keys
गलती से प्रतिबंध हटा दिए गए हों तो कॉन्फ़िगरेशन को लागू किया जा सकता है। यदि आपने वैश्विक चूक को संशोधित किया है, तो आपको उसके अनुसार विकल्पों को अनसुना करना चाहिए।
Match User limited-user
#AllowTcpForwarding yes
#X11Forwarding no
#PermitTunnel no
#GatewayPorts no
AllowAgentForwarding no
PermitOpen localhost:62222
ForceCommand echo 'This account can only be used for [reason]'
अब एक उपयोगकर्ता जोड़ें:
sudo useradd -m limited-user
विकल्प ForceCommand
को छोड़ा जा सकता है यदि शेल गैर-शेल की तरह सेट किया जाता है /bin/false
(या /bin/true
) जैसा /bin/false -c [command]
कि कुछ भी नहीं होगा।
अब ग्राहक केवल SSH पर सर्वर के लूपबैक पते पर पोर्ट 62222 से जुड़ सकता है (यह सार्वजनिक आईपी पते पर नहीं सुनेगा)
अक्षम करने AllowTcpForwarding
से भी -R
इस तरह के प्रतिबंधित खाते के उपयोग को पराजित किया जा सकता है, जिससे एक पोर्ट को अग्रेषित किया जा सकेगा । PermitOpen localhost:62222
मान लें कि सर्वर पर पोर्ट 62222 का उपयोग कभी नहीं होता है क्योंकि क्लाइंट खुशी से इसे कनेक्ट कर सकता है और इस पर भी सुन सकता है।
यदि सिस्टम-वाइड कॉन्फ़िगरेशन और अक्षम पासवर्ड-आधारित प्रमाणीकरण में टीसीपी अग्रेषण की अनुमति है, तो आप प्रति-कुंजी सेटिंग्स का भी उपयोग कर सकते हैं। संपादित करें ~/.ssh/authorized_keys
और अगले विकल्पों को जोड़ें ssh-
(विकल्पों के बीच की जगह के साथ ssh-
) और :
command="echo 'This account can only be used for [reason]'",no-agent-forwarding,no-X11-forwarding,permitopen="localhost:62222"
सत्यापित करें
यह सुनिश्चित करने के लिए कि यह अपेक्षित रूप से काम करता है, कुछ परीक्षण मामलों को चलाने की आवश्यकता है। host
यदि यह सेट नहीं है , तो नीचे दिए गए आदेशों में, वास्तविक लॉगिन द्वारा प्रतिस्थापित किया जाना चाहिए ~/.ssh/config
। आदेश के पीछे, एक कमांड दिखाया जाता है जिसे क्लाइंट या सर्वर (निर्दिष्ट के रूप में) पर निष्पादित किया जाना चाहिए।
# connection closed:
ssh host
# connection closed (/bin/date is not executed):
ssh host /bin/date
# administratively prohibited (2x):
ssh host -N -D 62222 # client: curl -I --socks5 localhost:62222 example.com
ssh host -N -L 8080:example.com:80 # client: curl -I localhost:8080
sftp host
# should be possible because the client should forward his SSH server
ssh host -N -R 8080:example.com:80 # server: curl -I localhost:8080
# This works, it forwards the client SSH to the server
ssh host -N -R 62222:localhost:22
# unfortunately, the client can listen on that port too. Not a big issue
ssh host -N -L 1234:localhost:62222
निष्कर्ष
चेकलिस्ट: SSH उपयोगकर्ता इसके लिए सक्षम नहीं होना चाहिए:
- निष्पादित शेल कमांड - किया गया
- फ़ाइलों तक पहुँचने या सर्वर पर फ़ाइलों को अपलोड करने के लिए - किया गया
- सर्वर को प्रॉक्सी के रूप में उपयोग करें (जैसे webproxy) - किया गया
- स्थानीय सेवाओं का उपयोग करें जो फ़ायरवॉल के कारण सार्वजनिक रूप से सुलभ नहीं हैं - आंशिक रूप से , ग्राहक 62222 के अलावा अन्य पोर्ट तक नहीं पहुंच सकता है, लेकिन सर्वर पर पोर्ट 62222 को सुन और कनेक्ट कर सकता है
- सर्वर को मारें - किया गया
(ध्यान दें कि ये चेक एसएसएच सर्वर तक सीमित हैं। यदि आप मशीन पर अन्य असुरक्षित सेवा करते हैं, तो यह संभावित हमलावर को कमांड चलाने, सर्वर को मारने, आदि की अनुमति दे सकता है)