diff --git a/helper_lib.sh b/helper_lib.sh index 74c8849..2b6f1b0 100644 --- a/helper_lib.sh +++ b/helper_lib.sh @@ -1,5 +1,8 @@ #!/bin/sh +# echo to stderr +echoerr() { echo "$@" 1>&2; } + # Returns the absolute path of a given string abspath () { case "$1" in /*)printf "%s\n" "$1";; *)printf "%s\n" "$PWD/$1";; esac; } diff --git a/tests/1_host_configuration.bats b/tests/1_host_configuration.bats new file mode 100644 index 0000000..2944f5f --- /dev/null +++ b/tests/1_host_configuration.bats @@ -0,0 +1,111 @@ +#!/usr/bin/env bats + +setup() { + . "$BATS_TEST_DIRNAME/../helper_lib.sh" +} + +# 1.1 +@test "1.1 - Create a separate partition for containers" { + grep /var/lib/docker /etc/fstab + [ $status -eq 0 ] +} + +# 1.2 +@test "1.2 - Use an updated Linux Kernel" { + kernel_version=$(uname -r | cut -d "-" -f 1) + run do_version_check 3.10 "$kernel_version" + [ $status -eq 9 ] || [ $status -eq 10 ] +} + +# 1.4 +@test "1.4 - Remove all non-essential services from the host - Network" { + # Check for listening network services. + listening_services=$(netstat -na | grep -v tcp6 | grep -v unix | grep -c LISTEN) + if [ "$listening_services" -eq 0 ]; then + echoerr "1.4 - Failed to get listening services for check: $BATS_TEST_NAME" + else + if [ "$listening_services" -gt 5 ]; then + echoerr " * Host listening on: $listening_services ports" + fi + fi + [ "$listening_services" -ne 0 ] && [ "$listening_services" -le 5 ] +} + +# 1.5 +@test "1.5 - Keep Docker up to date" { + docker_version=$(docker version | grep -i -A1 '^server' | grep -i 'version:' \ + | awk '{print $NF; exit}' | tr -d '[:alpha:]-,') + docker_current_version="1.11.1" + docker_current_date="2016-04-27" + run do_version_check "$docker_current_version" "$docker_version" + if [ $status -eq 11 ]; then + echoerr " * Using $docker_version, when $docker_current_version is current as of $docker_current_date" + echoerr " * Your operating system vendor may provide support and security maintenance for docker" + else + pass "$check_1_5" + echoerr " * Using $docker_version which is current as of $docker_current_date" + echoerr " * Check with your operating system vendor for support and security maintenance for docker" + fi + [ $status -eq 9 ] || [ $status -eq 10 ] +} + +# 1.6 +@test "1.6 - Only allow trusted users to control Docker daemon" { + docker_users=$(getent group docker) + echoerr "$BATS_TEST_NAME" + for u in $docker_users; do + echoerr " * $u" + done +} + +# 1.7 +@test "1.7 - Audit docker daemon - /usr/bin/docker" { + file="/usr/bin/docker" + run command -v auditctl + if [ $status -eq 0 ]; then + auditctl -l | grep "$file" >/dev/null 2>&1 + else + echoerr " * Failed to inspect: auditctl command not found." + fi + [ $status -eq 0 ] +} + +# 1.8 +@test "1.8 - Audit Docker files and directories - /var/lib/docker" { + skip "TODO: need to implement" +} + +# 1.9 +@test "1.9 - Audit Docker files and directories - /etc/docker" { + skip "TODO: need to implement" +} + +# 1.10 +@test "1.10 - Audit Docker files and directories - docker.service" { + skip "TODO: need to implement" +} + +# 1.11 +@test "1.11 - Audit Docker files and directories - docker.socket" { + skip "TODO: need to implement" +} + +# 1.12 +@test "1.12 - Audit Docker files and directories - /etc/default/docker" { + skip "TODO: need to implement" +} + +# 1.13 +@test "1.13 - Audit Docker files and directories - /etc/docker/daemon.json" { + skip "TODO: need to implement" +} + +# 1.14 +@test "1.14 - Audit Docker files and directories - /usr/bin/docker-containerd" { + skip "TODO: need to implement" +} + +# 1.15 +@test "1.15 - Audit Docker files and directories - /usr/bin/docker-runc" { + skip "TODO: need to implement" +}