Skip to content

Commit 04e0374

Browse files
authored
Merge pull request #150 from artem-sidorenko/subnamespace
Split the attribues to the client and server areas
2 parents 3c3503a + 6d929fd commit 04e0374

File tree

6 files changed

+88
-91
lines changed

6 files changed

+88
-91
lines changed

attributes/default.rb

+45-43
Original file line numberDiff line numberDiff line change
@@ -46,55 +46,57 @@
4646
default['ssh-hardening']['sshserver']['service_name'] = 'ssh'
4747
end
4848

49+
# sshd + ssh client
50+
default['ssh-hardening']['network']['ipv6']['enable'] = false
4951
default['ssh-hardening']['config_disclaimer'] = '**Note:** This file was automatically created by Hardening Framework (dev-sec.io) configuration. If you use its automated setup, do not edit this file directly, but adjust the automation instead.'
50-
default['ssh-hardening']['network']['ipv6']['enable'] = false # sshd + ssh
51-
default['ssh-hardening']['ssh']['server']['kex'] = nil # nil = calculate best combination for server version
52+
default['ssh-hardening']['ssh']['ports'] = [22]
53+
54+
# ssh client
5255
default['ssh-hardening']['ssh']['client']['mac'] = nil # nil = calculate best combination for client
53-
default['ssh-hardening']['ssh']['server']['cipher'] = nil # nil = calculate best combination for server version
5456
default['ssh-hardening']['ssh']['client']['kex'] = nil # nil = calculate best combination for client
55-
default['ssh-hardening']['ssh']['server']['mac'] = nil # nil = calculate best combination for server version
5657
default['ssh-hardening']['ssh']['client']['cipher'] = nil # nil = calculate best combination for client
57-
default['ssh-hardening']['ssh']['client']['cbc_required'] = false # ssh
58-
default['ssh-hardening']['ssh']['server']['cbc_required'] = false # sshd
59-
default['ssh-hardening']['ssh']['client']['weak_hmac'] = false # ssh
60-
default['ssh-hardening']['ssh']['server']['weak_hmac'] = false # sshd
61-
default['ssh-hardening']['ssh']['client']['weak_kex'] = false # ssh
62-
default['ssh-hardening']['ssh']['server']['weak_kex'] = false # sshd
63-
default['ssh-hardening']['ssh']['ports'] = [22] # sshd + ssh
64-
default['ssh-hardening']['ssh']['listen_to'] = ['0.0.0.0'] # sshd
65-
default['ssh-hardening']['ssh']['host_key_files'] = ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_dsa_key', '/etc/ssh/ssh_host_ecdsa_key'] # sshd
66-
default['ssh-hardening']['ssh']['client_alive_interval'] = 600 # sshd, 10min
67-
default['ssh-hardening']['ssh']['client_alive_count'] = 3 # sshd, ~> 3 x interval
68-
default['ssh-hardening']['ssh']['remote_hosts'] = [] # ssh
69-
default['ssh-hardening']['ssh']['allow_root_with_key'] = false # sshd
70-
default['ssh-hardening']['ssh']['allow_tcp_forwarding'] = false # sshd
71-
default['ssh-hardening']['ssh']['allow_agent_forwarding'] = false # sshd
72-
default['ssh-hardening']['ssh']['allow_x11_forwarding'] = false # sshd
73-
default['ssh-hardening']['ssh']['use_pam'] = false # sshd
74-
default['ssh-hardening']['ssh']['challenge_response_authentication'] = false # sshd
75-
default['ssh-hardening']['ssh']['deny_users'] = [] # sshd
76-
default['ssh-hardening']['ssh']['allow_users'] = [] # sshd
77-
default['ssh-hardening']['ssh']['deny_groups'] = [] # sshd
78-
default['ssh-hardening']['ssh']['allow_groups'] = [] # sshd
79-
default['ssh-hardening']['ssh']['print_motd'] = false # sshd
80-
default['ssh-hardening']['ssh']['print_last_log'] = false # sshd
81-
# set this to nil to disable banner or provide a path like '/etc/issue.net'
82-
default['ssh-hardening']['ssh']['banner'] = nil # sshd
83-
default['ssh-hardening']['ssh']['os_banner'] = false # sshd (Debian OS family)
58+
default['ssh-hardening']['ssh']['client']['cbc_required'] = false
59+
default['ssh-hardening']['ssh']['client']['weak_hmac'] = false
60+
default['ssh-hardening']['ssh']['client']['weak_kex'] = false
8461

