
यह पपेट मॉड्यूल कई सुरक्षा-संबंधित कॉन्फ़िगरेशन प्रदान करता है, जो सर्वांगीण बुनियादी सुरक्षा सुनिश्चित करता है।
यह Puppet मॉड्यूल आपके आधार OS का हार्डनिंग के साथ सुरक्षित कॉन्फ़िगरेशन प्रदान करता है और DevSec Hardening Framework का हिस्सा है।
इस मॉड्यूल को जोड़ने के बाद, आप क्लास का उपयोग कर सकते हैं:
class { 'os_hardening': }
सभी पैरामीटर मुख्य os_hardening क्लास के भीतर समाहित हैं, इसलिए आपको उन्हें इस तरह पास करना होगा:
class { 'os_hardening':
enable_ipv4_forwarding => true,
}
यदि आप इस मॉड्यूल का उपयोग PE वातावरण में कर रहे हैं, तो आपको pe_environment = true सेट करना होगा
अन्यथा puppet एक त्रुटि (डुप्लिकेट संसाधन) देगा!
system_environment = 'default'
उस संदर्भ को परिभाषित करें जिसमें सिस्टम चलता है। कुछ विकल्प docker/lxc के लिए काम नहीं करते हैंpe_environment = false
इसे true पर सेट करें यदि आप Puppet Enterprise का उपयोग कर रहे हैं महत्वपूर्ण - ऊपर देखेंextra_user_paths = []
उपयोगकर्ता के PATH चर में अतिरिक्त पथ जोड़ें (डिफ़ॉल्ट खाली है)।umask = undef
useradd / newusers द्वारा नई होम निर्देशिकाओं के निर्माण के लिए उपयोग किया जाने वाला umask (जैसे '027')maildir = undef
maildir के लिए पथ (जैसे '/var/mail')usergroups = true
true यदि आप प्रत्येक उपयोगकर्ता के लिए अलग समूह चाहते हैं, अन्यथा falsesys_uid_min = undef और sys_gid_min = undef
login.defs के लिए डिफ़ॉल्ट सेटिंग को ओवरराइड करेंpassword_max_age = 60
अधिकतम पासवर्ड आयुpassword_min_age = 7
न्यूनतम पासवर्ड आयु (किसी अन्य पासवर्ड परिवर्तन की अनुमति देने से पहले)password_warn_age = 7
पासवर्ड परिवर्तन होने से पहले चेतावनी के दिनlogin_retries = 5
लॉगिन पुनर्प्रयासों की अधिकतम संख्या यदि पासवर्ड गलत है (सामान्यतः PAM / auth_retries द्वारा ओवरराइड किया जाता है)login_timeout = 60
सेकंड में प्रमाणीकरण टाइमआउट, इसलिए यदि यह समय बीत जाता है तो लॉगिन बाहर निकल जाएगाchfn_restrict = ''
कौन से फ़ील्ड नियमित उपयोगकर्ताओं द्वारा chfn का उपयोग करके बदले जा सकते हैंallow_login_without_home = false
true यदि बिना होम वाले उपयोगकर्ताओं को लॉगिन करने की अनुमति देनी हैallow_change_user = false
यदि कोई उपयोगकर्ता अपना लॉगिन बदलने के लिए su का उपयोग कर सकता हैignore_users = []
सिस्टम उपयोगकर्ता खातों की सरणी जिन्हें हार्डन नहीं किया जाना चाहिए (पासवर्ड अक्षम और शेल /usr/sbin/nologin पर सेट)folders_to_restrict = ['/usr/local/games','/usr/local/sbin','/usr/local/bin','/usr/bin','/usr/sbin','/sbin','/bin']
फ़ोल्डर यह सुनिश्चित करने के लिए कि समूह और विश्व के पास इसके या किसी भी सामग्री पर लेखन पहुंच नहीं हैignore_max_files_warnings = false
true यदि आप नहीं चाहते कि puppet > 1000 फ़ाइलों वाले फ़ोल्डरों की पुनरावृत्ति पर max_files और प्रदर्शन चेतावनियाँ लॉग करे जैसे /bin /usr/binrecurselimit = 5
पुनरावर्ती अनुमति जाँच के लिए निर्देशिका गहराईpasswdqc_enabled = true
true यदि आप passwdqc का उपयोग करके PAM में मजबूत पासवर्ड जाँच का उपयोग करना चाहते हैंauth_retries = 5
प्रमाणीकरण प्रयासों की अधिकतम संख्या, इससे पहले कि खाता कुछ समय के लिए लॉक हो जाएauth_lockout_time = 600
सेकंड में वह समय जो बीतना चाहिए, यदि खाता बहुत अधिक असफल प्रमाणीकरण प्रयासों के कारण लॉक हो गया थाpasswdqc_options = 'min=disabled,disabled,16,12,8'
किसी भी विकल्प पंक्ति (स्ट्रिंग के रूप में) पर सेट करें जिसे आप passwdqc को पास करना चाहते हैंmanage_pam_unix = false
true यदि आप चाहते हैं कि pam_unix इस मॉड्यूल द्वारा प्रबंधित होenable_pw_history = true
true यदि आप चाहते हैं कि pam_unix पासवर्ड पुन: उपयोग को रोकने के लिए पासवर्ड इतिहास याद रखे (manage_pam_unix = true की आवश्यकता है)pw_remember_last = 5
अंतिम पासवर्ड की संख्या (जैसे 5 उपयोगकर्ता को उसके अंतिम 5 पासवर्डों में से किसी का पुन: उपयोग करने से रोकेगा)only_root_may_su = false
true जब केवल root और wheel समूह के सदस्य su का उपयोग कर सकते हैं, CIS बेंचमार्क अनुपालन के लिए true होना आवश्यक हैroot_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6']
root के लिए पंजीकृत TTYswhitelist = []
वे सभी फ़ाइलें जिन्हें सेट होने पर अपने SUID/SGID बिट्स बनाए रखने चाहिए (पूर्व-परिभाषित whitelist फ़ाइलों के साथ जोड़ा जाएगा)blacklist = []
वे सभी फ़ाइलें जिन्हें सेट होने पर अपने SUID/SGID बिट्स हटा दिए जाने चाहिए (पूर्व-परिभाषित blacklist फ़ाइलों के साथ जोड़ा जाएगा)remove_from_unknown = false
true यदि आप किसी भी फ़ाइल से SUID/SGID बिट्स हटाना चाहते हैं, जो blacklist में स्पष्ट रूप से कॉन्फ़िगर नहीं है। यह हर Puppet रन को माउंटेड फाइलसिस्टम में SUID/SGID बिट्स की खोज करने के लिए प्रेरित करेगा जो डिफ़ॉल्ट और उपयोगकर्ता blacklist में कॉन्फ़िगर नहीं हैं। यदि यह SUID/SGID बिट पाता है, तो इसे हटा दिया जाएगा, जब तक कि यह फ़ाइल आपकी whitelist में न हो।dry_run_on_unknown = false
ऊपर remove_from_unknown की तरह, केवल अंतर यह है कि SUID/SGID बिट्स हटाए नहीं जाते हैं। यह अभी भी SUID/SGID बिट्स की खोज के लिए फाइलसिस्टम को खोजेगा लेकिन उन्हें केवल आपके लॉग में प्रिंट करेगा। यह विकल्प केवल तभी अनुशंसित है, जब आप पहली बार SUID/SGID बिट्स के लिए remove_from_unknown कॉन्फ़िगर करते हैं, ताकि आप बदली जा रही फ़ाइलों को देख सकें और अपनी whitelist और blacklist में समायोजन कर सकें।enable_module_loading = true
true यदि आप सिस्टम चलने पर कर्नेल मॉड्यूल बदलने की अनुमति देना चाहते हैं (जैसे modprobe, rmmod)load_modules = []
initramfs के माध्यम से इन मॉड्यूल को लोड करें यदि enable_module_loading false हैdisable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf']
फाइलसिस्टम (कर्नेल मॉड्यूल) की सरणी जिन्हें अक्षम किया जाना चाहिएcpu_vendor = 'intel'
केवल आवश्यक यदि enable_module_loading = false: लोड करने के लिए मॉड्यूल के लिए CPU विक्रेता सेट करेंicmp_ratelimit = '100'
डिफ़ॉल्ट मान '100', ओवरराइटिंग की अनुमति देता है, String की आवश्यकता हैdesktop_enabled = false
true यदि यह एक डेस्कटॉप सिस्टम है, जैसे Xorg, KDE/GNOME/Unity आदिenable_ipv4_forwarding = false
true यदि इस सिस्टम को IPv4 में पैकेट फॉरवर्डिंग की आवश्यकता है (जैसे राउटर), अन्यथा falsemanage_ipv6 = true
ipv6 सेटअप को हार्डन करने के लिए true, ipv6 को पूरी तरह से अनदेखा करने के लिए falseenable_ipv6 = false
इस सिस्टम पर ipv6 अक्षम करने के लिए false, सक्षम करने के लिए trueenable_ipv6_forwarding = false
true यदि इस सिस्टम को IPv6 में पैकेट फॉरवर्डिंग की आवश्यकता है (जैसे राउटर), अन्यथा falsearp_restricted = true
true यदि आप चाहते हैं कि ARP की घोषणा और उत्तर देने का व्यवहार प्रतिबंधित हो, अन्यथा falsearp_ignore_samenet = false
true उन पैकेटों को छोड़ देगा जो एक ही सबनेट से नहीं हैं (arp_ignore = 2), false केवल लक्ष्य ip की जाँच करेगा (arp_ignore = 1)enable_sysrq = false
मैजिक sysrq कुंजी सक्षम करने के लिए true, अन्यथा falseenable_core_dump = false
कोर डंप के निर्माण को रोकने के लिए false, अन्यथा trueenable_stack_protection = true
एड्रेस स्पेस लेआउट रैंडमाइजेशन के लिए। ASLR कुछ प्रकार के बफर ओवरफ्लो हमलों को हराने में मदद कर सकता है। ASLR बेस, लाइब्रेरीज़, हीप और स्टैक को प्रक्रिया के एड्रेस स्पेस में यादृच्छिक स्थितियों पर रख सकता है, जिससे हमलावर प्रोग्राम के लिए अगले निर्देश के मेमोरी एड्रेस की भविष्यवाणी करना कठिन हो जाता है।enable_rpfilter = true
रिवर्स पाथ फ़िल्टरिंग सक्षम करने के लिए true (नकली पैकेटों को त्यागें), अन्यथा falserpfilter_loose = false
(केवल यदि enable_rpfilter true है) लूज़ मोड (rp_filter = 2) यदि true, अन्यथा स्ट्रिक्ट मोडenable_log_martians = true
संदिग्ध / अनरूटेबल नेटवर्क पैकेटों पर लॉगिंग सक्षम करने के लिए true, अन्यथा false चेतावनी - यह बहुत बड़ी लॉग फ़ाइलें उत्पन्न कर सकता है!unwanted_packages = []
वे पैकेज जिन्हें सिस्टम से हटाया जाना चाहिएwanted_packages = []
वे पैकेज जिन्हें सिस्टम में जोड़ा जाना चाहिएdisabled_services = []
वे सेवाएँ जिन्हें सक्षम नहीं किया जाना चाहिएenable_grub_hardening = false
कुछ grub हार्डनिंग नियम सक्षम करने के लिए true पर सेट करेंgrub_user = 'root'
grub उपयोगकर्ता नाम जो grub प्रॉम्प्ट पर कॉन्फ़िगरेशन बदलते समय प्रदान किया जाना चाहिएgrub_password_hash = ''
grub-mkpasswd-pbkdf2 के साथ बनाया गया एक पासवर्ड हैश जो grub_user से संबद्ध हैboot_without_password = true
Grub को इस तरह सेट करें कि उसे केवल किसी प्रविष्टि को बदलते समय पासवर्ड की आवश्यकता हो, मौजूदा प्रविष्टि को बूट करते समय नहींsystem_umask = undef
यदि यह चर सेट है तो सिस्टम में सभी उपयोगकर्ताओं के लिए umask सेट करें (जैसे '027')manage_home_permissions = false
स्थानीय उपयोगकर्ता फ़ाइल और निर्देशिका अनुमतियों को प्रबंधित करने के लिए true पर सेट करें (g-w,o-rwx)ignore_home_users = []
उन उपयोगकर्ताओं की सरणी जिन्हें manage_home_permissions द्वारा प्रतिबंधित नहीं किया जाना हैmanage_log_permissions = false
लॉग फ़ाइल अनुमतियों को प्रबंधित करने के लिए true पर सेट करें (g-wx,o-rwx)restrict_log_dir = ['/var/log/']
मुख्य लॉग निर्देशिका सेट करेंignore_restrict_log_dir = []
मुख्य लॉग निर्देशिका के अंतर्गत लॉग निर्देशिकाओं को बाहर करने के लिए सरणीignore_files_in_folder_to_restrict = []
folder_to_restrict सरणी के अंतर्गत निर्देशिकाओं में हार्डन की जाने वाली फ़ाइलों को अनदेखा करने के लिए सरणीmanage_cron_permissions = false
cron फ़ाइल अनुमतियों को प्रबंधित करने के लिए true पर सेट करें (og-rwx)enable_sysctl_config = true
sysctl कॉन्फ़िगरेशन अक्षम करने के लिए false पर सेट करेंmanage_system_users = true
सिस्टम उपयोगकर्ताओं के प्रबंधन को अक्षम करने के लिए false पर सेट करें (खाली पासवर्ड और nologin शेल सेट करना)shadow_group = undef
/etc/shadow के समूह स्वामित्व को ओवरराइड करेंshadow_mode = undef
/etc/shadow की फ़ाइल अनुमतियों को ओवरराइड करेंHiera में पैरामीटर सेट करना भी संभव है जैसे:
os_hardening::password_max_age: 90
os_hardening::password_min_age: 0
os_hardening::password_warn_age: 14
os_hardening::unwanted_packages: ['telnet']
os_hardening::ignore_users: ['git','githook','ansible','apache','puppetboard']
चूंकि CIS Distribution Independent Linux Benchmark सिस्टम के हार्डनिंग के संबंध में एक अच्छा प्रारंभिक बिंदु है, इसलिए एक-बार के मामलों से निपटने के लिए एक आसान तरीका लागू करना उचित समझा गया जिनके लिए कोई पूरा मॉड्यूल नहीं लिखना चाहता।
उदाहरण के लिए, Debian सिस्टम पर CIS DIL अनुपालन बढ़ाने के लिए, निम्नलिखित सेट करना चाहिए:
wanted_packages => ['ntp'],
unwanted_packages => ['telnet'],
disabled_services => ['rsync'],
NTP की डिफ़ॉल्ट सेटिंग्स अधिकांश स्थितियों के लिए वास्तव में काफी अच्छी हैं, इसलिए तुरंत एक मॉड्यूल लागू करना आवश्यक नहीं है। हालाँकि, यदि आप इन सेवाओं को नियंत्रित करने के लिए एक मॉड्यूल का उपयोग करते हैं, तो निश्चित रूप से यह बेहतर है।
इस मॉड्यूल का परीक्षण किया गया है और इसे अधिकांश Linux वितरणों पर चलना चाहिए। समर्थित ऑपरेटिंग सिस्टम की व्यापक सूची के लिए, metadata.json देखें
यदि आप योगदान करना चाहते हैं, तो कृपया हमारी योगदान मार्गदर्शिका का पालन करें।
आपके सिस्टम पर Ruby इंटरप्रेटर स्थापित होना चाहिए। उस उद्देश्य के लिए rvm का उपयोग करना एक अच्छा विचार हो सकता है। इसके अलावा आपको Puppet Development Kit PDK और Docker Community Edition स्थापित करना होगा, क्योंकि एकीकरण परीक्षण Docker कंटेनरों में चलते हैं।
हमारे सभी एकीकरण परीक्षणों के लिए हम test-kitchen का उपयोग करते हैं। यदि आप test-kitchen से परिचित नहीं हैं तो कृपया उनकी मार्गदर्शिका देखें।
# सिंटैक्स और Lint परीक्षण
pdk validate
# यूनिट परीक्षण
pdk test unit
डिफ़ॉल्ट रूप से एकीकरण परीक्षण docker कंटेनरों में चलेंगे - दुर्भाग्य से सभी परीक्षण कंटेनर वातावरण में नहीं चल सकते (जैसे sysctl सेटिंग्स)।
# निर्भरताएँ स्थापित करें
gem install bundler
bundle install
# सभी परीक्षण उदाहरणों की सूची बनाएं
bundle exec kitchen list
# एक मशीन पर तेज़ परीक्षण
bundle exec kitchen test ubuntu-16-04-puppet5
# सभी मशीनों पर परीक्षण
bundle exec kitchen test
DigitalOcean के साथ पूर्ण एकीकरण परीक्षणों के लिए आपको वहाँ एक खाता प्राप्त करना होगा और कुछ पर्यावरण चर सेट करने होंगे:
KITCHEN_LOCAL_YAML=kitchen.do.ymlDIGITALOCEAN_ACCESS_TOKEN - DigitalOcean के लिए एक्सेस टोकनDIGITALOCEAN_SSH_KEY_IDS - आपकी ssh कुंजी का DigitalOcean में ID, अधिक जानकारी के लिए यह देखेंssh कुंजी का नाम ~/.ssh/do_ci होना चाहिए और DigitalOcean पर आपकी प्रोफ़ाइल में जोड़ा जाना चाहिए।
इसके बाद आप एकीकरण परीक्षण (Docker) में वर्णित अनुसार परीक्षण चलाने के लिए तैयार हैं।
यदि आप अपने fork में Github Actions के साथ पूर्ण एकीकरण परीक्षण चलाना चाहते हैं, तो आपको अपने fork की सेटिंग्स में ये पर्यावरण चर जोड़ने होंगे:
KITCHEN_LOCAL_YAML=kitchen.do.ymlDIGITALOCEAN_ACCESS_TOKEN - DigitalOcean के लिए एक्सेस टोकनCI_SSH_KEY - एक ssh कुंजी का निजी भाग, आपके उदाहरणों के लिए DigitalOcean पर उपलब्ध, base64 एन्कोडेड रूप में (जैसे cat id_rsa | base64 -w0 ; echo)DIGITALOCEAN_SSH_KEY_IDS - CI_SSH_KEY का DigitalOcean में ID, अधिक जानकारी के लिए यह देखेंआपके पैच स्वचालित रूप से Github Actions के माध्यम से परीक्षण किए जाएंगे। परीक्षण सारांश Github पर आपके PR में दिखाई देता है, विवरण लिंक किए गए परीक्षणों में पाया जा सकता है।
आप हमसे कई तरीकों से संपर्क कर सकते हैं:
chef-os-hardening के puppet में मूल पोर्ट के लिए:
आप सभी का धन्यवाद!!
Apache License, Version 2.0 (the "License") के तहत लाइसेंस प्राप्त; आप इस फ़ाइल का उपयोग केवल लाइसेंस के अनुपालन में कर सकते हैं। आप लाइसेंस की एक प्रति निम्नलिखित पते पर प्राप्त कर सकते हैं
http://www.apache.org/licenses/LICENSE-2.0
जब तक लागू कानून द्वारा आवश्यक न हो या लिखित रूप में सहमत न हो, लाइसेंस के तहत वितरित सॉफ़्टवेयर "जैसा है" (AS IS) आधार पर वितरित किया जाता है, बिना किसी प्रकार की वारंटी या शर्तों के, चाहे व्यक्त या निहित। लाइसेंस के तहत विशिष्ट अनुमतियों और सीमाओं के लिए लाइसेंस देखें।