
यह शेफ कुकबुक सुरक्षित ssh-client और ssh-server कॉन्फ़िगरेशन प्रदान करती है।
यह कुकबुक सुरक्षित ssh-client और ssh-server कॉन्फ़िगरेशन प्रदान करती है। यह कुकबुक उपयोगकर्ताओं और/या ssh कुंजियों के प्रबंधन की क्षमताएँ प्रदान नहीं करती है, इसके लिए कृपया अन्य कुकबुक का उपयोग करें।
नीचे आपको विशेषता दस्तावेज़ीकरण और उनके डिफ़ॉल्ट मान मिलेंगे।
ध्यान दें: इस कुकबुक की कुछ विशेषता डिफ़ॉल्ट मान recipes में सेट किए गए हैं। ऐसी विशेषताओं को ओवरराइड करने के लिए आपको उच्च विशेषता प्राथमिकता स्तर का उपयोग करना चाहिए। ऐसी विशेषताओं को नीचे दी गई सूची में #override attribute# से चिह्नित किया गया है। ऐसी विशेषता को ओवरराइड करने का उदाहरण:
override['ssh-hardening']['ssh']['server']['listen_to'] = node['ipaddress']
['ssh-hardening']['network']['ipv6']['enable'] - false. यदि IPv6 की आवश्यकता है तो true पर सेट करें['ssh-hardening']['ssh']['ports'] - 22. वे पोर्ट जिन पर ssh-server को सुनना चाहिए और ssh-client को कनेक्ट होना चाहिए['ssh-hardening']['ssh'][{'client', 'server'}]['kex'] - nil सर्वर संस्करण के आधार पर सर्वोत्तम key-exchange (KEX) की गणना करने के लिए, अन्यथा Kex मानों की एक स्ट्रिंग निर्दिष्ट करें['ssh-hardening']['ssh'][{'client', 'server'}]['mac'] - nil सर्वर संस्करण के आधार पर सर्वोत्तम Message Authentication Codes (MACs) की गणना करने के लिए, अन्यथा Mac मानों की एक स्ट्रिंग निर्दिष्ट करें['ssh-hardening']['ssh'][{'client', 'server'}]['cipher'] - nil सर्वर संस्करण के आधार पर सर्वोत्तम ciphers की गणना करने के लिए, अन्यथा Cipher मानों की एक स्ट्रिंग निर्दिष्ट करें['ssh-hardening']['ssh'][{'client', 'server'}]['cbc_required'] - false. यदि ciphers के लिए CBC आवश्यक है तो true पर सेट करें। यह आमतौर पर केवल तभी आवश्यक है, जब पुराने M2M तंत्र को SSH के साथ संचार करने की आवश्यकता हो, जिनमें कॉन्फ़िगर किए गए सुरक्षित ciphers में से कोई भी सक्षम नहीं है। CBC एक कमज़ोर विकल्प है। इससे कमज़ोर कुछ भी टाला जाना चाहिए और इस प्रकार उपलब्ध नहीं है।['ssh-hardening']['ssh'][{'client', 'server'}]['weak_hmac'] - false. यदि कमज़ोर HMAC तंत्र आवश्यक हैं तो true पर सेट करें। यह आमतौर पर केवल तभी आवश्यक है, जब पुराने M2M तंत्र को SSH के साथ संचार करने की आवश्यकता हो, जिनमें कॉन्फ़िगर किए गए सुरक्षित HMACs में से कोई भी सक्षम नहीं है।['ssh-hardening']['ssh'][{'client', 'server'}]['weak_kex'] - false. यदि कमज़ोर Key-Exchange (KEX) तंत्र आवश्यक हैं तो true पर सेट करें। यह आमतौर पर केवल तभी आवश्यक है, जब पुराने M2M तंत्र को SSH के साथ संचार करने की आवश्यकता हो, जिनमें कॉन्फ़िगर किए गए सुरक्षित KEXs में से कोई भी सक्षम नहीं है।['ssh-hardening']['ssh']['client']['remote_hosts'] - [] - एक या अधिक होस्ट, जिनसे ssh-client कनेक्ट हो सकता है।['ssh-hardening']['ssh']['client']['password_authentication'] - false. यदि पासवर्ड प्रमाणीकरण सक्षम किया जाना चाहिए तो true पर सेट करें।['ssh-hardening']['ssh']['client']['roaming'] - false. यदि प्रयोगात्मक client roaming सक्षम किया जाना चाहिए तो true पर सेट करें। यह दुर्भावनापूर्ण सर्वरों को रहस्य प्रकट करने के साथ संभावित समस्याएँ पैदा करने के लिए जाना जाता है और डिफ़ॉल्ट रूप से अक्षम रहता है।['ssh-hardening']['ssh']['client']['extras'] - {}. अतिरिक्त कॉन्फ़िगरेशन विकल्प जोड़ें, विवरण के लिए नीचे देखें['ssh-hardening']['ssh']['server']['host_key_files'] - nil सर्वर संस्करण के आधार पर सर्वोत्तम hostkey कॉन्फ़िगरेशन की गणना करने के लिए, अन्यथा फ़ाइल पथों की एक सरणी निर्दिष्ट करें (जैसे /etc/ssh/ssh_host_rsa_key)['ssh-hardening']['ssh']['server']['dh_min_prime_size'] - 2048 - /etc/ssh/moduli में बिट्स में न्यूनतम स्वीकार्य prime लंबाई। इस संख्या से कम primes हटा दिए जाएँगे। (अधिक जानकारी और पृष्ठभूमि के लिए यह देखें)['ssh-hardening']['ssh']['server']['dh_build_primes'] - false - यदि अपने स्वयं के primes बनाए जाने चाहिए। यह पुनर्निर्माण केवल एक बार होता है और बहुत समय लेता है (~ आधुनिक हार्डवेयर पर 4096 लंबाई के लिए 1.5 - 2 घंटे)।['ssh-hardening']['ssh']['server']['dh_build_primes_size'] - 4096 - Prime लंबाई जो उत्पन्न की जानी चाहिए। यह विकल्प केवल तभी मान्य है जब dh_build_primes सक्षम हो।['ssh-hardening']['ssh']['server']['listen_to'] #override attribute# - एक या अधिक ip पते, जिन पर ssh-server को सुनना चाहिए। डिफ़ॉल्ट सभी इंटरफेस पर सुनना है। सुरक्षा कारणों से इसे कॉन्फ़िगर किया जाना चाहिए!['ssh-hardening']['ssh']['server']['allow_root_with_key'] - false root लॉगिन को पूरी तरह से अक्षम करने के लिए। key-आधारित तंत्र के माध्यम से root को लॉगिन करने की अनुमति देने के लिए true पर सेट करें['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] - false. TCP Forwarding की अनुमति देने के लिए true पर सेट करें['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] - false. Agent Forwarding की अनुमति देने के लिए true पर सेट करें['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] - false. X11 Forwarding की अनुमति देने के लिए true पर सेट करें['ssh-hardening']['ssh']['server']['permit_tunnel'] - false tun डिवाइस फ़ॉरवर्डिंग को अक्षम करने के लिए। tun डिवाइस फ़ॉरवर्डिंग की अनुमति देने के लिए true पर सेट करें। अन्य स्वीकृत मान: 'yes', 'no', 'point-to-point', 'ethernet'। सटीक व्यवहार के लिए man sshd_config देखें। ध्यान दें: आपको allow_tcp_forwarding भी सक्षम करना होगा।['ssh-hardening']['ssh']['server']['use_pam'] - true. sshd के pam प्रमाणीकरण को अक्षम करने के लिए false पर सेट करें['ssh-hardening']['ssh']['server']['challenge_response_authentication'] - false. challenge response प्रमाणीकरण सक्षम करने के लिए true पर सेट करें।['ssh-hardening']['ssh']['server']['deny_users'] - [] DenyUsers कॉन्फ़िगर करने के लिए, यदि निर्दिष्ट है तो उन उपयोगकर्ता नामों के लिए लॉगिन अस्वीकृत है जो पैटर्न में से किसी एक से मेल खाते हैं।['ssh-hardening']['ssh']['server']['allow_users'] - [] AllowUsers कॉन्फ़िगर करने के लिए, यदि निर्दिष्ट है तो लॉगिन केवल उन उपयोगकर्ता नामों के लिए अनुमत है जो पैटर्न में से किसी एक से मेल खाते हैं।['ssh-hardening']['ssh']['server']['deny_groups'] - [] DenyGroups कॉन्फ़िगर करने के लिए, यदि निर्दिष्ट है तो उन उपयोगकर्ताओं के लिए लॉगिन अस्वीकृत है जिनकी प्राथमिक समूह या पूरक समूह सूची पैटर्न में से किसी एक से मेल खाती है।['ssh-hardening']['ssh']['server']['allow_groups'] - [] AllowGroups कॉन्फ़िगर करने के लिए, यदि निर्दिष्ट है तो लॉगिन केवल उन उपयोगकर्ताओं के लिए अनुमत है जिनकी प्राथमिक समूह या पूरक समूह सूची पैटर्न में से किसी एक से मेल खाती है।['ssh-hardening']['ssh']['server']['print_motd'] - false. MOTD की छपाई सक्षम करने के लिए true पर सेट करें['ssh-hardening']['ssh']['server']['print_last_log'] - false. अंतिम लॉगिन जानकारी की छपाई सक्षम करने के लिए true पर सेट करें['ssh-hardening']['ssh']['server']['banner'] - nil. बैनर सक्षम करने के लिए '/etc/issue.net' जैसा पथ सेट करें['ssh-hardening']['ssh']['server']['os_banner'] - false प्रोटोकॉल हैंडशेक के दौरान संस्करण जानकारी अक्षम करने के लिए (केवल debian परिवार)। इसे सक्षम करने के लिए true पर सेट करें['ssh-hardening']['ssh']['server']['use_dns'] - nil openssh डिफ़ॉल्ट का उपयोग करने के लिए। दूरस्थ होस्ट की DNS लुकअप और जाँच को सक्षम/अक्षम करने के लिए true या false पर सेट करें['ssh-hardening']['ssh']['server']['use_privilege_separation'] - nil सर्वर संस्करण के आधार पर सर्वोत्तम मान की गणना करने के लिए, अन्यथा true या false सेट करें['ssh-hardening']['ssh']['server']['login_grace_time'] - 30s. वह समय जिसमें लॉगिन सफलतापूर्वक होना चाहिए, अन्यथा उपयोगकर्ता डिस्कनेक्ट हो जाता है।['ssh-hardening']['ssh']['server']['max_auth_tries'] - 2. प्रति कनेक्शन प्रमाणीकरण प्रयासों की संख्या['ssh-hardening']['ssh']['server']['max_sessions'] - 10 प्रति कनेक्शन सत्रों की संख्या['ssh-hardening']['ssh']['server']['password_authentication'] - false. यदि पासवर्ड प्रमाणीकरण सक्षम किया जाना चाहिए तो true पर सेट करें['ssh-hardening']['ssh']['server']['log_level'] - verbose. sshd का लॉग स्तर। संभावित मानों के लिए man 5 sshd_config में LogLevel देखें।['ssh-hardening']['ssh']['server']['sftp']['enable'] - false. OpenSSH डेमन की SFTP सुविधा सक्षम करने के लिए true पर सेट करें['ssh-hardening']['ssh']['server']['sftp']['group'] - sftponly. समर्पित उपयोगकर्ताओं के लिए केवल SFTP की अनुमति देने के लिए SFTP का Match Group विकल्प सेट करता है['ssh-hardening']['ssh']['server']['sftp']['chroot'] - /home/%u. वह निर्देशिका सेट करता है जहाँ SFTP उपयोगकर्ता को chroot किया जाना चाहिए['ssh-hardening']['ssh']['server']['sftp']['authorized_keys_path'] - nil. यदि nil नहीं है, तो एक या अधिक space-सेपरेटेड authorized keys फ़ाइल का पूर्ण पथ जो केवल-SFTP पहुँच के लिए Match Group के अंदर सेट किया जाएगा['ssh-hardening']['ssh']['server']['sftp']['password_authentication'] - false. यदि पासवर्ड प्रमाणीकरण सक्षम किया जाना चाहिए तो true पर सेट करें['ssh-hardening']['ssh']['server']['authorized_keys_path'] - nil. यदि nil नहीं है, तो एक या अधिक space-सेपरेटेड authorized keys फ़ाइल का पूर्ण पथ अपेक्षित है।['ssh-hardening']['ssh']['server']['extras'] - {}. अतिरिक्त कॉन्फ़िगरेशन विकल्प जोड़ें, विवरण के लिए नीचे देखें['ssh-hardening']['ssh']['server']['match_blocks'] - {}. Match कॉन्फ़िगरेशन ब्लॉक, विवरण के लिए नीचे देखेंrun_list में recipes जोड़ें:
"recipe[ssh-hardening]"
यह ssh-server और ssh-client स्थापित करेगा। आप वैकल्पिक रूप से केवल एक को चुन सकते हैं:
"recipe[ssh-hardening::server]"
"recipe[ssh-hardening::client]"
विशेषताएँ कॉन्फ़िगर करें:
"ssh-hardening": {
"ssh" : {
"server" : {
"listen_to" : "10.2.3.4"
}
}
}
listen_to का डिफ़ॉल्ट मान 0.0.0.0 है। मान बदलने की अत्यधिक अनुशंसा की जाती है।
SFTP कॉन्फ़िगरेशन सक्षम करने के लिए run_list में निम्नलिखित recipes में से एक जोड़ें:
"recipe[ssh-hardening]"
या
"recipe[ssh-hardening::server]"
विशेषताएँ कॉन्फ़िगर करें:
"ssh-hardening": {
"ssh" : {
"server": {
"sftp" : {
"enable" : true,
"chroot" : "/home/sftp/%u",
"group" : "sftusers"
}
}
}
}
यह SFTP सर्वर सक्षम करेगा और sftpusers समूह के प्रत्येक उपयोगकर्ता को /home/sftp/%u निर्देशिका में chroot करेगा।
अतिरिक्त कॉन्फ़िगरेशन विकल्प client या server कॉन्फ़िगरेशन फ़ाइलों में जोड़े जा सकते हैं। इसका उपयोग स्थिर रूप से सेट किए गए मानों को ओवरराइड करने या विशेषताओं के माध्यम से अन्यथा उपलब्ध नहीं होने वाले कॉन्फ़िगरेशन विकल्प जोड़ने के लिए किया जा सकता है।
सिंटैक्स इस प्रकार है:
# => अतिरिक्त सर्वर कॉन्फ़िगरेशन
default['ssh-hardening']['ssh']['server']['extras'].tap do |extra|
extra['#Some Comment'] = 'Heres the Comment'
extra['AuthenticationMethods'] = 'publickey,keyboard-interactive'
end
# => अतिरिक्त क्लाइंट कॉन्फ़िगरेशन
default['ssh-hardening']['ssh']['client']['extras'].tap do |extra|
extra['PermitLocalCommand'] = 'no'
extra['Tunnel'] = 'no'
end
Match ब्लॉकों को sshd_config के अंत में रखा जाना चाहिए। यह match_blocks विशेषता ट्री का उपयोग करके प्राप्त किया जा सकता है:
default['ssh-hardening']['ssh']['server']['match_blocks'].tap do |match|
match['User root'] = <<~ROOT
AuthorizedKeysFile .ssh/authorized_keys
ROOT
match['User git'] = <<~GIT
Banner none
AuthorizedKeysCommand /bin/false
AuthorizedKeysFile .ssh/authorized_keys
GSSAPIAuthentication no
PasswordAuthentication no
GIT
end
कृपया chef-dk, VirtualBox या VMware Workstation और Vagrant स्थापित करें।
Linting की जाँच rubocop और foodcritic से की जाती है:
$ chef exec rake lint
.....
यूनिट/spec परीक्षण chefspec से किए जाते हैं:
$ chef exec rake spec
.....
एकीकरण परीक्षण test-kitchen और inspec से किए जाते हैं:
$ chef exec rake kitchen
.....
# या आप सीधे kitchen का उपयोग कर सकते हैं
$ kitchen test
मैं अपने खाते में लॉगिन नहीं कर सकता। मैंने क्लाइंट कुंजी पंजीकृत की है, लेकिन यह अभी भी मुझे अंदर नहीं जाने देती।
यदि आपने सभी सामान्य समस्याओं (फ़ायरवॉल, नेटवर्क, कुंजी गायब, गलत कुंजी, खाता अक्षम आदि) को समाप्त कर दिया है, तो यह हो सकता है कि आपका खाता लॉक हो। पता लगाने का सबसे तेज़ तरीका अपने उपयोगकर्ता के लिए पासवर्ड हैश देखना है:
sudo grep myuser /etc/shadow
यदि हैश में ! शामिल है, तो आपका खाता लॉक है:
myuser:!:16280:7:60:7:::
इसे हल करने का उचित तरीका खाता अनलॉक करना है (passwd -u myuser)। यदि उपयोगकर्ता के पास पासवर्ड नहीं है, तो आप इसे इसके माध्यम से अनलॉक कर सकते हैं:
usermod -p "*" myuser
वैकल्पिक रूप से, यदि आप PAM का उपयोग करने का इरादा रखते हैं, तो आपने इसे ['ssh-hardening']['ssh']['use_pam'] = true के माध्यम से सक्षम किया है। PAM लॉक किए गए उपयोगकर्ताओं को कुंजियों के साथ अंदर आने की अनुमति देगा।
मेरा एप्लिकेशन अब SSH के माध्यम से कनेक्ट क्यों नहीं होता?
हमेशा पहले लॉग फ़ाइलों में देखें और यदि संभव हो तो कनेक्ट करते समय क्लाइंट और सर्वर के बीच होने वाली बातचीत को देखें।
हमने (python और ruby पर आधारित) एप्लिकेशनों में कुछ समस्याएँ देखी हैं जो पुराने क्रिप्टो सेट के उपयोग के कारण होती हैं। यह इस हार्डनिंग मॉड्यूल से टकराता है, जिसने ciphers, message authentication codes (MACs) और key exchange (KEX) एल्गोरिदम की सूची को अधिक सुरक्षित चयन तक कम कर दिया है।
यदि आप पाते हैं कि यह पर्याप्त नहीं है, तो बेझिझक ciphers के लिए cbc_requires, MACs के लिए weak_hmac और KEX के लिए weak_kex विशेषताओं को नामस्थानों ['ssh-hardening']['ssh']['client'] या ['ssh-hardening']['ssh']['server'] में सक्रिय करें, इस आधार पर कि आप उन्हें कहाँ समर्थन देना चाहते हैं।
मैंने अपने SFTP समूह में एक उपयोगकर्ता जोड़ने के बाद SFTP सर्वर में लॉगिन क्यों नहीं कर सकता?
यह ChrootDirectory स्वामित्व समस्या है। sshd उन खातों के लिए SFTP कनेक्शन अस्वीकार कर देगा जो किसी ऐसी निर्देशिका में chroot करने के लिए सेट हैं जिसका स्वामित्व/अनुमतियाँ sshd असुरक्षित मानता है। sshd की सख्त स्वामित्व/अनुमति आवश्यकताएँ निर्धारित करती हैं कि chroot पथ में प्रत्येक निर्देशिका root के स्वामित्व में होनी चाहिए और केवल स्वामी द्वारा लिखने योग्य होनी चाहिए। इसलिए, उदाहरण के लिए, यदि chroot वातावरण /home है तो वह root के स्वामित्व में होना चाहिए।
यह कुकबुक अधिकतर निम्नलिखित गाइडों पर आधारित है:
आप सभी का धन्यवाद!!
योगदानकर्ता दिशानिर्देश देखें।
Apache License, Version 2.0 (the "License") के तहत लाइसेंस प्राप्त; आप इस फ़ाइल का उपयोग केवल लाइसेंस के अनुपालन में कर सकते हैं। आप लाइसेंस की एक प्रति निम्नलिखित पते पर प्राप्त कर सकते हैं
http://www.apache.org/licenses/LICENSE-2.0
जब तक लागू कानून द्वारा आवश्यक न हो या लिखित रूप में सहमत न हो, लाइसेंस के तहत वितरित सॉफ़्टवेयर "AS IS" आधार पर वितरित किया जाता है, बिना किसी प्रकार की वारंटी या शर्तों के, चाहे वह व्यक्त या निहित हो। लाइसेंस के तहत विशिष्ट अनुमतियों और सीमाओं के लिए लाइसेंस देखें।