puppet-lint-security-plugins 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +90 -0
- data/lib/puppet-lint-security-plugins.rb +2 -0
- data/lib/puppet-lint/plugins/check_class_or_define_parameter_in_exec.rb +36 -0
- data/lib/puppet-lint/plugins/check_security_apache_bad_cipher.rb +28 -0
- data/lib/puppet-lint/plugins/check_security_apache_no_ssl_vhost.rb +27 -0
- data/lib/puppet-lint/plugins/check_security_apt_no_key.rb +26 -0
- data/lib/puppet-lint/plugins/check_security_eval_in_erb.rb +21 -0
- data/lib/puppet-lint/plugins/check_security_file_with_setgid_permission.rb +25 -0
- data/lib/puppet-lint/plugins/check_security_file_with_setuid_permission.rb +25 -0
- data/lib/puppet-lint/plugins/check_security_file_with_world_permissions.rb +25 -0
- data/lib/puppet-lint/plugins/check_security_firewall_any_any_allow.rb +26 -0
- data/lib/puppet-lint/plugins/check_security_firewall_any_any_deny.rb +27 -0
- data/lib/puppet-lint/plugins/check_security_firewall_dns_used.rb +30 -0
- data/lib/puppet-lint/plugins/check_security_firewall_puppetmaster_any_deny.rb +33 -0
- data/lib/puppet-lint/plugins/check_security_package_pinned_version.rb +25 -0
- data/lib/puppet-lint/plugins/check_security_password_in_code.rb +31 -0
- data/lib/puppet-lint/plugins/check_security_password_variable_in_exec.rb +22 -0
- data/lib/puppet-lint/plugins/check_security_regex_unspecific.rb +23 -0
- data/lib/puppet-lint/plugins/check_security_service_mysql_disabled.rb +22 -0
- data/lib/puppet-lint/plugins/check_security_service_puppetmaster_disabled.rb +24 -0
- data/lib/puppet-lint/plugins/check_security_ssh_root_allowed.rb +26 -0
- data/lib/puppet-lint/plugins/check_security_sudo_with_world_nopasswd.rb +23 -0
- data/lib/puppet-lint/plugins/check_security_tidy_all_files.rb +20 -0
- data/lib/puppet-lint/plugins/check_security_tidy_matches_greedy.rb +27 -0
- data/lib/puppet-lint/plugins/check_security_tidy_recurse.rb +21 -0
- data/lib/puppet-lint/plugins/check_security_user_with_id_0_created.rb +28 -0
- data/lib/puppet-lint/security.rb +280 -0
- data/spec/puppet-lint/plugins/check_class_or_define_parameter_in_exec_spec.rb +85 -0
- data/spec/puppet-lint/plugins/check_security_apache_bad_cipher_spec.rb +49 -0
- data/spec/puppet-lint/plugins/check_security_apache_no_ssl_vhost_spec.rb +40 -0
- data/spec/puppet-lint/plugins/check_security_apt_absent_no_key_spec.rb +45 -0
- data/spec/puppet-lint/plugins/check_security_apt_no_key_spec.rb +38 -0
- data/spec/puppet-lint/plugins/check_security_dir_guid_permissions_spec.rb +49 -0
- data/spec/puppet-lint/plugins/check_security_dir_world_permissions_spec.rb +39 -0
- data/spec/puppet-lint/plugins/check_security_eval_in_erb_spec.rb +35 -0
- data/spec/puppet-lint/plugins/check_security_file_suid_permissions_spec.rb +48 -0
- data/spec/puppet-lint/plugins/check_security_file_with_setgid_permission_spec.rb +59 -0
- data/spec/puppet-lint/plugins/check_security_file_with_setuid_permission_spec.rb +59 -0
- data/spec/puppet-lint/plugins/check_security_file_with_world_permissions_spec.rb +62 -0
- data/spec/puppet-lint/plugins/check_security_file_world_and_guid_permissions_spec.rb +43 -0
- data/spec/puppet-lint/plugins/check_security_firewall_any_any_allow_spec.rb +36 -0
- data/spec/puppet-lint/plugins/check_security_firewall_any_any_deny_spec.rb +124 -0
- data/spec/puppet-lint/plugins/check_security_firewall_dns_used_spec.rb +77 -0
- data/spec/puppet-lint/plugins/check_security_firewall_puppetmaster_any_deny_spec.rb +60 -0
- data/spec/puppet-lint/plugins/check_security_package_pinned_version_spec.rb +43 -0
- data/spec/puppet-lint/plugins/check_security_password_in_code_spec.rb +55 -0
- data/spec/puppet-lint/plugins/check_security_password_variable_in_exec_spec.rb +45 -0
- data/spec/puppet-lint/plugins/check_security_regex_unspecific_spec.rb +40 -0
- data/spec/puppet-lint/plugins/check_security_service_mysql_disabled_spec.rb +54 -0
- data/spec/puppet-lint/plugins/check_security_service_puppetmaster_disabled_spec.rb +40 -0
- data/spec/puppet-lint/plugins/check_security_ssh_root_allowed_spec.rb +60 -0
- data/spec/puppet-lint/plugins/check_security_ssh_server_root_allowed_spec.rb +60 -0
- data/spec/puppet-lint/plugins/check_security_sudo_with_world_nopasswd_spec.rb +40 -0
- data/spec/puppet-lint/plugins/check_security_tidy_all_files_spec.rb +36 -0
- data/spec/puppet-lint/plugins/check_security_tidy_matches_greedy_spec.rb +37 -0
- data/spec/puppet-lint/plugins/check_security_tidy_recurse_spec.rb +37 -0
- data/spec/puppet-lint/plugins/check_security_user_with_id_0_created_spec.rb +47 -0
- data/spec/spec_helper.rb +5 -0
- metadata +232 -0
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_class_or_define_parameter_in_exec' do
|
4
|
+
let(:msg) { 'Class or definded_type parameter in exec used (security!)' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
context 'code having variables in execs' do
|
8
|
+
let(:code) { "
|
9
|
+
class test ($command_var){
|
10
|
+
exec { 'exec_echo_name':
|
11
|
+
command => \"${command_var}\";
|
12
|
+
}
|
13
|
+
}
|
14
|
+
"}
|
15
|
+
|
16
|
+
it 'should detect a single problem' do
|
17
|
+
expect(problems).to have(1).problem
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should create a error' do
|
21
|
+
expect(problems).to contain_error(msg).on_line(4).in_column(18)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'code having variable only in exec' do
|
26
|
+
let(:code) { "
|
27
|
+
class test ($command_var){
|
28
|
+
exec { 'exec_echo_name':
|
29
|
+
command => $command_var;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
"}
|
33
|
+
|
34
|
+
it 'should detect a single problem' do
|
35
|
+
expect(problems).to have(1).problem
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should create a error' do
|
39
|
+
expect(problems).to contain_error(msg).on_line(4).in_column(16)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
context 'code having four variables in execs' do
|
45
|
+
let(:code) { "exec { 'exec_echo_name': command => \"/bin/echo ${name} jonoin ${name} hiohoi ${name} ihoiphoi${name}\"; }" }
|
46
|
+
it 'should detect a single problem' do
|
47
|
+
expect(problems).to have(4).problem
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'code having no variables in exec' do
|
53
|
+
let(:code) { "
|
54
|
+
class test {
|
55
|
+
|
56
|
+
exec { 'exec_command': command => \"${command_var}\"; }
|
57
|
+
|
58
|
+
exec { 'exec_echo_name': command => \"/bin/echo hello\"; }
|
59
|
+
|
60
|
+
exec { 'killall_puppet_user':
|
61
|
+
command => \"/usr/bin/killall -9 -u puppet\",
|
62
|
+
onlyif => \"/usr/bin/pgrep -u puppet >/dev/null 2>&1\",
|
63
|
+
}
|
64
|
+
|
65
|
+
exec { 'del_puppet_user':
|
66
|
+
command => '/usr/sbin/deluser --system -q puppet && /bin/sed -i \"/puppet/d\" /var/lib/dpkg/statoverride',
|
67
|
+
onlyif => \"/bin/grep '^puppet:' /etc/passwd\",
|
68
|
+
require => Exec['killall_puppet_user'],
|
69
|
+
before => Class['http'],
|
70
|
+
}
|
71
|
+
|
72
|
+
# Notwendig, damit die ca_crl erzeugt wird. Sonst startet der Apache nicht
|
73
|
+
exec { \"/usr/bin/puppet cert list\":
|
74
|
+
creates => [\"/var/lib/puppet/ssl/ca/ca_crl.pem\"],
|
75
|
+
require => Package[\"puppetmaster\"],
|
76
|
+
}
|
77
|
+
}
|
78
|
+
" }
|
79
|
+
|
80
|
+
it 'should not detect any problems' do
|
81
|
+
expect(problems).to have(0).problems
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_apache_bad_cipher' do
|
4
|
+
let(:msg) { 'Unsecure ciphers used (security!)' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
context 'code having unsecure ciphers' do
|
8
|
+
let(:code) { "
|
9
|
+
|
10
|
+
class { 'apache::mod::ssl':
|
11
|
+
ssl_compression => false,
|
12
|
+
ssl_options => [ 'StdEnvVars' ],
|
13
|
+
ssl_cipher => 'HIGH:MEDIUM:!aNULL:!MD5',
|
14
|
+
ssl_protocol => [ 'all', '-SSLv2', '-SSLv3' ],
|
15
|
+
ssl_pass_phrase_dialog => 'builtin',
|
16
|
+
ssl_random_seed_bytes => '512',
|
17
|
+
}
|
18
|
+
|
19
|
+
" }
|
20
|
+
|
21
|
+
it 'should detect a single problem' do
|
22
|
+
expect(problems).to have(1).problem
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should create a warning' do
|
26
|
+
expect(problems).to contain_warning(msg).on_line(6).in_column(29)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'code having no unsecure ciphers' do
|
31
|
+
let(:code) { "
|
32
|
+
# from https://cipherli.st/
|
33
|
+
class { 'apache::mod::ssl':
|
34
|
+
ssl_compression => false,
|
35
|
+
ssl_options => [ 'StdEnvVars' ],
|
36
|
+
ssl_cipher => 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4',
|
37
|
+
ssl_protocol => [ 'all', '-SSLv2', '-SSLv3' ],
|
38
|
+
ssl_pass_phrase_dialog => 'builtin',
|
39
|
+
ssl_random_seed_bytes => '512',
|
40
|
+
}
|
41
|
+
" }
|
42
|
+
|
43
|
+
it 'should not detect any problems' do
|
44
|
+
expect(problems).to have(0).problems
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_apache_no_ssl_vhost' do
|
4
|
+
let(:msg) { 'Vhost without ssl detected (security!)' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
context 'code having vhost wihtout ssl' do
|
8
|
+
let(:code) { "
|
9
|
+
apache::vhost { 'fourth.example.com':
|
10
|
+
docroot => '/var/www/fourth',
|
11
|
+
}
|
12
|
+
" }
|
13
|
+
|
14
|
+
it 'should detect a single problem' do
|
15
|
+
expect(problems).to have(1).problem
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should create a warning' do
|
19
|
+
expect(problems).to contain_warning(msg).on_line(2).in_column(38)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'code having vhost with ssl' do
|
24
|
+
let(:code) { "
|
25
|
+
apache::vhost { 'fourth.example.com':
|
26
|
+
port => '443',
|
27
|
+
docroot => '/var/www/fourth',
|
28
|
+
ssl => true,
|
29
|
+
ssl_cert => '/etc/ssl/fourth.example.com.cert',
|
30
|
+
ssl_key => '/etc/ssl/fourth.example.com.key',
|
31
|
+
}
|
32
|
+
" }
|
33
|
+
|
34
|
+
it 'should not detect any problems' do
|
35
|
+
expect(problems).to have(0).problems
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_apt_no_key' do
|
4
|
+
let(:msg) { 'APT Repository without key detected (security!)' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
|
8
|
+
|
9
|
+
context 'code having no key parameter in apt' do
|
10
|
+
let(:code) { "
|
11
|
+
|
12
|
+
apt::source {
|
13
|
+
'apt.postgresql.org':
|
14
|
+
ensure => absent;
|
15
|
+
'puppetlabs':
|
16
|
+
location => 'http://apt.puppetlabs.com',
|
17
|
+
repos => 'main',
|
18
|
+
}
|
19
|
+
|
20
|
+
" }
|
21
|
+
|
22
|
+
it 'should detect a single problem' do
|
23
|
+
expect(problems).to have(1).problem
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should create a error' do
|
27
|
+
expect(problems).to contain_error(msg).on_line(6).in_column(16)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
context 'code deleting apt repo' do
|
34
|
+
let(:code) { "
|
35
|
+
apt::source { 'apt.postgresql.org':
|
36
|
+
ensure => absent,
|
37
|
+
}
|
38
|
+
" }
|
39
|
+
|
40
|
+
it 'should not detect any problems' do
|
41
|
+
expect(problems).to have(0).problems
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_apt_no_key' do
|
4
|
+
let(:msg) { 'APT Repository without key detected (security!)' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
context 'code having no key parameter in apt' do
|
8
|
+
let(:code) { "apt::source { 'puppetlabs':
|
9
|
+
location => 'http://apt.puppetlabs.com',
|
10
|
+
repos => 'main',
|
11
|
+
}
|
12
|
+
" }
|
13
|
+
|
14
|
+
it 'should detect a single problem' do
|
15
|
+
expect(problems).to have(1).problem
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should create a error' do
|
19
|
+
expect(problems).to contain_error(msg).on_line(1).in_column(28)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'code having key parameter in apt' do
|
24
|
+
let(:code) { "apt::source { 'puppetlabs':
|
25
|
+
location => 'http://apt.puppetlabs.com',
|
26
|
+
repos => 'main',
|
27
|
+
key => {
|
28
|
+
'id' => '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30',
|
29
|
+
'server' => 'pgp.mit.edu',
|
30
|
+
},
|
31
|
+
}," }
|
32
|
+
|
33
|
+
it 'should not detect any problems' do
|
34
|
+
expect(problems).to have(0).problems
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_file_with_setgid_permission' do
|
4
|
+
|
5
|
+
let(:msg) { 'File or directory definition with setgid to root detected (security!)'}
|
6
|
+
|
7
|
+
context 'with fix disabled' do
|
8
|
+
|
9
|
+
context 'code having directory with setgid permissions' do
|
10
|
+
let(:code) { "
|
11
|
+
|
12
|
+
file { '/usr/local/bin':
|
13
|
+
ensure => present,
|
14
|
+
mode => '2755',
|
15
|
+
owner => 'root',
|
16
|
+
group => 'root',
|
17
|
+
source => 'puppet:///modules/myscript/usr_local_bin_myscript',
|
18
|
+
}
|
19
|
+
|
20
|
+
" }
|
21
|
+
|
22
|
+
it 'should detect a single problem' do
|
23
|
+
expect(problems).to have(1).problem
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should create a warning' do
|
27
|
+
expect(problems).to contain_error(msg).on_line(5).in_column(11)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'code having no directory with setgid permissions' do
|
32
|
+
let(:code) { "
|
33
|
+
|
34
|
+
file { '/usr/local/bin':
|
35
|
+
ensure => present,
|
36
|
+
mode => '755',
|
37
|
+
owner => 'root',
|
38
|
+
group => 'root',
|
39
|
+
source => 'puppet:///modules/myscript/usr_local_bin_myscript',
|
40
|
+
}
|
41
|
+
" }
|
42
|
+
|
43
|
+
it 'should not detect any problems' do
|
44
|
+
expect(problems).to have(0).problems
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_file_with_world_permissions' do
|
4
|
+
let(:msg) { 'File or directory definition with world permissions detected (security!)' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
|
8
|
+
context 'code having directory with world permissions' do
|
9
|
+
let(:code) { "file { '/var/log':
|
10
|
+
ensure => directory,
|
11
|
+
mode => '0777',
|
12
|
+
owner => 'root',
|
13
|
+
group => 'root',
|
14
|
+
}" }
|
15
|
+
|
16
|
+
it 'should detect a single problem' do
|
17
|
+
expect(problems).to have(1).problem
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should create a error' do
|
21
|
+
expect(problems).to contain_error(msg).on_line(3).in_column(11)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'code having no directory with world permissions' do
|
26
|
+
let(:code) { "file { '/var/log':
|
27
|
+
ensure => directory,
|
28
|
+
mode => '0755',
|
29
|
+
owner => 'root',
|
30
|
+
group => 'root',
|
31
|
+
}" }
|
32
|
+
|
33
|
+
it 'should not detect any problems' do
|
34
|
+
expect(problems).to have(0).problems
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_eval_in_erb' do
|
4
|
+
let(:msg) { '"eval" ruby function used (security!)' }
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
context 'code having eval in inline_template' do
|
8
|
+
let(:code) { "
|
9
|
+
$test='p Dir.entries(\"/etc\")'
|
10
|
+
$variable = inline_template('<% eval(@test) %>')
|
11
|
+
notice($variable)
|
12
|
+
" }
|
13
|
+
|
14
|
+
it 'should detect a single problem' do
|
15
|
+
expect(problems).to have(1).problem
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should create a error' do
|
19
|
+
expect(problems).to contain_error(msg).on_line(3).in_column(29)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'code having no eval in inline_template' do
|
24
|
+
let(:code) { "
|
25
|
+
$variable = inline_template('<%= Dir.entries(\"/etc\") %>')
|
26
|
+
notice($variable)
|
27
|
+
" }
|
28
|
+
|
29
|
+
it 'should not detect any problems' do
|
30
|
+
expect(problems).to have(0).problems
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_file_with_setuid_permission' do
|
4
|
+
let(:msg) { 'File or directory definition with setuid to root detected (security!)'}
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
|
8
|
+
context 'code having file with suid permissions' do
|
9
|
+
let(:code) { "
|
10
|
+
|
11
|
+
file { '/usr/local/bin/myscript':
|
12
|
+
ensure => present,
|
13
|
+
mode => '1755',
|
14
|
+
owner => 'root',
|
15
|
+
group => 'root',
|
16
|
+
source => 'puppet:///modules/myscript/usr_local_bin_myscript',
|
17
|
+
}
|
18
|
+
|
19
|
+
" }
|
20
|
+
|
21
|
+
it 'should detect a single problem' do
|
22
|
+
expect(problems).to have(1).problem
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should create a warning' do
|
26
|
+
expect(problems).to contain_error(msg).on_line(5).in_column(11)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'code having no file with suid permissions' do
|
31
|
+
let(:code) { "
|
32
|
+
|
33
|
+
file { '/usr/local/bin/myscript':
|
34
|
+
ensure => present,
|
35
|
+
mode => '755',
|
36
|
+
owner => 'root',
|
37
|
+
group => 'root',
|
38
|
+
source => 'puppet:///modules/myscript/usr_local_bin_myscript',
|
39
|
+
}
|
40
|
+
" }
|
41
|
+
|
42
|
+
it 'should not detect any problems' do
|
43
|
+
expect(problems).to have(0).problems
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'security_file_with_setgid_permission' do
|
4
|
+
let(:msg) { 'File or directory definition with setgid to root detected (security!)'}
|
5
|
+
|
6
|
+
context 'with fix disabled' do
|
7
|
+
context 'code having file with setgid permissions' do
|
8
|
+
let(:code) { "
|
9
|
+
|
10
|
+
file { '/bin/bash':
|
11
|
+
mode => '2755',
|
12
|
+
owner => 'root',
|
13
|
+
group => 'root',
|
14
|
+
}
|
15
|
+
|
16
|
+
" }
|
17
|
+
|
18
|
+
it 'should detect a single problem' do
|
19
|
+
expect(problems).to have(1).problem
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should create a error' do
|
23
|
+
expect(problems).to contain_error(msg).on_line(4).in_column(11)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'code having no file with setgid permissions' do
|
28
|
+
let(:code) { "
|
29
|
+
|
30
|
+
file { '/bin/bash':
|
31
|
+
mode => '0755',
|
32
|
+
owner => 'root',
|
33
|
+
group => 'root',
|
34
|
+
}
|
35
|
+
|
36
|
+
file {
|
37
|
+
'/etc/icinga/commands.cfg':
|
38
|
+
content => template('icinga/etc_icinga_commands.cfg'),
|
39
|
+
notify => Exec['icinga'],
|
40
|
+
owner => 'root',
|
41
|
+
group => 'root',
|
42
|
+
mode => '0644',
|
43
|
+
require => Package['icinga'];
|
44
|
+
'/usr/local/bin/icinga2ticket.rb':
|
45
|
+
content => template('icinga/usr_local_bin_icinga2ticket.rb'),
|
46
|
+
notify => Exec['icinga'],
|
47
|
+
owner => 'nagios',
|
48
|
+
group => 'nagios',
|
49
|
+
mode => '0750';
|
50
|
+
}
|
51
|
+
" }
|
52
|
+
|
53
|
+
it 'should not detect any problems' do
|
54
|
+
expect(problems).to have(0).problems
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|