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,151 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'utils/filter'
|
4
|
+
require 'utils/parser'
|
5
|
+
require 'utils/file_reader'
|
6
|
+
module Inspec::Resources
|
7
|
+
class AideConf < Inspec.resource(1)
|
8
|
+
name 'aide_conf'
|
9
|
+
supports platform: 'unix'
|
10
|
+
desc 'Use the aide_conf InSpec audit resource to test the rules established for
|
11
|
+
the file integrity tool AIDE. Controlled by the aide.conf file typically at /etc/aide.conf.'
|
12
|
+
example "
|
13
|
+
describe aide_conf do
|
14
|
+
its('selection_lines') { should include '/sbin' }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe aide_conf.where { selection_line == '/bin' } do
|
18
|
+
its('rules.flatten') { should include 'r' }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe aide_conf.all_have_rule('sha512') do
|
22
|
+
it { should eq true }
|
23
|
+
end
|
24
|
+
"
|
25
|
+
|
26
|
+
attr_reader :params
|
27
|
+
|
28
|
+
include CommentParser
|
29
|
+
include FileReader
|
30
|
+
|
31
|
+
def initialize(aide_conf_path = nil)
|
32
|
+
@conf_path = aide_conf_path || '/etc/aide.conf'
|
33
|
+
@content = nil
|
34
|
+
@rules = nil
|
35
|
+
read_content
|
36
|
+
end
|
37
|
+
|
38
|
+
def all_have_rule(rule)
|
39
|
+
# Case when file didn't exist or perms didn't allow an open
|
40
|
+
return false if @content.nil?
|
41
|
+
|
42
|
+
lines = @params.reject { |line| line['rules'].include? rule }
|
43
|
+
lines.empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
filter = FilterTable.create
|
47
|
+
filter.add_accessor(:where)
|
48
|
+
.add_accessor(:entries)
|
49
|
+
.add(:selection_lines, field: 'selection_line')
|
50
|
+
.add(:rules, field: 'rules')
|
51
|
+
|
52
|
+
filter.connect(self, :params)
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def read_content
|
57
|
+
return @content unless @content.nil?
|
58
|
+
@rules = {}
|
59
|
+
|
60
|
+
raw_conf = read_file_content(@conf_path)
|
61
|
+
|
62
|
+
# If there is a file and it contains content, continue
|
63
|
+
@content = filter_comments(raw_conf.lines)
|
64
|
+
@params = parse_conf(@content)
|
65
|
+
end
|
66
|
+
|
67
|
+
def filter_comments(data)
|
68
|
+
content = []
|
69
|
+
data.each do |line|
|
70
|
+
content_line, = parse_comment_line(line, comment_char: '#', standalone_comments: false)
|
71
|
+
content.push(content_line)
|
72
|
+
end
|
73
|
+
content
|
74
|
+
end
|
75
|
+
|
76
|
+
def parse_conf(content)
|
77
|
+
params = []
|
78
|
+
content.each do |line|
|
79
|
+
param = parse_line(line)
|
80
|
+
if !param['selection_line'].nil?
|
81
|
+
params.push(param)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
params
|
85
|
+
end
|
86
|
+
|
87
|
+
def parse_line(line)
|
88
|
+
line_and_rules = {}
|
89
|
+
# Case when line is a rule line
|
90
|
+
if line.include?(' = ')
|
91
|
+
parse_rule_line(line)
|
92
|
+
# Case when line is a selection line
|
93
|
+
elsif line.start_with?('/', '!', '=')
|
94
|
+
line_and_rules = parse_selection_line(line)
|
95
|
+
end
|
96
|
+
line_and_rules
|
97
|
+
end
|
98
|
+
|
99
|
+
def parse_rule_line(line)
|
100
|
+
line.gsub!(/\s+/, '')
|
101
|
+
rule_line_arr = line.split('=')
|
102
|
+
rules_list = rule_line_arr.last.split('+')
|
103
|
+
rule_name = rule_line_arr.first
|
104
|
+
rules_list.each_index do |i|
|
105
|
+
# Cases where rule respresents one or more other rules
|
106
|
+
if @rules.key?(rules_list[i])
|
107
|
+
rules_list[i] = @rules[rules_list[i]]
|
108
|
+
end
|
109
|
+
rules_list[i] = handle_multi_rule(rules_list, i)
|
110
|
+
end
|
111
|
+
@rules[rule_name] = rules_list.flatten
|
112
|
+
end
|
113
|
+
|
114
|
+
def parse_selection_line(line)
|
115
|
+
selec_line_arr = line.split(' ')
|
116
|
+
selection_line = selec_line_arr.first
|
117
|
+
selection_line.chop! if selection_line.end_with?('/')
|
118
|
+
rule_list = selec_line_arr.last.split('+')
|
119
|
+
rule_list.each_index do |i|
|
120
|
+
hash_list = @rules[rule_list[i]]
|
121
|
+
# Cases where rule respresents one or more other rules
|
122
|
+
if !hash_list.nil?
|
123
|
+
rule_list[i] = hash_list
|
124
|
+
end
|
125
|
+
rule_list[i] = handle_multi_rule(rule_list, i)
|
126
|
+
end
|
127
|
+
rule_list.flatten!
|
128
|
+
{
|
129
|
+
'selection_line' => selection_line,
|
130
|
+
'rules' => rule_list,
|
131
|
+
}
|
132
|
+
end
|
133
|
+
|
134
|
+
def handle_multi_rule(rule_list, i)
|
135
|
+
# Rules that represent multiple rules (R,L,>)
|
136
|
+
r_rules = %w{p i l n u g s m c md5}
|
137
|
+
l_rules = %w{p i l n u g}
|
138
|
+
grow_log_rules = %w{p l u g i n S}
|
139
|
+
|
140
|
+
case rule_list[i]
|
141
|
+
when 'R'
|
142
|
+
return r_rules
|
143
|
+
when 'L'
|
144
|
+
return l_rules
|
145
|
+
when '>'
|
146
|
+
return grow_log_rules
|
147
|
+
end
|
148
|
+
rule_list[i]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# copyright: 2015, Vulcano Security GmbH
|
3
|
+
|
4
|
+
module Inspec::Resources
|
5
|
+
class Apache < Inspec.resource(1)
|
6
|
+
name 'apache'
|
7
|
+
supports platform: 'unix'
|
8
|
+
desc 'Use the apache InSpec audit resource to retrieve Apache environment settings.'
|
9
|
+
example "
|
10
|
+
describe apache do
|
11
|
+
its ('service') { should cmp 'apache2' }
|
12
|
+
end
|
13
|
+
|
14
|
+
describe apache do
|
15
|
+
its ('conf_dir') { should cmp '/etc/apache2' }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe apache do
|
19
|
+
its ('conf_path') { should cmp '/etc/apache2/apache2.conf' }
|
20
|
+
end
|
21
|
+
|
22
|
+
describe apache do
|
23
|
+
its ('user') { should cmp 'www-data' }
|
24
|
+
end
|
25
|
+
"
|
26
|
+
|
27
|
+
attr_reader :service, :conf_dir, :conf_path, :user
|
28
|
+
def initialize
|
29
|
+
warn '[DEPRECATED] The `apache` resource is deprecated and will be removed in InSpec 3.0.'
|
30
|
+
|
31
|
+
if inspec.os.debian?
|
32
|
+
@service = 'apache2'
|
33
|
+
@conf_dir = '/etc/apache2/'
|
34
|
+
@conf_path = File.join @conf_dir, 'apache2.conf'
|
35
|
+
@user = 'www-data'
|
36
|
+
else
|
37
|
+
@service = 'httpd'
|
38
|
+
@conf_dir = '/etc/httpd/'
|
39
|
+
@conf_path = File.join @conf_dir, '/conf/httpd.conf'
|
40
|
+
@user = 'apache'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
'Apache Environment'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,149 @@
|
|
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
|
+
|
8
|
+
module Inspec::Resources
|
9
|
+
class ApacheConf < Inspec.resource(1)
|
10
|
+
name 'apache_conf'
|
11
|
+
supports platform: 'linux'
|
12
|
+
supports platform: 'debian'
|
13
|
+
desc 'Use the apache_conf InSpec audit resource to test the configuration settings for Apache. This file is typically located under /etc/apache2 on the Debian and Ubuntu platforms and under /etc/httpd on the Fedora, CentOS, Red Hat Enterprise Linux, and Arch Linux platforms. The configuration settings may vary significantly from platform to platform.'
|
14
|
+
example "
|
15
|
+
describe apache_conf do
|
16
|
+
its('setting_name') { should eq 'value' }
|
17
|
+
end
|
18
|
+
"
|
19
|
+
|
20
|
+
include FindFiles
|
21
|
+
include FileReader
|
22
|
+
|
23
|
+
attr_reader :conf_path
|
24
|
+
|
25
|
+
def initialize(conf_path = nil)
|
26
|
+
@conf_path = conf_path || default_conf_path
|
27
|
+
@files_contents = {}
|
28
|
+
@content = nil
|
29
|
+
@params = nil
|
30
|
+
read_content
|
31
|
+
end
|
32
|
+
|
33
|
+
def content
|
34
|
+
@content ||= read_content
|
35
|
+
end
|
36
|
+
|
37
|
+
def params(*opts)
|
38
|
+
@params || read_content
|
39
|
+
res = @params
|
40
|
+
opts.each do |opt|
|
41
|
+
res = res[opt] unless res.nil?
|
42
|
+
end
|
43
|
+
res
|
44
|
+
end
|
45
|
+
|
46
|
+
def method_missing(name)
|
47
|
+
# ensure params are loaded
|
48
|
+
@params || read_content
|
49
|
+
|
50
|
+
# extract values
|
51
|
+
@params[name.to_s] unless @params.nil?
|
52
|
+
end
|
53
|
+
|
54
|
+
def filter_comments(data)
|
55
|
+
content = ''
|
56
|
+
data.each_line do |line|
|
57
|
+
if !line.match(/^\s*#/)
|
58
|
+
content << line
|
59
|
+
end
|
60
|
+
end
|
61
|
+
content
|
62
|
+
end
|
63
|
+
|
64
|
+
def read_content
|
65
|
+
@content = ''
|
66
|
+
@params = {}
|
67
|
+
|
68
|
+
read_file_content(conf_path)
|
69
|
+
|
70
|
+
to_read = [conf_path]
|
71
|
+
until to_read.empty?
|
72
|
+
raw_conf = read_file(to_read[0])
|
73
|
+
@content += raw_conf
|
74
|
+
|
75
|
+
# An explaination of the below regular expression.
|
76
|
+
# Creates two capture groups.
|
77
|
+
# The first group captures the first group of non-whitespace character
|
78
|
+
# surrounded whitespace characters.
|
79
|
+
# The second group contains a conditional with a positive lookahead
|
80
|
+
# (does the line end with one or more spaces?). If the lookahead succeeds
|
81
|
+
# a non-greedy capture takes place, if it fails then a greedy capture takes place.
|
82
|
+
# The regex is terminated by an expression that matches zero or more spaces.
|
83
|
+
params = SimpleConfig.new(
|
84
|
+
raw_conf,
|
85
|
+
assignment_regex: /^\s*(\S+)\s+((?=.*\s+$).*?|.*)\s*$/,
|
86
|
+
multiple_values: true,
|
87
|
+
).params
|
88
|
+
@params.merge!(params)
|
89
|
+
|
90
|
+
to_read = to_read.drop(1)
|
91
|
+
to_read += include_files(params).find_all do |fp|
|
92
|
+
not @files_contents.key? fp
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# fiter comments
|
97
|
+
@content = filter_comments @content
|
98
|
+
@content
|
99
|
+
end
|
100
|
+
|
101
|
+
def include_files(params)
|
102
|
+
# see if there is more config files to include
|
103
|
+
include_files = params['Include'] || []
|
104
|
+
include_files_optional = params['IncludeOptional'] || []
|
105
|
+
|
106
|
+
includes = []
|
107
|
+
(include_files + include_files_optional).each do |f|
|
108
|
+
id = Pathname.new(f).absolute? ? f : File.join(conf_dir, f)
|
109
|
+
files = find_files(id, depth: 1, type: 'file')
|
110
|
+
files += find_files(id, depth: 1, type: 'link')
|
111
|
+
|
112
|
+
includes.push(files) if files
|
113
|
+
end
|
114
|
+
|
115
|
+
# [].flatten! == nil
|
116
|
+
includes.flatten! || []
|
117
|
+
end
|
118
|
+
|
119
|
+
def read_file(path)
|
120
|
+
@files_contents[path] ||= read_file_content(path)
|
121
|
+
end
|
122
|
+
|
123
|
+
def conf_dir
|
124
|
+
if inspec.os.debian?
|
125
|
+
File.dirname(conf_path)
|
126
|
+
else
|
127
|
+
# On RHEL-based systems, the configuration is usually in a /conf directory
|
128
|
+
# that contains the primary config file. We assume the "config path" is the
|
129
|
+
# directory that contains the /conf directory, such as /etc/httpd, so that
|
130
|
+
# the conf.d directory can be properly located.
|
131
|
+
Pathname.new(File.dirname(conf_path)).parent.to_s
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def to_s
|
136
|
+
"Apache Config #{conf_path}"
|
137
|
+
end
|
138
|
+
|
139
|
+
private
|
140
|
+
|
141
|
+
def default_conf_path
|
142
|
+
if inspec.os.debian?
|
143
|
+
'/etc/apache2/apache2.conf'
|
144
|
+
else
|
145
|
+
'/etc/httpd/conf/httpd.conf'
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Verifies apt and ppa repositories
|
4
|
+
#
|
5
|
+
# Usage:
|
6
|
+
# describe apt('ubuntu-wine/ppa') do
|
7
|
+
# it { should exist }
|
8
|
+
# it { should be_enabled }
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
# it also understands a ppa url
|
12
|
+
# describe apt('ppa:ubuntu-wine/ppa') do
|
13
|
+
# it { should exist }
|
14
|
+
# it { should be_enabled }
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# The following ppa formats are supported:
|
18
|
+
# - ubuntu-wine/ppa
|
19
|
+
# - ppa:ubuntu-wine/ppa
|
20
|
+
# - http://ppa.launchpad.net/juju/stable/ubuntu
|
21
|
+
#
|
22
|
+
# Install a ppa as following:
|
23
|
+
# apt-get install python-software-properties
|
24
|
+
# apt-get install software-properties-common
|
25
|
+
# add-apt-repository ppa:ubuntu-wine/ppa
|
26
|
+
|
27
|
+
require 'uri'
|
28
|
+
|
29
|
+
module Inspec::Resources
|
30
|
+
class AptRepository < Inspec.resource(1)
|
31
|
+
name 'apt'
|
32
|
+
supports platform: 'unix'
|
33
|
+
desc 'Use the apt InSpec audit resource to verify Apt repositories on the Debian and Ubuntu platforms, and also PPA repositories on the Ubuntu platform.'
|
34
|
+
example "
|
35
|
+
describe apt('nginx/stable') do
|
36
|
+
it { should exist }
|
37
|
+
it { should be_enabled }
|
38
|
+
end
|
39
|
+
"
|
40
|
+
|
41
|
+
def initialize(ppa_name)
|
42
|
+
@deb_url = nil
|
43
|
+
# check if the os is ubuntu or debian
|
44
|
+
if inspec.os.debian?
|
45
|
+
@deb_url = determine_ppa_url(ppa_name)
|
46
|
+
else
|
47
|
+
# this resource is only supported on ubuntu and debian
|
48
|
+
skip_resource 'The `apt` resource is not supported on your OS yet.'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def exists?
|
53
|
+
find_repo.count > 0
|
54
|
+
end
|
55
|
+
|
56
|
+
def enabled?
|
57
|
+
return false if find_repo.count == 0
|
58
|
+
actives = find_repo.map { |repo| repo[:active] }
|
59
|
+
actives = actives.uniq
|
60
|
+
actives.size == 1 && actives[0] = true
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_s
|
64
|
+
"Apt Repository #{@deb_url}"
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def find_repo
|
70
|
+
read_debs.select { |repo| repo[:url] == @deb_url && repo[:type] == 'deb' }
|
71
|
+
end
|
72
|
+
|
73
|
+
HTTP_URL_RE = /\A#{URI::DEFAULT_PARSER.make_regexp(%w{http https})}\z/
|
74
|
+
|
75
|
+
# read
|
76
|
+
def read_debs
|
77
|
+
return @repo_cache if defined?(@repo_cache)
|
78
|
+
|
79
|
+
# load all lists
|
80
|
+
cmd = inspec.command("find /etc/apt/ -name \*.list -exec sh -c 'cat {} || echo -n' \\;")
|
81
|
+
|
82
|
+
# @see https://help.ubuntu.com/community/Repositories/CommandLine#Explanation_of_the_Repository_Format
|
83
|
+
@repo_cache = cmd.stdout.chomp.split("\n").each_with_object([]) do |raw_line, lines|
|
84
|
+
active = true
|
85
|
+
|
86
|
+
# detect if the repo is commented out
|
87
|
+
line = raw_line.gsub(/^(#\s*)*/, '')
|
88
|
+
active = false if raw_line != line
|
89
|
+
|
90
|
+
# eg.: deb http://archive.ubuntu.com/ubuntu/ wily main restricted
|
91
|
+
# or : deb [trusted=yes] http://archive.ubuntu.com/ubuntu/ wily main restricted
|
92
|
+
parse_repo = /^\s*(\S+)\s+(?:\[\S+\])?\s*"?([^ "\t\r\n\f]+)"?\s+(\S+)\s+(.*)$/.match(line)
|
93
|
+
|
94
|
+
# check if we got any result and the second param is an url
|
95
|
+
next if parse_repo.nil? || !parse_repo[2] =~ HTTP_URL_RE
|
96
|
+
|
97
|
+
# map data
|
98
|
+
repo = {
|
99
|
+
type: parse_repo[1],
|
100
|
+
url: parse_repo[2],
|
101
|
+
distro: parse_repo[3],
|
102
|
+
components: parse_repo[4].chomp.split(' '),
|
103
|
+
active: active,
|
104
|
+
}
|
105
|
+
next unless ['deb', 'deb-src'].include? repo[:type]
|
106
|
+
|
107
|
+
lines.push(repo)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# resolves ppa urls
|
112
|
+
# @see http://bazaar.launchpad.net/~ubuntu-core-dev/software-properties/main/view/head:/softwareproperties/ppa.py
|
113
|
+
def determine_ppa_url(ppa_url)
|
114
|
+
# verify if we have the url already, then just return
|
115
|
+
return ppa_url if ppa_url =~ HTTP_URL_RE
|
116
|
+
# otherwise start generating the ppa url
|
117
|
+
|
118
|
+
# special care if the name stats with :
|
119
|
+
ppa_url = ppa_url.split(':')[1] if ppa_url.start_with?('ppa:')
|
120
|
+
|
121
|
+
# parse ppa owner and repo
|
122
|
+
ppa_owner, ppa_repo = ppa_url.split('/')
|
123
|
+
ppa_repo = 'ppa' if ppa_repo.nil?
|
124
|
+
|
125
|
+
# construct new ppa url and return it
|
126
|
+
format('http://ppa.launchpad.net/%s/%s/ubuntu', ppa_owner, ppa_repo)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
# for compatability with serverspec
|
131
|
+
# this is deprecated syntax and will be removed in future versions
|
132
|
+
class PpaRepository < AptRepository
|
133
|
+
name 'ppa'
|
134
|
+
|
135
|
+
def exists?
|
136
|
+
deprecated
|
137
|
+
super()
|
138
|
+
end
|
139
|
+
|
140
|
+
def enabled?
|
141
|
+
deprecated
|
142
|
+
super()
|
143
|
+
end
|
144
|
+
|
145
|
+
def deprecated
|
146
|
+
warn '[DEPRECATION] `ppa(reponame)` is deprecated. Please use `apt(reponame)` instead.'
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|