क्या SSH तक पहुँच की अनुमति देते हुए SCP को रोकना संभव है?


13

सोलारिस और लिनक्स सर्वर और ओपनएसएसएच का उपयोग करते हुए, क्या उपयोगकर्ताओं को "एसपी" के साथ शेल एक्सेस की अनुमति देते हुए "एसटीपी" का उपयोग करके फ़ाइलों को कॉपी करने से रोकना संभव है?

मुझे एहसास है कि 'ssh $ सर्वर "कैट फ़ाइल" टाइप फ़ाइल एक्सेस को रोकने के लिए बहुत कठिन हैं, लेकिन मुझे शुरुआत के लिए "एसटीपी" को रोकने के बारे में देखने की जरूरत है।

असफल होना, क्या सर्वर के माध्यम से सभी एससीपी एक्सेस को मज़बूती से लॉग इन करने का एक तरीका है syslog?


यदि आप ssh को बंद करना चाहते हैं, लेकिन ऐसा नहीं करते हैं कि आप इसका इस्तेमाल कर सकते हैं: sublimation.org/scponly/wiki/index.php/Main_Page बहुत बुरा आप इसे दूसरे तरीके से चाहते हैं: - \

मेरे पास एक ही सवाल है, लेकिन अन्य कारणों से। मेरे मामले में मैं सर्वर पर SFTPD और SCPD को बंद करना पसंद करता हूं। कारण यह है कि हम फ़ाइल स्थानांतरण की अनुमति देते हैं, लेकिन हम उपयोगकर्ताओं को अपनी प्रतिलिपि नोड के माध्यम से स्थानान्तरण करना पसंद करते हैं। यह हमारे लिंक पर लोड को अलग करने के तरीके के कारण है। तो इस लूप के अनुसार SFTPD को बंद करना आसान है, लेकिन अगर मैं सही ढंग से समझूं तो बहुत मुश्किल से एसीपीडी को बंद करना है?

जवाबों:


12

जब आप /etc/ssh/sshd_configइस तरह से कुछ देखने के लिए अपने को संपादित कर सकते हैं :

ForceCommand           /bin/sh
PermitOpen             0.0.0.0
AllowTcpForwarding     no
PermitTunnel           no
# Subsystem sftp       /usr/lib/openssh/sftp-server
PermitUserEnvironment  no

मैं इसके बजाय यह निर्धारित करूंगा कि उपयोगकर्ता इसके लिए क्या उपयोग करने की संभावना है। क्योंकि अगर केवल कुछ आज्ञाएँ हैं जो आप चाहते हैं कि उन तक पहुँच हो, तो मैं इसके बजाय उनके लिए एक सामान्य sshशेल को लागू करने की क्षमता को हटा दूंगा ।

AllowUsers             root
PermitRootLogin        forced-commands-only

PermitUserEnvironment  no

AllowTcpForwarding     no
PermitTunnel           no

# Subsystem sftp       /usr/lib/openssh/sftp-server
Subsystem smb-reload   /usr/bin/smbcontrol smbd reload-config
Subsystem status       /opt/local/bin/status.sh

ssh root@example -s smb-reload

यदि आप पाते हैं कि आपको वास्तव में एक सामान्य शेल को चलाने में सक्षम होने की आवश्यकता है, तो आप जो सबसे अधिक उम्मीद कर सकते हैं, वह है, उन्हें धीमा करना, और इसे और अधिक कठिन बनाना।


8

जैसा कि दूसरों ने उल्लेख किया है, आप एससीपी को रोक नहीं सकते हैं (ठीक है, आप कर सकते हैं: rm /usr/bin/scpलेकिन यह वास्तव में आपको कहीं भी नहीं मिलता है)।

सबसे अच्छा आप यह कर सकते हैं कि उपयोगकर्ताओं के शेल को एक प्रतिबंधित शेल (rashash) में बदला जाए और उसके बाद ही कुछ कमांड्स को चलाया जाए।

