Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
puppet-os-hardening — यह पपेट मॉड्यूल कई सुरक्षा-संबंधित कॉन्फ़िगरेशन प्रदान करता है, जो सर्वांगीण बुनियादी सुरक्षा सुनिश्चित करता है। | Kitploit
उपकरण/GitHubGitHub/dev-sec/puppet-os-hardening
क्लाउड इन्फ्रास्ट्रक्चर सुरक्षाभेद्यता स्कैनरकॉन्फ़िगरेशन ऑडिटिंगनेटवर्क सुरक्षाDevSecOpsप्रमाणीकरण
GitHubdev-sec/puppet-os-hardening

puppet-os-hardening

यह पपेट मॉड्यूल कई सुरक्षा-संबंधित कॉन्फ़िगरेशन प्रदान करता है, जो सर्वांगीण बुनियादी सुरक्षा सुनिश्चित करता है।

रिपॉजिटरी देखें
291100141 महीना पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
वेबसाइट
साझा करें

Puppet OS हार्डनिंग

Puppet Forge Version Puppet Forge Downloads Puppet Forge Endorsement Build Status

विषय-सूची

  1. मॉड्यूल विवरण - मॉड्यूल क्या करता है और यह क्यों उपयोगी है
  2. सेटअप - os_hardening के साथ शुरुआत करने की मूल बातें
    • सेटअप आवश्यकताएँ
    • os_hardening के साथ शुरुआत
  3. उपयोग - कॉन्फ़िगरेशन विकल्प और अतिरिक्त कार्यक्षमता
    • Puppet Enterprise के लिए महत्वपूर्ण
    • पैरामीटर
    • Hiera उपयोग
    • वांछित/अवांछित पैकेज और अक्षम सेवाओं के बारे में नोट
  • सीमाएँ - OS संगतता, आदि।
  • विकास - मॉड्यूल में योगदान के लिए मार्गदर्शिका
  • परीक्षण - आपके कोड में परिवर्तनों के लिए गुणवत्ता जाँच
    • स्थानीय परीक्षण
    • PDK परीक्षण
    • एकीकरण परीक्षण (Docker)
    • एकीकरण परीक्षण (DigitalOcean)
    • PRs और forks का CI परीक्षण
  • संपर्क करें
  • योगदानकर्ता + श्रेय
  • लाइसेंस और लेखक
  • मॉड्यूल विवरण

    यह Puppet मॉड्यूल आपके आधार OS का हार्डनिंग के साथ सुरक्षित कॉन्फ़िगरेशन प्रदान करता है और DevSec Hardening Framework का हिस्सा है।

    सेटअप

    सेटअप आवश्यकताएँ

    • Puppet OpenSource या Enterprise
    • मॉड्यूल stdlib
    • मॉड्यूल sysctl

    os_hardening के साथ शुरुआत

    इस मॉड्यूल को जोड़ने के बाद, आप क्लास का उपयोग कर सकते हैं:

    root@kitploit:~
    class { 'os_hardening': }
    

    सभी पैरामीटर मुख्य os_hardening क्लास के भीतर समाहित हैं, इसलिए आपको उन्हें इस तरह पास करना होगा:

    root@kitploit:~
    class { 'os_hardening':
      enable_ipv4_forwarding => true,
    }
    

    उपयोग

    Puppet Enterprise के लिए महत्वपूर्ण

    यदि आप इस मॉड्यूल का उपयोग 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 यदि आप प्रत्येक उपयोगकर्ता के लिए अलग समूह चाहते हैं, अन्यथा false
    • sys_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/bin
    • recurselimit = 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 के लिए पंजीकृत TTYs
    • whitelist = [] वे सभी फ़ाइलें जिन्हें सेट होने पर अपने 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 में पैकेट फॉरवर्डिंग की आवश्यकता है (जैसे राउटर), अन्यथा false
    • manage_ipv6 = true ipv6 सेटअप को हार्डन करने के लिए true, ipv6 को पूरी तरह से अनदेखा करने के लिए false
    • enable_ipv6 = false इस सिस्टम पर ipv6 अक्षम करने के लिए false, सक्षम करने के लिए true
    • enable_ipv6_forwarding = false true यदि इस सिस्टम को IPv6 में पैकेट फॉरवर्डिंग की आवश्यकता है (जैसे राउटर), अन्यथा false
    • arp_restricted = true true यदि आप चाहते हैं कि ARP की घोषणा और उत्तर देने का व्यवहार प्रतिबंधित हो, अन्यथा false
    • arp_ignore_samenet = false true उन पैकेटों को छोड़ देगा जो एक ही सबनेट से नहीं हैं (arp_ignore = 2), false केवल लक्ष्य ip की जाँच करेगा (arp_ignore = 1)
    • enable_sysrq = false मैजिक sysrq कुंजी सक्षम करने के लिए true, अन्यथा false
    • enable_core_dump = false कोर डंप के निर्माण को रोकने के लिए false, अन्यथा true
    • enable_stack_protection = true एड्रेस स्पेस लेआउट रैंडमाइजेशन के लिए। ASLR कुछ प्रकार के बफर ओवरफ्लो हमलों को हराने में मदद कर सकता है। ASLR बेस, लाइब्रेरीज़, हीप और स्टैक को प्रक्रिया के एड्रेस स्पेस में यादृच्छिक स्थितियों पर रख सकता है, जिससे हमलावर प्रोग्राम के लिए अगले निर्देश के मेमोरी एड्रेस की भविष्यवाणी करना कठिन हो जाता है।
    • enable_rpfilter = true रिवर्स पाथ फ़िल्टरिंग सक्षम करने के लिए true (नकली पैकेटों को त्यागें), अन्यथा false
    • rpfilter_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 उपयोग

    Hiera में पैरामीटर सेट करना भी संभव है जैसे:

    root@kitploit:~
    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 अनुपालन बढ़ाने के लिए, निम्नलिखित सेट करना चाहिए:

    root@kitploit:~
    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 से परिचित नहीं हैं तो कृपया उनकी मार्गदर्शिका देखें।

    PDK परीक्षण

    root@kitploit:~
    # सिंटैक्स और Lint परीक्षण
    pdk validate
    
    # यूनिट परीक्षण
    pdk test unit
    

    एकीकरण परीक्षण (Docker)

    डिफ़ॉल्ट रूप से एकीकरण परीक्षण docker कंटेनरों में चलेंगे - दुर्भाग्य से सभी परीक्षण कंटेनर वातावरण में नहीं चल सकते (जैसे sysctl सेटिंग्स)।

    root@kitploit:~
    # निर्भरताएँ स्थापित करें
    gem install bundler
    bundle install
    
    # सभी परीक्षण उदाहरणों की सूची बनाएं
    bundle exec kitchen list
    
    # एक मशीन पर तेज़ परीक्षण
    bundle exec kitchen test ubuntu-16-04-puppet5
    
    # सभी मशीनों पर परीक्षण
    bundle exec kitchen test
    

    एकीकरण परीक्षण (DigitalOcean)

    DigitalOcean के साथ पूर्ण एकीकरण परीक्षणों के लिए आपको वहाँ एक खाता प्राप्त करना होगा और कुछ पर्यावरण चर सेट करने होंगे:

    • KITCHEN_LOCAL_YAML=kitchen.do.yml
    • DIGITALOCEAN_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.yml
    • DIGITALOCEAN_ACCESS_TOKEN - DigitalOcean के लिए एक्सेस टोकन
    • CI_SSH_KEY - एक ssh कुंजी का निजी भाग, आपके उदाहरणों के लिए DigitalOcean पर उपलब्ध, base64 एन्कोडेड रूप में (जैसे cat id_rsa | base64 -w0 ; echo)
    • DIGITALOCEAN_SSH_KEY_IDS - CI_SSH_KEY का DigitalOcean में ID, अधिक जानकारी के लिए यह देखें

    PRs और forks का CI परीक्षण

    आपके पैच स्वचालित रूप से Github Actions के माध्यम से परीक्षण किए जाएंगे। परीक्षण सारांश Github पर आपके PR में दिखाई देता है, विवरण लिंक किए गए परीक्षणों में पाया जा सकता है।

    संपर्क करें

    आप हमसे कई तरीकों से संपर्क कर सकते हैं:

    • Twitter पर @DevSecIO
    • प्रश्नों और सामान्य चर्चा के लिए मेलिंग सूची: [email protected] [सदस्यता लें]
    • रिलीज़ घोषणाओं के साथ मेलिंग सूची (यहाँ कोई पोस्ट संभव नहीं है): [email protected] [सदस्यता लें]

    योगदानकर्ता + श्रेय

    • Dominik Richter arlimus
    • Edmund Haselwanter ehaselwanter
    • Christoph Hartmann chris-rock
    • Thomas Dütsch a-tom
    • Patrick Meier atomic111
    • Artem Sidorenko artem-sidorenko
    • Kurt Huwig kurthuwig
    • Matthew Haughton 3flex
    • Reik Keutterling spielkind
    • Daniel Dreier danieldreier
    • Timo Goebel timogoebel
    • Tristan Helmich fadenb
    • Michael Geiger mcgege
    • Timo Bergemann LooOOooM

    chef-os-hardening के puppet में मूल पोर्ट के लिए:

    • Artem Sidorenko artem-sidorenko
    • Frank Kloeker eumel8

    आप सभी का धन्यवाद!!

    लाइसेंस और लेखक

    • लेखक:: Dominik Richter [email protected]
    • लेखक:: Deutsche Telekom AG

    Apache License, Version 2.0 (the "License") के तहत लाइसेंस प्राप्त; आप इस फ़ाइल का उपयोग केवल लाइसेंस के अनुपालन में कर सकते हैं। आप लाइसेंस की एक प्रति निम्नलिखित पते पर प्राप्त कर सकते हैं

    root@kitploit:~
      http://www.apache.org/licenses/LICENSE-2.0
    

    जब तक लागू कानून द्वारा आवश्यक न हो या लिखित रूप में सहमत न हो, लाइसेंस के तहत वितरित सॉफ़्टवेयर "जैसा है" (AS IS) आधार पर वितरित किया जाता है, बिना किसी प्रकार की वारंटी या शर्तों के, चाहे व्यक्त या निहित। लाइसेंस के तहत विशिष्ट अनुमतियों और सीमाओं के लिए लाइसेंस देखें।

    टूल डाउनलोड करें