inspec-core 2.1.67
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 +7 -0
- data/CHANGELOG.md +3136 -0
- data/Gemfile +56 -0
- data/LICENSE +14 -0
- data/MAINTAINERS.md +33 -0
- data/MAINTAINERS.toml +52 -0
- data/README.md +453 -0
- data/bin/inspec +12 -0
- data/docs/.gitignore +2 -0
- data/docs/README.md +40 -0
- data/docs/dev/control-eval.md +62 -0
- data/docs/dsl_inspec.md +258 -0
- data/docs/dsl_resource.md +100 -0
- data/docs/glossary.md +99 -0
- data/docs/habitat.md +192 -0
- data/docs/inspec_and_friends.md +114 -0
- data/docs/matchers.md +169 -0
- data/docs/migration.md +293 -0
- data/docs/platforms.md +119 -0
- data/docs/plugin_kitchen_inspec.md +50 -0
- data/docs/profiles.md +378 -0
- data/docs/reporters.md +105 -0
- data/docs/resources/aide_conf.md.erb +76 -0
- data/docs/resources/apache.md.erb +67 -0
- data/docs/resources/apache_conf.md.erb +68 -0
- data/docs/resources/apt.md.erb +71 -0
- data/docs/resources/audit_policy.md.erb +47 -0
- data/docs/resources/auditd.md.erb +79 -0
- data/docs/resources/auditd_conf.md.erb +68 -0
- data/docs/resources/bash.md.erb +75 -0
- data/docs/resources/bond.md.erb +90 -0
- data/docs/resources/bridge.md.erb +57 -0
- data/docs/resources/bsd_service.md.erb +67 -0
- data/docs/resources/chocolatey_package.md.erb +58 -0
- data/docs/resources/command.md.erb +138 -0
- data/docs/resources/cpan.md.erb +79 -0
- data/docs/resources/cran.md.erb +64 -0
- data/docs/resources/crontab.md.erb +89 -0
- data/docs/resources/csv.md.erb +54 -0
- data/docs/resources/dh_params.md.erb +205 -0
- data/docs/resources/directory.md.erb +30 -0
- data/docs/resources/docker.md.erb +219 -0
- data/docs/resources/docker_container.md.erb +103 -0
- data/docs/resources/docker_image.md.erb +94 -0
- data/docs/resources/docker_service.md.erb +114 -0
- data/docs/resources/elasticsearch.md.erb +242 -0
- data/docs/resources/etc_fstab.md.erb +125 -0
- data/docs/resources/etc_group.md.erb +75 -0
- data/docs/resources/etc_hosts.md.erb +78 -0
- data/docs/resources/etc_hosts_allow.md.erb +74 -0
- data/docs/resources/etc_hosts_deny.md.erb +74 -0
- data/docs/resources/file.md.erb +526 -0
- data/docs/resources/filesystem.md.erb +41 -0
- data/docs/resources/firewalld.md.erb +107 -0
- data/docs/resources/gem.md.erb +79 -0
- data/docs/resources/group.md.erb +61 -0
- data/docs/resources/grub_conf.md.erb +101 -0
- data/docs/resources/host.md.erb +86 -0
- data/docs/resources/http.md.erb +197 -0
- data/docs/resources/iis_app.md.erb +122 -0
- data/docs/resources/iis_site.md.erb +135 -0
- data/docs/resources/inetd_conf.md.erb +94 -0
- data/docs/resources/ini.md.erb +76 -0
- data/docs/resources/interface.md.erb +58 -0
- data/docs/resources/iptables.md.erb +64 -0
- data/docs/resources/json.md.erb +63 -0
- data/docs/resources/kernel_module.md.erb +120 -0
- data/docs/resources/kernel_parameter.md.erb +53 -0
- data/docs/resources/key_rsa.md.erb +85 -0
- data/docs/resources/launchd_service.md.erb +57 -0
- data/docs/resources/limits_conf.md.erb +75 -0
- data/docs/resources/login_defs.md.erb +71 -0
- data/docs/resources/mount.md.erb +69 -0
- data/docs/resources/mssql_session.md.erb +60 -0
- data/docs/resources/mysql_conf.md.erb +99 -0
- data/docs/resources/mysql_session.md.erb +74 -0
- data/docs/resources/nginx.md.erb +79 -0
- data/docs/resources/nginx_conf.md.erb +138 -0
- data/docs/resources/npm.md.erb +60 -0
- data/docs/resources/ntp_conf.md.erb +60 -0
- data/docs/resources/oneget.md.erb +53 -0
- data/docs/resources/oracledb_session.md.erb +52 -0
- data/docs/resources/os.md.erb +141 -0
- data/docs/resources/os_env.md.erb +91 -0
- data/docs/resources/package.md.erb +120 -0
- data/docs/resources/packages.md.erb +67 -0
- data/docs/resources/parse_config.md.erb +103 -0
- data/docs/resources/parse_config_file.md.erb +138 -0
- data/docs/resources/passwd.md.erb +141 -0
- data/docs/resources/pip.md.erb +67 -0
- data/docs/resources/port.md.erb +137 -0
- data/docs/resources/postgres_conf.md.erb +79 -0
- data/docs/resources/postgres_hba_conf.md.erb +93 -0
- data/docs/resources/postgres_ident_conf.md.erb +76 -0
- data/docs/resources/postgres_session.md.erb +69 -0
- data/docs/resources/powershell.md.erb +102 -0
- data/docs/resources/processes.md.erb +109 -0
- data/docs/resources/rabbitmq_config.md.erb +41 -0
- data/docs/resources/registry_key.md.erb +158 -0
- data/docs/resources/runit_service.md.erb +57 -0
- data/docs/resources/security_policy.md.erb +47 -0
- data/docs/resources/service.md.erb +121 -0
- data/docs/resources/shadow.md.erb +146 -0
- data/docs/resources/ssh_config.md.erb +73 -0
- data/docs/resources/sshd_config.md.erb +83 -0
- data/docs/resources/ssl.md.erb +119 -0
- data/docs/resources/sys_info.md.erb +42 -0
- data/docs/resources/systemd_service.md.erb +57 -0
- data/docs/resources/sysv_service.md.erb +57 -0
- data/docs/resources/upstart_service.md.erb +57 -0
- data/docs/resources/user.md.erb +140 -0
- data/docs/resources/users.md.erb +127 -0
- data/docs/resources/vbscript.md.erb +55 -0
- data/docs/resources/virtualization.md.erb +57 -0
- data/docs/resources/windows_feature.md.erb +47 -0
- data/docs/resources/windows_hotfix.md.erb +53 -0
- data/docs/resources/windows_task.md.erb +95 -0
- data/docs/resources/wmi.md.erb +81 -0
- data/docs/resources/x509_certificate.md.erb +151 -0
- data/docs/resources/xinetd_conf.md.erb +156 -0
- data/docs/resources/xml.md.erb +85 -0
- data/docs/resources/yaml.md.erb +69 -0
- data/docs/resources/yum.md.erb +98 -0
- data/docs/resources/zfs_dataset.md.erb +53 -0
- data/docs/resources/zfs_pool.md.erb +47 -0
- data/docs/ruby_usage.md +203 -0
- data/docs/shared/matcher_be.md.erb +1 -0
- data/docs/shared/matcher_cmp.md.erb +43 -0
- data/docs/shared/matcher_eq.md.erb +3 -0
- data/docs/shared/matcher_include.md.erb +1 -0
- data/docs/shared/matcher_match.md.erb +1 -0
- data/docs/shell.md +217 -0
- data/examples/README.md +8 -0
- data/examples/inheritance/README.md +65 -0
- data/examples/inheritance/controls/example.rb +14 -0
- data/examples/inheritance/inspec.yml +15 -0
- data/examples/kitchen-ansible/.kitchen.yml +25 -0
- data/examples/kitchen-ansible/Gemfile +19 -0
- data/examples/kitchen-ansible/README.md +53 -0
- data/examples/kitchen-ansible/files/nginx.repo +6 -0
- data/examples/kitchen-ansible/tasks/main.yml +16 -0
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -0
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -0
- data/examples/kitchen-chef/.kitchen.yml +20 -0
- data/examples/kitchen-chef/Berksfile +3 -0
- data/examples/kitchen-chef/Gemfile +19 -0
- data/examples/kitchen-chef/README.md +27 -0
- data/examples/kitchen-chef/metadata.rb +7 -0
- data/examples/kitchen-chef/recipes/default.rb +6 -0
- data/examples/kitchen-chef/recipes/nginx.rb +30 -0
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -0
- data/examples/kitchen-puppet/.kitchen.yml +23 -0
- data/examples/kitchen-puppet/Gemfile +20 -0
- data/examples/kitchen-puppet/Puppetfile +25 -0
- data/examples/kitchen-puppet/README.md +53 -0
- data/examples/kitchen-puppet/manifests/site.pp +33 -0
- data/examples/kitchen-puppet/metadata.json +11 -0
- data/examples/kitchen-puppet/modules/.gitkeep +0 -0
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -0
- data/examples/meta-profile/README.md +37 -0
- data/examples/meta-profile/controls/example.rb +13 -0
- data/examples/meta-profile/inspec.yml +13 -0
- data/examples/profile-attribute.yml +2 -0
- data/examples/profile-attribute/README.md +14 -0
- data/examples/profile-attribute/controls/example.rb +11 -0
- data/examples/profile-attribute/inspec.yml +8 -0
- data/examples/profile-sensitive/README.md +29 -0
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -0
- data/examples/profile-sensitive/controls/sensitive.rb +9 -0
- data/examples/profile-sensitive/inspec.yml +8 -0
- data/examples/profile/README.md +48 -0
- data/examples/profile/controls/example.rb +23 -0
- data/examples/profile/controls/gordon.rb +36 -0
- data/examples/profile/controls/meta.rb +34 -0
- data/examples/profile/inspec.yml +10 -0
- data/examples/profile/libraries/gordon_config.rb +59 -0
- data/inspec-core.gemspec +43 -0
- data/lib/bundles/README.md +3 -0
- data/lib/bundles/inspec-artifact.rb +7 -0
- data/lib/bundles/inspec-artifact/README.md +1 -0
- data/lib/bundles/inspec-artifact/cli.rb +277 -0
- data/lib/bundles/inspec-compliance.rb +16 -0
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -0
- data/lib/bundles/inspec-compliance/README.md +193 -0
- data/lib/bundles/inspec-compliance/api.rb +360 -0
- data/lib/bundles/inspec-compliance/api/login.rb +193 -0
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -0
- data/lib/bundles/inspec-compliance/cli.rb +260 -0
- data/lib/bundles/inspec-compliance/configuration.rb +103 -0
- data/lib/bundles/inspec-compliance/http.rb +125 -0
- data/lib/bundles/inspec-compliance/images/cc-token.png +0 -0
- data/lib/bundles/inspec-compliance/support.rb +36 -0
- data/lib/bundles/inspec-compliance/target.rb +106 -0
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -0
- data/lib/bundles/inspec-habitat.rb +12 -0
- data/lib/bundles/inspec-habitat/cli.rb +36 -0
- data/lib/bundles/inspec-habitat/log.rb +10 -0
- data/lib/bundles/inspec-habitat/profile.rb +391 -0
- data/lib/bundles/inspec-init.rb +8 -0
- data/lib/bundles/inspec-init/README.md +31 -0
- data/lib/bundles/inspec-init/cli.rb +97 -0
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -0
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -0
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -0
- data/lib/bundles/inspec-init/templates/profile/libraries/.gitkeep +0 -0
- data/lib/bundles/inspec-supermarket.rb +13 -0
- data/lib/bundles/inspec-supermarket/README.md +45 -0
- data/lib/bundles/inspec-supermarket/api.rb +84 -0
- data/lib/bundles/inspec-supermarket/cli.rb +73 -0
- data/lib/bundles/inspec-supermarket/target.rb +34 -0
- data/lib/fetchers/git.rb +163 -0
- data/lib/fetchers/local.rb +74 -0
- data/lib/fetchers/mock.rb +35 -0
- data/lib/fetchers/url.rb +247 -0
- data/lib/inspec.rb +24 -0
- data/lib/inspec/archive/tar.rb +29 -0
- data/lib/inspec/archive/zip.rb +19 -0
- data/lib/inspec/backend.rb +93 -0
- data/lib/inspec/base_cli.rb +368 -0
- data/lib/inspec/cached_fetcher.rb +66 -0
- data/lib/inspec/cli.rb +292 -0
- data/lib/inspec/completions/bash.sh.erb +45 -0
- data/lib/inspec/completions/fish.sh.erb +34 -0
- data/lib/inspec/completions/zsh.sh.erb +61 -0
- data/lib/inspec/control_eval_context.rb +179 -0
- data/lib/inspec/dependencies/cache.rb +72 -0
- data/lib/inspec/dependencies/dependency_set.rb +92 -0
- data/lib/inspec/dependencies/lockfile.rb +115 -0
- data/lib/inspec/dependencies/requirement.rb +123 -0
- data/lib/inspec/dependencies/resolver.rb +86 -0
- data/lib/inspec/describe.rb +27 -0
- data/lib/inspec/dsl.rb +66 -0
- data/lib/inspec/dsl_shared.rb +33 -0
- data/lib/inspec/env_printer.rb +157 -0
- data/lib/inspec/errors.rb +14 -0
- data/lib/inspec/exceptions.rb +12 -0
- data/lib/inspec/expect.rb +45 -0
- data/lib/inspec/fetcher.rb +45 -0
- data/lib/inspec/file_provider.rb +275 -0
- data/lib/inspec/formatters.rb +3 -0
- data/lib/inspec/formatters/base.rb +259 -0
- data/lib/inspec/formatters/json_rspec.rb +20 -0
- data/lib/inspec/formatters/show_progress.rb +12 -0
- data/lib/inspec/library_eval_context.rb +58 -0
- data/lib/inspec/log.rb +11 -0
- data/lib/inspec/metadata.rb +247 -0
- data/lib/inspec/method_source.rb +24 -0
- data/lib/inspec/objects.rb +14 -0
- data/lib/inspec/objects/attribute.rb +75 -0
- data/lib/inspec/objects/control.rb +61 -0
- data/lib/inspec/objects/describe.rb +92 -0
- data/lib/inspec/objects/each_loop.rb +36 -0
- data/lib/inspec/objects/list.rb +15 -0
- data/lib/inspec/objects/or_test.rb +40 -0
- data/lib/inspec/objects/ruby_helper.rb +15 -0
- data/lib/inspec/objects/tag.rb +27 -0
- data/lib/inspec/objects/test.rb +87 -0
- data/lib/inspec/objects/value.rb +27 -0
- data/lib/inspec/plugins.rb +60 -0
- data/lib/inspec/plugins/cli.rb +24 -0
- data/lib/inspec/plugins/fetcher.rb +86 -0
- data/lib/inspec/plugins/resource.rb +135 -0
- data/lib/inspec/plugins/secret.rb +15 -0
- data/lib/inspec/plugins/source_reader.rb +40 -0
- data/lib/inspec/polyfill.rb +12 -0
- data/lib/inspec/profile.rb +513 -0
- data/lib/inspec/profile_context.rb +208 -0
- data/lib/inspec/profile_vendor.rb +66 -0
- data/lib/inspec/reporters.rb +60 -0
- data/lib/inspec/reporters/automate.rb +76 -0
- data/lib/inspec/reporters/base.rb +25 -0
- data/lib/inspec/reporters/cli.rb +356 -0
- data/lib/inspec/reporters/json.rb +116 -0
- data/lib/inspec/reporters/json_min.rb +48 -0
- data/lib/inspec/reporters/junit.rb +78 -0
- data/lib/inspec/require_loader.rb +33 -0
- data/lib/inspec/resource.rb +190 -0
- data/lib/inspec/rule.rb +280 -0
- data/lib/inspec/runner.rb +345 -0
- data/lib/inspec/runner_mock.rb +41 -0
- data/lib/inspec/runner_rspec.rb +175 -0
- data/lib/inspec/runtime_profile.rb +26 -0
- data/lib/inspec/schema.rb +213 -0
- data/lib/inspec/secrets.rb +19 -0
- data/lib/inspec/secrets/yaml.rb +30 -0
- data/lib/inspec/shell.rb +220 -0
- data/lib/inspec/shell_detector.rb +90 -0
- data/lib/inspec/source_reader.rb +29 -0
- data/lib/inspec/version.rb +8 -0
- data/lib/matchers/matchers.rb +339 -0
- data/lib/resources/aide_conf.rb +151 -0
- data/lib/resources/apache.rb +48 -0
- data/lib/resources/apache_conf.rb +149 -0
- data/lib/resources/apt.rb +149 -0
- data/lib/resources/audit_policy.rb +63 -0
- data/lib/resources/auditd.rb +231 -0
- data/lib/resources/auditd_conf.rb +46 -0
- data/lib/resources/bash.rb +35 -0
- data/lib/resources/bond.rb +69 -0
- data/lib/resources/bridge.rb +122 -0
- data/lib/resources/chocolatey_package.rb +78 -0
- data/lib/resources/command.rb +73 -0
- data/lib/resources/cpan.rb +58 -0
- data/lib/resources/cran.rb +64 -0
- data/lib/resources/crontab.rb +169 -0
- data/lib/resources/csv.rb +56 -0
- data/lib/resources/dh_params.rb +77 -0
- data/lib/resources/directory.rb +25 -0
- data/lib/resources/docker.rb +236 -0
- data/lib/resources/docker_container.rb +89 -0
- data/lib/resources/docker_image.rb +83 -0
- data/lib/resources/docker_object.rb +57 -0
- data/lib/resources/docker_service.rb +90 -0
- data/lib/resources/elasticsearch.rb +169 -0
- data/lib/resources/etc_fstab.rb +94 -0
- data/lib/resources/etc_group.rb +154 -0
- data/lib/resources/etc_hosts.rb +66 -0
- data/lib/resources/etc_hosts_allow_deny.rb +112 -0
- data/lib/resources/file.rb +298 -0
- data/lib/resources/filesystem.rb +31 -0
- data/lib/resources/firewalld.rb +143 -0
- data/lib/resources/gem.rb +70 -0
- data/lib/resources/groups.rb +215 -0
- data/lib/resources/grub_conf.rb +227 -0
- data/lib/resources/host.rb +306 -0
- data/lib/resources/http.rb +253 -0
- data/lib/resources/iis_app.rb +101 -0
- data/lib/resources/iis_site.rb +148 -0
- data/lib/resources/inetd_conf.rb +54 -0
- data/lib/resources/ini.rb +29 -0
- data/lib/resources/interface.rb +129 -0
- data/lib/resources/iptables.rb +80 -0
- data/lib/resources/json.rb +111 -0
- data/lib/resources/kernel_module.rb +107 -0
- data/lib/resources/kernel_parameter.rb +58 -0
- data/lib/resources/key_rsa.rb +63 -0
- data/lib/resources/limits_conf.rb +46 -0
- data/lib/resources/login_def.rb +57 -0
- data/lib/resources/mount.rb +88 -0
- data/lib/resources/mssql_session.rb +101 -0
- data/lib/resources/mysql.rb +82 -0
- data/lib/resources/mysql_conf.rb +127 -0
- data/lib/resources/mysql_session.rb +85 -0
- data/lib/resources/nginx.rb +96 -0
- data/lib/resources/nginx_conf.rb +226 -0
- data/lib/resources/npm.rb +48 -0
- data/lib/resources/ntp_conf.rb +51 -0
- data/lib/resources/oneget.rb +71 -0
- data/lib/resources/oracledb_session.rb +139 -0
- data/lib/resources/os.rb +36 -0
- data/lib/resources/os_env.rb +86 -0
- data/lib/resources/package.rb +370 -0
- data/lib/resources/packages.rb +111 -0
- data/lib/resources/parse_config.rb +112 -0
- data/lib/resources/passwd.rb +76 -0
- data/lib/resources/pip.rb +130 -0
- data/lib/resources/platform.rb +109 -0
- data/lib/resources/port.rb +771 -0
- data/lib/resources/postgres.rb +131 -0
- data/lib/resources/postgres_conf.rb +114 -0
- data/lib/resources/postgres_hba_conf.rb +90 -0
- data/lib/resources/postgres_ident_conf.rb +79 -0
- data/lib/resources/postgres_session.rb +71 -0
- data/lib/resources/powershell.rb +67 -0
- data/lib/resources/processes.rb +204 -0
- data/lib/resources/rabbitmq_conf.rb +51 -0
- data/lib/resources/registry_key.rb +297 -0
- data/lib/resources/security_policy.rb +180 -0
- data/lib/resources/service.rb +794 -0
- data/lib/resources/shadow.rb +159 -0
- data/lib/resources/ssh_conf.rb +97 -0
- data/lib/resources/ssl.rb +99 -0
- data/lib/resources/sys_info.rb +28 -0
- data/lib/resources/toml.rb +32 -0
- data/lib/resources/users.rb +654 -0
- data/lib/resources/vbscript.rb +68 -0
- data/lib/resources/virtualization.rb +247 -0
- data/lib/resources/windows_feature.rb +84 -0
- data/lib/resources/windows_hotfix.rb +35 -0
- data/lib/resources/windows_task.rb +102 -0
- data/lib/resources/wmi.rb +110 -0
- data/lib/resources/x509_certificate.rb +137 -0
- data/lib/resources/xinetd.rb +106 -0
- data/lib/resources/xml.rb +46 -0
- data/lib/resources/yaml.rb +43 -0
- data/lib/resources/yum.rb +180 -0
- data/lib/resources/zfs_dataset.rb +60 -0
- data/lib/resources/zfs_pool.rb +49 -0
- data/lib/source_readers/flat.rb +39 -0
- data/lib/source_readers/inspec.rb +75 -0
- data/lib/utils/command_wrapper.rb +27 -0
- data/lib/utils/convert.rb +12 -0
- data/lib/utils/database_helpers.rb +77 -0
- data/lib/utils/enumerable_delegation.rb +9 -0
- data/lib/utils/erlang_parser.rb +192 -0
- data/lib/utils/file_reader.rb +25 -0
- data/lib/utils/filter.rb +273 -0
- data/lib/utils/filter_array.rb +27 -0
- data/lib/utils/find_files.rb +47 -0
- data/lib/utils/hash.rb +41 -0
- data/lib/utils/json_log.rb +18 -0
- data/lib/utils/latest_version.rb +22 -0
- data/lib/utils/modulator.rb +12 -0
- data/lib/utils/nginx_parser.rb +105 -0
- data/lib/utils/object_traversal.rb +49 -0
- data/lib/utils/parser.rb +274 -0
- data/lib/utils/pkey_reader.rb +15 -0
- data/lib/utils/plugin_registry.rb +93 -0
- data/lib/utils/simpleconfig.rb +120 -0
- data/lib/utils/spdx.rb +13 -0
- data/lib/utils/spdx.txt +344 -0
- metadata +713 -0
@@ -0,0 +1,127 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
3
|
+
|
4
|
+
require 'utils/simpleconfig'
|
5
|
+
require 'utils/find_files'
|
6
|
+
require 'utils/file_reader'
|
7
|
+
require 'utils/hash'
|
8
|
+
require 'resources/mysql'
|
9
|
+
|
10
|
+
module Inspec::Resources
|
11
|
+
class MysqlConfEntry
|
12
|
+
def initialize(path, params)
|
13
|
+
@params = params
|
14
|
+
@path = path
|
15
|
+
end
|
16
|
+
|
17
|
+
def method_missing(name, *_)
|
18
|
+
k = name.to_s
|
19
|
+
res = @params[k]
|
20
|
+
return true if res.nil? && @params.key?(k)
|
21
|
+
@params[k]
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_s
|
25
|
+
"MySQL Config entry [#{@path.join(' ')}]"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class MysqlConf < Inspec.resource(1)
|
30
|
+
name 'mysql_conf'
|
31
|
+
supports platform: 'unix'
|
32
|
+
supports platform: 'windows'
|
33
|
+
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.'
|
34
|
+
example "
|
35
|
+
describe mysql_conf('path') do
|
36
|
+
its('setting') { should eq 'value' }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Test a parameter set within the [mysqld] section
|
40
|
+
describe mysql_conf do
|
41
|
+
its('mysqld.port') { should cmp 3306 }
|
42
|
+
end
|
43
|
+
|
44
|
+
# Test a parameter set within the [mariadb] section using array notation
|
45
|
+
describe mysql_conf do
|
46
|
+
its(['mariadb', 'max-connections']) { should_not be_nil }
|
47
|
+
end
|
48
|
+
"
|
49
|
+
|
50
|
+
include FindFiles
|
51
|
+
include FileReader
|
52
|
+
|
53
|
+
def initialize(conf_path = nil)
|
54
|
+
@conf_path = conf_path || inspec.mysql.conf_path
|
55
|
+
@files_contents = {}
|
56
|
+
@content = nil
|
57
|
+
@params = nil
|
58
|
+
read_content
|
59
|
+
end
|
60
|
+
|
61
|
+
def content
|
62
|
+
@content ||= read_content
|
63
|
+
end
|
64
|
+
|
65
|
+
def params(*opts)
|
66
|
+
@params || read_content
|
67
|
+
res = @params
|
68
|
+
opts.each do |opt|
|
69
|
+
res = res[opt] unless res.nil?
|
70
|
+
end
|
71
|
+
MysqlConfEntry.new(opts, res)
|
72
|
+
end
|
73
|
+
|
74
|
+
def method_missing(name)
|
75
|
+
@params || read_content
|
76
|
+
@params[name.to_s]
|
77
|
+
end
|
78
|
+
|
79
|
+
def read_content
|
80
|
+
@content = ''
|
81
|
+
@params = {}
|
82
|
+
|
83
|
+
to_read = [@conf_path]
|
84
|
+
until to_read.empty?
|
85
|
+
cur_file = to_read[0]
|
86
|
+
raw_conf = read_file(cur_file)
|
87
|
+
@content += raw_conf
|
88
|
+
|
89
|
+
params = SimpleConfig.new(raw_conf).params
|
90
|
+
@params = @params.deep_merge(params)
|
91
|
+
|
92
|
+
to_read = to_read.drop(1)
|
93
|
+
# see if there is more stuff to include
|
94
|
+
|
95
|
+
dir = File.dirname(cur_file)
|
96
|
+
to_read += include_files(dir, raw_conf).find_all do |fp|
|
97
|
+
not @files_contents.key? fp
|
98
|
+
end
|
99
|
+
end
|
100
|
+
#
|
101
|
+
@content
|
102
|
+
end
|
103
|
+
|
104
|
+
def include_files(reldir, conf)
|
105
|
+
files = conf.scan(/^!include\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
|
106
|
+
dirs = conf.scan(/^!includedir\s+(.*)\s*/).flatten.compact.map { |x| abs_path(reldir, x) }
|
107
|
+
dirs.map do |dir|
|
108
|
+
# @TODO: non local glob
|
109
|
+
files += find_files(dir, depth: 1, type: 'file')
|
110
|
+
end
|
111
|
+
files
|
112
|
+
end
|
113
|
+
|
114
|
+
def abs_path(dir, f)
|
115
|
+
return f if f.start_with? '/'
|
116
|
+
File.join(dir, f)
|
117
|
+
end
|
118
|
+
|
119
|
+
def read_file(path)
|
120
|
+
@files_contents[path] ||= read_file_content(path)
|
121
|
+
end
|
122
|
+
|
123
|
+
def to_s
|
124
|
+
'MySQL Configuration'
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
3
|
+
|
4
|
+
require 'shellwords'
|
5
|
+
|
6
|
+
module Inspec::Resources
|
7
|
+
class MysqlSession < Inspec.resource(1)
|
8
|
+
name 'mysql_session'
|
9
|
+
supports platform: 'unix'
|
10
|
+
supports platform: 'windows'
|
11
|
+
desc 'Use the mysql_session InSpec audit resource to test SQL commands run against a MySQL database.'
|
12
|
+
example "
|
13
|
+
sql = mysql_session('my_user','password','host')
|
14
|
+
describe sql.query('show databases like \'test\';') do
|
15
|
+
its('stdout') { should_not match(/test/) }
|
16
|
+
end
|
17
|
+
"
|
18
|
+
|
19
|
+
def initialize(user = nil, pass = nil, host = 'localhost', port = nil, socket = nil)
|
20
|
+
@user = user
|
21
|
+
@pass = pass
|
22
|
+
@host = host
|
23
|
+
@port = port
|
24
|
+
@socket = socket
|
25
|
+
init_fallback if user.nil? or pass.nil?
|
26
|
+
skip_resource("Can't run MySQL SQL checks without authentication") if @user.nil? or @pass.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
def query(q, db = '')
|
30
|
+
mysql_cmd = create_mysql_cmd(q, db)
|
31
|
+
cmd = inspec.command(mysql_cmd)
|
32
|
+
out = cmd.stdout + "\n" + cmd.stderr
|
33
|
+
if out =~ /Can't connect to .* MySQL server/ || out.downcase =~ /^error/
|
34
|
+
# skip this test if the server can't run the query
|
35
|
+
warn("Can't connect to MySQL instance for SQL checks.")
|
36
|
+
end
|
37
|
+
|
38
|
+
# return the raw command output
|
39
|
+
cmd
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_s
|
43
|
+
'MySQL Session'
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def escape_string(query)
|
49
|
+
Shellwords.escape(query)
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_mysql_cmd(q, db = '')
|
53
|
+
# TODO: simple escape, must be handled by a library
|
54
|
+
# that does this securely
|
55
|
+
escaped_query = q.gsub(/\\/, '\\\\').gsub(/"/, '\\"').gsub(/\$/, '\\$')
|
56
|
+
|
57
|
+
# construct the query
|
58
|
+
command = 'mysql'
|
59
|
+
command += " -u#{escape_string(@user)}" unless @user.nil?
|
60
|
+
command += " -p#{escape_string(@pass)}" unless @pass.nil?
|
61
|
+
|
62
|
+
if !@socket.nil?
|
63
|
+
command += " -S #{@socket}"
|
64
|
+
else
|
65
|
+
command += " -h #{@host}"
|
66
|
+
end
|
67
|
+
command += " --port #{@port}" unless @port.nil?
|
68
|
+
command += " #{db}" unless db.empty?
|
69
|
+
command += %{ -s -e "#{escaped_query}"}
|
70
|
+
command
|
71
|
+
end
|
72
|
+
|
73
|
+
def init_fallback
|
74
|
+
# support debian mysql administration login
|
75
|
+
debian = inspec.command('test -f /etc/mysql/debian.cnf && cat /etc/mysql/debian.cnf').stdout
|
76
|
+
return if debian.empty?
|
77
|
+
|
78
|
+
user = debian.match(/^\s*user\s*=\s*([^ ]*)\s*$/)
|
79
|
+
pass = debian.match(/^\s*password\s*=\s*([^ ]*)\s*$/)
|
80
|
+
return if user.nil? or pass.nil?
|
81
|
+
@user = user[1]
|
82
|
+
@pass = pass[1]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
require 'hashie/mash'
|
5
|
+
|
6
|
+
module Inspec::Resources
|
7
|
+
class Nginx < Inspec.resource(1)
|
8
|
+
name 'nginx'
|
9
|
+
supports platform: 'unix'
|
10
|
+
desc 'Use the nginx InSpec audit resource to test information about your NGINX instance.'
|
11
|
+
example "
|
12
|
+
describe nginx do
|
13
|
+
its('conf_path') { should cmp '/etc/nginx/nginx.conf' }
|
14
|
+
end
|
15
|
+
describe nginx('/etc/sbin/') do
|
16
|
+
its('version') { should be >= '1.0.0' }
|
17
|
+
end
|
18
|
+
describe nginx do
|
19
|
+
its('modules') { should include 'my_module' }
|
20
|
+
end
|
21
|
+
"
|
22
|
+
attr_reader :params, :bin_dir
|
23
|
+
|
24
|
+
def initialize(nginx_path = '/usr/sbin/nginx')
|
25
|
+
return skip_resource 'The `nginx` resource is not yet available on your OS.' if inspec.os.windows?
|
26
|
+
return skip_resource 'The `nginx` binary not found in the path provided.' unless inspec.command(nginx_path).exist?
|
27
|
+
|
28
|
+
cmd = inspec.command("#{nginx_path} -V 2>&1")
|
29
|
+
if !cmd.exit_status.zero?
|
30
|
+
return skip_resource 'Error using the command nginx -V'
|
31
|
+
end
|
32
|
+
@data = cmd.stdout
|
33
|
+
@params = {}
|
34
|
+
read_content
|
35
|
+
end
|
36
|
+
|
37
|
+
%w{error_log_path http_client_body_temp_path http_fastcgi_temp_path http_log_path http_proxy_temp_path http_scgi_temp_path http_uwsgi_temp_path lock_path modules_path prefix sbin_path service version}.each do |property|
|
38
|
+
define_method(property.to_sym) do
|
39
|
+
@params[property.to_sym]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def openssl_version
|
44
|
+
result = @data.scan(/built with OpenSSL\s(\S+)\s(\d+\s\S+\s\d{4})/).flatten
|
45
|
+
Hashie::Mash.new({ 'version' => result[0], 'date' => result[1] })
|
46
|
+
end
|
47
|
+
|
48
|
+
def compiler_info
|
49
|
+
result = @data.scan(/built by (\S+)\s(\S+)\s(\S+)/).flatten
|
50
|
+
Hashie::Mash.new({ 'compiler' => result[0], 'version' => result[1], 'date' => result[2] })
|
51
|
+
end
|
52
|
+
|
53
|
+
def support_info
|
54
|
+
support_info = @data.scan(/(.*\S+) support enabled/).flatten
|
55
|
+
support_info.empty? ? nil : support_info.join(' ')
|
56
|
+
end
|
57
|
+
|
58
|
+
def modules
|
59
|
+
@data.scan(/--with-(\S+)_module/).flatten
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_s
|
63
|
+
'Nginx Environment'
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def read_content
|
69
|
+
parse_config
|
70
|
+
parse_path
|
71
|
+
parse_http_path
|
72
|
+
end
|
73
|
+
|
74
|
+
def parse_config
|
75
|
+
@params[:prefix] = @data.scan(/--prefix=(\S+)\s/).flatten.first
|
76
|
+
@params[:service] = 'nginx'
|
77
|
+
@params[:version] = @data.scan(%r{nginx version: nginx\/(\S+)\s}).flatten.first
|
78
|
+
end
|
79
|
+
|
80
|
+
def parse_path
|
81
|
+
@params[:sbin_path] = @data.scan(/--sbin-path=(\S+)\s/).flatten.first
|
82
|
+
@params[:modules_path] = @data.scan(/--modules-path=(\S+)\s/).flatten.first
|
83
|
+
@params[:error_log_path] = @data.scan(/--error-log-path=(\S+)\s/).flatten.first
|
84
|
+
@params[:http_log_path] = @data.scan(/--http-log-path=(\S+)\s/).flatten.first
|
85
|
+
@params[:lock_path] = @data.scan(/--lock-path=(\S+)\s/).flatten.first
|
86
|
+
end
|
87
|
+
|
88
|
+
def parse_http_path
|
89
|
+
@params[:http_client_body_temp_path] = @data.scan(/--http-client-body-temp-path=(\S+)\s/).flatten.first
|
90
|
+
@params[:http_proxy_temp_path] = @data.scan(/--http-proxy-temp-path=(\S+)\s/).flatten.first
|
91
|
+
@params[:http_fastcgi_temp_path] = @data.scan(/--http-fastcgi-temp-path=(\S+)\s/).flatten.first
|
92
|
+
@params[:http_uwsgi_temp_path] = @data.scan(/--http-uwsgi-temp-path=(\S+)\s/).flatten.first
|
93
|
+
@params[:http_scgi_temp_path] = @data.scan(/--http-scgi-temp-path=(\S+)\s/).flatten.first
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,226 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'utils/nginx_parser'
|
4
|
+
require 'utils/find_files'
|
5
|
+
require 'utils/file_reader'
|
6
|
+
require 'forwardable'
|
7
|
+
|
8
|
+
# STABILITY: Experimental
|
9
|
+
# This resouce needs a proper interace to the underlying data, which is currently missing.
|
10
|
+
# Until it is added, we will keep it experimental.
|
11
|
+
#
|
12
|
+
# TODO: Support it on Windows. To do so, we need to recognize the base os and how
|
13
|
+
# it combines the file path. Calling `File.join` or similar methods may lead to errors
|
14
|
+
# when running remotely.
|
15
|
+
module Inspec::Resources
|
16
|
+
class NginxConf < Inspec.resource(1)
|
17
|
+
name 'nginx_conf'
|
18
|
+
supports platform: 'unix'
|
19
|
+
desc 'Use the nginx_conf InSpec resource to test configuration data '\
|
20
|
+
'for the NginX web server located in /etc/nginx/nginx.conf on '\
|
21
|
+
'Linux and UNIX platforms.'
|
22
|
+
example "
|
23
|
+
describe nginx_conf.params ...
|
24
|
+
describe nginx_conf('/path/to/my/nginx.conf').params ...
|
25
|
+
"
|
26
|
+
|
27
|
+
extend Forwardable
|
28
|
+
|
29
|
+
include FindFiles
|
30
|
+
include FileReader
|
31
|
+
|
32
|
+
attr_reader :contents
|
33
|
+
|
34
|
+
def initialize(conf_path = nil)
|
35
|
+
@conf_path = conf_path || '/etc/nginx/nginx.conf'
|
36
|
+
@contents = {}
|
37
|
+
return skip_resource 'The `nginx_conf` resource is currently not supported on Windows.' if inspec.os.windows?
|
38
|
+
read_content(@conf_path)
|
39
|
+
end
|
40
|
+
|
41
|
+
def params
|
42
|
+
@params ||= parse_nginx(@conf_path)
|
43
|
+
rescue StandardError => e
|
44
|
+
skip_resource e.message
|
45
|
+
@params = {}
|
46
|
+
end
|
47
|
+
|
48
|
+
def http
|
49
|
+
NginxConfHttp.new(params['http'], self)
|
50
|
+
end
|
51
|
+
|
52
|
+
def_delegators :http, :servers, :locations
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
"nginx_conf #{@conf_path}"
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def read_content(path)
|
61
|
+
return @contents[path] if @contents.key?(path)
|
62
|
+
@contents[path] = read_file_content(path, allow_empty: true)
|
63
|
+
end
|
64
|
+
|
65
|
+
def parse_nginx(path)
|
66
|
+
return nil if inspec.os.windows?
|
67
|
+
content = read_content(path)
|
68
|
+
data = NginxConfig.parse(content)
|
69
|
+
resolve_references(data, File.dirname(path))
|
70
|
+
rescue StandardError => _
|
71
|
+
raise "Cannot parse NginX config in #{path}."
|
72
|
+
end
|
73
|
+
|
74
|
+
# Cycle through the complete parsed data structure and try to find any
|
75
|
+
# calls to `include`. In NginX, this is used to embed data from other
|
76
|
+
# files into the current data structure.
|
77
|
+
#
|
78
|
+
# The method steps through the object structure that is passed in to
|
79
|
+
# find any calls to 'include' and returns the object structure with the
|
80
|
+
# included data merged in.
|
81
|
+
#
|
82
|
+
# @param data [Hash] data structure from NginxConfig.parse
|
83
|
+
# @param rel_path [String] the relative path from which this config is read
|
84
|
+
# @return [Hash] data structure with references included
|
85
|
+
def resolve_references(data, rel_path)
|
86
|
+
# Walk through all array entries to find more references
|
87
|
+
return data.map { |x| resolve_references(x, rel_path) } if data.is_a?(Array)
|
88
|
+
|
89
|
+
# Return any data that we cannot step into to find more `include` calls
|
90
|
+
return data unless data.is_a?(Hash)
|
91
|
+
|
92
|
+
# Any call to `include` gets its data read, parsed, and merged back
|
93
|
+
# into the current data structure
|
94
|
+
if data.key?('include')
|
95
|
+
data.delete('include').flatten
|
96
|
+
.map { |x| File.expand_path(x, rel_path) }
|
97
|
+
.map { |x| find_files(x) }.flatten
|
98
|
+
.map { |path| parse_nginx(path) }
|
99
|
+
.each { |conf| merge_config!(data, conf) }
|
100
|
+
end
|
101
|
+
|
102
|
+
# Walk through the remaining hash fields to find more references
|
103
|
+
Hash[data.map { |k, v| [k, resolve_references(v, rel_path)] }]
|
104
|
+
end
|
105
|
+
|
106
|
+
# Deep merge fields from NginxConfig.parse.
|
107
|
+
# A regular merge would overwrite values so a deep merge is needed.
|
108
|
+
# @param data [Hash] data structure from NginxConfig.parse
|
109
|
+
# @param conf [Hash] data structure to be deep merged into data
|
110
|
+
# @return [Hash] data structure with conf and data deep merged
|
111
|
+
def merge_config!(data, conf)
|
112
|
+
# Catch edge-cases
|
113
|
+
return if data.nil? || conf.nil?
|
114
|
+
# Step through all conf items and create combined return value
|
115
|
+
data.merge!(conf) do |_, v1, v2|
|
116
|
+
if v1.is_a?(Array) && v2.is_a?(Array)
|
117
|
+
# If both the data field and the conf field are arrays, then combine them
|
118
|
+
v1 + v2
|
119
|
+
elsif v1.is_a?(Hash) && v2.is_a?(Hash)
|
120
|
+
# If both the data field and the conf field are maps, then deep merge them
|
121
|
+
merge_config!(v1, v2)
|
122
|
+
else
|
123
|
+
# All other cases, just use the new value (regular merge behavior)
|
124
|
+
v2
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
class NginxConfHttp
|
131
|
+
attr_reader :entries
|
132
|
+
def initialize(params, parent)
|
133
|
+
@parent = parent
|
134
|
+
@entries = (params || []).map { |x| NginxConfHttpEntry.new(x, parent) }
|
135
|
+
end
|
136
|
+
|
137
|
+
def servers
|
138
|
+
@entries.map(&:servers).flatten
|
139
|
+
end
|
140
|
+
|
141
|
+
def locations
|
142
|
+
servers.map(&:locations).flatten
|
143
|
+
end
|
144
|
+
|
145
|
+
def to_s
|
146
|
+
@parent.to_s + ', http entries'
|
147
|
+
end
|
148
|
+
alias inspect to_s
|
149
|
+
end
|
150
|
+
|
151
|
+
class NginxConfHttpEntry
|
152
|
+
attr_reader :params, :parent
|
153
|
+
def initialize(params, parent)
|
154
|
+
@params = params || {}
|
155
|
+
@parent = parent
|
156
|
+
end
|
157
|
+
|
158
|
+
filter = FilterTable.create
|
159
|
+
filter.add_accessor(:where)
|
160
|
+
.add(:servers, field: 'server')
|
161
|
+
.connect(self, :server_table)
|
162
|
+
|
163
|
+
def locations
|
164
|
+
servers.map(&:locations).flatten
|
165
|
+
end
|
166
|
+
|
167
|
+
def to_s
|
168
|
+
@parent.to_s + ', http entry'
|
169
|
+
end
|
170
|
+
alias inspect to_s
|
171
|
+
|
172
|
+
private
|
173
|
+
|
174
|
+
def server_table
|
175
|
+
@server_table ||= (params['server'] || []).map { |x| { 'server' => NginxConfServer.new(x, self) } }
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
class NginxConfServer
|
180
|
+
attr_reader :params, :parent
|
181
|
+
def initialize(params, parent)
|
182
|
+
@parent = parent
|
183
|
+
@params = params || {}
|
184
|
+
end
|
185
|
+
|
186
|
+
filter = FilterTable.create
|
187
|
+
filter.add_accessor(:where)
|
188
|
+
.add(:locations, field: 'location')
|
189
|
+
.connect(self, :location_table)
|
190
|
+
|
191
|
+
def to_s
|
192
|
+
server = ''
|
193
|
+
name = Array(params['server_name']).flatten.first
|
194
|
+
unless name.nil?
|
195
|
+
server += name
|
196
|
+
listen = Array(params['listen']).flatten.first
|
197
|
+
server += ":#{listen}" unless listen.nil?
|
198
|
+
end
|
199
|
+
|
200
|
+
# go two levels up: 1. to the http entry and 2. to the root nginx conf
|
201
|
+
@parent.parent.to_s + ", server #{server}"
|
202
|
+
end
|
203
|
+
alias inspect to_s
|
204
|
+
|
205
|
+
private
|
206
|
+
|
207
|
+
def location_table
|
208
|
+
@location_table ||= (params['location'] || []).map { |x| { 'location' => NginxConfLocation.new(x, self) } }
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
class NginxConfLocation
|
213
|
+
attr_reader :params, :parent
|
214
|
+
def initialize(params, parent)
|
215
|
+
@parent = parent
|
216
|
+
@params = params || {}
|
217
|
+
end
|
218
|
+
|
219
|
+
def to_s
|
220
|
+
location = Array(params['_']).join(' ')
|
221
|
+
# go three levels up: 1. to the server entry, 2. http entry and 3. to the root nginx conf
|
222
|
+
@parent.parent.parent.to_s + ", location #{location.inspect}"
|
223
|
+
end
|
224
|
+
alias inspect to_s
|
225
|
+
end
|
226
|
+
end
|