
وحدة Puppet هذه توفر العديد من الإعدادات المتعلقة بالأمان، مما يمنح حماية أساسية شاملة.
توفر وحدة Puppet هذه تكوينًا آمنًا لنظام التشغيل الأساسي لديك مع التحصين وهي جزء من DevSec Hardening Framework.
بعد إضافة هذه الوحدة، يمكنك استخدام الفئة:
class { 'os_hardening': }
جميع المعلمات موجودة داخل الفئة الرئيسية os_hardening، لذا عليك فقط تمريرها بهذه الطريقة:
class { 'os_hardening':
enable_ipv4_forwarding => true,
}
إذا كنت تستخدم هذه الوحدة في بيئة PE، يجب عليك تعيين pe_environment = true
وإلا سيقوم puppet بإصدار خطأ (مورد مكرر)!
system_environment = 'default'
تحديد السياق الذي يعمل فيه النظام. بعض الخيارات لا تعمل مع docker/lxcpe_environment = false
اضبط هذا على true إذا كنت تستخدم Puppet Enterprise مهم - انظر أعلاهextra_user_paths = []
إضافة مسارات إضافية إلى متغير PATH للمستخدم (الافتراضي فارغ).umask = undef
umask المستخدم لإنشاء أدلة منزلية جديدة بواسطة useradd / newusers (مثل '027')maildir = undef
مسار maildir (مثل '/var/mail')usergroups = true
true إذا كنت تريد مجموعات منفصلة لكل مستخدم، false خلاف ذلكsys_uid_min = undef و sys_gid_min = undef
تجاوز الإعداد الافتراضي لـ login.defspassword_max_age = 60
الحد الأقصى لعمر كلمة المرورpassword_min_age = 7
الحد الأدنى لعمر كلمة المرور (قبل السماح بأي تغيير آخر لكلمة المرور)password_warn_age = 7
أيام التحذير قبل استحقاق تغيير كلمة المرورlogin_retries = 5
الحد الأقصى لعدد محاولات تسجيل الدخول إذا كانت كلمة المرور خاطئة (عادةً ما يتم تجاوزها بواسطة PAM / auth_retries)login_timeout = 60
مهلة المصادقة بالثواني، لذا سينتهي تسجيل الدخول إذا مر هذا الوقتchfn_restrict = ''
الحقول التي يمكن تغييرها بواسطة المستخدمين العاديين باستخدام chfnallow_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 بتسجيل تحذيرات max_files والأداء عند التكرار على المجلدات التي تحتوي على أكثر من 1000 ملف مثل /bin /usr/binrecurselimit = 5
عمق الدليل لفحص الأذونات التكراريpasswdqc_enabled = true
true إذا كنت تريد استخدام فحص كلمات المرور القوية في PAM باستخدام passwdqcauth_retries = 5
الحد الأقصى لعدد محاولات المصادقة، قبل قفل الحساب لبعض الوقتauth_lockout_time = 600
الوقت بالثواني الذي يجب أن يمر، إذا تم قفل الحساب بسبب كثرة محاولات المصادقة الفاشلةpasswdqc_options = 'min=disabled,disabled,16,12,8'
اضبط على أي سطر خيارات (كسلسلة نصية) تريد تمريره إلى passwdqcmanage_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، مطلوب أن يكون true للامتثال لمعيار CIS Benchmarkroot_ttys = ['console','tty1','tty2','tty3','tty4','tty5','tty6']
أجهزة TTY المسجلة لـ rootwhitelist = []
جميع الملفات التي يجب الاحتفاظ ببتات SUID/SGID الخاصة بها إذا تم تعيينها (سيتم دمجها مع قائمة بيضاء محددة مسبقًا من الملفات)blacklist = []
جميع الملفات التي يجب إزالة بتات SUID/SGID الخاصة بها إذا تم تعيينها (سيتم دمجها مع قائمة سوداء محددة مسبقًا من الملفات)remove_from_unknown = false
true إذا كنت تريد إزالة بتات SUID/SGID من أي ملف غير مكوّن صراحةً في blacklist. سيجعل هذا كل تشغيل لـ Puppet يبحث في أنظمة الملفات المثبتة عن بتات SUID/SGID غير المكونة في القائمة السوداء الافتراضية وقائمة المستخدم السوداء. إذا وجد بت SUID/SGID، فسيتم إزالته، ما لم يكن هذا الملف في whitelist الخاص بك.dry_run_on_unknown = false
مثل remove_from_unknown أعلاه، فقط لا تتم إزالة بتات SUID/SGID. سيظل يبحث في أنظمة الملفات عن بتات SUID/SGID لكنه سيطبعها فقط في سجلك. هذا الخيار موصى به فقط، عندما تقوم أولاً بتكوين remove_from_unknown لبتات SUID/SGID، بحيث يمكنك رؤية الملفات التي يتم تغييرها وإجراء تعديلات على whitelist و blacklist الخاص بك.enable_module_loading = true
true إذا كنت تريد السماح بتغيير وحدات kernel بمجرد تشغيل النظام (مثل modprobe، rmmod)load_modules = []
تحميل هذه الوحدات عبر initramfs إذا كان enable_module_loading هو falsedisable_filesystems = ['cramfs','freevxfs','jffs2','hfs','hfsplus','squashfs','udf']
مصفوفة من أنظمة الملفات (وحدات kernel) التي يجب تعطيلهاcpu_vendor = 'intel'
مطلوب فقط إذا كان enable_module_loading = false: تعيين بائع CPU للوحدات المراد تحميلهاicmp_ratelimit = '100'
القيمة الافتراضية '100'، تسمح بالتجاوز، تتطلب Stringdesktop_enabled = false
true إذا كان هذا نظام سطح مكتب، أي Xorg، KDE/GNOME/Unity/إلخenable_ipv4_forwarding = false
true إذا كان هذا النظام يتطلب إعادة توجيه الحزم في IPv4 (مثل Router)، false خلاف ذلكmanage_ipv6 = true
true لتحصين إعداد ipv6، false لتجاهل ipv6 تمامًاenable_ipv6 = false
false لتعطيل ipv6 على هذا النظام، true لتمكينهenable_ipv6_forwarding = false
true إذا كان هذا النظام يتطلب إعادة توجيه الحزم في IPv6 (مثل Router)، false خلاف ذلكarp_restricted = true
true إذا كنت تريد تقييد سلوك الإعلان عن ARP والرد عليه، false خلاف ذلكarp_ignore_samenet = false
true سيتجاهل الحزم غير القادمة من نفس الشبكة الفرعية (arp_ignore = 2)، false سيتحقق فقط من عنوان IP الهدف (arp_ignore = 1)enable_sysrq = false
true لتمكين مفتاح sysrq السحري، false خلاف ذلكenable_core_dump = false
false لمنع إنشاء ملفات التفريغ الأساسية (core dumps)، true خلاف ذلكenable_stack_protection = true
لتوزيع عشوائي لتخطيط مساحة العنوان (ASLR). يمكن أن يساعد 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
اضبط على true لتمكين بعض قواعد تحصين grubgrub_user = 'root'
اسم مستخدم grub الذي يجب توفيره عند تغيير التكوين في موجه grubgrub_password_hash = ''
تجزئة كلمة مرور تم إنشاؤها باستخدام grub-mkpasswd-pbkdf2 مرتبطة بـ grub_userboot_without_password = true
إعداد Grub بحيث يتطلب كلمة مرور فقط عند تغيير إدخال، وليس عند تشغيل إدخال موجودsystem_umask = undef
إذا تم تعيين هذا المتغير، قم بإعداد umask لجميع المستخدمين في النظام (مثل '027')manage_home_permissions = false
اضبط على true لإدارة أذونات ملفات وأدلة المستخدمين المحليين (g-w,o-rwx)ignore_home_users = []
مصفوفة للمستخدمين الذين لا يجب تقييدهم بواسطة manage_home_permissionsmanage_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_restrictmanage_cron_permissions = false
اضبط على true لإدارة أذونات ملفات cron (og-rwx)enable_sysctl_config = true
اضبط على false لتعطيل تكوين sysctlmanage_system_users = true
اضبط على false لتعطيل إدارة مستخدمي النظام (كلمة مرور فارغة وتعيين صدفة nologin)shadow_group = undef
تجاوز ملكية المجموعة لـ /etc/shadowshadow_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 هو نقطة بداية جيدة بخصوص تحصين الأنظمة، فقد اعتُبر من المناسب تنفيذ طريقة سهلة للتعامل مع الحالات الفردية التي لا يرغب المرء في كتابة وحدة كاملة لها.
على سبيل المثال، لزيادة الامتثال لـ CIS DIL على نظام Debian، يجب تعيين ما يلي:
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 - رمز الوصول لـ DigitalOceanDIGITALOCEAN_SSH_KEY_IDS - المعرف في DigitalOcean لمفتاح ssh الخاص بك، راجع هذا لمزيد من المعلوماتيجب تسمية مفتاح ssh باسم ~/.ssh/do_ci وإضافته إلى ملفك الشخصي في DigitalOcean.
بعد ذلك تكون جاهزًا لتشغيل الاختبارات كما هو موضح في اختبارات التكامل (Docker).
إذا كنت تريد تشغيل اختبارات التكامل الكاملة مع Github Actions في نسختك، فسيتعين عليك إضافة هذه متغيرات البيئة في إعدادات نسختك:
KITCHEN_LOCAL_YAML=kitchen.do.ymlDIGITALOCEAN_ACCESS_TOKEN - رمز الوصول لـ DigitalOceanCI_SSH_KEY - الجزء الخاص من مفتاح ssh، المتاح على DigitalOcean لحالاتك، في شكل مشفر base64 (مثل cat id_rsa | base64 -w0 ; echo)DIGITALOCEAN_SSH_KEY_IDS - المعرف في DigitalOcean لـ CI_SSH_KEY، راجع هذا لمزيد من المعلوماتسيتم اختبار التصحيحات الخاصة بك تلقائيًا عبر Github Actions. ملخص الاختبار مرئي على Github في طلب السحب الخاص بك، يمكن العثور على التفاصيل في الاختبارات المرتبطة.
يمكنك الوصول إلينا بعدة طرق:
للنقل الأصلي لـ chef-os-hardening إلى puppet:
شكرًا لكم جميعًا!!
مرخص بموجب رخصة Apache، الإصدار 2.0 (the "License")؛ لا يجوز لك استخدام هذا الملف إلا بالامتثال للترخيص. يمكنك الحصول على نسخة من الترخيص على
http://www.apache.org/licenses/LICENSE-2.0
ما لم يكن مطلوبًا بموجب القانون المعمول به أو متفقًا عليه كتابيًا، يتم توزيع البرنامج المرخص بموجب الترخيص على أساس "AS IS"، بدون ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الترخيص للغة المحددة التي تحكم الأذونات و القيود بموجب الترخيص.