85-
# set this to nil to let us use the default OpenSSH in case it's not set by the user
86-
default['ssh-hardening']['ssh']['use_dns'] = nil # sshd
87-
# set this to nil to let us detect the attribute based on the node platform
88-
default['ssh-hardening']['ssh']['use_privilege_separation'] = nil
89-
default['ssh-hardening']['ssh']['login_grace_time'] = '30s' # sshd
90-
default['ssh-hardening']['ssh']['max_auth_tries'] = 2 # sshd
91-
default['ssh-hardening']['ssh']['max_sessions'] = 10 # sshd
62+
default['ssh-hardening']['ssh']['client']['remote_hosts'] = []
9263
default['ssh-hardening']['ssh']['client']['password_authentication'] = false # ssh
93-
default['ssh-hardening']['ssh']['server']['password_authentication'] = false # sshd
9464
# http://undeadly.org/cgi?action=article&sid=20160114142733
9565
default['ssh-hardening']['ssh']['client']['roaming'] = false
9666

97-
# Define SFTP options
98-
default['ssh-hardening']['ssh']['sftp']['enable'] = false
99-
default['ssh-hardening']['ssh']['sftp']['group'] = 'sftponly'
100-
default['ssh-hardening']['ssh']['sftp']['chroot'] = '/home/%u'
67+
# sshd
68+
default['ssh-hardening']['ssh']['server']['kex'] = nil # nil = calculate best combination for server version
69+
default['ssh-hardening']['ssh']['server']['cipher'] = nil # nil = calculate best combination for server version
70+
default['ssh-hardening']['ssh']['server']['mac'] = nil # nil = calculate best combination for server version
71+
default['ssh-hardening']['ssh']['server']['cbc_required'] = false
72+
default['ssh-hardening']['ssh']['server']['weak_hmac'] = false
73+
default['ssh-hardening']['ssh']['server']['weak_kex'] = false
74+
default['ssh-hardening']['ssh']['server']['listen_to'] = ['0.0.0.0']
75+
default['ssh-hardening']['ssh']['server']['host_key_files'] = ['/etc/ssh/ssh_host_rsa_key', '/etc/ssh/ssh_host_dsa_key', '/etc/ssh/ssh_host_ecdsa_key']
76+
default['ssh-hardening']['ssh']['server']['client_alive_interval'] = 600 # 10min
77+
default['ssh-hardening']['ssh']['server']['client_alive_count'] = 3 # ~> 3 x interval
78+
79+
default['ssh-hardening']['ssh']['server']['allow_root_with_key'] = false
80+
default['ssh-hardening']['ssh']['server']['allow_tcp_forwarding'] = false
81+
default['ssh-hardening']['ssh']['server']['allow_agent_forwarding'] = false
82+
default['ssh-hardening']['ssh']['server']['allow_x11_forwarding'] = false
83+
default['ssh-hardening']['ssh']['server']['use_pam'] = false
84+
default['ssh-hardening']['ssh']['server']['challenge_response_authentication'] = false
85+
default['ssh-hardening']['ssh']['server']['deny_users'] = []
86+
default['ssh-hardening']['ssh']['server']['allow_users'] = []
87+
default['ssh-hardening']['ssh']['server']['deny_groups'] = []
88+
default['ssh-hardening']['ssh']['server']['allow_groups'] = []
89+
default['ssh-hardening']['ssh']['server']['print_motd'] = false
90+
default['ssh-hardening']['ssh']['server']['print_last_log'] = false
91+
default['ssh-hardening']['ssh']['server']['banner'] = nil # set this to nil to disable banner or provide a path like '/etc/issue.net'
92+
default['ssh-hardening']['ssh']['server']['os_banner'] = false # (Debian OS family)
93+
default['ssh-hardening']['ssh']['server']['use_dns'] = nil # set this to nil to let us use the default OpenSSH in case it's not set by the user
94+
default['ssh-hardening']['ssh']['server']['use_privilege_separation'] = nil # set this to nil to let us detect the attribute based on the node platform
95+
default['ssh-hardening']['ssh']['server']['login_grace_time'] = '30s'
96+
default['ssh-hardening']['ssh']['server']['max_auth_tries'] = 2
97+
default['ssh-hardening']['ssh']['server']['max_sessions'] = 10
98+
default['ssh-hardening']['ssh']['server']['password_authentication'] = false
99+
# sshd sftp options
100+
default['ssh-hardening']['ssh']['server']['sftp']['enable'] = false
101+
default['ssh-hardening']['ssh']['server']['sftp']['group'] = 'sftponly'
102+
default['ssh-hardening']['ssh']['server']['sftp']['chroot'] = '/home/%u'