याद रखें, यदि वे फ़ाइलें पढ़ सकते हैं, तो वे उन्हें स्क्रीन से कॉपी / पेस्ट कर सकते हैं। बाइनरी फाइलें? xxd / uuencode / mmencode सभी इसके आसपास मिलते हैं।

मैं आपको गतिविधि को ट्रैक करने में मदद करने के लिए प्रक्रिया लेखांकन का उपयोग करने का भी सुझाव दूंगा।


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

1
कैसे एक पैच प्रतिबंधित शेल का उपयोग करने के बारे में जो सभी कमांड को लॉग करता है जो कहीं न कहीं एक पाइप पर चलता है? एक केंद्रीकृत .bash_history तरह का विचार।
मिकीबी

दरअसल सर्वर साइड पर आपको / usr / lib / opensh / sftp-server को डिलीट करना होगा, लेकिन मुझे लगता है कि sshd में बिल्ट इन sftp सर्वर है।
ब्रैड गिल्बर्ट

@ ब्रैड: क्लाइंट द्वारा निर्दिष्ट कोई भी आदेश अभी भी शेल के माध्यम से चलाया जाता है; इसलिए यदि sftp-server डिफ़ॉल्ट PATH में नहीं है (जो कि ऐसा नहीं है) शेल को एक प्रतिबंधित में बदलना एक अक्षम करने के लिए पर्याप्त है, तो आपको बाइनरी को हटाने की आवश्यकता नहीं है।
मिकीबी

6

जब आप अभी भी फ़ाइलों को स्थानांतरित करने के शाब्दिक रूप से अनंत अतिरिक्त तंत्र की अनुमति दे रहे हैं, तो आप "एससीपी" को रोककर कुछ भी हासिल नहीं करते हैं। एससीपी को खारिज करना लेकिन फाइलों को कॉपी करने के अन्य तंत्र की अनुमति देना ऑडिटर्स के लिए झूठ बोलने की एक विधि है। अक्सर ऑडिटर से झूठ बोलने को कहा जाता है। आमतौर पर मैं ऑडिटरों को नकली फिक्स करने के लिए काम करते हुए देखता हूं, ताकि वे कुछ इस तरह बता सकें कि "scp फाइल ट्रांसफर कमांड को निष्क्रिय कर दिया गया है, ताकि फाइलों को सर्वर से scp का उपयोग करके कॉपी नहीं किया जा सके"।

अब एक उचित प्रवेश तंत्र अच्छा होगा। शायद ऑडिट लिनक्स पर काम करता है। शायद सोलारिस ने आखिरकार कुछ तंत्र जोड़ा या डीट्रेस को सुरक्षित रूप से इस्तेमाल किया जा सकता है। किसी फ़ाइल के एक्सेस होने पर हर बार लॉग इन करना चाहते हैं। बेशक "पढ़ने" और "नकल" के बीच कोई अंतर नहीं है। लेकिन यह एक लेखा परीक्षक को संतुष्ट कर सकता है और सिस्टम को महत्वपूर्ण सुरक्षा दे सकता है। आपके लॉग इतने शोर हो सकते हैं कि डेटा बेकार है, या यहां तक ​​कि आप एक हास्यास्पद शॉर्ट ऑडिट ट्रेल रखने के लिए मजबूर हैं। (उदाहरण के लिए, आप हर रीड को लॉग नहीं कर सकते हैं) और - और कुछ आश्चर्यचकित करने वाला एक एप्लिकेशन हर ओपन () डिजास्टर लॉगिंग कर सकता है।


5

1400 बाइट्स के अनुसार, SSH के लिए क्या आवश्यक है, इस पर निर्भर करते हुए, आप सत्र समाप्त करने के लिए IPTables का उपयोग करके इस लक्ष्य (गैर-तुच्छ) फ़ाइलों को प्राप्त करने में सक्षम हो सकते हैं। इसका मतलब यह है कि इंटरएक्टिव एसएचएस ज्यादातर काम करेगा, लेकिन जैसे ही कोई 1500 बाइट पैकेट भेजने की कोशिश करता है - जैसे कि एसपीपी को एक फ़ाइल के लिए बड़ा होना चाहिए, फिर 1499 बाइट्स 1500 के मानक एमटीयू मानकर, यह कनेक्शन समाप्त कर देगा।

