inspec 2.0.32 → 2.0.45
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/.rubocop.yml +101 -101
- data/CHANGELOG.md +2991 -2970
- data/Gemfile +55 -55
- data/LICENSE +14 -14
- data/MAINTAINERS.md +33 -33
- data/MAINTAINERS.toml +52 -52
- data/README.md +446 -437
- data/Rakefile +322 -322
- data/bin/inspec +12 -12
- data/docs/.gitignore +2 -2
- data/docs/README.md +40 -40
- data/docs/dsl_inspec.md +258 -258
- data/docs/dsl_resource.md +93 -93
- data/docs/glossary.md +99 -99
- data/docs/habitat.md +191 -191
- data/docs/inspec_and_friends.md +107 -107
- data/docs/matchers.md +169 -168
- data/docs/migration.md +293 -293
- data/docs/platforms.md +118 -118
- data/docs/plugin_kitchen_inspec.md +49 -49
- data/docs/profiles.md +370 -370
- data/docs/reporters.md +105 -105
- data/docs/resources/aide_conf.md.erb +75 -75
- data/docs/resources/apache.md.erb +67 -67
- data/docs/resources/apache_conf.md.erb +68 -68
- data/docs/resources/apt.md.erb +71 -71
- data/docs/resources/audit_policy.md.erb +47 -47
- data/docs/resources/auditd.md.erb +79 -79
- data/docs/resources/auditd_conf.md.erb +68 -68
- data/docs/resources/aws_cloudtrail_trail.md.erb +140 -140
- data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
- data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
- data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
- data/docs/resources/aws_config_recorder.md.erb +71 -71
- data/docs/resources/aws_ec2_instance.md.erb +106 -106
- data/docs/resources/aws_iam_access_key.md.erb +123 -123
- data/docs/resources/aws_iam_access_keys.md.erb +198 -198
- data/docs/resources/aws_iam_group.md.erb +46 -46
- data/docs/resources/aws_iam_groups.md.erb +43 -43
- data/docs/resources/aws_iam_password_policy.md.erb +76 -76
- data/docs/resources/aws_iam_policies.md.erb +82 -82
- data/docs/resources/aws_iam_policy.md.erb +144 -144
- data/docs/resources/aws_iam_role.md.erb +63 -63
- data/docs/resources/aws_iam_root_user.md.erb +58 -58
- data/docs/resources/aws_iam_user.md.erb +64 -64
- data/docs/resources/aws_iam_users.md.erb +89 -89
- data/docs/resources/aws_kms_keys.md.erb +84 -84
- data/docs/resources/aws_route_table.md.erb +47 -47
- data/docs/resources/aws_s3_bucket.md.erb +134 -134
- data/docs/resources/aws_security_group.md.erb +151 -151
- data/docs/resources/aws_security_groups.md.erb +91 -91
- data/docs/resources/aws_sns_topic.md.erb +63 -63
- data/docs/resources/aws_subnet.md.erb +133 -133
- data/docs/resources/aws_subnets.md.erb +126 -126
- data/docs/resources/aws_vpc.md.erb +120 -120
- data/docs/resources/aws_vpcs.md.erb +48 -48
- data/docs/resources/azure_generic_resource.md.erb +170 -170
- data/docs/resources/azure_resource_group.md.erb +284 -284
- data/docs/resources/azure_virtual_machine.md.erb +347 -347
- data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -224
- data/docs/resources/bash.md.erb +75 -75
- data/docs/resources/bond.md.erb +90 -90
- data/docs/resources/bridge.md.erb +57 -57
- data/docs/resources/bsd_service.md.erb +67 -67
- data/docs/resources/command.md.erb +138 -138
- data/docs/resources/cpan.md.erb +79 -79
- data/docs/resources/cran.md.erb +64 -64
- data/docs/resources/crontab.md.erb +89 -89
- data/docs/resources/csv.md.erb +54 -54
- data/docs/resources/dh_params.md.erb +205 -205
- data/docs/resources/directory.md.erb +30 -30
- data/docs/resources/docker.md.erb +219 -219
- data/docs/resources/docker_container.md.erb +104 -104
- data/docs/resources/docker_image.md.erb +94 -94
- data/docs/resources/docker_service.md.erb +114 -114
- data/docs/resources/elasticsearch.md.erb +242 -242
- data/docs/resources/etc_fstab.md.erb +125 -125
- data/docs/resources/etc_group.md.erb +75 -75
- data/docs/resources/etc_hosts.md.erb +78 -78
- data/docs/resources/etc_hosts_allow.md.erb +74 -74
- data/docs/resources/etc_hosts_deny.md.erb +74 -74
- data/docs/resources/file.md.erb +526 -515
- data/docs/resources/filesystem.md.erb +41 -41
- data/docs/resources/firewalld.md.erb +107 -107
- data/docs/resources/gem.md.erb +79 -79
- data/docs/resources/group.md.erb +61 -61
- data/docs/resources/grub_conf.md.erb +101 -101
- data/docs/resources/host.md.erb +86 -86
- data/docs/resources/http.md.erb +196 -196
- data/docs/resources/iis_app.md.erb +122 -122
- data/docs/resources/iis_site.md.erb +135 -135
- data/docs/resources/inetd_conf.md.erb +94 -94
- data/docs/resources/ini.md.erb +76 -76
- data/docs/resources/interface.md.erb +58 -58
- data/docs/resources/iptables.md.erb +64 -64
- data/docs/resources/json.md.erb +63 -63
- data/docs/resources/kernel_module.md.erb +120 -120
- data/docs/resources/kernel_parameter.md.erb +53 -53
- data/docs/resources/key_rsa.md.erb +85 -85
- data/docs/resources/launchd_service.md.erb +57 -57
- data/docs/resources/limits_conf.md.erb +75 -75
- data/docs/resources/login_def.md.erb +71 -71
- data/docs/resources/mount.md.erb +69 -69
- data/docs/resources/mssql_session.md.erb +60 -60
- data/docs/resources/mysql_conf.md.erb +99 -99
- data/docs/resources/mysql_session.md.erb +74 -74
- data/docs/resources/nginx.md.erb +79 -79
- data/docs/resources/nginx_conf.md.erb +128 -128
- data/docs/resources/npm.md.erb +60 -60
- data/docs/resources/ntp_conf.md.erb +60 -60
- data/docs/resources/oneget.md.erb +53 -53
- data/docs/resources/oracledb_session.md.erb +52 -52
- data/docs/resources/os.md.erb +141 -141
- data/docs/resources/os_env.md.erb +78 -78
- data/docs/resources/package.md.erb +120 -120
- data/docs/resources/packages.md.erb +67 -67
- data/docs/resources/parse_config.md.erb +103 -103
- data/docs/resources/parse_config_file.md.erb +138 -138
- data/docs/resources/passwd.md.erb +141 -141
- data/docs/resources/pip.md.erb +67 -67
- data/docs/resources/port.md.erb +137 -137
- data/docs/resources/postgres_conf.md.erb +79 -79
- data/docs/resources/postgres_hba_conf.md.erb +93 -93
- data/docs/resources/postgres_ident_conf.md.erb +76 -76
- data/docs/resources/postgres_session.md.erb +69 -69
- data/docs/resources/powershell.md.erb +102 -102
- data/docs/resources/processes.md.erb +109 -109
- data/docs/resources/rabbitmq_config.md.erb +41 -41
- data/docs/resources/registry_key.md.erb +158 -158
- data/docs/resources/runit_service.md.erb +57 -57
- data/docs/resources/security_policy.md.erb +47 -47
- data/docs/resources/service.md.erb +121 -121
- data/docs/resources/shadow.md.erb +146 -144
- data/docs/resources/ssh_config.md.erb +80 -80
- data/docs/resources/sshd_config.md.erb +83 -83
- data/docs/resources/ssl.md.erb +119 -119
- data/docs/resources/sys_info.md.erb +42 -42
- data/docs/resources/systemd_service.md.erb +57 -57
- data/docs/resources/sysv_service.md.erb +57 -57
- data/docs/resources/upstart_service.md.erb +57 -57
- data/docs/resources/user.md.erb +140 -140
- data/docs/resources/users.md.erb +127 -127
- data/docs/resources/vbscript.md.erb +55 -55
- data/docs/resources/virtualization.md.erb +57 -57
- data/docs/resources/windows_feature.md.erb +47 -47
- data/docs/resources/windows_hotfix.md.erb +53 -53
- data/docs/resources/windows_task.md.erb +95 -95
- data/docs/resources/wmi.md.erb +81 -81
- data/docs/resources/x509_certificate.md.erb +151 -151
- data/docs/resources/xinetd_conf.md.erb +156 -156
- data/docs/resources/xml.md.erb +85 -85
- data/docs/resources/yaml.md.erb +69 -69
- data/docs/resources/yum.md.erb +98 -98
- data/docs/resources/zfs_dataset.md.erb +53 -53
- data/docs/resources/zfs_pool.md.erb +47 -47
- data/docs/ruby_usage.md +203 -203
- data/docs/shared/matcher_be.md.erb +1 -1
- data/docs/shared/matcher_cmp.md.erb +43 -43
- data/docs/shared/matcher_eq.md.erb +3 -3
- data/docs/shared/matcher_include.md.erb +1 -1
- data/docs/shared/matcher_match.md.erb +1 -1
- data/docs/shell.md +215 -215
- data/examples/README.md +8 -8
- data/examples/inheritance/README.md +65 -65
- data/examples/inheritance/controls/example.rb +14 -14
- data/examples/inheritance/inspec.yml +15 -15
- data/examples/kitchen-ansible/.kitchen.yml +25 -25
- data/examples/kitchen-ansible/Gemfile +19 -19
- data/examples/kitchen-ansible/README.md +53 -53
- data/examples/kitchen-ansible/files/nginx.repo +6 -6
- data/examples/kitchen-ansible/tasks/main.yml +16 -16
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-chef/.kitchen.yml +20 -20
- data/examples/kitchen-chef/Berksfile +3 -3
- data/examples/kitchen-chef/Gemfile +19 -19
- data/examples/kitchen-chef/README.md +27 -27
- data/examples/kitchen-chef/metadata.rb +7 -7
- data/examples/kitchen-chef/recipes/default.rb +6 -6
- data/examples/kitchen-chef/recipes/nginx.rb +30 -30
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-puppet/.kitchen.yml +22 -22
- data/examples/kitchen-puppet/Gemfile +20 -20
- data/examples/kitchen-puppet/Puppetfile +25 -25
- data/examples/kitchen-puppet/README.md +53 -53
- data/examples/kitchen-puppet/manifests/site.pp +33 -33
- data/examples/kitchen-puppet/metadata.json +11 -11
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
- data/examples/meta-profile/README.md +37 -37
- data/examples/meta-profile/controls/example.rb +13 -13
- data/examples/meta-profile/inspec.yml +13 -13
- data/examples/profile-attribute.yml +2 -2
- data/examples/profile-attribute/README.md +14 -14
- data/examples/profile-attribute/controls/example.rb +11 -11
- data/examples/profile-attribute/inspec.yml +8 -8
- data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
- data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
- data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
- data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
- data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
- data/examples/profile-aws/inspec.yml +11 -11
- data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
- data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
- data/examples/profile-azure/inspec.yml +11 -11
- data/examples/profile-sensitive/README.md +29 -29
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
- data/examples/profile-sensitive/controls/sensitive.rb +9 -9
- data/examples/profile-sensitive/inspec.yml +8 -8
- data/examples/profile/README.md +48 -48
- data/examples/profile/controls/example.rb +23 -23
- data/examples/profile/controls/gordon.rb +36 -36
- data/examples/profile/controls/meta.rb +34 -34
- data/examples/profile/inspec.yml +10 -10
- data/examples/profile/libraries/gordon_config.rb +53 -53
- data/inspec.gemspec +47 -47
- data/lib/bundles/README.md +3 -3
- data/lib/bundles/inspec-artifact.rb +7 -7
- data/lib/bundles/inspec-artifact/README.md +1 -1
- data/lib/bundles/inspec-artifact/cli.rb +277 -277
- data/lib/bundles/inspec-compliance.rb +16 -16
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
- data/lib/bundles/inspec-compliance/README.md +185 -185
- data/lib/bundles/inspec-compliance/api.rb +316 -316
- data/lib/bundles/inspec-compliance/api/login.rb +152 -152
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
- data/lib/bundles/inspec-compliance/cli.rb +254 -254
- data/lib/bundles/inspec-compliance/configuration.rb +103 -103
- data/lib/bundles/inspec-compliance/http.rb +86 -86
- data/lib/bundles/inspec-compliance/support.rb +36 -36
- data/lib/bundles/inspec-compliance/target.rb +98 -98
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
- data/lib/bundles/inspec-habitat.rb +12 -12
- data/lib/bundles/inspec-habitat/cli.rb +36 -36
- data/lib/bundles/inspec-habitat/log.rb +10 -10
- data/lib/bundles/inspec-habitat/profile.rb +390 -390
- data/lib/bundles/inspec-init.rb +8 -8
- data/lib/bundles/inspec-init/README.md +31 -31
- data/lib/bundles/inspec-init/cli.rb +97 -97
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
- data/lib/bundles/inspec-supermarket.rb +13 -13
- data/lib/bundles/inspec-supermarket/README.md +45 -45
- data/lib/bundles/inspec-supermarket/api.rb +84 -84
- data/lib/bundles/inspec-supermarket/cli.rb +73 -73
- data/lib/bundles/inspec-supermarket/target.rb +34 -34
- data/lib/fetchers/git.rb +163 -163
- data/lib/fetchers/local.rb +74 -74
- data/lib/fetchers/mock.rb +35 -35
- data/lib/fetchers/url.rb +204 -204
- data/lib/inspec.rb +24 -24
- data/lib/inspec/archive/tar.rb +29 -29
- data/lib/inspec/archive/zip.rb +19 -19
- data/lib/inspec/backend.rb +92 -92
- data/lib/inspec/base_cli.rb +355 -350
- data/lib/inspec/cached_fetcher.rb +66 -66
- data/lib/inspec/cli.rb +292 -292
- data/lib/inspec/completions/bash.sh.erb +45 -45
- data/lib/inspec/completions/fish.sh.erb +34 -34
- data/lib/inspec/completions/zsh.sh.erb +61 -61
- data/lib/inspec/control_eval_context.rb +179 -179
- data/lib/inspec/dependencies/cache.rb +72 -72
- data/lib/inspec/dependencies/dependency_set.rb +92 -92
- data/lib/inspec/dependencies/lockfile.rb +115 -115
- data/lib/inspec/dependencies/requirement.rb +123 -123
- data/lib/inspec/dependencies/resolver.rb +86 -86
- data/lib/inspec/describe.rb +27 -27
- data/lib/inspec/dsl.rb +66 -66
- data/lib/inspec/dsl_shared.rb +33 -33
- data/lib/inspec/env_printer.rb +157 -157
- data/lib/inspec/errors.rb +13 -13
- data/lib/inspec/exceptions.rb +12 -12
- data/lib/inspec/expect.rb +45 -45
- data/lib/inspec/fetcher.rb +45 -45
- data/lib/inspec/file_provider.rb +275 -275
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +250 -250
- data/lib/inspec/formatters/json_rspec.rb +20 -20
- data/lib/inspec/formatters/show_progress.rb +12 -12
- data/lib/inspec/library_eval_context.rb +58 -58
- data/lib/inspec/log.rb +11 -11
- data/lib/inspec/metadata.rb +247 -247
- data/lib/inspec/method_source.rb +24 -24
- data/lib/inspec/objects.rb +14 -14
- data/lib/inspec/objects/attribute.rb +65 -65
- data/lib/inspec/objects/control.rb +61 -61
- data/lib/inspec/objects/describe.rb +92 -92
- data/lib/inspec/objects/each_loop.rb +36 -36
- data/lib/inspec/objects/list.rb +15 -15
- data/lib/inspec/objects/or_test.rb +40 -40
- data/lib/inspec/objects/ruby_helper.rb +15 -15
- data/lib/inspec/objects/tag.rb +27 -27
- data/lib/inspec/objects/test.rb +87 -87
- data/lib/inspec/objects/value.rb +27 -27
- data/lib/inspec/plugins.rb +60 -60
- data/lib/inspec/plugins/cli.rb +24 -24
- data/lib/inspec/plugins/fetcher.rb +86 -86
- data/lib/inspec/plugins/resource.rb +135 -135
- data/lib/inspec/plugins/secret.rb +15 -15
- data/lib/inspec/plugins/source_reader.rb +40 -40
- data/lib/inspec/polyfill.rb +12 -12
- data/lib/inspec/profile.rb +510 -510
- data/lib/inspec/profile_context.rb +207 -207
- data/lib/inspec/profile_vendor.rb +66 -66
- data/lib/inspec/reporters.rb +54 -50
- data/lib/inspec/reporters/base.rb +24 -24
- data/lib/inspec/reporters/cli.rb +356 -356
- data/lib/inspec/reporters/json.rb +116 -116
- data/lib/inspec/reporters/json_min.rb +48 -48
- data/lib/inspec/reporters/junit.rb +77 -77
- data/lib/inspec/require_loader.rb +33 -33
- data/lib/inspec/resource.rb +186 -186
- data/lib/inspec/rule.rb +266 -266
- data/lib/inspec/runner.rb +345 -345
- data/lib/inspec/runner_mock.rb +41 -41
- data/lib/inspec/runner_rspec.rb +175 -175
- data/lib/inspec/runtime_profile.rb +26 -26
- data/lib/inspec/schema.rb +213 -213
- data/lib/inspec/secrets.rb +19 -19
- data/lib/inspec/secrets/yaml.rb +30 -30
- data/lib/inspec/shell.rb +220 -220
- data/lib/inspec/shell_detector.rb +90 -90
- data/lib/inspec/source_reader.rb +29 -29
- data/lib/inspec/version.rb +8 -8
- data/lib/matchers/matchers.rb +339 -339
- data/lib/resource_support/aws.rb +41 -41
- data/lib/resource_support/aws/aws_backend_base.rb +12 -12
- data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
- data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
- data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
- data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
- data/lib/resources/aide_conf.rb +159 -160
- data/lib/resources/apache.rb +48 -48
- data/lib/resources/apache_conf.rb +156 -156
- data/lib/resources/apt.rb +149 -149
- data/lib/resources/audit_policy.rb +63 -63
- data/lib/resources/auditd.rb +231 -231
- data/lib/resources/auditd_conf.rb +55 -55
- data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
- data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
- data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
- data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
- data/lib/resources/aws/aws_config_recorder.rb +98 -98
- data/lib/resources/aws/aws_ec2_instance.rb +157 -157
- data/lib/resources/aws/aws_iam_access_key.rb +106 -106
- data/lib/resources/aws/aws_iam_access_keys.rb +149 -144
- data/lib/resources/aws/aws_iam_group.rb +56 -56
- data/lib/resources/aws/aws_iam_groups.rb +52 -45
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +53 -46
- data/lib/resources/aws/aws_iam_policy.rb +125 -119
- data/lib/resources/aws/aws_iam_role.rb +51 -51
- data/lib/resources/aws/aws_iam_root_user.rb +60 -60
- data/lib/resources/aws/aws_iam_user.rb +111 -111
- data/lib/resources/aws/aws_iam_users.rb +108 -96
- data/lib/resources/aws/aws_kms_keys.rb +53 -46
- data/lib/resources/aws/aws_route_table.rb +61 -61
- data/lib/resources/aws/aws_s3_bucket.rb +115 -115
- data/lib/resources/aws/aws_security_group.rb +93 -93
- data/lib/resources/aws/aws_security_groups.rb +68 -68
- data/lib/resources/aws/aws_sns_topic.rb +53 -53
- data/lib/resources/aws/aws_subnet.rb +88 -88
- data/lib/resources/aws/aws_subnets.rb +53 -53
- data/lib/resources/aws/aws_vpc.rb +69 -69
- data/lib/resources/aws/aws_vpcs.rb +45 -45
- data/lib/resources/azure/azure_backend.rb +377 -377
- data/lib/resources/azure/azure_generic_resource.rb +59 -59
- data/lib/resources/azure/azure_resource_group.rb +152 -152
- data/lib/resources/azure/azure_virtual_machine.rb +264 -264
- data/lib/resources/azure/azure_virtual_machine_data_disk.rb +136 -136
- data/lib/resources/bash.rb +35 -35
- data/lib/resources/bond.rb +68 -68
- data/lib/resources/bridge.rb +122 -122
- data/lib/resources/command.rb +73 -69
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +169 -170
- data/lib/resources/csv.rb +60 -60
- data/lib/resources/dh_params.rb +82 -82
- data/lib/resources/directory.rb +25 -25
- data/lib/resources/docker.rb +236 -236
- data/lib/resources/docker_container.rb +89 -89
- data/lib/resources/docker_image.rb +83 -83
- data/lib/resources/docker_object.rb +57 -57
- data/lib/resources/docker_service.rb +90 -90
- data/lib/resources/elasticsearch.rb +169 -169
- data/lib/resources/etc_fstab.rb +101 -102
- data/lib/resources/etc_group.rb +152 -156
- data/lib/resources/etc_hosts.rb +82 -81
- data/lib/resources/etc_hosts_allow_deny.rb +122 -123
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +143 -144
- data/lib/resources/gem.rb +70 -70
- data/lib/resources/groups.rb +215 -215
- data/lib/resources/grub_conf.rb +237 -237
- data/lib/resources/host.rb +306 -300
- data/lib/resources/http.rb +251 -250
- data/lib/resources/iis_app.rb +101 -104
- data/lib/resources/iis_site.rb +148 -148
- data/lib/resources/inetd_conf.rb +62 -62
- data/lib/resources/ini.rb +29 -29
- data/lib/resources/interface.rb +129 -129
- data/lib/resources/iptables.rb +80 -69
- data/lib/resources/json.rb +117 -117
- data/lib/resources/kernel_module.rb +107 -107
- data/lib/resources/kernel_parameter.rb +58 -58
- data/lib/resources/key_rsa.rb +67 -67
- data/lib/resources/limits_conf.rb +55 -55
- data/lib/resources/login_def.rb +66 -66
- data/lib/resources/mount.rb +88 -88
- data/lib/resources/mssql_session.rb +101 -101
- data/lib/resources/mysql.rb +81 -81
- data/lib/resources/mysql_conf.rb +134 -134
- data/lib/resources/mysql_session.rb +71 -71
- data/lib/resources/nginx.rb +96 -96
- data/lib/resources/nginx_conf.rb +227 -227
- data/lib/resources/npm.rb +48 -48
- data/lib/resources/ntp_conf.rb +58 -58
- data/lib/resources/oneget.rb +71 -71
- data/lib/resources/oracledb_session.rb +139 -139
- data/lib/resources/os.rb +36 -36
- data/lib/resources/os_env.rb +76 -76
- data/lib/resources/package.rb +370 -370
- data/lib/resources/packages.rb +111 -111
- data/lib/resources/parse_config.rb +116 -116
- data/lib/resources/passwd.rb +74 -74
- data/lib/resources/pip.rb +89 -89
- data/lib/resources/platform.rb +109 -109
- data/lib/resources/port.rb +771 -771
- data/lib/resources/postgres.rb +130 -130
- data/lib/resources/postgres_conf.rb +121 -121
- data/lib/resources/postgres_hba_conf.rb +99 -100
- data/lib/resources/postgres_ident_conf.rb +76 -78
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +53 -57
- data/lib/resources/processes.rb +204 -204
- data/lib/resources/rabbitmq_conf.rb +52 -52
- data/lib/resources/registry_key.rb +296 -296
- data/lib/resources/security_policy.rb +180 -180
- data/lib/resources/service.rb +789 -789
- data/lib/resources/shadow.rb +146 -140
- data/lib/resources/ssh_conf.rb +102 -102
- data/lib/resources/ssl.rb +99 -99
- data/lib/resources/sys_info.rb +28 -28
- data/lib/resources/toml.rb +32 -32
- data/lib/resources/users.rb +654 -654
- data/lib/resources/vbscript.rb +68 -69
- data/lib/resources/virtualization.rb +247 -247
- data/lib/resources/windows_feature.rb +84 -84
- data/lib/resources/windows_hotfix.rb +35 -35
- data/lib/resources/windows_task.rb +102 -105
- data/lib/resources/wmi.rb +110 -113
- data/lib/resources/x509_certificate.rb +143 -143
- data/lib/resources/xinetd.rb +111 -111
- data/lib/resources/xml.rb +46 -46
- data/lib/resources/yaml.rb +47 -47
- data/lib/resources/yum.rb +180 -180
- data/lib/resources/zfs_dataset.rb +60 -60
- data/lib/resources/zfs_pool.rb +49 -49
- data/lib/source_readers/flat.rb +39 -39
- data/lib/source_readers/inspec.rb +75 -75
- data/lib/utils/command_wrapper.rb +27 -27
- data/lib/utils/convert.rb +12 -12
- data/lib/utils/database_helpers.rb +77 -77
- data/lib/utils/erlang_parser.rb +192 -192
- data/lib/utils/filter.rb +272 -272
- data/lib/utils/filter_array.rb +27 -27
- data/lib/utils/find_files.rb +44 -44
- data/lib/utils/hash.rb +41 -41
- data/lib/utils/json_log.rb +18 -18
- data/lib/utils/latest_version.rb +22 -22
- data/lib/utils/modulator.rb +12 -12
- data/lib/utils/nginx_parser.rb +85 -85
- data/lib/utils/object_traversal.rb +49 -49
- data/lib/utils/parser.rb +274 -274
- data/lib/utils/plugin_registry.rb +93 -93
- data/lib/utils/simpleconfig.rb +120 -120
- data/lib/utils/spdx.rb +13 -13
- data/lib/utils/spdx.txt +343 -343
- metadata +2 -2
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
require 'hashie/mash'
|
|
4
|
-
require 'utils/database_helpers'
|
|
5
|
-
|
|
6
|
-
module Inspec::Resources
|
|
7
|
-
# STABILITY: Experimental
|
|
8
|
-
# This resource needs further testing and refinement
|
|
9
|
-
#
|
|
10
|
-
# This requires the `sqlcmd` tool available on platform
|
|
11
|
-
# @see https://docs.microsoft.com/en-us/sql/relational-databases/scripting/sqlcmd-use-the-utility
|
|
12
|
-
# @see https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-connect-and-query-sqlcmd
|
|
13
|
-
class MssqlSession < Inspec.resource(1)
|
|
14
|
-
name 'mssql_session'
|
|
15
|
-
supports platform: 'windows'
|
|
16
|
-
desc 'Use the mssql_session InSpec audit resource to test SQL commands run against a MS Sql Server database.'
|
|
17
|
-
example "
|
|
18
|
-
# Using SQL authentication
|
|
19
|
-
sql = mssql_session(user: 'myuser', pass: 'mypassword')
|
|
20
|
-
describe sql.query('SELECT * FROM table').row(0).column('columnname') do
|
|
21
|
-
its('value') { should cmp == 1 }
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Passing no credentials to mssql_session forces it to use Windows authentication
|
|
25
|
-
sql_windows_auth = mssql_session
|
|
26
|
-
describe sql_windows_auth.query(\"SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') as \\\"login_mode\\\";\").row(0).column('login_mode') do
|
|
27
|
-
its('value') { should_not be_empty }
|
|
28
|
-
its('value') { should cmp == 1 }
|
|
29
|
-
end
|
|
30
|
-
"
|
|
31
|
-
|
|
32
|
-
attr_reader :user, :password, :host, :port, :instance
|
|
33
|
-
def initialize(opts = {})
|
|
34
|
-
@user = opts[:user]
|
|
35
|
-
@password = opts[:password] || opts[:pass]
|
|
36
|
-
if opts[:pass]
|
|
37
|
-
warn '[DEPRECATED] use `password` option to supply password instead of `pass`'
|
|
38
|
-
end
|
|
39
|
-
@host = opts[:host] || 'localhost'
|
|
40
|
-
@port = opts[:port] || '1433'
|
|
41
|
-
@instance = opts[:instance]
|
|
42
|
-
|
|
43
|
-
# check if sqlcmd is available
|
|
44
|
-
raise Inspec::Exceptions::ResourceSkipped, 'sqlcmd is missing' unless inspec.command('sqlcmd').exist?
|
|
45
|
-
# check that database is reachable
|
|
46
|
-
raise Inspec::Exceptions::ResourceSkipped, "Can't connect to the MS SQL Server." unless test_connection
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def query(q)
|
|
50
|
-
escaped_query = q.gsub(/\\/, '\\\\').gsub(/"/, '\\"').gsub(/\$/, '\\$')
|
|
51
|
-
# surpress 'x rows affected' in SQLCMD with 'set nocount on;'
|
|
52
|
-
cmd_string = "sqlcmd -Q \"set nocount on; #{escaped_query}\" -W -w 1024 -s ','"
|
|
53
|
-
cmd_string += " -U '#{@user}' -P '#{@password}'" unless @user.nil? || @password.nil?
|
|
54
|
-
if @instance.nil?
|
|
55
|
-
cmd_string += " -S '#{@host},#{@port}'"
|
|
56
|
-
else
|
|
57
|
-
cmd_string += " -S '#{@host},#{@port}\\#{@instance}'"
|
|
58
|
-
end
|
|
59
|
-
cmd = inspec.command(cmd_string)
|
|
60
|
-
out = cmd.stdout + "\n" + cmd.stderr
|
|
61
|
-
if cmd.exit_status != 0 || out =~ /Sqlcmd: Error/
|
|
62
|
-
# TODO: we need to throw an exception here
|
|
63
|
-
# change once https://github.com/chef/inspec/issues/1205 is in
|
|
64
|
-
warn "Could not execute the sql query #{out}"
|
|
65
|
-
DatabaseHelper::SQLQueryResult.new(cmd, Hashie::Mash.new({}))
|
|
66
|
-
else
|
|
67
|
-
DatabaseHelper::SQLQueryResult.new(cmd, parse_csv_result(cmd))
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def to_s
|
|
72
|
-
'MSSQL session'
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
private
|
|
76
|
-
|
|
77
|
-
def test_connection
|
|
78
|
-
!query('select getdate()').empty?
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def parse_csv_result(cmd)
|
|
82
|
-
require 'csv'
|
|
83
|
-
table = CSV.parse(cmd.stdout, { headers: true })
|
|
84
|
-
|
|
85
|
-
# remove first row, since it will be a seperator line
|
|
86
|
-
table.delete(0)
|
|
87
|
-
|
|
88
|
-
# convert to hash
|
|
89
|
-
headers = table.headers
|
|
90
|
-
|
|
91
|
-
results = table.map { |row|
|
|
92
|
-
res = {}
|
|
93
|
-
headers.each { |header|
|
|
94
|
-
res[header.downcase] = row[header]
|
|
95
|
-
}
|
|
96
|
-
Hashie::Mash.new(res)
|
|
97
|
-
}
|
|
98
|
-
results
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'hashie/mash'
|
|
4
|
+
require 'utils/database_helpers'
|
|
5
|
+
|
|
6
|
+
module Inspec::Resources
|
|
7
|
+
# STABILITY: Experimental
|
|
8
|
+
# This resource needs further testing and refinement
|
|
9
|
+
#
|
|
10
|
+
# This requires the `sqlcmd` tool available on platform
|
|
11
|
+
# @see https://docs.microsoft.com/en-us/sql/relational-databases/scripting/sqlcmd-use-the-utility
|
|
12
|
+
# @see https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-connect-and-query-sqlcmd
|
|
13
|
+
class MssqlSession < Inspec.resource(1)
|
|
14
|
+
name 'mssql_session'
|
|
15
|
+
supports platform: 'windows'
|
|
16
|
+
desc 'Use the mssql_session InSpec audit resource to test SQL commands run against a MS Sql Server database.'
|
|
17
|
+
example "
|
|
18
|
+
# Using SQL authentication
|
|
19
|
+
sql = mssql_session(user: 'myuser', pass: 'mypassword')
|
|
20
|
+
describe sql.query('SELECT * FROM table').row(0).column('columnname') do
|
|
21
|
+
its('value') { should cmp == 1 }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Passing no credentials to mssql_session forces it to use Windows authentication
|
|
25
|
+
sql_windows_auth = mssql_session
|
|
26
|
+
describe sql_windows_auth.query(\"SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') as \\\"login_mode\\\";\").row(0).column('login_mode') do
|
|
27
|
+
its('value') { should_not be_empty }
|
|
28
|
+
its('value') { should cmp == 1 }
|
|
29
|
+
end
|
|
30
|
+
"
|
|
31
|
+
|
|
32
|
+
attr_reader :user, :password, :host, :port, :instance
|
|
33
|
+
def initialize(opts = {})
|
|
34
|
+
@user = opts[:user]
|
|
35
|
+
@password = opts[:password] || opts[:pass]
|
|
36
|
+
if opts[:pass]
|
|
37
|
+
warn '[DEPRECATED] use `password` option to supply password instead of `pass`'
|
|
38
|
+
end
|
|
39
|
+
@host = opts[:host] || 'localhost'
|
|
40
|
+
@port = opts[:port] || '1433'
|
|
41
|
+
@instance = opts[:instance]
|
|
42
|
+
|
|
43
|
+
# check if sqlcmd is available
|
|
44
|
+
raise Inspec::Exceptions::ResourceSkipped, 'sqlcmd is missing' unless inspec.command('sqlcmd').exist?
|
|
45
|
+
# check that database is reachable
|
|
46
|
+
raise Inspec::Exceptions::ResourceSkipped, "Can't connect to the MS SQL Server." unless test_connection
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def query(q)
|
|
50
|
+
escaped_query = q.gsub(/\\/, '\\\\').gsub(/"/, '\\"').gsub(/\$/, '\\$')
|
|
51
|
+
# surpress 'x rows affected' in SQLCMD with 'set nocount on;'
|
|
52
|
+
cmd_string = "sqlcmd -Q \"set nocount on; #{escaped_query}\" -W -w 1024 -s ','"
|
|
53
|
+
cmd_string += " -U '#{@user}' -P '#{@password}'" unless @user.nil? || @password.nil?
|
|
54
|
+
if @instance.nil?
|
|
55
|
+
cmd_string += " -S '#{@host},#{@port}'"
|
|
56
|
+
else
|
|
57
|
+
cmd_string += " -S '#{@host},#{@port}\\#{@instance}'"
|
|
58
|
+
end
|
|
59
|
+
cmd = inspec.command(cmd_string)
|
|
60
|
+
out = cmd.stdout + "\n" + cmd.stderr
|
|
61
|
+
if cmd.exit_status != 0 || out =~ /Sqlcmd: Error/
|
|
62
|
+
# TODO: we need to throw an exception here
|
|
63
|
+
# change once https://github.com/chef/inspec/issues/1205 is in
|
|
64
|
+
warn "Could not execute the sql query #{out}"
|
|
65
|
+
DatabaseHelper::SQLQueryResult.new(cmd, Hashie::Mash.new({}))
|
|
66
|
+
else
|
|
67
|
+
DatabaseHelper::SQLQueryResult.new(cmd, parse_csv_result(cmd))
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def to_s
|
|
72
|
+
'MSSQL session'
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
def test_connection
|
|
78
|
+
!query('select getdate()').empty?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def parse_csv_result(cmd)
|
|
82
|
+
require 'csv'
|
|
83
|
+
table = CSV.parse(cmd.stdout, { headers: true })
|
|
84
|
+
|
|
85
|
+
# remove first row, since it will be a seperator line
|
|
86
|
+
table.delete(0)
|
|
87
|
+
|
|
88
|
+
# convert to hash
|
|
89
|
+
headers = table.headers
|
|
90
|
+
|
|
91
|
+
results = table.map { |row|
|
|
92
|
+
res = {}
|
|
93
|
+
headers.each { |header|
|
|
94
|
+
res[header.downcase] = row[header]
|
|
95
|
+
}
|
|
96
|
+
Hashie::Mash.new(res)
|
|
97
|
+
}
|
|
98
|
+
results
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
data/lib/resources/mysql.rb
CHANGED
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
-
|
|
4
|
-
module Inspec::Resources
|
|
5
|
-
class Mysql < Inspec.resource(1)
|
|
6
|
-
name 'mysql'
|
|
7
|
-
supports platform: 'unix'
|
|
8
|
-
|
|
9
|
-
attr_reader :package, :service, :conf_dir, :conf_path, :data_dir, :log_dir, :log_path, :log_group, :log_dir_group
|
|
10
|
-
def initialize
|
|
11
|
-
# set OS-dependent filenames and paths
|
|
12
|
-
case inspec.os[:family]
|
|
13
|
-
when 'debian'
|
|
14
|
-
init_ubuntu
|
|
15
|
-
when 'redhat', 'fedora'
|
|
16
|
-
init_redhat
|
|
17
|
-
when 'arch'
|
|
18
|
-
init_arch
|
|
19
|
-
else
|
|
20
|
-
# TODO: could not detect
|
|
21
|
-
init_default
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def init_ubuntu
|
|
26
|
-
@package = 'mysql-server'
|
|
27
|
-
@service = 'mysql'
|
|
28
|
-
@conf_path = '/etc/mysql/my.cnf'
|
|
29
|
-
@conf_dir = '/etc/mysql/'
|
|
30
|
-
@data_dir = '/var/lib/mysql/'
|
|
31
|
-
@log_dir = '/var/log/'
|
|
32
|
-
@log_path = '/var/log/mysql.log'
|
|
33
|
-
@log_group = 'adm'
|
|
34
|
-
case inspec.os[:release]
|
|
35
|
-
when '14.04'
|
|
36
|
-
@log_dir_group = 'syslog'
|
|
37
|
-
else
|
|
38
|
-
@log_dir_group = 'root'
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def init_redhat
|
|
43
|
-
@package = 'mysql-server'
|
|
44
|
-
@service = 'mysqld'
|
|
45
|
-
@conf_path = '/etc/my.cnf'
|
|
46
|
-
@conf_dir = '/etc/'
|
|
47
|
-
@data_dir = '/var/lib/mysql/'
|
|
48
|
-
@log_dir = '/var/log/'
|
|
49
|
-
@log_path = '/var/log/mysqld.log'
|
|
50
|
-
@log_group = 'mysql'
|
|
51
|
-
@log_dir_group = 'root'
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def init_arch
|
|
55
|
-
@package = 'mariadb'
|
|
56
|
-
@service = 'mysql'
|
|
57
|
-
@conf_path = '/etc/mysql/my.cnf'
|
|
58
|
-
@conf_dir = '/etc/mysql/'
|
|
59
|
-
@data_dir = '/var/lib/mysql/'
|
|
60
|
-
@log_dir = '/var/log/'
|
|
61
|
-
@log_path = '/var/log/mysql.log'
|
|
62
|
-
@log_group = 'mysql'
|
|
63
|
-
@log_dir_group = 'root'
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def init_default
|
|
67
|
-
@service = 'mysqld'
|
|
68
|
-
@conf_path = '/etc/my.cnf'
|
|
69
|
-
@conf_dir = '/etc/'
|
|
70
|
-
@data_dir = '/var/lib/mysql/'
|
|
71
|
-
@log_dir = '/var/log/'
|
|
72
|
-
@log_path = '/var/log/mysqld.log'
|
|
73
|
-
@log_group = 'mysql'
|
|
74
|
-
@log_dir_group = 'root'
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def to_s
|
|
78
|
-
'MySQL'
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
+
|
|
4
|
+
module Inspec::Resources
|
|
5
|
+
class Mysql < Inspec.resource(1)
|
|
6
|
+
name 'mysql'
|
|
7
|
+
supports platform: 'unix'
|
|
8
|
+
|
|
9
|
+
attr_reader :package, :service, :conf_dir, :conf_path, :data_dir, :log_dir, :log_path, :log_group, :log_dir_group
|
|
10
|
+
def initialize
|
|
11
|
+
# set OS-dependent filenames and paths
|
|
12
|
+
case inspec.os[:family]
|
|
13
|
+
when 'debian'
|
|
14
|
+
init_ubuntu
|
|
15
|
+
when 'redhat', 'fedora'
|
|
16
|
+
init_redhat
|
|
17
|
+
when 'arch'
|
|
18
|
+
init_arch
|
|
19
|
+
else
|
|
20
|
+
# TODO: could not detect
|
|
21
|
+
init_default
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def init_ubuntu
|
|
26
|
+
@package = 'mysql-server'
|
|
27
|
+
@service = 'mysql'
|
|
28
|
+
@conf_path = '/etc/mysql/my.cnf'
|
|
29
|
+
@conf_dir = '/etc/mysql/'
|
|
30
|
+
@data_dir = '/var/lib/mysql/'
|
|
31
|
+
@log_dir = '/var/log/'
|
|
32
|
+
@log_path = '/var/log/mysql.log'
|
|
33
|
+
@log_group = 'adm'
|
|
34
|
+
case inspec.os[:release]
|
|
35
|
+
when '14.04'
|
|
36
|
+
@log_dir_group = 'syslog'
|
|
37
|
+
else
|
|
38
|
+
@log_dir_group = 'root'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def init_redhat
|
|
43
|
+
@package = 'mysql-server'
|
|
44
|
+
@service = 'mysqld'
|
|
45
|
+
@conf_path = '/etc/my.cnf'
|
|
46
|
+
@conf_dir = '/etc/'
|
|
47
|
+
@data_dir = '/var/lib/mysql/'
|
|
48
|
+
@log_dir = '/var/log/'
|
|
49
|
+
@log_path = '/var/log/mysqld.log'
|
|
50
|
+
@log_group = 'mysql'
|
|
51
|
+
@log_dir_group = 'root'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def init_arch
|
|
55
|
+
@package = 'mariadb'
|
|
56
|
+
@service = 'mysql'
|
|
57
|
+
@conf_path = '/etc/mysql/my.cnf'
|
|
58
|
+
@conf_dir = '/etc/mysql/'
|
|
59
|
+
@data_dir = '/var/lib/mysql/'
|
|
60
|
+
@log_dir = '/var/log/'
|
|
61
|
+
@log_path = '/var/log/mysql.log'
|
|
62
|
+
@log_group = 'mysql'
|
|
63
|
+
@log_dir_group = 'root'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def init_default
|
|
67
|
+
@service = 'mysqld'
|
|
68
|
+
@conf_path = '/etc/my.cnf'
|
|
69
|
+
@conf_dir = '/etc/'
|
|
70
|
+
@data_dir = '/var/lib/mysql/'
|
|
71
|
+
@log_dir = '/var/log/'
|
|
72
|
+
@log_path = '/var/log/mysqld.log'
|
|
73
|
+
@log_group = 'mysql'
|
|
74
|
+
@log_dir_group = 'root'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def to_s
|
|
78
|
+
'MySQL'
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
data/lib/resources/mysql_conf.rb
CHANGED
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
-
|
|
4
|
-
require 'utils/simpleconfig'
|
|
5
|
-
require 'utils/find_files'
|
|
6
|
-
require 'utils/hash'
|
|
7
|
-
require 'resources/mysql'
|
|
8
|
-
|
|
9
|
-
module Inspec::Resources
|
|
10
|
-
class MysqlConfEntry
|
|
11
|
-
def initialize(path, params)
|
|
12
|
-
@params = params
|
|
13
|
-
@path = path
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def method_missing(name, *_)
|
|
17
|
-
k = name.to_s
|
|
18
|
-
res = @params[k]
|
|
19
|
-
return true if res.nil? && @params.key?(k)
|
|
20
|
-
@params[k]
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def to_s
|
|
24
|
-
"MySQL Config entry [#{@path.join(' ')}]"
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
class MysqlConf < Inspec.resource(1)
|
|
29
|
-
name 'mysql_conf'
|
|
30
|
-
supports platform: 'unix'
|
|
31
|
-
supports platform: 'windows'
|
|
32
|
-
desc 'Use the mysql_conf InSpec audit resource to test the contents of the configuration file for MySQL, typically located at /etc/mysql/my.cnf or /etc/my.cnf.'
|
|
33
|
-
example "
|
|
34
|
-
describe mysql_conf('path') do
|
|
35
|
-
its('setting') { should eq 'value' }
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Test a parameter set within the [mysqld] section
|
|
39
|
-
describe mysql_conf do
|
|
40
|
-
its('mysqld.port') { should cmp 3306 }
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Test a parameter set within the [mariadb] section using array notation
|
|
44
|
-
describe mysql_conf do
|
|
45
|
-
its(['mariadb', 'max-connections']) { should_not be_nil }
|
|
46
|
-
end
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
include FindFiles
|
|
50
|
-
|
|
51
|
-
def initialize(conf_path = nil)
|
|
52
|
-
@conf_path = conf_path || inspec.mysql.conf_path
|
|
53
|
-
@files_contents = {}
|
|
54
|
-
@content = nil
|
|
55
|
-
@params = nil
|
|
56
|
-
read_content
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def content
|
|
60
|
-
@content ||= read_content
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def params(*opts)
|
|
64
|
-
@params || read_content
|
|
65
|
-
res = @params
|
|
66
|
-
opts.each do |opt|
|
|
67
|
-
res = res[opt] unless res.nil?
|
|
68
|
-
end
|
|
69
|
-
MysqlConfEntry.new(opts, res)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def method_missing(name)
|
|
73
|
-
@params || read_content
|
|
74
|
-
@params[name.to_s]
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def read_content
|
|
78
|
-
@content = ''
|
|
79
|
-
@params = {}
|
|
80
|
-
|
|
81
|
-
# skip if the main configuration file doesn't exist
|
|
82
|
-
if !inspec.file(@conf_path).file?
|
|
83
|
-
return skip_resource "Can't find file \"#{@conf_path}\""
|
|
84
|
-
end
|
|
85
|
-
raw_conf = read_file(@conf_path)
|
|
86
|
-
if raw_conf.empty? && !inspec.file(@conf_path).empty?
|
|
87
|
-
return skip_resource("Can't read file \"#{@conf_path}\"")
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
to_read = [@conf_path]
|
|
91
|
-
until to_read.empty?
|
|
92
|
-
cur_file = to_read[0]
|
|
93
|
-
raw_conf = read_file(cur_file)
|
|
94
|
-
@content += raw_conf
|
|
95
|
-
|
|
96
|
-
params = SimpleConfig.new(raw_conf).params
|
|
97
|
-
@params = @params.deep_merge(params)
|
|
98
|
-
|
|
99
|
-
to_read = to_read.drop(1)
|
|
100
|
-
# see if there is more stuff to include
|
|
101
|
-
|
|
102
|
-
dir = File.dirname(cur_file)
|
|
103
|
-
to_read += include_files(dir, raw_conf).find_all do |fp|
|
|
104
|
-
not @files_contents.key? fp
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
#
|
|
108
|
-
@content
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def include_files(reldir, conf)
|
|
112
|
-
files = conf.scan(/^!include\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
|
|
113
|
-
dirs = conf.scan(/^!includedir\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
|
|
114
|
-
dirs.map do |dir|
|
|
115
|
-
# @TODO: non local glob
|
|
116
|
-
files += find_files(dir, depth: 1, type: 'file')
|
|
117
|
-
end
|
|
118
|
-
files
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def abs_path(dir, f)
|
|
122
|
-
return f if f.start_with? '/'
|
|
123
|
-
File.join(dir, f)
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
def read_file(path)
|
|
127
|
-
@files_contents[path] ||= inspec.file(path).content
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
def to_s
|
|
131
|
-
'MySQL Configuration'
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
|
3
|
+
|
|
4
|
+
require 'utils/simpleconfig'
|
|
5
|
+
require 'utils/find_files'
|
|
6
|
+
require 'utils/hash'
|
|
7
|
+
require 'resources/mysql'
|
|
8
|
+
|
|
9
|
+
module Inspec::Resources
|
|
10
|
+
class MysqlConfEntry
|
|
11
|
+
def initialize(path, params)
|
|
12
|
+
@params = params
|
|
13
|
+
@path = path
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def method_missing(name, *_)
|
|
17
|
+
k = name.to_s
|
|
18
|
+
res = @params[k]
|
|
19
|
+
return true if res.nil? && @params.key?(k)
|
|
20
|
+
@params[k]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def to_s
|
|
24
|
+
"MySQL Config entry [#{@path.join(' ')}]"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class MysqlConf < Inspec.resource(1)
|
|
29
|
+
name 'mysql_conf'
|
|
30
|
+
supports platform: 'unix'
|
|
31
|
+
supports platform: 'windows'
|
|
32
|
+
desc 'Use the mysql_conf InSpec audit resource to test the contents of the configuration file for MySQL, typically located at /etc/mysql/my.cnf or /etc/my.cnf.'
|
|
33
|
+
example "
|
|
34
|
+
describe mysql_conf('path') do
|
|
35
|
+
its('setting') { should eq 'value' }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Test a parameter set within the [mysqld] section
|
|
39
|
+
describe mysql_conf do
|
|
40
|
+
its('mysqld.port') { should cmp 3306 }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Test a parameter set within the [mariadb] section using array notation
|
|
44
|
+
describe mysql_conf do
|
|
45
|
+
its(['mariadb', 'max-connections']) { should_not be_nil }
|
|
46
|
+
end
|
|
47
|
+
"
|
|
48
|
+
|
|
49
|
+
include FindFiles
|
|
50
|
+
|
|
51
|
+
def initialize(conf_path = nil)
|
|
52
|
+
@conf_path = conf_path || inspec.mysql.conf_path
|
|
53
|
+
@files_contents = {}
|
|
54
|
+
@content = nil
|
|
55
|
+
@params = nil
|
|
56
|
+
read_content
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def content
|
|
60
|
+
@content ||= read_content
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def params(*opts)
|
|
64
|
+
@params || read_content
|
|
65
|
+
res = @params
|
|
66
|
+
opts.each do |opt|
|
|
67
|
+
res = res[opt] unless res.nil?
|
|
68
|
+
end
|
|
69
|
+
MysqlConfEntry.new(opts, res)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def method_missing(name)
|
|
73
|
+
@params || read_content
|
|
74
|
+
@params[name.to_s]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def read_content
|
|
78
|
+
@content = ''
|
|
79
|
+
@params = {}
|
|
80
|
+
|
|
81
|
+
# skip if the main configuration file doesn't exist
|
|
82
|
+
if !inspec.file(@conf_path).file?
|
|
83
|
+
return skip_resource "Can't find file \"#{@conf_path}\""
|
|
84
|
+
end
|
|
85
|
+
raw_conf = read_file(@conf_path)
|
|
86
|
+
if raw_conf.empty? && !inspec.file(@conf_path).empty?
|
|
87
|
+
return skip_resource("Can't read file \"#{@conf_path}\"")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
to_read = [@conf_path]
|
|
91
|
+
until to_read.empty?
|
|
92
|
+
cur_file = to_read[0]
|
|
93
|
+
raw_conf = read_file(cur_file)
|
|
94
|
+
@content += raw_conf
|
|
95
|
+
|
|
96
|
+
params = SimpleConfig.new(raw_conf).params
|
|
97
|
+
@params = @params.deep_merge(params)
|
|
98
|
+
|
|
99
|
+
to_read = to_read.drop(1)
|
|
100
|
+
# see if there is more stuff to include
|
|
101
|
+
|
|
102
|
+
dir = File.dirname(cur_file)
|
|
103
|
+
to_read += include_files(dir, raw_conf).find_all do |fp|
|
|
104
|
+
not @files_contents.key? fp
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
#
|
|
108
|
+
@content
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def include_files(reldir, conf)
|
|
112
|
+
files = conf.scan(/^!include\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
|
|
113
|
+
dirs = conf.scan(/^!includedir\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
|
|
114
|
+
dirs.map do |dir|
|
|
115
|
+
# @TODO: non local glob
|
|
116
|
+
files += find_files(dir, depth: 1, type: 'file')
|
|
117
|
+
end
|
|
118
|
+
files
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def abs_path(dir, f)
|
|
122
|
+
return f if f.start_with? '/'
|
|
123
|
+
File.join(dir, f)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def read_file(path)
|
|
127
|
+
@files_contents[path] ||= inspec.file(path).content
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def to_s
|
|
131
|
+
'MySQL Configuration'
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|