chef 17.10.95 → 18.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +16 -8
- data/README.md +7 -7
- data/Rakefile +3 -22
- data/{chef-universal-mingw32.gemspec → chef-universal-mingw-ucrt.gemspec} +8 -7
- data/chef.gemspec +12 -5
- data/lib/chef/api_client_v1.rb +9 -1
- data/lib/chef/application/exit_code.rb +3 -3
- data/lib/chef/chef_fs/file_system.rb +21 -7
- data/lib/chef/client.rb +169 -17
- data/lib/chef/compliance/input.rb +1 -1
- data/lib/chef/compliance/profile.rb +1 -1
- data/lib/chef/compliance/profile_collection.rb +0 -1
- data/lib/chef/compliance/waiver.rb +1 -1
- data/lib/chef/cookbook/syntax_check.rb +2 -2
- data/lib/chef/dsl/reader_helpers.rb +1 -1
- data/lib/chef/dsl/rest_resource.rb +77 -0
- data/lib/chef/event_dispatch/base.rb +3 -0
- data/lib/chef/exceptions.rb +8 -0
- data/lib/chef/http/authenticator.rb +170 -3
- data/lib/chef/http/ssl_policies.rb +3 -3
- data/lib/chef/mixin/powershell_exec.rb +5 -28
- data/lib/chef/node/mixin/immutablize_array.rb +1 -0
- data/lib/chef/property.rb +13 -6
- data/lib/chef/provider/cron.rb +5 -1
- data/lib/chef/provider/group/windows.rb +1 -1
- data/lib/chef/provider/http_request.rb +11 -9
- data/lib/chef/provider/launchd.rb +1 -0
- data/lib/chef/provider/mount/linux.rb +5 -0
- data/lib/chef/provider/mount/mount.rb +8 -0
- data/lib/chef/provider/mount/windows.rb +1 -1
- data/lib/chef/provider/package/chocolatey.rb +1 -18
- data/lib/chef/provider/package/rubygems.rb +1 -1
- data/lib/chef/provider/package/snap.rb +1 -1
- data/lib/chef/provider/package/windows/msi.rb +2 -2
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
- data/lib/chef/provider/package/yum/yum_helper.py +5 -17
- data/lib/chef/provider/package/zypper/version.rb +60 -0
- data/lib/chef/provider/package/zypper.rb +47 -3
- data/lib/chef/provider/service/windows.rb +1 -1
- data/lib/chef/provider/user/aix.rb +5 -0
- data/lib/chef/provider/user/linux.rb +29 -0
- data/lib/chef/provider/user/mac.rb +1 -1
- data/lib/chef/provider/user.rb +46 -14
- data/lib/chef/provider/yum_repository.rb +13 -1
- data/lib/chef/provider.rb +1 -1
- data/lib/chef/recipe.rb +1 -1
- data/lib/chef/resource/_rest_resource.rb +389 -0
- data/lib/chef/resource/alternatives.rb +0 -1
- data/lib/chef/resource/apt_package.rb +2 -1
- data/lib/chef/resource/apt_preference.rb +0 -1
- data/lib/chef/resource/apt_repository.rb +0 -1
- data/lib/chef/resource/apt_update.rb +0 -1
- data/lib/chef/resource/archive_file.rb +0 -1
- data/lib/chef/resource/bash.rb +0 -1
- data/lib/chef/resource/batch.rb +0 -1
- data/lib/chef/resource/bff_package.rb +0 -1
- data/lib/chef/resource/breakpoint.rb +0 -1
- data/lib/chef/resource/build_essential.rb +0 -1
- data/lib/chef/resource/cab_package.rb +0 -1
- data/lib/chef/resource/chef_client_config.rb +12 -14
- data/lib/chef/resource/chef_client_cron.rb +1 -2
- data/lib/chef/resource/chef_client_launchd.rb +2 -2
- data/lib/chef/resource/chef_client_scheduled_task.rb +3 -3
- data/lib/chef/resource/chef_client_systemd_timer.rb +0 -1
- data/lib/chef/resource/chef_client_trusted_certificate.rb +0 -1
- data/lib/chef/resource/chef_gem.rb +0 -1
- data/lib/chef/resource/chef_handler.rb +0 -1
- data/lib/chef/resource/chef_sleep.rb +1 -3
- data/lib/chef/resource/chef_vault_secret.rb +0 -1
- data/lib/chef/resource/chocolatey_config.rb +0 -1
- data/lib/chef/resource/chocolatey_feature.rb +0 -1
- data/lib/chef/resource/chocolatey_package.rb +0 -1
- data/lib/chef/resource/chocolatey_source.rb +0 -1
- data/lib/chef/resource/cookbook_file.rb +0 -1
- data/lib/chef/resource/cron/_cron_shared.rb +0 -1
- data/lib/chef/resource/cron/cron.rb +0 -1
- data/lib/chef/resource/cron/cron_d.rb +15 -1
- data/lib/chef/resource/cron_access.rb +0 -1
- data/lib/chef/resource/csh.rb +0 -1
- data/lib/chef/resource/directory.rb +0 -1
- data/lib/chef/resource/dmg_package.rb +2 -1
- data/lib/chef/resource/dnf_package.rb +0 -1
- data/lib/chef/resource/dpkg_package.rb +0 -1
- data/lib/chef/resource/dsc_resource.rb +0 -1
- data/lib/chef/resource/dsc_script.rb +0 -1
- data/lib/chef/resource/execute.rb +0 -1
- data/lib/chef/resource/file.rb +0 -1
- data/lib/chef/resource/freebsd_package.rb +2 -1
- data/lib/chef/resource/gem_package.rb +2 -1
- data/lib/chef/resource/group.rb +25 -2
- data/lib/chef/resource/habitat/habitat_package.rb +0 -1
- data/lib/chef/resource/habitat/habitat_sup.rb +6 -7
- data/lib/chef/resource/habitat/habitat_sup_windows.rb +1 -1
- data/lib/chef/resource/habitat_config.rb +0 -1
- data/lib/chef/resource/habitat_install.rb +0 -1
- data/lib/chef/resource/habitat_service.rb +0 -1
- data/lib/chef/resource/habitat_user_toml.rb +0 -1
- data/lib/chef/resource/homebrew_cask.rb +0 -1
- data/lib/chef/resource/homebrew_package.rb +2 -1
- data/lib/chef/resource/homebrew_tap.rb +0 -1
- data/lib/chef/resource/homebrew_update.rb +0 -2
- data/lib/chef/resource/hostname.rb +0 -1
- data/lib/chef/resource/http_request.rb +0 -1
- data/lib/chef/resource/ifconfig.rb +0 -1
- data/lib/chef/resource/inspec_input.rb +0 -1
- data/lib/chef/resource/inspec_waiver.rb +0 -1
- data/lib/chef/resource/inspec_waiver_file_entry.rb +2 -3
- data/lib/chef/resource/ips_package.rb +0 -1
- data/lib/chef/resource/kernel_module.rb +0 -1
- data/lib/chef/resource/ksh.rb +0 -1
- data/lib/chef/resource/launchd.rb +3 -1
- data/lib/chef/resource/link.rb +0 -1
- data/lib/chef/resource/locale.rb +2 -6
- data/lib/chef/resource/log.rb +0 -1
- data/lib/chef/resource/lwrp_base.rb +0 -4
- data/lib/chef/resource/macos_userdefaults.rb +8 -13
- data/lib/chef/resource/macosx_service.rb +0 -1
- data/lib/chef/resource/macports_package.rb +2 -1
- data/lib/chef/resource/mdadm.rb +0 -1
- data/lib/chef/resource/mount.rb +0 -1
- data/lib/chef/resource/msu_package.rb +0 -1
- data/lib/chef/resource/notify_group.rb +0 -2
- data/lib/chef/resource/ohai.rb +0 -1
- data/lib/chef/resource/ohai_hint.rb +0 -1
- data/lib/chef/resource/openbsd_package.rb +2 -1
- data/lib/chef/resource/openssl_dhparam.rb +0 -2
- data/lib/chef/resource/openssl_ec_private_key.rb +0 -2
- data/lib/chef/resource/openssl_ec_public_key.rb +0 -2
- data/lib/chef/resource/openssl_rsa_private_key.rb +0 -2
- data/lib/chef/resource/openssl_rsa_public_key.rb +0 -2
- data/lib/chef/resource/openssl_x509_certificate.rb +0 -2
- data/lib/chef/resource/openssl_x509_crl.rb +0 -2
- data/lib/chef/resource/openssl_x509_request.rb +0 -2
- data/lib/chef/resource/osx_profile.rb +0 -1
- data/lib/chef/resource/package.rb +0 -1
- data/lib/chef/resource/pacman_package.rb +2 -1
- data/lib/chef/resource/paludis_package.rb +0 -1
- data/lib/chef/resource/perl.rb +0 -1
- data/lib/chef/resource/plist.rb +7 -3
- data/lib/chef/resource/portage_package.rb +2 -1
- data/lib/chef/resource/powershell_package.rb +0 -1
- data/lib/chef/resource/powershell_package_source.rb +0 -1
- data/lib/chef/resource/powershell_script.rb +0 -1
- data/lib/chef/resource/python.rb +0 -1
- data/lib/chef/resource/reboot.rb +0 -1
- data/lib/chef/resource/registry_key.rb +0 -1
- data/lib/chef/resource/remote_directory.rb +0 -1
- data/lib/chef/resource/remote_file.rb +0 -1
- data/lib/chef/resource/rhsm_errata.rb +0 -1
- data/lib/chef/resource/rhsm_errata_level.rb +0 -1
- data/lib/chef/resource/rhsm_register.rb +2 -4
- data/lib/chef/resource/rhsm_repo.rb +0 -1
- data/lib/chef/resource/rhsm_subscription.rb +0 -1
- data/lib/chef/resource/route.rb +0 -1
- data/lib/chef/resource/rpm_package.rb +2 -1
- data/lib/chef/resource/ruby.rb +0 -1
- data/lib/chef/resource/ruby_block.rb +0 -1
- data/lib/chef/resource/scm/_scm.rb +0 -2
- data/lib/chef/resource/scm/git.rb +0 -2
- data/lib/chef/resource/scm/subversion.rb +0 -2
- data/lib/chef/resource/script.rb +0 -1
- data/lib/chef/resource/selinux/common_helpers.rb +47 -0
- data/lib/chef/resource/selinux/selinux_debian.erb +18 -0
- data/lib/chef/resource/selinux/selinux_default.erb +15 -0
- data/lib/chef/resource/selinux_boolean.rb +101 -0
- data/lib/chef/resource/selinux_fcontext.rb +160 -0
- data/lib/chef/resource/selinux_install.rb +107 -0
- data/lib/chef/resource/selinux_module.rb +143 -0
- data/lib/chef/resource/selinux_permissive.rb +64 -0
- data/lib/chef/resource/selinux_port.rb +118 -0
- data/lib/chef/resource/selinux_state.rb +166 -0
- data/lib/chef/resource/service.rb +0 -1
- data/lib/chef/resource/smartos_package.rb +2 -1
- data/lib/chef/resource/snap_package.rb +2 -1
- data/lib/chef/resource/solaris_package.rb +2 -1
- data/lib/chef/resource/ssh_known_hosts_entry.rb +0 -1
- data/lib/chef/resource/sudo.rb +0 -1
- data/lib/chef/resource/support/client.erb +2 -2
- data/lib/chef/resource/swap_file.rb +0 -1
- data/lib/chef/resource/sysctl.rb +1 -2
- data/lib/chef/resource/systemd_unit.rb +0 -1
- data/lib/chef/resource/template.rb +0 -1
- data/lib/chef/resource/timezone.rb +0 -1
- data/lib/chef/resource/user/aix_user.rb +0 -1
- data/lib/chef/resource/user/linux_user.rb +0 -1
- data/lib/chef/resource/user/mac_user.rb +0 -1
- data/lib/chef/resource/user/pw_user.rb +0 -1
- data/lib/chef/resource/user/solaris_user.rb +0 -1
- data/lib/chef/resource/user/windows_user.rb +0 -1
- data/lib/chef/resource/user.rb +10 -1
- data/lib/chef/resource/user_ulimit.rb +0 -1
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
- data/lib/chef/resource/windows_ad_join.rb +0 -2
- data/lib/chef/resource/windows_audit_policy.rb +0 -2
- data/lib/chef/resource/windows_auto_run.rb +0 -1
- data/lib/chef/resource/windows_defender.rb +0 -1
- data/lib/chef/resource/windows_defender_exclusion.rb +0 -1
- data/lib/chef/resource/windows_dfs_folder.rb +0 -1
- data/lib/chef/resource/windows_dfs_namespace.rb +0 -1
- data/lib/chef/resource/windows_dfs_server.rb +0 -1
- data/lib/chef/resource/windows_dns_record.rb +0 -1
- data/lib/chef/resource/windows_dns_zone.rb +0 -1
- data/lib/chef/resource/windows_env.rb +0 -1
- data/lib/chef/resource/windows_feature.rb +0 -1
- data/lib/chef/resource/windows_feature_dism.rb +0 -1
- data/lib/chef/resource/windows_feature_powershell.rb +0 -1
- data/lib/chef/resource/windows_firewall_profile.rb +0 -2
- data/lib/chef/resource/windows_firewall_rule.rb +0 -1
- data/lib/chef/resource/windows_font.rb +2 -3
- data/lib/chef/resource/windows_package.rb +3 -4
- data/lib/chef/resource/windows_pagefile.rb +0 -2
- data/lib/chef/resource/windows_path.rb +0 -1
- data/lib/chef/resource/windows_printer.rb +0 -1
- data/lib/chef/resource/windows_printer_port.rb +0 -1
- data/lib/chef/resource/windows_script.rb +0 -2
- data/lib/chef/resource/windows_security_policy.rb +0 -1
- data/lib/chef/resource/windows_service.rb +0 -1
- data/lib/chef/resource/windows_share.rb +0 -1
- data/lib/chef/resource/windows_shortcut.rb +1 -2
- data/lib/chef/resource/windows_task.rb +0 -1
- data/lib/chef/resource/windows_uac.rb +0 -1
- data/lib/chef/resource/windows_update_settings.rb +0 -1
- data/lib/chef/resource/windows_user_privilege.rb +0 -1
- data/lib/chef/resource/windows_workgroup.rb +0 -1
- data/lib/chef/resource/yum_package.rb +2 -1
- data/lib/chef/resource/yum_repository.rb +4 -1
- data/lib/chef/resource/zypper_package.rb +2 -1
- data/lib/chef/resource/zypper_repository.rb +0 -1
- data/lib/chef/resource.rb +12 -5
- data/lib/chef/resources.rb +7 -0
- data/lib/chef/run_context.rb +3 -3
- data/lib/chef/secret_fetcher/azure_key_vault.rb +3 -3
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/handle.rb +6 -7
- data/lib/chef/win32/registry.rb +7 -3
- data/spec/data/chef_guid +1 -0
- data/spec/data/nodes/mcwfhpowell.json +3 -0
- data/spec/data/rubygems.org/sexp_processor-info +2 -1
- data/spec/data/trusted_certs/example.crt +20 -29
- data/spec/data/trusted_certs/example_no_cn.crt +34 -30
- data/spec/data/trusted_certs/opscode.pem +54 -33
- data/spec/functional/assets/yumrepo-empty/repodata/01a3b489a465bcac22a43492163df43451dc6ce47d27f66de289756b91635523-filelists.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/5dc1e6e73c84803f059bb3065e684e56adfc289a7e398946574d79dac6643945-primary.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/7c36572015e075add2b38b900837bcdbb8a504130ddff49b2351a7fc0affa3d4-other.sqlite.bz2 +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz +0 -0
- data/spec/functional/assets/yumrepo-empty/repodata/repomd.xml +55 -0
- data/spec/functional/resource/chocolatey_package_spec.rb +20 -32
- data/spec/functional/resource/dsc_script_spec.rb +1 -1
- data/spec/functional/resource/group_spec.rb +10 -6
- data/spec/functional/resource/link_spec.rb +8 -8
- data/spec/functional/resource/macos_userdefaults_spec.rb +4 -4
- data/spec/functional/resource/plist_spec.rb +25 -0
- data/spec/functional/resource/user/linux_user_spec.rb +127 -0
- data/spec/functional/resource/windows_certificate_spec.rb +1 -26
- data/spec/functional/resource/windows_font_spec.rb +12 -9
- data/spec/functional/resource/yum_package_spec.rb +17 -1
- data/spec/functional/resource/zypper_package_spec.rb +12 -0
- data/spec/functional/shell_spec.rb +1 -2
- data/spec/functional/version_spec.rb +1 -1
- data/spec/integration/client/client_spec.rb +82 -3
- data/spec/integration/client/exit_code_spec.rb +1 -1
- data/spec/integration/client/fips_spec.rb +20 -0
- data/spec/integration/client/ipv6_spec.rb +1 -1
- data/spec/integration/compliance/compliance_spec.rb +1 -1
- data/spec/integration/recipes/accumulator_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
- data/spec/integration/recipes/lwrp_spec.rb +1 -1
- data/spec/integration/recipes/notifies_spec.rb +1 -1
- data/spec/integration/recipes/notifying_block_spec.rb +1 -1
- data/spec/integration/recipes/remote_directory.rb +1 -1
- data/spec/integration/recipes/unified_mode_spec.rb +1 -1
- data/spec/integration/recipes/use_partial_spec.rb +2 -1
- data/spec/integration/solo/solo_spec.rb +2 -2
- data/spec/spec_helper.rb +5 -0
- data/spec/support/platform_helpers.rb +8 -0
- data/spec/support/ruby_installer.rb +1 -1
- data/spec/support/shared/functional/windows_script.rb +2 -2
- data/spec/unit/application/client_spec.rb +0 -10
- data/spec/unit/chef_fs/file_system_spec.rb +2 -0
- data/spec/unit/client_spec.rb +57 -8
- data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +1 -1
- data/spec/unit/cookbook/syntax_check_spec.rb +3 -0
- data/spec/unit/http/authenticator_spec.rb +68 -0
- data/spec/unit/mixin/powershell_exec_spec.rb +5 -5
- data/spec/unit/platform/query_helpers_spec.rb +2 -17
- data/spec/unit/property/validation_spec.rb +30 -0
- data/spec/unit/provider/cron_spec.rb +36 -0
- data/spec/unit/provider/http_request_spec.rb +60 -72
- data/spec/unit/provider/mount/linux_spec.rb +10 -0
- data/spec/unit/provider/package/chocolatey_spec.rb +3 -19
- data/spec/unit/provider/package/rubygems_spec.rb +1 -1
- data/spec/unit/provider/package/zypper_spec.rb +32 -0
- data/spec/unit/provider/user/linux_spec.rb +51 -11
- data/spec/unit/provider/user_spec.rb +24 -6
- data/spec/unit/resource/archive_file_spec.rb +1 -1
- data/spec/unit/resource/chef_client_cron_spec.rb +5 -0
- data/spec/unit/resource/chef_client_launchd_spec.rb +5 -0
- data/spec/unit/resource/chef_client_scheduled_task_spec.rb +5 -0
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +1 -1
- data/spec/unit/resource/cron_d_spec.rb +37 -1
- data/spec/unit/resource/macos_user_defaults_spec.rb +4 -4
- data/spec/unit/resource/rest_resource_spec.rb +381 -0
- data/spec/unit/resource/selinux_boolean_spec.rb +92 -0
- data/spec/unit/resource/selinux_fcontext_spec.rb +65 -0
- data/spec/unit/resource/selinux_install_spec.rb +60 -0
- data/spec/unit/resource/selinux_module_spec.rb +55 -0
- data/spec/unit/resource/selinux_permissive_spec.rb +39 -0
- data/spec/unit/resource/selinux_port_spec.rb +42 -0
- data/spec/unit/resource/selinux_state_spec.rb +46 -0
- data/spec/unit/resource/sysctl_spec.rb +2 -2
- data/spec/unit/resource/user/linux_user_spec.rb +42 -0
- data/spec/unit/resource/yum_repository_spec.rb +4 -0
- data/spec/unit/resource_spec.rb +0 -1
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +1 -1
- data/tasks/rspec.rb +1 -1
- metadata +107 -31
- /data/spec/functional/assets/chocolatey_feed/{test-A.1.0.0.nupkg → test-A.1.0.nupkg} +0 -0
- /data/spec/functional/assets/chocolatey_feed/{test-A.1.5.0.nupkg → test-A.1.5.nupkg} +0 -0
- /data/spec/functional/assets/chocolatey_feed/{test-A.2.0.0.nupkg → test-A.2.0.nupkg} +0 -0
- /data/spec/functional/assets/chocolatey_feed/{test-B.1.0.0.nupkg → test-B.1.0.nupkg} +0 -0
- /data/spec/functional/assets/yumrepo/repodata/{01a3b-filelists.sqlite.bz2 → 4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2} +0 -0
- /data/spec/functional/assets/yumrepo/repodata/{6bf96-other.xml.gz → 74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz} +0 -0
- /data/spec/functional/assets/yumrepo/repodata/{5dc1e-primary.sqlite.bz2 → a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2} +0 -0
- /data/spec/functional/assets/yumrepo/repodata/{7c365-other.sqlite.bz2 → af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2} +0 -0
- /data/spec/functional/assets/yumrepo/repodata/{401dc-filelists.xml.gz → bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz} +0 -0
- /data/spec/functional/assets/yumrepo/repodata/{dabe2-primary.xml.gz → c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz} +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated by Chef for <%= node['fqdn'] %>
|
|
2
|
+
# Do NOT modify this file by hand.
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
# This file controls the state of SELinux on the system.
|
|
6
|
+
# SELINUX= can take one of these three values:
|
|
7
|
+
# enforcing - SELinux security policy is enforced.
|
|
8
|
+
# permissive - SELinux prints warnings instead of enforcing.
|
|
9
|
+
# disabled - No SELinux policy is loaded.
|
|
10
|
+
SELINUX=<%= @selinux %>
|
|
11
|
+
# SELINUXTYPE= can take one of these three values:
|
|
12
|
+
# targeted - Targeted processes are protected,
|
|
13
|
+
# minimum - Modification of targeted policy. Only selected processes are protected.
|
|
14
|
+
# mls - Multi Level Security protection.
|
|
15
|
+
SELINUXTYPE=<%= @selinuxtype %>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
#
|
|
14
|
+
|
|
15
|
+
require_relative "../resource"
|
|
16
|
+
require_relative "selinux/common_helpers"
|
|
17
|
+
|
|
18
|
+
class Chef
|
|
19
|
+
class Resource
|
|
20
|
+
class SelinuxBoolean < Chef::Resource
|
|
21
|
+
unified_mode true
|
|
22
|
+
|
|
23
|
+
provides :selinux_boolean
|
|
24
|
+
|
|
25
|
+
description "Use **selinux_boolean** resource to set SELinux boolean values."
|
|
26
|
+
introduced "18.0"
|
|
27
|
+
examples <<~DOC
|
|
28
|
+
**Set ssh_keysign to true**:
|
|
29
|
+
|
|
30
|
+
```ruby
|
|
31
|
+
selinux_boolean 'ssh_keysign' do
|
|
32
|
+
value true
|
|
33
|
+
end
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Set ssh_sysadm_login to 'on'**:
|
|
37
|
+
|
|
38
|
+
```ruby
|
|
39
|
+
selinux_boolean 'ssh_sysadm_login' do
|
|
40
|
+
value 'on'
|
|
41
|
+
end
|
|
42
|
+
```
|
|
43
|
+
DOC
|
|
44
|
+
|
|
45
|
+
property :boolean, String,
|
|
46
|
+
name_property: true,
|
|
47
|
+
description: "SELinux boolean to set."
|
|
48
|
+
|
|
49
|
+
property :value, [Integer, String, true, false],
|
|
50
|
+
required: true,
|
|
51
|
+
equal_to: %w{on off},
|
|
52
|
+
coerce: proc { |p| selinux_bool(p) },
|
|
53
|
+
description: "SELinux boolean value."
|
|
54
|
+
|
|
55
|
+
property :persistent, [true, false],
|
|
56
|
+
default: true,
|
|
57
|
+
desired_state: false,
|
|
58
|
+
description: "Set to true for value setting to survive reboot."
|
|
59
|
+
|
|
60
|
+
load_current_value do |new_resource|
|
|
61
|
+
value shell_out!("getsebool", new_resource.boolean).stdout.split("-->").map(&:strip).last
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
action_class do
|
|
65
|
+
include Chef::SELinux::CommonHelpers
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
action :set , description: "Set the state of the boolean." do
|
|
69
|
+
if selinux_disabled?
|
|
70
|
+
Chef::Log.warn("Unable to set SELinux boolean #{new_resource.name} as SELinux is disabled")
|
|
71
|
+
return
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
converge_if_changed do
|
|
75
|
+
cmd = "setsebool"
|
|
76
|
+
cmd += " -P" if new_resource.persistent
|
|
77
|
+
cmd += " #{new_resource.boolean} #{new_resource.value}"
|
|
78
|
+
|
|
79
|
+
shell_out!(cmd)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
85
|
+
#
|
|
86
|
+
# Validate and return input boolean value in required format
|
|
87
|
+
# @param bool [String, Integer, Boolean] Input boolean value in allowed formats
|
|
88
|
+
#
|
|
89
|
+
# @return [String] [description] Boolean value in required format
|
|
90
|
+
def selinux_bool(bool)
|
|
91
|
+
if ["on", "true", "1", true, 1].include?(bool)
|
|
92
|
+
"on"
|
|
93
|
+
elsif ["off", "false", "0", false, 0].include?(bool)
|
|
94
|
+
"off"
|
|
95
|
+
else
|
|
96
|
+
raise ArgumentError, "selinux_bool: Invalid selinux boolean value #{bool}"
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
#
|
|
14
|
+
|
|
15
|
+
require_relative "../resource"
|
|
16
|
+
require_relative "selinux/common_helpers"
|
|
17
|
+
|
|
18
|
+
class Chef
|
|
19
|
+
class Resource
|
|
20
|
+
class SelinuxFcontext < Chef::Resource
|
|
21
|
+
unified_mode true
|
|
22
|
+
|
|
23
|
+
provides :selinux_fcontext
|
|
24
|
+
|
|
25
|
+
description "Use **selinux_fcontext** resource to set the SELinux context of files with semanage fcontext."
|
|
26
|
+
introduced "18.0"
|
|
27
|
+
examples <<~DOC
|
|
28
|
+
**Allow http servers (e.g. nginx/apache) to modify moodle files**:
|
|
29
|
+
|
|
30
|
+
```ruby
|
|
31
|
+
selinux_fcontext '/var/www/moodle(/.*)?' do
|
|
32
|
+
secontext 'httpd_sys_rw_content_t'
|
|
33
|
+
end
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Adapt a symbolic link**:
|
|
37
|
+
|
|
38
|
+
```ruby
|
|
39
|
+
selinux_fcontext '/var/www/symlink_to_webroot' do
|
|
40
|
+
secontext 'httpd_sys_rw_content_t'
|
|
41
|
+
file_type 'l'
|
|
42
|
+
end
|
|
43
|
+
```
|
|
44
|
+
DOC
|
|
45
|
+
|
|
46
|
+
property :file_spec, String,
|
|
47
|
+
name_property: true,
|
|
48
|
+
description: "Path to or regex matching the files or directories to label."
|
|
49
|
+
|
|
50
|
+
property :secontext, String,
|
|
51
|
+
required: %i{add modify manage},
|
|
52
|
+
description: "SELinux context to assign."
|
|
53
|
+
|
|
54
|
+
property :file_type, String,
|
|
55
|
+
default: "a",
|
|
56
|
+
equal_to: %w{a f d c b s l p},
|
|
57
|
+
description: "The type of the file being labeled."
|
|
58
|
+
|
|
59
|
+
action_class do
|
|
60
|
+
include Chef::SELinux::CommonHelpers
|
|
61
|
+
def current_file_context
|
|
62
|
+
file_hash = {
|
|
63
|
+
"a" => "all files",
|
|
64
|
+
"f" => "regular file",
|
|
65
|
+
"d" => "directory",
|
|
66
|
+
"c" => "character device",
|
|
67
|
+
"b" => "block device",
|
|
68
|
+
"s" => "socket",
|
|
69
|
+
"l" => "symbolic link",
|
|
70
|
+
"p" => "named pipe",
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
contexts = shell_out!("semanage fcontext -l").stdout.split("\n")
|
|
74
|
+
# pull out file label from user:role:type:level context string
|
|
75
|
+
contexts.grep(/^#{Regexp.escape(new_resource.file_spec)}\s+#{file_hash[new_resource.file_type]}/) do |c|
|
|
76
|
+
c.match(/.+ (?<user>.+):(?<role>.+):(?<type>.+):(?<level>.+)$/)[:type]
|
|
77
|
+
# match returns ['foo'] or [], shift converts that to 'foo' or nil
|
|
78
|
+
end.shift
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Run restorecon to fix label
|
|
82
|
+
# https://github.com/sous-chefs/selinux_policy/pull/72#issuecomment-338718721
|
|
83
|
+
def relabel_files
|
|
84
|
+
spec = new_resource.file_spec
|
|
85
|
+
escaped = Regexp.escape spec
|
|
86
|
+
|
|
87
|
+
# find common path between regex and string
|
|
88
|
+
common = if spec == escaped
|
|
89
|
+
spec
|
|
90
|
+
else
|
|
91
|
+
index = spec.size.times { |i| break i if spec[i] != escaped[i] }
|
|
92
|
+
::File.dirname spec[0...index]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# if path is not absolute, ignore it and search everything
|
|
96
|
+
common = "/" if common[0] != "/"
|
|
97
|
+
|
|
98
|
+
if ::File.exist? common
|
|
99
|
+
shell_out!("find #{common.shellescape} -ignore_readdir_race -regextype posix-egrep -regex #{spec.shellescape} -prune -print0 | xargs -0 restorecon -iRv")
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
action :manage, description: "Assign the file to the right context regardless of previous state." do
|
|
105
|
+
run_action(:add)
|
|
106
|
+
run_action(:modify)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
action :addormodify, description: "Assign the file context if not set. Update the file context if previously set." do
|
|
110
|
+
Chef::Log.warn("The :addormodify action for selinux_fcontext is deprecated and will be removed in a future release. Use the :manage action instead.")
|
|
111
|
+
run_action(:manage)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Create if doesn't exist, do not touch if fcontext is already registered
|
|
115
|
+
action :add, description: "Assign the file context if not set." do
|
|
116
|
+
if selinux_disabled?
|
|
117
|
+
Chef::Log.warn("Unable to add SELinux fcontext #{new_resource.name} as SELinux is disabled")
|
|
118
|
+
return
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
unless current_file_context
|
|
122
|
+
converge_by "adding label #{new_resource.secontext} to #{new_resource.file_spec}" do
|
|
123
|
+
shell_out!("semanage fcontext -a -f #{new_resource.file_type} -t #{new_resource.secontext} '#{new_resource.file_spec}'")
|
|
124
|
+
relabel_files
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Only modify if fcontext exists & doesn't have the correct label already
|
|
130
|
+
action :modify, description: "Update the file context if previously set." do
|
|
131
|
+
if selinux_disabled?
|
|
132
|
+
Chef::Log.warn("Unable to modify SELinux fcontext #{new_resource.name} as SELinux is disabled")
|
|
133
|
+
return
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
if current_file_context && current_file_context != new_resource.secontext
|
|
137
|
+
converge_by "modifying label #{new_resource.secontext} to #{new_resource.file_spec}" do
|
|
138
|
+
shell_out!("semanage fcontext -m -f #{new_resource.file_type} -t #{new_resource.secontext} '#{new_resource.file_spec}'")
|
|
139
|
+
relabel_files
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Delete if exists
|
|
145
|
+
action :delete, description: "Removes the file context if set. " do
|
|
146
|
+
if selinux_disabled?
|
|
147
|
+
Chef::Log.warn("Unable to delete SELinux fcontext #{new_resource.name} as SELinux is disabled")
|
|
148
|
+
return
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
if current_file_context
|
|
152
|
+
converge_by "deleting label for #{new_resource.file_spec}" do
|
|
153
|
+
shell_out!("semanage fcontext -d -f #{new_resource.file_type} '#{new_resource.file_spec}'")
|
|
154
|
+
relabel_files
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
|
|
14
|
+
require_relative "../resource"
|
|
15
|
+
|
|
16
|
+
class Chef
|
|
17
|
+
class Resource
|
|
18
|
+
class SelinuxInstall < Chef::Resource
|
|
19
|
+
unified_mode true
|
|
20
|
+
|
|
21
|
+
provides :selinux_install
|
|
22
|
+
|
|
23
|
+
description "Use **selinux_install** resource to encapsulates the set of selinux packages to install in order to manage selinux. It also ensures the directory `/etc/selinux` is created."
|
|
24
|
+
introduced "18.0"
|
|
25
|
+
examples <<~DOC
|
|
26
|
+
**Default installation**:
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
selinux_install 'example'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Install with custom packages**:
|
|
33
|
+
|
|
34
|
+
```ruby
|
|
35
|
+
selinux_install 'example' do
|
|
36
|
+
packages %w(policycoreutils selinux-policy selinux-policy-targeted)
|
|
37
|
+
end
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Uninstall**
|
|
41
|
+
```ruby
|
|
42
|
+
selinux_install 'example' do
|
|
43
|
+
action :remove
|
|
44
|
+
end
|
|
45
|
+
```
|
|
46
|
+
DOC
|
|
47
|
+
|
|
48
|
+
property :packages, [String, Array],
|
|
49
|
+
default: lazy { default_install_packages },
|
|
50
|
+
description: "SELinux packages for system."
|
|
51
|
+
|
|
52
|
+
action_class do
|
|
53
|
+
def do_package_action(action)
|
|
54
|
+
# friendly message for unsupported platforms
|
|
55
|
+
raise "The platform #{node["platform"]} is not currently supported by the `selinux_install` resource. Please file an issue at https://github.com/chef/chef/issues with details on the platform this cookbook is running on." if new_resource.packages.nil?
|
|
56
|
+
|
|
57
|
+
package "selinux" do
|
|
58
|
+
package_name new_resource.packages
|
|
59
|
+
action action
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
action :install, description: "Install required packages." do
|
|
65
|
+
do_package_action(action)
|
|
66
|
+
|
|
67
|
+
directory "/etc/selinux" do
|
|
68
|
+
owner "root"
|
|
69
|
+
group "root"
|
|
70
|
+
mode "0755"
|
|
71
|
+
action :create
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
action :upgrade, description: "Upgrade required packages." do
|
|
76
|
+
do_package_action(a)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
action :remove, description: "Remove any SELinux-related packages." do
|
|
80
|
+
do_package_action(a)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
85
|
+
#
|
|
86
|
+
# Get an array of packages to be installed based upon node platform_family
|
|
87
|
+
#
|
|
88
|
+
# @return [Array] Array of string of package names
|
|
89
|
+
def default_install_packages
|
|
90
|
+
case node["platform_family"]
|
|
91
|
+
when "rhel", "fedora", "amazon"
|
|
92
|
+
%w{make policycoreutils selinux-policy selinux-policy-targeted selinux-policy-devel libselinux-utils setools-console}
|
|
93
|
+
when "debian"
|
|
94
|
+
if node["platform"] == "ubuntu"
|
|
95
|
+
if node["platform_version"].to_f == 18.04
|
|
96
|
+
%w{make policycoreutils selinux selinux-basics selinux-policy-default selinux-policy-dev auditd setools}
|
|
97
|
+
else
|
|
98
|
+
%w{make policycoreutils selinux-basics selinux-policy-default selinux-policy-dev auditd setools}
|
|
99
|
+
end
|
|
100
|
+
else
|
|
101
|
+
%w{make policycoreutils selinux-basics selinux-policy-default selinux-policy-dev auditd setools}
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
|
|
14
|
+
require_relative "../resource"
|
|
15
|
+
|
|
16
|
+
class Chef
|
|
17
|
+
class Resource
|
|
18
|
+
class SelinuxModule < Chef::Resource
|
|
19
|
+
unified_mode true
|
|
20
|
+
|
|
21
|
+
provides :selinux_module
|
|
22
|
+
|
|
23
|
+
description "Use **selinux_module** module resource to create an SELinux policy module from a cookbook file or content provided as a string."
|
|
24
|
+
introduced "18.0"
|
|
25
|
+
examples <<~DOC
|
|
26
|
+
**Creating SElinux module from .te file located at `files` directory of your cookbook.**:
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
selinux_module 'my_policy_module' do
|
|
30
|
+
source 'my_policy_module.te'
|
|
31
|
+
action :create
|
|
32
|
+
end
|
|
33
|
+
```
|
|
34
|
+
DOC
|
|
35
|
+
|
|
36
|
+
property :module_name, String,
|
|
37
|
+
name_property: true,
|
|
38
|
+
description: "Override the module name."
|
|
39
|
+
|
|
40
|
+
property :source, String,
|
|
41
|
+
description: "Module source file name."
|
|
42
|
+
|
|
43
|
+
property :content, String,
|
|
44
|
+
description: "Module source as String."
|
|
45
|
+
|
|
46
|
+
property :cookbook, String,
|
|
47
|
+
description: "Cookbook to source from module source file from(if it is not located in the current cookbook). The default value is the current cookbook.",
|
|
48
|
+
desired_state: false
|
|
49
|
+
|
|
50
|
+
property :base_dir, String,
|
|
51
|
+
default: "/etc/selinux/local",
|
|
52
|
+
description: "Directory to create module source file in."
|
|
53
|
+
|
|
54
|
+
action_class do
|
|
55
|
+
def selinux_module_filepath(type)
|
|
56
|
+
path = ::File.join(new_resource.base_dir, "#{new_resource.module_name}")
|
|
57
|
+
path.concat(".#{type}") if type
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def list_installed_modules
|
|
61
|
+
shell_out!("semodule --list-modules").stdout.split("\n").map { |x| x.split(/\s/).first }
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
action :create, description: "Compile a module and install it." do
|
|
66
|
+
directory new_resource.base_dir
|
|
67
|
+
|
|
68
|
+
if property_is_set?(:content)
|
|
69
|
+
file selinux_module_filepath("te") do
|
|
70
|
+
content new_resource.content
|
|
71
|
+
|
|
72
|
+
mode "0600"
|
|
73
|
+
owner "root"
|
|
74
|
+
group "root"
|
|
75
|
+
|
|
76
|
+
action :create
|
|
77
|
+
|
|
78
|
+
notifies :run, "execute[Compiling SELinux modules at '#{new_resource.base_dir}']", :immediately
|
|
79
|
+
end
|
|
80
|
+
else
|
|
81
|
+
cookbook_file selinux_module_filepath("te") do
|
|
82
|
+
cookbook new_resource.cookbook
|
|
83
|
+
source new_resource.source
|
|
84
|
+
|
|
85
|
+
mode "0600"
|
|
86
|
+
owner "root"
|
|
87
|
+
group "root"
|
|
88
|
+
|
|
89
|
+
action :create
|
|
90
|
+
|
|
91
|
+
notifies :run, "execute[Compiling SELinux modules at '#{new_resource.base_dir}']", :immediately
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
execute "Compiling SELinux modules at '#{new_resource.base_dir}'" do
|
|
96
|
+
cwd new_resource.base_dir
|
|
97
|
+
command "make -C #{new_resource.base_dir} -f /usr/share/selinux/devel/Makefile"
|
|
98
|
+
timeout 120
|
|
99
|
+
user "root"
|
|
100
|
+
|
|
101
|
+
action :nothing
|
|
102
|
+
|
|
103
|
+
notifies :run, "execute[Install SELinux module '#{selinux_module_filepath("pp")}']", :immediately
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
raise "Compilation must have failed, no 'pp' file found at: '#{selinux_module_filepath("pp")}'" unless ::File.exist?(selinux_module_filepath("pp"))
|
|
107
|
+
|
|
108
|
+
execute "Install SELinux module '#{selinux_module_filepath("pp")}'" do
|
|
109
|
+
command "semodule --install '#{selinux_module_filepath("pp")}'"
|
|
110
|
+
action :nothing
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
action :delete, description: "Remove module source files from `/etc/selinux/local`." do
|
|
115
|
+
%w{fc if pp te}.each do |type|
|
|
116
|
+
next unless ::File.exist?(selinux_module_filepath(type))
|
|
117
|
+
|
|
118
|
+
file selinux_module_filepath(type) do
|
|
119
|
+
action :delete
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
action :install, description: "Install a compiled module into the system." do
|
|
125
|
+
raise "Module must be compiled before it can be installed, no 'pp' file found at: '#{selinux_module_filepath("pp")}'" unless ::File.exist?(selinux_module_filepath("pp"))
|
|
126
|
+
|
|
127
|
+
unless list_installed_modules.include? new_resource.module_name
|
|
128
|
+
converge_by "Install SELinux module #{selinux_module_filepath("pp")}" do
|
|
129
|
+
shell_out!("semodule", "--install", selinux_module_filepath("pp"))
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
action :remove, description: "Remove a module from the system." do
|
|
135
|
+
if list_installed_modules.include? new_resource.module_name
|
|
136
|
+
converge_by "Remove SELinux module #{new_resource.module_name}" do
|
|
137
|
+
shell_out!("semodule", "--remove", new_resource.module_name)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
|
|
14
|
+
require_relative "../resource"
|
|
15
|
+
|
|
16
|
+
class Chef
|
|
17
|
+
class Resource
|
|
18
|
+
class SelinuxPermissive < Chef::Resource
|
|
19
|
+
unified_mode true
|
|
20
|
+
|
|
21
|
+
provides :selinux_permissive
|
|
22
|
+
|
|
23
|
+
description "Use **selinux_permissive** resource to allows some types to misbehave without stopping them. Not as good as specific policies, but better than disabling SELinux entirely."
|
|
24
|
+
introduced "18.0"
|
|
25
|
+
examples <<~DOC
|
|
26
|
+
**Disable enforcement on Apache**:
|
|
27
|
+
|
|
28
|
+
```ruby
|
|
29
|
+
selinux_permissive 'httpd_t' do
|
|
30
|
+
notifies :restart, 'service[httpd]'
|
|
31
|
+
end
|
|
32
|
+
```
|
|
33
|
+
DOC
|
|
34
|
+
|
|
35
|
+
property :context, String,
|
|
36
|
+
name_property: true,
|
|
37
|
+
description: "The SELinux context to permit."
|
|
38
|
+
|
|
39
|
+
action_class do
|
|
40
|
+
def current_permissives
|
|
41
|
+
shell_out!("semanage permissive -ln").stdout.split("\n")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Create if doesn't exist, do not touch if permissive is already registered (even under different type)
|
|
46
|
+
action :add, description: "Add a permissive, unless already set." do
|
|
47
|
+
unless current_permissives.include? new_resource.context
|
|
48
|
+
converge_by "adding permissive context #{new_resource.context}" do
|
|
49
|
+
shell_out!("semanage permissive -a '#{new_resource.context}'")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Delete if exists
|
|
55
|
+
action :delete, description: "Remove a permissive, if set." do
|
|
56
|
+
if current_permissives.include? new_resource.context
|
|
57
|
+
converge_by "deleting permissive context #{new_resource.context}" do
|
|
58
|
+
shell_out!("semanage permissive -d '#{new_resource.context}'")
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|