यह आपके द्वारा उल्लेखित "कैटिंग" हमले को भी रोकेगा।

दुर्भाग्य से इसका मतलब है कि आपको पाठ संपादक के साथ कुछ फ़ाइलों को संपादित करने में समस्या हो सकती है, अगर स्क्रीन को अधिक से अधिक 1400 वर्णों को आकर्षित करने की आवश्यकता है, या यदि आपको एक लंबी फ़ाइल को कैट करने या एक लंबी निर्देशिका लिस्टिंग की आवश्यकता है।

सबसे सरल मामले में ऐसा करने के लिए एक आदेश कुछ इस तरह लग सकता है

iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff -j DROP

हम पैकेट की लंबाई की जाँच को ipt_recent के साथ जोड़कर इस काम को बेहतर बना सकते हैं, ताकि आप सीमित समय में पैकेट की एक सीमित संख्या को 1400 बाइट्स की अनुमति दें (8 पैकेट प्रति 5 सेकंड में) - यह पैकेट 12k तक फिसलने की अनुमति देगा के माध्यम से, लेकिन आप फ़ाइलों को संपादित करने के लिए आप की आवश्यकता होगी अन्तरक्रियाशीलता दे सकते हैं आदि, आप निश्चित रूप से, पैकेट की संख्या को घुमा सकते हैं।

यह कुछ इस तरह लग सकता है

iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
         -m recent --name noscp --rdest --set 
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
         -m recent --name noscp --rdest --update --seconds 5 --hitcount 8 \
         -j REJECT --reject-with tcp-reset

ऊपर दिए गए नियम उदाहरण केवल scp अपलोड से रक्षा करते हैं जैसे कि scp myfile.data remote.host:~। इसके अलावा scp डाउनलोड से बचाव के लिए scp remote.host:~/myfile.data /local/path, उपरोक्त नियमों को दोहराएं लेकिन --dportसाथ में बदलें --sport

एक सुराग देने वाला हैकर अपनी मशीन (या बल mtu या समान) पर कम से कम 1400 का MTU सेट करके इन सीमाओं के आसपास काम कर सकता है। इसके अलावा, जब आप इसे कुछ उपयोगकर्ताओं तक सीमित नहीं कर सकते, तो आप इसे उचित रूप में iptables लाइनों को संशोधित करके आईपी द्वारा सीमित कर सकते हैं !!

चीयर्स, डेविड गो


2

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


या आप दोनों कर सकते थे।
msanford


1

नहीं scpऔर sshएक ही बंदरगाहों पर काम करते हैं और एक ही प्रोटोकॉल का उपयोग करते हैं। यदि आप एक sshसत्र खोलते हैं , तो आप बाद के एससीपी कॉल जैसे विकल्पों का उपयोग करके अपने कनेक्शन को साझा कर सकते हैं ControlMaster

यदि आप नहीं चाहते कि लोग किसी मशीन की विशेष फाइलों को कॉपी करें, तो आपको उन्हें मशीन में किसी भी प्रकार का शेल एक्सेस नहीं देना चाहिए।


हां, स्पष्ट उत्तर सिस्टम को लॉक करना होगा और एक्सेस देना नहीं होगा। हालांकि वास्तविकता में, मेरी कंपनी के पास ऑडिटर हैं जो कहते हैं कि हमें फ़ाइलों को सर्वर से कॉपी करने से रोकने की आवश्यकता है और / या इस तथ्य के बावजूद लॉग प्रयास करते हैं कि हम गंभीरता से ssh एक्सेस को सीमित करते हैं और जगह में एक मजबूत RBAC सिस्टम है।

2
@ जेसन: इसके बाद आपको फ़ाइल एक्सेस लॉग करना होगा। यदि आप scp को निष्क्रिय करते हैं, तो भी आप किसी को चलने से कैसे रोकेंगे: ssh सर्वर 'कैट / पाथ / टू / फाइल'> कॉपी?
व्युत्पन्न

