Merge "Auditd Support in StarlingX"
This commit is contained in:
commit
cd30f7da83
290
doc/source/security/kubernetes/auditd-support-339a51d8ce16.rst
Normal file
290
doc/source/security/kubernetes/auditd-support-339a51d8ce16.rst
Normal file
@ -0,0 +1,290 @@
|
||||
|
||||
.. _auditd-support-339a51d8ce16:
|
||||
|
||||
=====================
|
||||
Linux Auditing System
|
||||
=====================
|
||||
|
||||
This section describes the Linux Auditing System containerized solution for
|
||||
|prod-long|. The container-based solution aligns with the modular
|
||||
architecture approach of the |prod-p| product.
|
||||
|
||||
The Linux Auditing System helps system administrators track security violation
|
||||
events based on preconfigured audit rules. The events are recorded in a log
|
||||
file and the information in the log entries helps to detect misuse or
|
||||
unauthorized activities. Some examples of auditable events are:
|
||||
|
||||
- file or directory access (Such as files/directories that were accessed,
|
||||
modified, executed, or attributes changed)
|
||||
|
||||
- system calls (For example, useradd, time-related system calls)
|
||||
|
||||
- commands run by a user (For example, a rule can be defined for every
|
||||
executable in the /bin directory and tracked per user.)
|
||||
|
||||
- security events, such as failed login attempts
|
||||
|
||||
- network access (The iptables and ebtables utilities can be configured to
|
||||
trigger audit events.)
|
||||
|
||||
The Linux Audit daemon, **auditd**, is the main component of the Linux Auditing
|
||||
System, and is responsible for writing the audit logs. For more information on
|
||||
**auditd** daemon configuration, see https://man7.org/linux/man-pages/man8/auditd.8.html.
|
||||
|
||||
To run **auditd** on |prod-p|, you must enable **auditd** in the kernel of
|
||||
|prod-p| hosts and then upload and apply the **auditd** system application.
|
||||
|
||||
|
||||
---------------------------
|
||||
Enable Auditd in the Kernel
|
||||
---------------------------
|
||||
|
||||
The Linux Auditing System is disabled in the |prod-p| kernel by default.
|
||||
|
||||
To enable **auditd** in the kernel of all hosts in the system, set the system
|
||||
service parameter **audit** to '1' and apply the service-parameter change,
|
||||
using the following commands, executed on the active controller.
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system service-parameter-modify platform kernel audit=1
|
||||
~(keystone_admin)]$ system service-parameter-apply platform
|
||||
|
||||
To persist the service parameter change, all hosts need to be locked and
|
||||
unlocked, using the following commands on each host:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system host-lock <hostname>
|
||||
~(keystone_admin)]$ system host-unlock <hostname>
|
||||
|
||||
To verify if the grub kernel parameter **audit** was updated to '1', for a
|
||||
particular host, ssh to the host, and check the cmdline parameters, for example:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ cat /proc/cmdline BOOT_IMAGE=/vmlinuz-5.10.57-200.185.tis.el7.x86_64 root=UUID=e11d78a2-7e1c-4613-84c7-002647b1cf8d ro security_profile=standard module_blacklist=integrity,ima tboot=false crashkernel=512M biosdevname=0 console=ttyS0,115200 iommu=pt usbcore.autosuspend=-1 selinux=0 enforcing=0 nmi_watchdog=panic,1 softlockup_panic=1 softdog.soft_panic=1 intel_iommu=on user_namespace.enable=1 nopti nospectre_v2 nospectre_v1 hugepagesz=2M hugepages=0 default_hugepagesz=2M irqaffinity=2-3 rcu_nocbs=2-3 kthread_cpus=0-1 audit=1 audit_backlog_limit=8192
|
||||
|
||||
.. note::
|
||||
Enabling **auditd** should only be done if the purpose is to start
|
||||
**auditd** in the container/pod using the process described in
|
||||
:ref:`Start Auditd System Application <start-auditd-system-application>`.
|
||||
Otherwise, there will be unnecessary performance impact and the backlog
|
||||
events queue limit will eventually exceed, causing ``audit: kauditd hold
|
||||
queue overflow`` messages to be displayed.
|
||||
|
||||
.. _start-auditd-system-application:
|
||||
|
||||
-------------------------------
|
||||
Start Auditd System Application
|
||||
-------------------------------
|
||||
|
||||
.. rubric:: |prereq|
|
||||
|
||||
- Set the **audit** grub kernel parameter to '1'.
|
||||
|
||||
- The **auditd** container that runs the **auditd** daemon must be started by
|
||||
uploading and applying the **audit-armada-app**.
|
||||
|
||||
The **auditd** system application is installed as part of the software install
|
||||
or upgrade.
|
||||
|
||||
The **auditd** system application tarball can be found after installation
|
||||
in the ``/usr/local/share/applications/helm`` directory. The name of the
|
||||
tarball is **auditd-<version>.tgz**, for example, ``auditd-1.0-2.tgz``.
|
||||
|
||||
Use the following commands to upload and apply the **auditd** system application:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system application-upload /usr/local/share/applications/helm/auditd-1.0-2.tgz
|
||||
# check the app was uploaded
|
||||
|
||||
~(keystone_admin)]$ system application-show auditd
|
||||
# if status is "uploaded" proceed with app apply
|
||||
|
||||
~(keystone_admin)]$ system application-apply auditd
|
||||
# check the app was applied
|
||||
|
||||
~(keystone_admin)]$ system application-show auditd
|
||||
# if successful, status will be "applied"
|
||||
|
||||
To check that **auditd** container/pod is created and running on each master
|
||||
and worker node, use the following command:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ kubectl get pods -n kube-system -o wide | grep auditd
|
||||
|
||||
ns-auditd-9hgq5 1/1 Running 0 2m46s face::e95d:7b0:368d:55f8 compute-0 <none> <none>
|
||||
ns-auditd-btww5 1/1 Running 1 2m46s face::2d8f:b75d:d511:81ef compute-1 <none> <none>
|
||||
ns-auditd-czsdf 1/1 Running 1 2m46s face::977:4894:111d:5bf0 compute-2 <none> <none>
|
||||
ns-auditd-hs62t 1/1 Running 0 2m46s face::3 controller-1 <none> <none>
|
||||
ns-auditd-nn8jw 1/1 Running 0 2m46s face::2 controller-0 <none> <none>
|
||||
|
||||
|
||||
------------------------------
|
||||
Auditd Configuration Overrides
|
||||
------------------------------
|
||||
|
||||
The **Auditd** daemon specific configuration is available in the ``/etc/audit/auditd.conf``
|
||||
file. For more information, see, https://man7.org/linux/man-pages/man5/auditd.conf.5.html.
|
||||
|
||||
Besides the **auditd** main configuration file ``auditd.conf``, **auditd** uses
|
||||
audit rules configuration that is available in the ``/etc/audit/audit.rules``
|
||||
file which defines what audit events are logged. For more information on how
|
||||
audit rules are configured, see https://linux.die.net/man/7/audit.rules.
|
||||
|
||||
In the |prod-p| containerized **auditd** solution, both configuration files
|
||||
have default settings that can be overwritten using Helm chart overrides.
|
||||
|
||||
The Helm chart overrides are applied using the following command:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system helm-override-update auditd auditd kube-system --reuse-values --values /home/sysadmin/<user_specific_config>.yaml
|
||||
|
||||
The ``<user_specific_config>.yaml`` defines the overrides that will apply either
|
||||
to the ``auditd.conf`` and/or to the ``audit.rules`` files.
|
||||
|
||||
.. note::
|
||||
The default values for ``auditd.conf`` should be sufficient and you do not
|
||||
need to update them.
|
||||
|
||||
In rare cases, the following example describes how to update the default value
|
||||
with the desired value.
|
||||
|
||||
Example of user defined overrides file for ``auditd.conf``:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
auditdconf: |-
|
||||
##########################################################################
|
||||
#
|
||||
# auditd.conf
|
||||
#
|
||||
##########################################################################
|
||||
local_events = yes
|
||||
write_logs = yes
|
||||
log_file = /var/log/audit/audit.log
|
||||
log_group = root
|
||||
log_format = RAW
|
||||
flush = INCREMENTAL_ASYNC
|
||||
freq = 50
|
||||
max_log_file = 8
|
||||
num_logs = **8**
|
||||
priority_boost = 4
|
||||
disp_qos = lossy
|
||||
dispatcher = /sbin/audispd
|
||||
name_format = NONE
|
||||
##name = mydomain
|
||||
max_log_file_action = IGNORE
|
||||
space_left = 75
|
||||
space_left_action = SYSLOG
|
||||
##verify_email = yes
|
||||
##action_mail_acct = root
|
||||
admin_space_left = 50
|
||||
admin_space_left_action = SYSLOG
|
||||
disk_full_action = SYSLOG
|
||||
disk_error_action = SYSLOG
|
||||
use_libwrap = yes
|
||||
##tcp_listen_port = 60
|
||||
##tcp_listen_queue = 5
|
||||
##tcp_max_per_addr = 1
|
||||
##tcp_client_ports = 1024-65535
|
||||
##tcp_client_max_idle = 0
|
||||
enable_krb5 = no
|
||||
krb5_principal = auditd
|
||||
distribute_network = no
|
||||
|
||||
Example of user defined overrides file for ``audit.rules``:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
auditdrules: |-
|
||||
## First rule - delete all
|
||||
-D
|
||||
|
||||
## Increase the buffers to survive stress events.
|
||||
## Make this bigger for busy systems
|
||||
-b 8192
|
||||
|
||||
## Set failure mode to syslog
|
||||
-f 1
|
||||
|
||||
-a always,exit -F arch=b32 -S init_module,finit_module,delete_module -F key=modules
|
||||
-a always,exit -F arch=b64 -S init_module,finit_module,delete_module -F key=modules
|
||||
|
||||
.. note::
|
||||
The log rotation configuration in ``auditd.conf`` file must not be updated,
|
||||
and must use the default value, **max_log_file_action = IGNORE**, since
|
||||
the logrotate linux utility is used to manage **auditd** log rotation.
|
||||
|
||||
Apply the **audit** rules overrides using the following command:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system application-apply auditd
|
||||
|
||||
Check that application apply has completed successfully:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system application-show auditd
|
||||
|
||||
The Helm chart overrides :command:`system helm-override-update` command,
|
||||
automatically applies the additional rules from the user provided yaml file to
|
||||
the ``audit.rules`` in the **auditd** container.
|
||||
|
||||
Similarly, configuration overrides can be applied to update the default
|
||||
configuration of ``auditd.conf`` using the :command:`system helm-override-update`
|
||||
command.
|
||||
|
||||
-----------
|
||||
Auditd logs
|
||||
-----------
|
||||
|
||||
**auditd** logs can be viewed on the host in the ``/var/log/audit`` directory.
|
||||
Logs are generated by the **auditd** daemon running in the container and the
|
||||
logs record auditable events configured using the ``audit.rules`` file. Log
|
||||
rotation is automatically configured by the system.
|
||||
|
||||
--------------
|
||||
Disable Auditd
|
||||
--------------
|
||||
|
||||
You may decide to disable **auditd** for performance reasons. First, you must
|
||||
remove the **auditd** application. Then, you must set the kernel service
|
||||
parameter **audit** to '0'. These steps removes the **auditd** containers on
|
||||
all hosts and the **auditd** application.
|
||||
|
||||
Use the following system commands to disable **auditd**:
|
||||
|
||||
To remove the **auditd** application:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system application-remove auditd
|
||||
~(keystone_admin)]$ system application-delete auditd
|
||||
|
||||
To verify that the application does not exist in the system:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system application-list |grep auditd
|
||||
|
||||
To set the kernel service parameter **audit** to '0':
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system service-parameter-modify platform kernel audit=0
|
||||
~(keystone_admin)]$ system service-parameter-apply platform
|
||||
|
||||
To persist the kernel parameter change, all hosts need to be locked and
|
||||
unlocked:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
~(keystone_admin)]$ system host-lock controller-0
|
||||
~(keystone_admin)]$ system host-unlock controller-0
|
||||
|
@ -162,6 +162,17 @@ Encrypt Kubernetes Secret Data at Rest
|
||||
|
||||
encrypt-kubernetes-secret-data-at-rest
|
||||
|
||||
|
||||
*********************
|
||||
Linux Auditing System
|
||||
*********************
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
auditd-support-339a51d8ce16
|
||||
|
||||
|
||||
*************************************
|
||||
Operator Login/Authentication Logging
|
||||
*************************************
|
||||
|
Loading…
Reference in New Issue
Block a user