recipes/client.rb

+1-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
variables(
3939
mac: node['ssh-hardening']['ssh']['client']['mac'] || DevSec::Ssh.get_client_macs(node['ssh-hardening']['ssh']['client']['weak_hmac']),
4040
kex: node['ssh-hardening']['ssh']['client']['kex'] || DevSec::Ssh.get_client_kexs(node['ssh-hardening']['ssh']['client']['weak_kex']),
41-
cipher: node['ssh-hardening']['ssh']['client']['cipher'] || DevSec::Ssh.get_client_ciphers(node['ssh-hardening']['ssh']['client']['cbc_required']),
42-
roaming: node['ssh-hardening']['ssh']['client']['roaming']
41+
cipher: node['ssh-hardening']['ssh']['client']['cipher'] || DevSec::Ssh.get_client_ciphers(node['ssh-hardening']['ssh']['client']['cbc_required'])
4342
)
4443
end

recipes/server.rb

+1-5
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,7 @@
6969
mac: node['ssh-hardening']['ssh']['server']['mac'] || DevSec::Ssh.get_server_macs(node['ssh-hardening']['ssh']['server']['weak_hmac']),
7070
kex: node['ssh-hardening']['ssh']['server']['kex'] || DevSec::Ssh.get_server_kexs(node['ssh-hardening']['ssh']['server']['weak_kex']),
7171
cipher: node['ssh-hardening']['ssh']['server']['cipher'] || DevSec::Ssh.get_server_ciphers(node['ssh-hardening']['ssh']['server']['cbc_required']),
72-
use_priv_sep: node['ssh-hardening']['ssh']['use_privilege_separation'] || DevSec::Ssh.get_server_privilege_separarion,
73-
deny_users: node['ssh-hardening']['ssh']['deny_users'],
74-
allow_users: node['ssh-hardening']['ssh']['allow_users'],
75-
deny_groups: node['ssh-hardening']['ssh']['deny_groups'],
76-
allow_groups: node['ssh-hardening']['ssh']['allow_groups']
72+
use_priv_sep: node['ssh-hardening']['ssh']['use_privilege_separation'] || DevSec::Ssh.get_server_privilege_separarion
7773
)
7874
notifies :restart, 'service[sshd]'
7975
end

spec/recipes/server_spec.rb

+9-9
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@
271271
context 'with attribute deny_users' do
272272
cached(:chef_run) do
273273
ChefSpec::ServerRunner.new do |node|
274-
node.normal['ssh-hardening']['ssh']['deny_users'] = %w(someuser)
274+
node.normal['ssh-hardening']['ssh']['server']['deny_users'] = %w(someuser)
275275
end.converge(described_recipe)
276276
end
277277