0

इंटरैक्टिव ssh को अक्षम करने और scp को अनुमति देने के लिए शेल के रूप में 'scponly' का उपयोग करने का एक तरीका है, लेकिन मुझे मौजूदा कुछ भी पता नहीं है जो रिवर्स तरीके से काम करता है।

आप रिवर्स को पूरा करने के लिए स्कूपली शेल को हैक करने का पता लगाने में सक्षम हो सकते हैं।


0

यह वास्तव में एक छोटे से googling के बाद संभव नहीं है।

इस चर्चा को देखें: http://www.mydat डेटाबेसupport.com/forums/unix-admin/387261-how-restrict-ssh-users-block-scp-sftp.html


यह लिंक मर चुका है।
rox0r

0

इसके लायक क्या है, इसके लिए वाणिज्यिक उत्पाद CryptoAuditor SSH पर फ़ाइल स्थानांतरण को नियंत्रित करने में सक्षम होने का दावा करता है, MITM द्वारा कनेक्शन को जोड़ने और गहरे-पैकेट निरीक्षण का उपयोग करके । स्पष्ट रूप से कोई भी समाधान कॉपी + पेस्ट, यूएनकोड / डिकोड, मछली , आदि से सुरक्षित नहीं है । अच्छी बात यह है कि यह पारदर्शी है (संभावित प्रमाण पत्र त्रुटियों से अलग); एसएसएच कनेक्शन के दोनों छोर पर स्थापित करने के लिए कोई एजेंट सॉफ़्टवेयर नहीं है, और कॉन्फ़िगर करने के लिए कोई पोर्टल / प्रॉक्सी नहीं है।

मैंने उत्पाद का उपयोग नहीं किया है, इसलिए YMMV।


0

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

इसलिए मैं इसके बजाय आपके लॉगिंग विकल्प पर ध्यान केंद्रित करूंगा:

"स्क्रिप्ट" नामक एक कार्यक्रम है जो व्यावहारिक रूप से हर डिस्ट्रो में शामिल है, और जिसे उन लोगों पर स्थापित करना आसान होना चाहिए जहां यह नहीं है। यह एक सत्र लकड़हारा है जो शेल से सभी इनपुट और आउटपुट को रिकॉर्ड करता है, वैकल्पिक रूप से टाइमिंग डेटा के साथ ताकि इसे फिर से देखा जा सके और जैसा आप उपयोगकर्ता के कंधे पर देख रहे थे वैसा ही हो। (95% वैसे भी, यह कभी-कभी आउटपुट को bobbles करता है जब ncurses शामिल होता है, लेकिन बहुत बार नहीं।)

इसके मैन पेज में सिस्टम के लॉगिन शेल के रूप में इसे स्थापित करने के निर्देश शामिल हैं। सुनिश्चित करें कि लॉग्स कहीं ऐसे हैं कि उपयोगकर्ता केवल उन्हें हटा नहीं सकता है (एपेंड-ओनली फाइलसिस्टम विशेषता (चैटट्रे के माध्यम से व्यवस्थित) इसके लिए उपयोगी हो सकता है। जैसा कि ACLs या स्क्रिप्ट को अयोग्य कर सकता है)।

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


0

मेरा मानना ​​है कि आप सर्वर पर खुलने वाले क्लाइंट (या समकक्ष) की स्थापना रद्द कर सकते हैं।

मुझे लगता है कि scp क्लाइंट डेटा पर कॉपी करते समय सर्वर पर scp को आमंत्रित करता है ताकि यदि आप सर्वर पर scp से छुटकारा पाएं, तो आपको ठीक होना चाहिए।

$ scp bla server:/tmp/
...
debug1: Sending environment.
debug1: Sending env LC_ALL = en_US.utf8
debug1: Sending env LANG = en_US.utf8
debug1: Sending env XMODIFIERS = @im=ibus
debug1: Sending env LANGUAGE = en_US.utf8
debug1: Sending command: scp -v -t /tmp/
bash: scp: command not found
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
lost connection
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.