inspec 1.0.0.beta2 → 1.0.0.beta3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -2
  3. data/Gemfile +4 -0
  4. data/Rakefile +2 -1
  5. data/docs/.gitignore +2 -0
  6. data/docs/README.md +21 -1
  7. data/docs/resources/apache_conf.md.erb +75 -0
  8. data/docs/resources/apt.md.erb +84 -0
  9. data/docs/resources/audit_policy.md.erb +61 -0
  10. data/docs/resources/auditd_conf.md.erb +79 -0
  11. data/docs/resources/auditd_rules.md.erb +132 -0
  12. data/docs/resources/bash.md.erb +84 -0
  13. data/docs/resources/bond.md.erb +97 -0
  14. data/docs/resources/bridge.md.erb +67 -0
  15. data/docs/resources/bsd_service.md.erb +76 -0
  16. data/docs/resources/command.md.erb +151 -0
  17. data/docs/resources/csv.md.erb +62 -0
  18. data/docs/resources/directory.md.erb +43 -0
  19. data/docs/resources/etc_group.md.erb +116 -0
  20. data/docs/resources/etc_passwd.md.erb +155 -0
  21. data/docs/resources/etc_shadow.md.erb +149 -0
  22. data/docs/resources/file.md.erb +460 -0
  23. data/docs/resources/gem.md.erb +73 -0
  24. data/docs/resources/group.md.erb +74 -0
  25. data/docs/resources/grub_conf.md.erb +115 -0
  26. data/docs/resources/host.md.erb +85 -0
  27. data/docs/resources/iis_site.md.erb +142 -0
  28. data/docs/resources/inetd_conf.md.erb +99 -0
  29. data/docs/resources/ini.md.erb +69 -0
  30. data/docs/resources/interface.md.erb +66 -0
  31. data/docs/resources/iptables.md.erb +70 -0
  32. data/docs/resources/json.md.erb +76 -0
  33. data/docs/resources/kernel_module.md.erb +60 -0
  34. data/docs/resources/kernel_parameter.md.erb +72 -0
  35. data/docs/resources/launchd_service.md.erb +76 -0
  36. data/docs/resources/limits_conf.md.erb +80 -0
  37. data/docs/resources/login_def.md.erb +77 -0
  38. data/docs/resources/mount.md.erb +83 -0
  39. data/docs/resources/mysql_conf.md.erb +102 -0
  40. data/docs/resources/mysql_session.md.erb +63 -0
  41. data/docs/resources/npm.md.erb +75 -0
  42. data/docs/resources/ntp_conf.md.erb +76 -0
  43. data/docs/resources/oneget.md.erb +67 -0
  44. data/docs/resources/os.md.erb +154 -0
  45. data/docs/resources/os_env.md.erb +98 -0
  46. data/docs/resources/package.md.erb +115 -0
  47. data/docs/resources/parse_config.md.erb +122 -0
  48. data/docs/resources/parse_config_file.md.erb +143 -0
  49. data/docs/resources/pip.md.erb +74 -0
  50. data/docs/resources/port.md.erb +150 -0
  51. data/docs/resources/postgres_conf.md.erb +90 -0
  52. data/docs/resources/postgres_session.md.erb +75 -0
  53. data/docs/resources/powershell.md.erb +116 -0
  54. data/docs/resources/process.md.erb +73 -0
  55. data/docs/resources/registry_key.md.erb +149 -0
  56. data/docs/resources/runit_service.md.erb +76 -0
  57. data/docs/resources/security_policy.md.erb +61 -0
  58. data/docs/resources/service.md.erb +135 -0
  59. data/docs/resources/ssh_config.md.erb +94 -0
  60. data/docs/resources/sshd_config.md.erb +97 -0
  61. data/docs/resources/ssl.md.erb +133 -0
  62. data/docs/resources/sys_info.md.erb +55 -0
  63. data/docs/resources/systemd_service.md.erb +76 -0
  64. data/docs/resources/sysv_service.md.erb +76 -0
  65. data/docs/resources/upstart_service.md.erb +76 -0
  66. data/docs/resources/user.md.erb +154 -0
  67. data/docs/resources/users.md.erb +140 -0
  68. data/docs/resources/vbscript.md.erb +69 -0
  69. data/docs/resources/windows_feature.md.erb +61 -0
  70. data/docs/resources/wmi.md.erb +95 -0
  71. data/docs/resources/xinetd_conf.md.erb +170 -0
  72. data/docs/resources/yaml.md.erb +69 -0
  73. data/docs/resources/yum.md.erb +103 -0
  74. data/docs/ruby_usage.md +154 -0
  75. data/docs/shared/matcher_be.md.erb +1 -0
  76. data/docs/shared/matcher_cmp.md.erb +45 -0
  77. data/docs/shared/matcher_eq.md.erb +3 -0
  78. data/docs/shared/matcher_include.md.erb +1 -0
  79. data/docs/shared/matcher_match.md.erb +1 -0
  80. data/lib/fetchers/url.rb +27 -29
  81. data/lib/inspec/cached_fetcher.rb +67 -0
  82. data/lib/inspec/dependencies/requirement.rb +6 -7
  83. data/lib/inspec/objects/each_loop.rb +5 -2
  84. data/lib/inspec/plugins/fetcher.rb +2 -0
  85. data/lib/inspec/profile.rb +9 -41
  86. data/lib/inspec/resource.rb +1 -1
  87. data/lib/inspec/rspec_json_formatter.rb +11 -5
  88. data/lib/inspec/version.rb +1 -1
  89. data/lib/resources/groups.rb +190 -0
  90. data/lib/resources/users.rb +3 -2
  91. metadata +79 -6
  92. data/docs/cli.rst +0 -448
  93. data/docs/resources.rst +0 -4836
  94. data/docs/ruby_usage.rst +0 -145
  95. data/lib/resources/group.rb +0 -137
