chef 17.10.163 → 18.0.185

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.
Files changed (326) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +19 -20
  3. data/README.md +7 -7
  4. data/Rakefile +3 -22
  5. data/{chef-universal-mingw32.gemspec → chef-universal-mingw-ucrt.gemspec} +8 -7
  6. data/chef.gemspec +16 -14
  7. data/lib/chef/api_client_v1.rb +9 -1
  8. data/lib/chef/application/exit_code.rb +3 -3
  9. data/lib/chef/client.rb +182 -0
  10. data/lib/chef/compliance/input.rb +1 -1
  11. data/lib/chef/compliance/profile.rb +1 -1
  12. data/lib/chef/compliance/profile_collection.rb +0 -1
  13. data/lib/chef/compliance/waiver.rb +1 -1
  14. data/lib/chef/cookbook/syntax_check.rb +2 -2
  15. data/lib/chef/dsl/reader_helpers.rb +1 -1
  16. data/lib/chef/dsl/rest_resource.rb +77 -0
  17. data/lib/chef/event_dispatch/base.rb +3 -0
  18. data/lib/chef/exceptions.rb +8 -0
  19. data/lib/chef/http/authenticator.rb +170 -3
  20. data/lib/chef/http/ssl_policies.rb +4 -4
  21. data/lib/chef/mixin/homebrew_user.rb +5 -15
  22. data/lib/chef/mixin/openssl_helper.rb +13 -17
  23. data/lib/chef/mixin/powershell_exec.rb +5 -28
  24. data/lib/chef/node/mixin/immutablize_array.rb +1 -0
  25. data/lib/chef/property.rb +5 -3
  26. data/lib/chef/provider/group/windows.rb +1 -1
  27. data/lib/chef/provider/http_request.rb +11 -9
  28. data/lib/chef/provider/mount/linux.rb +5 -0
  29. data/lib/chef/provider/mount/mount.rb +8 -0
  30. data/lib/chef/provider/mount/windows.rb +1 -1
  31. data/lib/chef/provider/package/chocolatey.rb +1 -14
  32. data/lib/chef/provider/package/rubygems.rb +1 -1
  33. data/lib/chef/provider/package/snap.rb +1 -1
  34. data/lib/chef/provider/package/windows/msi.rb +2 -2
  35. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
  36. data/lib/chef/provider/package/yum/yum_helper.py +14 -2
  37. data/lib/chef/provider/package/zypper/version.rb +60 -0
  38. data/lib/chef/provider/package/zypper.rb +47 -8
  39. data/lib/chef/provider/service/windows.rb +1 -1
  40. data/lib/chef/provider/user/aix.rb +5 -0
  41. data/lib/chef/provider/user/linux.rb +29 -0
  42. data/lib/chef/provider/user/mac.rb +1 -1
  43. data/lib/chef/provider/user.rb +46 -14
  44. data/lib/chef/provider.rb +1 -1
  45. data/lib/chef/recipe.rb +1 -1
  46. data/lib/chef/resource/_rest_resource.rb +389 -0
  47. data/lib/chef/resource/alternatives.rb +0 -1
  48. data/lib/chef/resource/apt_package.rb +2 -1
  49. data/lib/chef/resource/apt_preference.rb +0 -1
  50. data/lib/chef/resource/apt_repository.rb +0 -1
  51. data/lib/chef/resource/apt_update.rb +0 -1
  52. data/lib/chef/resource/archive_file.rb +0 -1
  53. data/lib/chef/resource/bash.rb +0 -1
  54. data/lib/chef/resource/batch.rb +0 -1
  55. data/lib/chef/resource/bff_package.rb +0 -1
  56. data/lib/chef/resource/breakpoint.rb +0 -1
  57. data/lib/chef/resource/build_essential.rb +0 -1
  58. data/lib/chef/resource/cab_package.rb +0 -1
  59. data/lib/chef/resource/chef_client_config.rb +14 -18
  60. data/lib/chef/resource/chef_client_cron.rb +1 -2
  61. data/lib/chef/resource/chef_client_launchd.rb +2 -2
  62. data/lib/chef/resource/chef_client_scheduled_task.rb +3 -3
  63. data/lib/chef/resource/chef_client_systemd_timer.rb +1 -2
  64. data/lib/chef/resource/chef_client_trusted_certificate.rb +0 -1
  65. data/lib/chef/resource/chef_gem.rb +0 -1
  66. data/lib/chef/resource/chef_handler.rb +0 -1
  67. data/lib/chef/resource/chef_sleep.rb +1 -3
  68. data/lib/chef/resource/chef_vault_secret.rb +0 -1
  69. data/lib/chef/resource/chocolatey_config.rb +0 -1
  70. data/lib/chef/resource/chocolatey_feature.rb +0 -1
  71. data/lib/chef/resource/chocolatey_package.rb +0 -1
  72. data/lib/chef/resource/chocolatey_source.rb +0 -1
  73. data/lib/chef/resource/cookbook_file.rb +0 -1
  74. data/lib/chef/resource/cron/_cron_shared.rb +0 -1
  75. data/lib/chef/resource/cron/cron.rb +0 -1
  76. data/lib/chef/resource/cron/cron_d.rb +15 -1
  77. data/lib/chef/resource/cron_access.rb +0 -1
  78. data/lib/chef/resource/csh.rb +0 -1
  79. data/lib/chef/resource/directory.rb +0 -1
  80. data/lib/chef/resource/dmg_package.rb +2 -1
  81. data/lib/chef/resource/dnf_package.rb +0 -1
  82. data/lib/chef/resource/dpkg_package.rb +0 -1
  83. data/lib/chef/resource/dsc_resource.rb +0 -1
  84. data/lib/chef/resource/dsc_script.rb +0 -1
  85. data/lib/chef/resource/execute.rb +0 -1
  86. data/lib/chef/resource/file.rb +0 -1
  87. data/lib/chef/resource/freebsd_package.rb +2 -1
  88. data/lib/chef/resource/gem_package.rb +2 -1
  89. data/lib/chef/resource/group.rb +25 -2
  90. data/lib/chef/resource/habitat/habitat_package.rb +0 -1
  91. data/lib/chef/resource/habitat/habitat_sup.rb +6 -7
  92. data/lib/chef/resource/habitat/habitat_sup_windows.rb +1 -1
  93. data/lib/chef/resource/habitat_config.rb +0 -1
  94. data/lib/chef/resource/habitat_install.rb +0 -1
  95. data/lib/chef/resource/habitat_service.rb +0 -1
  96. data/lib/chef/resource/habitat_user_toml.rb +0 -1
  97. data/lib/chef/resource/homebrew_cask.rb +8 -8
  98. data/lib/chef/resource/homebrew_package.rb +3 -2
  99. data/lib/chef/resource/homebrew_tap.rb +5 -6
  100. data/lib/chef/resource/homebrew_update.rb +0 -2
  101. data/lib/chef/resource/hostname.rb +0 -1
  102. data/lib/chef/resource/http_request.rb +0 -1
  103. data/lib/chef/resource/ifconfig.rb +0 -1
  104. data/lib/chef/resource/inspec_input.rb +0 -1
  105. data/lib/chef/resource/inspec_waiver.rb +0 -1
  106. data/lib/chef/resource/inspec_waiver_file_entry.rb +2 -3
  107. data/lib/chef/resource/ips_package.rb +0 -1
  108. data/lib/chef/resource/kernel_module.rb +0 -1
  109. data/lib/chef/resource/ksh.rb +0 -1
  110. data/lib/chef/resource/launchd.rb +0 -1
  111. data/lib/chef/resource/link.rb +0 -1
  112. data/lib/chef/resource/locale.rb +2 -6
  113. data/lib/chef/resource/log.rb +0 -1
  114. data/lib/chef/resource/lwrp_base.rb +0 -4
  115. data/lib/chef/resource/macos_userdefaults.rb +5 -10
  116. data/lib/chef/resource/macosx_service.rb +0 -1
  117. data/lib/chef/resource/macports_package.rb +2 -1
  118. data/lib/chef/resource/mdadm.rb +0 -1
  119. data/lib/chef/resource/mount.rb +0 -1
  120. data/lib/chef/resource/msu_package.rb +0 -1
  121. data/lib/chef/resource/notify_group.rb +0 -2
  122. data/lib/chef/resource/ohai.rb +0 -1
  123. data/lib/chef/resource/ohai_hint.rb +0 -1
  124. data/lib/chef/resource/openbsd_package.rb +2 -1
  125. data/lib/chef/resource/openssl_dhparam.rb +0 -2
  126. data/lib/chef/resource/openssl_ec_private_key.rb +0 -2
  127. data/lib/chef/resource/openssl_ec_public_key.rb +0 -2
  128. data/lib/chef/resource/openssl_rsa_private_key.rb +0 -2
  129. data/lib/chef/resource/openssl_rsa_public_key.rb +0 -2
  130. data/lib/chef/resource/openssl_x509_certificate.rb +0 -2
  131. data/lib/chef/resource/openssl_x509_crl.rb +0 -2
  132. data/lib/chef/resource/openssl_x509_request.rb +0 -2
  133. data/lib/chef/resource/osx_profile.rb +0 -1
  134. data/lib/chef/resource/package.rb +0 -1
  135. data/lib/chef/resource/pacman_package.rb +2 -1
  136. data/lib/chef/resource/paludis_package.rb +0 -1
  137. data/lib/chef/resource/perl.rb +0 -1
  138. data/lib/chef/resource/plist.rb +7 -3
  139. data/lib/chef/resource/portage_package.rb +2 -1
  140. data/lib/chef/resource/powershell_package.rb +0 -1
  141. data/lib/chef/resource/powershell_package_source.rb +0 -1
  142. data/lib/chef/resource/powershell_script.rb +0 -1
  143. data/lib/chef/resource/python.rb +0 -1
  144. data/lib/chef/resource/reboot.rb +0 -1
  145. data/lib/chef/resource/registry_key.rb +0 -1
  146. data/lib/chef/resource/remote_directory.rb +0 -1
  147. data/lib/chef/resource/remote_file.rb +0 -1
  148. data/lib/chef/resource/rhsm_errata.rb +0 -1
  149. data/lib/chef/resource/rhsm_errata_level.rb +0 -1
  150. data/lib/chef/resource/rhsm_register.rb +0 -3
  151. data/lib/chef/resource/rhsm_repo.rb +0 -1
  152. data/lib/chef/resource/rhsm_subscription.rb +0 -1
  153. data/lib/chef/resource/route.rb +0 -1
  154. data/lib/chef/resource/rpm_package.rb +2 -1
  155. data/lib/chef/resource/ruby.rb +0 -1
  156. data/lib/chef/resource/ruby_block.rb +0 -1
  157. data/lib/chef/resource/scm/_scm.rb +0 -2
  158. data/lib/chef/resource/scm/git.rb +0 -2
  159. data/lib/chef/resource/scm/subversion.rb +0 -2
  160. data/lib/chef/resource/script.rb +0 -1
  161. data/lib/chef/resource/selinux/common_helpers.rb +47 -0
  162. data/lib/chef/resource/selinux/selinux_debian.erb +18 -0
  163. data/lib/chef/resource/selinux/selinux_default.erb +15 -0
  164. data/lib/chef/resource/selinux_boolean.rb +101 -0
  165. data/lib/chef/resource/selinux_fcontext.rb +160 -0
  166. data/lib/chef/resource/selinux_install.rb +107 -0
  167. data/lib/chef/resource/selinux_module.rb +143 -0
  168. data/lib/chef/resource/selinux_permissive.rb +64 -0
  169. data/lib/chef/resource/selinux_port.rb +118 -0
  170. data/lib/chef/resource/selinux_state.rb +166 -0
  171. data/lib/chef/resource/service.rb +0 -1
  172. data/lib/chef/resource/smartos_package.rb +2 -1
  173. data/lib/chef/resource/snap_package.rb +2 -1
  174. data/lib/chef/resource/solaris_package.rb +2 -1
  175. data/lib/chef/resource/ssh_known_hosts_entry.rb +0 -1
  176. data/lib/chef/resource/sudo.rb +0 -1
  177. data/lib/chef/resource/support/client.erb +5 -6
  178. data/lib/chef/resource/swap_file.rb +0 -1
  179. data/lib/chef/resource/sysctl.rb +1 -2
  180. data/lib/chef/resource/systemd_unit.rb +0 -1
  181. data/lib/chef/resource/template.rb +0 -1
  182. data/lib/chef/resource/timezone.rb +0 -1
  183. data/lib/chef/resource/user/aix_user.rb +0 -1
  184. data/lib/chef/resource/user/linux_user.rb +0 -1
  185. data/lib/chef/resource/user/mac_user.rb +0 -1
  186. data/lib/chef/resource/user/pw_user.rb +0 -1
  187. data/lib/chef/resource/user/solaris_user.rb +0 -1
  188. data/lib/chef/resource/user/windows_user.rb +0 -1
  189. data/lib/chef/resource/user.rb +10 -1
  190. data/lib/chef/resource/user_ulimit.rb +0 -1
  191. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -1
  192. data/lib/chef/resource/windows_ad_join.rb +0 -2
  193. data/lib/chef/resource/windows_audit_policy.rb +0 -2
  194. data/lib/chef/resource/windows_auto_run.rb +0 -1
  195. data/lib/chef/resource/windows_defender.rb +0 -1
  196. data/lib/chef/resource/windows_defender_exclusion.rb +0 -1
  197. data/lib/chef/resource/windows_dfs_folder.rb +0 -1
  198. data/lib/chef/resource/windows_dfs_namespace.rb +0 -1
  199. data/lib/chef/resource/windows_dfs_server.rb +0 -1
  200. data/lib/chef/resource/windows_dns_record.rb +0 -1
  201. data/lib/chef/resource/windows_dns_zone.rb +0 -1
  202. data/lib/chef/resource/windows_env.rb +0 -1
  203. data/lib/chef/resource/windows_feature.rb +0 -1
  204. data/lib/chef/resource/windows_feature_dism.rb +0 -1
  205. data/lib/chef/resource/windows_feature_powershell.rb +0 -1
  206. data/lib/chef/resource/windows_firewall_profile.rb +0 -2
  207. data/lib/chef/resource/windows_firewall_rule.rb +0 -1
  208. data/lib/chef/resource/windows_font.rb +2 -3
  209. data/lib/chef/resource/windows_package.rb +3 -4
  210. data/lib/chef/resource/windows_pagefile.rb +0 -2
  211. data/lib/chef/resource/windows_path.rb +0 -1
  212. data/lib/chef/resource/windows_printer.rb +0 -1
  213. data/lib/chef/resource/windows_printer_port.rb +0 -1
  214. data/lib/chef/resource/windows_script.rb +0 -2
  215. data/lib/chef/resource/windows_security_policy.rb +0 -1
  216. data/lib/chef/resource/windows_service.rb +0 -1
  217. data/lib/chef/resource/windows_share.rb +0 -1
  218. data/lib/chef/resource/windows_shortcut.rb +1 -2
  219. data/lib/chef/resource/windows_task.rb +0 -1
  220. data/lib/chef/resource/windows_uac.rb +0 -1
  221. data/lib/chef/resource/windows_update_settings.rb +0 -1
  222. data/lib/chef/resource/windows_user_privilege.rb +0 -1
  223. data/lib/chef/resource/windows_workgroup.rb +0 -1
  224. data/lib/chef/resource/yum_package.rb +2 -1
  225. data/lib/chef/resource/yum_repository.rb +0 -1
  226. data/lib/chef/resource/zypper_package.rb +2 -1
  227. data/lib/chef/resource/zypper_repository.rb +0 -1
  228. data/lib/chef/resource.rb +12 -5
  229. data/lib/chef/resources.rb +7 -0
  230. data/lib/chef/run_context.rb +3 -3
  231. data/lib/chef/secret_fetcher/azure_key_vault.rb +1 -1
  232. data/lib/chef/version.rb +1 -1
  233. data/lib/chef/win32/handle.rb +6 -7
  234. data/lib/chef/win32/registry.rb +7 -3
  235. data/spec/data/rubygems.org/sexp_processor-info +2 -1
  236. data/spec/data/trusted_certs/example.crt +20 -29
  237. data/spec/data/trusted_certs/example_no_cn.crt +34 -30
  238. data/spec/data/trusted_certs/opscode.pem +54 -33
  239. data/spec/functional/resource/chocolatey_package_spec.rb +20 -32
  240. data/spec/functional/resource/dsc_script_spec.rb +1 -1
  241. data/spec/functional/resource/group_spec.rb +26 -42
  242. data/spec/functional/resource/link_spec.rb +8 -8
  243. data/spec/functional/resource/macos_userdefaults_spec.rb +4 -4
  244. data/spec/functional/resource/plist_spec.rb +25 -0
  245. data/spec/functional/resource/user/linux_user_spec.rb +127 -0
  246. data/spec/functional/resource/windows_certificate_spec.rb +1 -26
  247. data/spec/functional/resource/windows_font_spec.rb +12 -9
  248. data/spec/functional/resource/yum_package_spec.rb +1 -17
  249. data/spec/functional/resource/zypper_package_spec.rb +12 -10
  250. data/spec/functional/shell_spec.rb +1 -2
  251. data/spec/functional/version_spec.rb +1 -1
  252. data/spec/functional/win32/registry_spec.rb +0 -3
  253. data/spec/integration/client/client_spec.rb +82 -3
  254. data/spec/integration/client/exit_code_spec.rb +1 -1
  255. data/spec/integration/client/ipv6_spec.rb +1 -1
  256. data/spec/integration/compliance/compliance_spec.rb +1 -1
  257. data/spec/integration/recipes/accumulator_spec.rb +1 -1
  258. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +1 -1
  259. data/spec/integration/recipes/lwrp_spec.rb +1 -1
  260. data/spec/integration/recipes/notifies_spec.rb +1 -1
  261. data/spec/integration/recipes/notifying_block_spec.rb +1 -1
  262. data/spec/integration/recipes/remote_directory.rb +1 -1
  263. data/spec/integration/recipes/unified_mode_spec.rb +1 -1
  264. data/spec/integration/recipes/use_partial_spec.rb +2 -1
  265. data/spec/integration/solo/solo_spec.rb +2 -2
  266. data/spec/spec_helper.rb +1 -5
  267. data/spec/support/platform_helpers.rb +0 -4
  268. data/spec/support/ruby_installer.rb +1 -1
  269. data/spec/support/shared/functional/windows_script.rb +2 -2
  270. data/spec/unit/application/client_spec.rb +0 -10
  271. data/spec/unit/client_spec.rb +70 -2
  272. data/spec/unit/compliance/reporter/chef_server_automate_spec.rb +1 -1
  273. data/spec/unit/cookbook/syntax_check_spec.rb +3 -0
  274. data/spec/unit/http/authenticator_spec.rb +68 -0
  275. data/spec/unit/mixin/homebrew_user_spec.rb +7 -30
  276. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  277. data/spec/unit/mixin/powershell_exec_spec.rb +5 -5
  278. data/spec/unit/platform/query_helpers_spec.rb +2 -17
  279. data/spec/unit/provider/cron_spec.rb +2 -0
  280. data/spec/unit/provider/http_request_spec.rb +60 -72
  281. data/spec/unit/provider/mount/linux_spec.rb +10 -0
  282. data/spec/unit/provider/package/chocolatey_spec.rb +3 -20
  283. data/spec/unit/provider/package/rubygems_spec.rb +1 -1
  284. data/spec/unit/provider/package/zypper_spec.rb +32 -0
  285. data/spec/unit/provider/user/linux_spec.rb +51 -11
  286. data/spec/unit/provider/user_spec.rb +24 -6
  287. data/spec/unit/resource/archive_file_spec.rb +1 -1
  288. data/spec/unit/resource/chef_client_cron_spec.rb +5 -0
  289. data/spec/unit/resource/chef_client_launchd_spec.rb +5 -0
  290. data/spec/unit/resource/chef_client_scheduled_task_spec.rb +5 -0
  291. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +2 -2
  292. data/spec/unit/resource/cron_d_spec.rb +37 -1
  293. data/spec/unit/resource/macos_user_defaults_spec.rb +4 -4
  294. data/spec/unit/resource/rest_resource_spec.rb +381 -0
  295. data/spec/unit/resource/selinux_boolean_spec.rb +92 -0
  296. data/spec/unit/resource/selinux_fcontext_spec.rb +65 -0
  297. data/spec/unit/resource/selinux_install_spec.rb +60 -0
  298. data/spec/unit/resource/selinux_module_spec.rb +55 -0
  299. data/spec/unit/resource/selinux_permissive_spec.rb +39 -0
  300. data/spec/unit/resource/selinux_port_spec.rb +42 -0
  301. data/spec/unit/resource/selinux_state_spec.rb +46 -0
  302. data/spec/unit/resource/sysctl_spec.rb +2 -2
  303. data/spec/unit/resource/user/linux_user_spec.rb +42 -0
  304. data/spec/unit/resource_spec.rb +8 -2
  305. data/spec/unit/util/dsc/local_configuration_manager_spec.rb +1 -1
  306. data/tasks/rspec.rb +1 -1
  307. metadata +100 -55
  308. data/spec/functional/assets/yumrepo-empty/repodata/01a3b-filelists.sqlite.bz2 +0 -0
  309. data/spec/functional/assets/yumrepo-empty/repodata/401dc-filelists.xml.gz +0 -0
  310. data/spec/functional/assets/yumrepo-empty/repodata/5dc1e-primary.sqlite.bz2 +0 -0
  311. data/spec/functional/assets/yumrepo-empty/repodata/6bf96-other.xml.gz +0 -0
  312. data/spec/functional/assets/yumrepo-empty/repodata/7c365-other.sqlite.bz2 +0 -0
  313. data/spec/functional/assets/yumrepo-empty/repodata/dabe2-primary.xml.gz +0 -0
  314. data/spec/functional/assets/yumrepo-empty/repodata/repomd.xml +0 -55
  315. data/spec/integration/client/fips_spec.rb +0 -29
  316. data/spec/integration/client/open_ssl_spec.rb +0 -20
  317. /data/spec/functional/assets/chocolatey_feed/{test-A.1.0.0.nupkg → test-A.1.0.nupkg} +0 -0
  318. /data/spec/functional/assets/chocolatey_feed/{test-A.1.5.0.nupkg → test-A.1.5.nupkg} +0 -0
  319. /data/spec/functional/assets/chocolatey_feed/{test-A.2.0.0.nupkg → test-A.2.0.nupkg} +0 -0
  320. /data/spec/functional/assets/chocolatey_feed/{test-B.1.0.0.nupkg → test-B.1.0.nupkg} +0 -0
  321. /data/spec/functional/assets/yumrepo/repodata/{01a3b-filelists.sqlite.bz2 → 4632d67cb92636e7575d911c24f0e04d3505a944e97c483abe0c3e73a7c62d33-filelists.sqlite.bz2} +0 -0
  322. /data/spec/functional/assets/yumrepo/repodata/{6bf96-other.xml.gz → 74599b793e54d877323837d2d81a1c3c594c44e4335f9528234bb490f7b9b439-other.xml.gz} +0 -0
  323. /data/spec/functional/assets/yumrepo/repodata/{5dc1e-primary.sqlite.bz2 → a845d418f919d2115ab95a56b2c76f6825ad0d0bede49181a55c04f58995d057-primary.sqlite.bz2} +0 -0
  324. /data/spec/functional/assets/yumrepo/repodata/{7c365-other.sqlite.bz2 → af9b7cf9ef23bd7b43068d74a460f3b5d06753d638e58e4a0c9edc35bfb9cdc4-other.sqlite.bz2} +0 -0
  325. /data/spec/functional/assets/yumrepo/repodata/{401dc-filelists.xml.gz → bdb4f5f1492a3b9532f22c43110a81500dd744f23da0aec5c33b2a41317c737d-filelists.xml.gz} +0 -0
  326. /data/spec/functional/assets/yumrepo/repodata/{dabe2-primary.xml.gz → c10d1d34ce99e02f12ec96ef68360543ab1bb7c3cb81a4a2bf78df7d8597e9df-primary.xml.gz} +0 -0
@@ -0,0 +1,18 @@
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
+ # default - equivalent to the old strict and targeted policies
13
+ # mls - Multi-Level Security (for military and educational use)
14
+ # src - Custom policy built from source
15
+ SELINUXTYPE=<%= @selinuxtype %>
16
+
17
+ # SETLOCALDEFS= Check local definition changes
18
+ SETLOCALDEFS=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