@@ -284,7 +284,7 @@
284284
context 'with attribute deny_users mutiple' do
285285
cached(:chef_run) do
286286
ChefSpec::ServerRunner.new do |node|
287-
node.normal['ssh-hardening']['ssh']['deny_users'] = %w(someuser otheruser)
287+
node.normal['ssh-hardening']['ssh']['server']['deny_users'] = %w(someuser otheruser)
288288
end.converge(described_recipe)
289289
end
290290

@@ -304,7 +304,7 @@
304304
context 'with attribute use_dns set to false' do
305305
cached(:chef_run) do
306306
ChefSpec::ServerRunner.new do |node|
307-
node.normal['ssh-hardening']['ssh']['use_dns'] = false
307+
node.normal['ssh-hardening']['ssh']['server']['use_dns'] = false
308308
end.converge(described_recipe)
309309
end
310310

@@ -317,7 +317,7 @@
317317
context 'with attribute use_dns set to true' do
318318
cached(:chef_run) do
319319
ChefSpec::ServerRunner.new do |node|
320-
node.normal['ssh-hardening']['ssh']['use_dns'] = true
320+
node.normal['ssh-hardening']['ssh']['server']['use_dns'] = true
321321
end.converge(described_recipe)
322322
end
323323

@@ -337,7 +337,7 @@
337337
context 'with attribute ["sftp"]["enable"] set to true' do
338338
cached(:chef_run) do
339339
ChefSpec::ServerRunner.new do |node|
340-
node.normal['ssh-hardening']['ssh']['sftp']['enable'] = true
340+
node.normal['ssh-hardening']['ssh']['server']['sftp']['enable'] = true
341341
end.converge(described_recipe)
342342
end
343343

@@ -350,8 +350,8 @@
350350
context 'with attribute ["sftp"]["enable"] set to true and ["sftp"]["group"] set to "testgroup"' do
351351
cached(:chef_run) do
352352
ChefSpec::ServerRunner.new do |node|
353-
node.normal['ssh-hardening']['ssh']['sftp']['enable'] = true
354-
node.normal['ssh-hardening']['ssh']['sftp']['group'] = 'testgroup'
353+
node.normal['ssh-hardening']['ssh']['server']['sftp']['enable'] = true
354+
node.normal['ssh-hardening']['ssh']['server']['sftp']['group'] = 'testgroup'
355355
end.converge(described_recipe)
356356
end
357357

@@ -364,8 +364,8 @@
364364
context 'with attribute ["sftp"]["enable"] set to true and ["sftp"]["chroot"] set to "/export/home/%u"' do
365365
cached(:chef_run) do
366366
ChefSpec::ServerRunner.new do |node|
367-
node.normal['ssh-hardening']['ssh']['sftp']['enable'] = true
368-
node.normal['ssh-hardening']['ssh']['sftp']['chroot'] = 'test_home_dir'
367+
node.normal['ssh-hardening']['ssh']['server']['sftp']['enable'] = true
368+
node.normal['ssh-hardening']['ssh']['server']['sftp']['chroot'] = 'test_home_dir'
369369
end.converge(described_recipe)
370370
end
371371

templates/default/openssh.conf.erb

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# Address family should always be limited to the active network configuration.
1515
AddressFamily <%= ((@node['ssh-hardening']['network']['ipv6']['enable']) ? "any" : "inet" ) %>
1616

17-
<% Array(@node['ssh-hardening']['ssh']['remote_hosts']).each do |host| %>
17+
<% Array(@node['ssh-hardening']['ssh']['client']['remote_hosts']).each do |host| %>
1818
# Restrict the following configuration to be limited to this Host.
1919
Host <%= host %>
2020
<% end %>
@@ -111,4 +111,4 @@ Compression yes
111111
#VisualHostKey yes
112112

113113
# http://undeadly.org/cgi?action=article&sid=20160114142733
114-
UseRoaming <%= @roaming ? 'yes' : 'no' %>
114+
UseRoaming <%= @node['ssh-hardening']['ssh']['client']['roaming'] ? 'yes' : 'no' %>

0 commit comments

Comments
 (0)