turbot/steampipe-mod-docker-compliance

Control: 3.8 Ensure that registry certificate file permissions are set to 444 or more restrictively

Description

You should verify that all the registry certificate files (usually found under /etc/docker/certs.d/<registry-name> directory) have permissions of 444 or are set more restrictively.

Note that, by default, this directory might not exist if no registry certificate files are in place.

The /etc/docker/certs.d/<registry-name> directory contains Docker registry certificates. These certificate files must have permissions of 444 or more restrictive permissions in order to ensure that unprivileged users do not have full access to them.

Remediation

The following command could be executed:

find /etc/docker/certs.d/ -type f -exec chmod 0444 {} \;

This would set the permissions for the registry certificate files to 444.

Default Value

By default, the permissions for registry certificate files might not be 444. The default file permissions are governed by the system or user specific umask values which are defined within the operating system itself.

Usage

Run the control in your terminal:

powerpipe control run docker_compliance.control.cis_v160_3_8

Snapshot and share results via Turbot Pipes:

powerpipe login
powerpipe control run docker_compliance.control.cis_v160_3_8 --share

SQL

This control uses a named query:

with os_output as (
select
btrim(stdout_output, E' \n\r\t') as os,
_ctx ->> 'connection_name' as os_conn
from
exec_command
where
command = 'uname -s'
), hostname as (
select
btrim(stdout_output, E' \n\r\t') as host,
_ctx ->> 'connection_name' as host_conn,
_ctx
from
exec_command
where
command = 'hostname'
),
linux_output as (
select
stdout_output,
stderr_output,
_ctx ->> 'connection_name' as conn
from
exec_command,
os_output
where
os_conn = _ctx ->> 'connection_name'
and command = 'find /etc/docker/certs.d/ -type f -exec stat -c "%a %n" {} \;'
)
select
host as resource,
case
when os.os ilike '%Darwin%' then 'skip'
when o.stderr_output like '%No such file or directory%' then 'skip'
when o.stdout_output like '%444%' then 'ok'
else 'alarm'
end as status,
case
when os.os ilike '%Darwin%' then host || ' /etc/docker/certs.d does not exist on ' || os.os || ' OS.'
when o.stderr_output like '%No such file or directory%' then host || ' recommendation is not applicable as the file is unavailable.'
else host || ' registry certificate file permissions set to ' || (btrim(o.stdout_output, E' \n\r\t')) || '.'
end as reason
, h._ctx ->> 'connection_name' as connection_name
from
hostname as h,
os_output as os,
linux_output as o
where
os.os_conn = h.host_conn
and h.host_conn = o.conn;

Tags