@@ -0,0 +1,62 @@
1
+ ---
2
+ title: About the csv Resource
3
+ ---
4
+
5
+ # csv
6
+
7
+ Use the `csv` InSpec audit resource to test configuration data in a CSV file.
8
+
9
+ # Syntax
10
+
11
+ A `csv` resource block declares the configuration data to be tested:
12
+
13
+ describe csv('file') do
14
+ its('name') { should eq 'foo' }
15
+ end
16
+
17
+ where
18
+
19
+ * `'file'` is the path to a CSV file
20
+ * `name` is a configuration setting in a CSV file
21
+ * `should eq 'foo'` tests a value of `name` as read from a CSV file versus the value declared in the test
22
+
23
+
24
+ # Matchers
25
+
26
+ This InSpec audit resource has the following matchers:
27
+
28
+ ## be
29
+
30
+ <%= partial "/shared/matcher_be" %>
31
+
32
+ ## cmp
33
+
34
+ <%= partial "/shared/matcher_cmp" %>
35
+
36
+ ## eq
37
+
38
+ <%= partial "/shared/matcher_eq" %>
39
+
40
+ ## include
41
+
42
+ <%= partial "/shared/matcher_include" %>
43
+
44
+ ## match
45
+
46
+ <%= partial "/shared/matcher_match" %>
47
+
48
+ ## name
49
+
50
+ The `name` matcher tests the value of `name` as read from a CSV file versus the value declared in the test:
51
+
52
+ its('name') { should eq 'foo' }
53
+
54
+ # Examples
55
+
56
+ The following examples show how to use this InSpec audit resource.
57
+
58
+ ## Test a CSV file
59
+
60
+ describe csv('some_file.csv') do
61
+ its('setting') { should eq 1 }
62
+ end
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: About the directory Resource
3
+ ---
4
+
5
+ # directory
6
+
7
+ Use the `directory` InSpec audit resource to test if the file type is a directory. This is equivalent to using the `file` resource and the `be_directory` matcher, but provides a simpler and more direct way to test directories. All of the matchers available to `file` may be used with `directory`.
8
+
9
+ # Syntax
10
+
11
+ A `directory` resource block declares the location of the directory to be tested, and then one (or more) matchers:
12
+
13
+ describe directory('path') do
14
+ it { should MATCHER 'value' }
15
+ end
16
+
17
+ # Matchers
18
+
19
+ This resource may use any of the matchers available to the `file` resource that may be useful when testing a directory.
20
+
21
+ ## be
22
+
23
+ <%= partial "/shared/matcher_be" %>
24
+
25
+ ## cmp
26
+
27
+ <%= partial "/shared/matcher_cmp" %>
28
+
29
+ ## eq
30
+
31
+ <%= partial "/shared/matcher_eq" %>
32
+
33
+ ## include
34
+
35
+ <%= partial "/shared/matcher_include" %>
36
+
37
+ ## match
38
+
39
+ <%= partial "/shared/matcher_match" %>
40
+
41
+ # Examples
42
+
43
+ None.
@@ -0,0 +1,116 @@
1
+ ---
2
+ title: About the etc_group Resource
3
+ ---
4
+
5
+ # etc_group
6
+
7
+ Use the `etc_group` InSpec audit resource to test groups that are defined on Linux and Unix platforms. The `/etc/group` file stores details about each group---group name, password, group identifier, along with a comma-separate list of users that belong to the group.
8
+
9
+ # Syntax
10
+
11
+ A `etc_group` resource block declares a collection of properties to be tested:
12
+
13
+ describe etc_group('path') do
14
+ its('matcher') { should eq 'some_value' }
15
+ end
16
+
17
+ or:
18
+
19
+ describe etc_group.where(item: 'value', item: 'value') do
20
+ its('gids') { should_not contain_duplicates }
21
+ its('groups') { should include 'user_name' }
22
+ its('users') { should include 'user_name' }
23
+ end
24
+
25
+ where
26
+
27
+ * `('path')` is the non-default path to the `inetd.conf` file
28
+ * `.where()` may specify a specific item and value, to which the matchers are compared
29
+ * `'gids'`, `'groups'`, and `'users'` are valid matchers for this resource
30
+
31
+ # Matchers
32
+
33
+ This InSpec audit resource has the following matchers:
34
+
35
+ ## be
36
+
37
+ <%= partial "/shared/matcher_be" %>
38
+
39
+ ## cmp
40
+
41
+ <%= partial "/shared/matcher_cmp" %>
42
+
43
+ ## eq
44
+
45
+ <%= partial "/shared/matcher_eq" %>
46
+
47
+ ## gids
48
+
49
+ The `gids` matcher tests if the named group identifier is present or if it contains duplicates:
50
+
51
+ its('gids') { should_not contain_duplicates }
52
+
53
+ ## groups
54
+
55
+ The `groups` matcher tests all groups for the named user:
56
+
57
+ its('groups') { should include 'my_group' }
58
+
59
+ ## include
60
+
61
+ <%= partial "/shared/matcher_include" %>
62
+
63
+ ## match
64
+
65
+ <%= partial "/shared/matcher_match" %>
66
+
67
+ ## users
68
+
69
+ The `users` matcher tests all groups for the named user:
70
+
71
+ its('users') { should include 'my_user' }
72
+
73
+ ## where
74
+
75
+ The `where` matcher allows the test to be focused to one (or more) specific items:
76
+
77
+ etc_group.where(item: 'value', item: 'value')
78
+
79
+ where `item` may be one (or more) of:
80
+
81
+ * `name: 'name'`
82
+ * `group_name: 'group_name'`
83
+ * `password: 'password'`
84
+ * `gid: 'gid'`
85
+ * `group_id: 'gid'`
86
+ * `users: 'user_name'`
87
+ * `members: 'member_name'`
88
+
89
+
90
+ # Examples
91
+
92
+ The following examples show how to use this InSpec audit resource.
93
+
94
+ ## Test group identifiers (GIDs) for duplicates
95
+
96
+ describe etc_group do
97
+ its('gids') { should_not contain_duplicates }
98
+ end
99
+
100
+ ## Test all groups to see if a specific user belongs to one (or more) groups
101
+
102
+ describe etc_group do
103
+ its('groups') { should include 'my_group' }
104
+ end
105
+
106
+ ## Test all groups for a specific user name
107
+
108
+ describe etc_group do
109
+ its('users') { should include 'my_user' }
110
+ end
111
+
112
+ ## Filter a list of groups for a specific user
113
+
114
+ describe etc_group.where(name: 'my_group') do
115
+ its('users') { should include 'my_user' }
116
+ end
@@ -0,0 +1,155 @@
1
+ ---
2
+ title: About the passwd Resource
3
+ ---
4
+
5
+ # passwd
6
+
7
+ Use the `passwd` InSpec audit resource to test the contents of `/etc/passwd`, which contains the following information for users that may log into the system and/or as users that own running processes. The format for `/etc/passwd` includes:
8
+
9
+ * A username
10
+ * The password for that user (on newer systems passwords should be stored in `/etc/shadow` )
11
+ * The user identifier (UID) assigned to that user
12
+ * The group identifier (GID) assigned to that user
13
+ * Additional information about that user
14
+ * That user's home directory
15
+ * That user's default command shell
16
+
17
+ These entries are defined as a colon-delimited row in the file, one row per user:
18
+
19
+ root:x:1234:5678:additional_info:/home/dir/:/bin/bash
20
+
21
+ # Syntax
22
+
23
+ A `passwd` resource block declares one (or more) users and associated user information to be tested:
24
+
25
+ describe passwd do
26
+ its('users') { should_not include 'forbidden_user' }
27
+ end
28
+
29
+ describe passwd.uid(filter) do
30
+ its('users') { should cmp 'root' }
31
+ its('count') { should eq 1 }
32
+ end
33
+
34
+ where
35
+
36
+ * `homes`, `gids`, `passwords`, `shells`, `uids`, and `users` are valid accessors for `passwd`
37
+ * `filter` one (or more) arguments, for example: `passwd.users(/name/)` used to define filtering
38
+ * `filter` may take any of the following arguments: `count` (retrieves the number of entries), `lines` (provides raw `passwd` lines), and `params` (returns an array of maps for all entries)
39
+
40
+
41
+ # Matchers
42
+
43
+ This InSpec audit resource has the following matchers:
44
+
45
+ ## be
46
+
47
+ <%= partial "/shared/matcher_be" %>
48
+
49
+ ## cmp
50
+
51
+ <%= partial "/shared/matcher_cmp" %>
52
+
53
+ ## eq
54
+
55
+ <%= partial "/shared/matcher_eq" %>
56
+
57
+ ## gids
58
+
59
+ The `gids` matcher tests if the group indentifiers in the test match group identifiers in `/etc/passwd`:
60
+
61
+ its('gids') { should include 1234 }
62
+ its('gids') { should cmp 0 }
63
+
64
+ ## homes
65
+
66
+ The `homes` matcher tests the absolute path to a user's home directory:
67
+
68
+ its('home') { should eq '/' }
69
+
70
+ ## include
71
+
72
+ <%= partial "/shared/matcher_include" %>
73
+
74
+ ## length
75
+
76
+ The `length` matcher tests the length of a password that appears in `/etc/passwd`:
77
+
78
+ its('length') { should be <= 32 }
79
+
80
+ This matcher is best used in conjunction with filters. For example:
81
+
82
+ describe passwd.users('highlander') do
83
+ its('length') { should_not be < 16 }
84
+ end
85
+
86
+ ## match
87
+
88
+ <%= partial "/shared/matcher_match" %>
89
+
90
+ ## passwords
91
+
92
+ The `passwords` matcher tests if passwords are
93
+
94
+ * Encrypted
95
+ * Have direct logins disabled, as indicated by an asterisk (`*`)
96
+ * In the `/etc/shadow` file, as indicated by the letter x (`x`)
97
+
98
+ For example:
99
+
100
+ its('passwords') { should eq ['x'] }
101
+ its('passwords') { should cmp '*' }
102
+
103
+ ## shells
104
+
105
+ The `shells` matcher tests the absolute path of a shell (or command) to which a user has access:
106
+
107
+ its('shells') { should_not include 'user' }
108
+
109
+ or to find all users with the nologin shell:
110
+
111
+ describe passwd.shells(/nologin/) do
112
+ its('users') { should_not include 'my_login_user' }
113
+ end
114
+
115
+ ## uids
116
+
117
+ The `uids` matcher tests if the user indentifiers in the test match user identifiers in `/etc/passwd`:
118
+
119
+ its('uids') { should eq ['1234', '1235'] }
120
+
121
+ or:
122
+
123
+ describe passwd.uids(0) do
124
+ its('users') { should cmp 'root' }
125
+ its('count') { should eq 1 }
126
+ end
127
+
128
+ ## users
129
+
130
+ The `users` matcher tests if the user names in the test match user names in `/etc/passwd`:
131
+
132
+ its('users') { should eq ['root', 'www-data'] }
133
+
134
+ # Examples
135
+
136
+ The following examples show how to use this InSpec audit resource.
137
+
138
+ ## Test usernames and UIDs
139
+
140
+ describe passwd do
141
+ its('users') { should eq ['root', 'www-data'] }
142
+ its('uids') { should eq [0, 33] }
143
+ end
144
+
145
+ ## Select one user and test for multiple occurrences
146
+
147
+ describe passwd.uids(0) do
148
+ its('users') { should cmp 'root' }
149
+ its('count') { should eq 1 }
150
+ end
151
+
152
+ describe passwd.filter(user: 'www-data') do
153
+ its('uids') { should cmp 33 }
154
+ its('count') { should eq 1 }
155
+ end
@@ -0,0 +1,149 @@
1
+ ---
2
+ title: About the shadow Resource
3
+ ---
4
+
5
+ # shadow
6
+
7
+ Use the `shadow` InSpec audit resource to test the contents of `/etc/shadow`, which contains password details that are only readable by the `root` user. The format for `/etc/shadow` includes:
8
+
9
+ * A username
10
+ * The password for that user (on newer systems passwords should be stored in `/etc/shadow` )
11
+ * The last time a password was changed
12
+ * The minimum number of days a password must exist, before it may be changed
13
+ * The maximum number of days after which a password must be changed
14
+ * The number of days a user is warned about an expiring password
15
+ * The number of days a user must be inactive before the user account is disabled
16
+ * The number of days a user account has been disabled
17
+
18
+ These entries are defined as a colon-delimited row in the file, one row per user:
19
+
20
+ dannos:Gb7crrO5CDF.:10063:0:99999:7:::
21
+
22
+ # Syntax
23
+
24
+ A `shadow` resource block declares one (or more) users and associated user information to be tested:
25
+
26
+ describe shadow do
27
+ its('users') { should_not include 'forbidden_user' }
28
+ end
29
+
30
+ or with a filter:
31
+
32
+ describe shadow.uid(filter) do
33
+ its('users') { should cmp 'root' }
34
+ its('count') { should eq 1 }
35
+ end
36
+
37
+ where
38
+
39
+ * `homes`, `gids`, `passwords`, `shells`, `uids`, and `users` are valid accessors for `passwd`
40
+ * `filter` one (or more) arguments, for example: `passwd.users(/name/)` used to define filtering; `filter` may take any of the following arguments: `count` (retrieves the number of entries), `lines` (provides raw `passwd` lines), and `params` (returns an array of maps for all entries)
41
+
42
+
43
+ # Matchers
44
+
45
+ This InSpec audit resource has the following matchers:
46
+
47
+ ## be
48
+
49
+ <%= partial "/shared/matcher_be" %>
50
+
51
+ ## cmp
52
+
53
+ <%= partial "/shared/matcher_cmp" %>
54
+
55
+ ## count
56
+
57
+ The `count` matcher tests the number of times the named user appears in `/etc/shadow`:
58
+
59
+ its('count') { should eq 1 }
60
+
61
+ TThis matcher is best used in conjunction with filters. For example:
62
+
63
+ describe shadow.users('dannos') do
64
+ its('count') { should eq 1 }
65
+ end
66
+
67
+ ## eq
68
+
69
+ <%= partial "/shared/matcher_eq" %>
70
+
71
+ ## expiry_dates
72
+
73
+ The `expiry_dates` matcher tests the number of days a user account has been disabled:
74
+
75
+ its('expiry_dates') { should eq '' }
76
+
77
+ ## inactive_days
78
+
79
+ The `inactive_days` matcher tests the number of days a user must be inactive before the user account is disabled:
80
+
81
+ its('inactive_days') { should eq '' }
82
+
83
+ ## include
84
+
85
+ <%= partial "/shared/matcher_include" %>
86
+
87
+ ## last_changes
88
+
89
+ The `last_changes` matcher tests the last time a password was changed:
90
+
91
+ its('last_changes') { should eq '' }
92
+
93
+ ## match
94
+
95
+ <%= partial "/shared/matcher_match" %>
96
+
97
+ ## max_days
98
+
99
+ The `max_days` matcher tests the maximum number of days after which a password must be changed:
100
+
101
+ its('max_days') { should eq 90 }
102
+
103
+ ## min_days
104
+
105
+ The `min_days` matcher tests the minimum number of days a password must exist, before it may be changed:
106
+
107
+ its('min_days') { should eq 0 }
108
+
109
+ ## passwords
110
+
111
+ The `passwords` matcher tests if passwords are
112
+
113
+ * Encrypted
114
+ * Have direct logins disabled, as indicated by an asterisk (`*`)
115
+ * In the `/etc/shadow` file, as indicated by the letter x (`x`)
116
+
117
+ For example:
118
+
119
+ its('passwords') { should eq ['x'] }
120
+ its('passwords') { should cmp '*' }
121
+
122
+ ## users
123
+
124
+ The `users` matcher tests if the user name exists `/etc/shadow`:
125
+
126
+ its('users') { should eq 'root' }
127
+
128
+ ## warn_days
129
+
130
+ The `warn_days` matcher tests the number of days a user is warned about an expiring password:
131
+
132
+ its('warn_days') { should eq 7 }
133
+
134
+ # Examples
135
+
136
+ The following examples show how to use this InSpec audit resource.
137
+
138
+ ## Test for a forbidden user
139
+
140
+ describe shadow do
141
+ its('users') { should_not include 'forbidden_user' }
142
+ end
143
+
144
+ ## Test that a user appears one time
145
+
146
+ describe shadow.users('bin') do
147
+ its('passwords') { should cmp 'x' }
148
+ its('count') { should eq 1 }
149
+ end