# frozen_string_literal: true | |||||
control 'apache configuration' do | |||||
title 'should match desired lines' | |||||
describe file('/etc/apache2/apache2.conf') do | |||||
it { should be_file } | |||||
it { should be_owned_by 'root' } | |||||
it { should be_grouped_into 'root' } | |||||
its('mode') { should cmp '0644' } | |||||
its('content') do | |||||
should include( | |||||
'This file is managed by Salt! Do not edit by hand!' | |||||
) | |||||
end | |||||
end | |||||
end |
# frozen_string_literal: true | |||||
# Overide by OS | |||||
package_name = 'bash' | |||||
package_name = 'cronie' if (os[:name] == 'centos') && os[:release].start_with?('6') | |||||
control 'apache package' do | |||||
title 'should be installed' | |||||
package_name = | |||||
case platform[:family] | |||||
when 'debian', 'suse' | |||||
'apache2' | |||||
when 'redhat', 'fedora' | |||||
'httpd' | |||||
when 'arch' | |||||
'apache' | |||||
end | |||||
describe package(package_name) do | |||||
it { should be_installed } | |||||
end | |||||
end |
# frozen_string_literal: true | |||||
# Overide by OS | |||||
service_name = 'apache2' | |||||
service_name = 'httpd' if (os[:name] == 'centos') | |||||
control 'apache service' do | |||||
impact 0.5 | |||||
title 'should be running and enabled' | |||||
describe service(service_name) do | |||||
it { should be_enabled } | |||||
it { should be_running } | |||||
end | |||||
end |
# InSpec Profile: `modules` | |||||
This shows the implementation of the `modules` InSpec [profile](https://github.com/inspec/inspec/blob/master/docs/profiles.md). | |||||
## Verify a profile | |||||
InSpec ships with built-in features to verify a profile structure. | |||||
```bash | |||||
$ inspec check modules | |||||
Summary | |||||
------- | |||||
Location: modules | |||||
Profile: profile | |||||
Controls: 4 | |||||
Timestamp: 2019-06-24T23:09:01+00:00 | |||||
Valid: true | |||||
Errors | |||||
------ | |||||
Warnings | |||||
-------- | |||||
``` | |||||
## Execute a profile | |||||
To run all **supported** controls on a local machine use `inspec exec /path/to/profile`. | |||||
```bash | |||||
$ inspec exec modules | |||||
.. | |||||
Finished in 0.0025 seconds (files took 0.12449 seconds to load) | |||||
8 examples, 0 failures | |||||
``` | |||||
## Execute a specific control from a profile | |||||
To run one control from the profile use `inspec exec /path/to/profile --controls name`. | |||||
```bash | |||||
$ inspec exec modules --controls package | |||||
. | |||||
Finished in 0.0025 seconds (files took 0.12449 seconds to load) | |||||
1 examples, 0 failures | |||||
``` | |||||
See an [example control here](https://github.com/inspec/inspec/blob/master/examples/profile/controls/example.rb). |
# frozen_string_literal: true | |||||
control 'apache configuration' do | |||||
title 'should be valid' | |||||
describe command('apachectl -t') do | |||||
its('stdout') { should eq '' } | |||||
its('stderr') { should include 'Syntax OK' } | |||||
its('exit_status') { should eq 0 } | |||||
end | |||||
end |
# frozen_string_literal: true | # frozen_string_literal: true | ||||
control 'Apache mod_security configuration' do | |||||
control 'apache mod_security configuration' do | |||||
title 'should match desired lines' | title 'should match desired lines' | ||||
modspec_file = | modspec_file = |
# frozen_string_literal: true | |||||
control 'apache mod_security package' do | |||||
title 'should be installed' | |||||
package_name = | |||||
case platform[:family] | |||||
when 'debian', 'suse' | |||||
'libapache2-mod-security2' | |||||
when 'redhat', 'fedora' | |||||
'mod_security' | |||||
when 'suse' | |||||
'apache2-mod_security2' | |||||
end | |||||
describe package(package_name) do | |||||
it { should be_installed } | |||||
end | |||||
end |
# frozen_string_literal: true | |||||
control 'apache server_status configuration' do | |||||
title 'should match desired lines' | |||||
server_status_stanza = <<-SS_STANZA | |||||
<Location "/server-status"> | |||||
SetHandler server-status | |||||
Require local | |||||
Require host foo.example.com | |||||
Require ip 10.8.8.0/24 | |||||
</Location> | |||||
SS_STANZA | |||||
confdir = | |||||
case platform[:family] | |||||
when 'debian' | |||||
'/etc/apache2/conf-available' | |||||
when 'redhat', 'fedora' | |||||
'/etc/httpd/conf.d' | |||||
when 'suse' | |||||
'/etc/apache2/conf.d' | |||||
when 'arch' | |||||
'/etc/httpd/conf/extra' | |||||
end | |||||
describe file("#{confdir}/server-status.conf") do | |||||
it { should be_file } | |||||
it { should be_owned_by 'root' } | |||||
it { should be_grouped_into 'root' } | |||||
its('mode') { should cmp '0644' } | |||||
its('content') { should include '# File managed by Salt' } | |||||
its('content') { should include server_status_stanza } | |||||
end | |||||
end |
# frozen_string_literal: true | |||||
# Overide by OS | |||||
service_name = 'apache2' | |||||
service_name = 'httpd' if (os[:name] == 'centos') | |||||
control 'apache service' do | |||||
impact 0.5 | |||||
title 'should be running and enabled' | |||||
describe service(service_name) do | |||||
it { should be_enabled } | |||||
it { should_not be_running } | |||||
end | |||||
end |
# -*- coding: utf-8 -*- | |||||
# vim: ft=yaml | |||||
--- | |||||
name: modules | |||||
title: apache formula | |||||
maintainer: SaltStack Formulas | |||||
license: Apache-2.0 | |||||
summary: Verify that the apache formula manages modules correctly | |||||
supports: | |||||
- platform-name: debian | |||||
- platform-name: ubuntu | |||||
- platform-name: centos | |||||
- platform-name: fedora | |||||
- platform-name: opensuse | |||||
- platform-name: suse | |||||
- platform-name: freebsd | |||||
- platform-name: amazon | |||||
- platform-name: arch |
# -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
# vim: ft=yaml | # vim: ft=yaml | ||||
--- | --- | ||||
apache: | |||||
manage_service_states: false | |||||
mod_security: | |||||
crs_install: true | |||||
manage_config: true | |||||
sec_rule_engine: 'On' | |||||
sec_request_body_access: 'On' | |||||
sec_request_body_limit: '14000000' | |||||
sec_request_body_no_files_limit: '114002' | |||||
sec_request_body_in_memory_limit: '114002' | |||||
sec_request_body_limit_action: 'Reject' | |||||
sec_pcre_match_limit: '15000' | |||||
sec_pcre_match_limit_recursion: '15000' | |||||
sec_debug_log_level: '3' |
# -*- coding: utf-8 -*- | |||||
# vim: ft=yaml | |||||
--- | |||||
apache: | |||||
manage_service_states: false | |||||
mod_security: | |||||
crs_install: true | |||||
manage_config: true | |||||
sec_rule_engine: 'On' | |||||
sec_request_body_access: 'On' | |||||
sec_request_body_limit: '14000000' | |||||
sec_request_body_no_files_limit: '114002' | |||||
sec_request_body_in_memory_limit: '114002' | |||||
sec_request_body_limit_action: 'Reject' | |||||
sec_pcre_match_limit: '15000' | |||||
sec_pcre_match_limit_recursion: '15000' | |||||
sec_debug_log_level: '3' | |||||
server_status_require: | |||||
ip: | |||||
- 10.8.8.0/24 | |||||
host: | |||||
- foo.example.com |