1
0
mirror of https://github.com/systemd/systemd synced 2025-11-22 10:14:45 +01:00

Compare commits

..

No commits in common. "278953167d27731f46fcb56d77807d522d2ad9d2" and "346b7b6b4931fc6bee9e820e0160dd024a86ed52" have entirely different histories.

10 changed files with 16 additions and 48 deletions

View File

@ -478,14 +478,11 @@
<varlistentry> <varlistentry>
<term><varname>Audit=</varname></term> <term><varname>Audit=</varname></term>
<listitem><para>Takes a boolean value or special value <literal>keep</literal>. If enabled <listitem><para>Takes a boolean value. If enabled <command>systemd-journald</command> will turn on
<command>systemd-journald</command> will turn on kernel auditing on start-up. If disabled it will kernel auditing on start-up. If disabled it will turn it off. If unset it will neither enable nor
turn it off. When <literal>keep</literal> it will neither enable nor disable it, leaving the previous disable it, leaving the previous state unchanged. This means if another tool turns on auditing even
state unchanged. This means if another tool turns on auditing even if if <command>systemd-journald</command> left it off, it will still collect the generated
<command>systemd-journald</command> left it off, it will still collect the generated messages. messages. Defaults to on in the default journal namespace, and unset otherwise.</para>
Defaults to yes in the default journal namespace, and <literal>keep</literal> otherwise.</para>
<!-- Explicit assignment of an empty string is equivalent to 'keep', for backward compatibility. -->
<para>Note that this option does not control whether <command>systemd-journald</command> collects <para>Note that this option does not control whether <command>systemd-journald</command> collects
generated audit records, it just controls whether it tells the kernel to generate them. If you need generated audit records, it just controls whether it tells the kernel to generate them. If you need

View File

@ -91,9 +91,11 @@ catalog_dir=${prefix}/lib/systemd/catalog
catalogdir=${catalog_dir} catalogdir=${catalog_dir}
system_alloc_uid_min={{SYSTEM_ALLOC_UID_MIN}} system_alloc_uid_min={{SYSTEM_ALLOC_UID_MIN}}
systemallocuidmin=${system_alloc_uid_min}
system_uid_max={{SYSTEM_UID_MAX}} system_uid_max={{SYSTEM_UID_MAX}}
systemuidmax=${system_uid_max} systemuidmax=${system_uid_max}
system_alloc_gid_min={{SYSTEM_ALLOC_GID_MIN}} system_alloc_gid_min={{SYSTEM_ALLOC_GID_MIN}}
systemallocgidmin=${system_alloc_gid_min}
system_gid_max={{SYSTEM_GID_MAX}} system_gid_max={{SYSTEM_GID_MAX}}
systemgidmax=${system_gid_max} systemgidmax=${system_gid_max}

View File

@ -465,14 +465,10 @@ static int manager_set_kernel_audit(Manager *m) {
assert(m); assert(m);
assert(m->audit_fd >= 0); assert(m->audit_fd >= 0);
assert(m->config.set_audit >= 0);
if (m->config.set_audit == AUDIT_KEEP) if (m->config.set_audit < 0)
return 0; return 0;
/* In the following, we can handle 'set_audit' as a boolean. */
assert(IN_SET(m->config.set_audit, AUDIT_NO, AUDIT_YES));
struct { struct {
union { union {
struct nlmsghdr header; struct nlmsghdr header;
@ -561,7 +557,7 @@ int manager_open_audit(Manager *m) {
return 0; return 0;
} }
void manager_reset_kernel_audit(Manager *m, AuditSetMode old_set_audit) { void manager_reset_kernel_audit(Manager *m, int old_set_audit) {
assert(m); assert(m);
if (m->audit_fd < 0) if (m->audit_fd < 0)

View File

@ -10,4 +10,4 @@ void manager_process_audit_message(Manager *m, const void *buffer, size_t buffer
void process_audit_string(Manager *m, int type, const char *data, size_t size); void process_audit_string(Manager *m, int type, const char *data, size_t size);
int manager_open_audit(Manager *m); int manager_open_audit(Manager *m);
void manager_reset_kernel_audit(Manager *m, AuditSetMode old_set_audit); void manager_reset_kernel_audit(Manager *m, int old_set_audit);

View File

@ -46,7 +46,7 @@ void journal_config_set_defaults(JournalConfig *c) {
.compress.threshold_bytes = UINT64_MAX, .compress.threshold_bytes = UINT64_MAX,
.seal = -1, .seal = -1,
.read_kmsg = -1, .read_kmsg = -1,
.set_audit = _AUDIT_SET_MODE_INVALID, .set_audit = -1,
.ratelimit_interval = DEFAULT_RATE_LIMIT_INTERVAL, .ratelimit_interval = DEFAULT_RATE_LIMIT_INTERVAL,
.ratelimit_burst = DEFAULT_RATE_LIMIT_BURST, .ratelimit_burst = DEFAULT_RATE_LIMIT_BURST,
.forward_to_syslog = -1, .forward_to_syslog = -1,
@ -59,7 +59,6 @@ void journal_config_set_defaults(JournalConfig *c) {
.max_level_console = -1, .max_level_console = -1,
.max_level_wall = -1, .max_level_wall = -1,
.max_level_socket = -1, .max_level_socket = -1,
.split_mode = _SPLIT_INVALID,
}; };
journal_reset_metrics(&c->system_storage_metrics); journal_reset_metrics(&c->system_storage_metrics);
@ -123,7 +122,7 @@ void manager_merge_configs(Manager *m) {
MERGE_NON_NEGATIVE(read_kmsg, !m->namespace); MERGE_NON_NEGATIVE(read_kmsg, !m->namespace);
/* By default, kernel auditing is enabled by the main namespace instance, and not controlled by /* By default, kernel auditing is enabled by the main namespace instance, and not controlled by
* non-default namespace instances. */ * non-default namespace instances. */
MERGE_NON_NEGATIVE(set_audit, m->namespace ? AUDIT_KEEP : AUDIT_YES); MERGE_NON_NEGATIVE(set_audit, m->namespace ? -1 : true);
MERGE_NON_ZERO(sync_interval_usec, DEFAULT_SYNC_INTERVAL_USEC); MERGE_NON_ZERO(sync_interval_usec, DEFAULT_SYNC_INTERVAL_USEC);
/* TODO: also merge them when comdline or credentials support to configure them. */ /* TODO: also merge them when comdline or credentials support to configure them. */
@ -402,16 +401,6 @@ static const char* const split_mode_table[_SPLIT_MAX] = {
DEFINE_STRING_TABLE_LOOKUP(split_mode, SplitMode); DEFINE_STRING_TABLE_LOOKUP(split_mode, SplitMode);
DEFINE_CONFIG_PARSE_ENUM(config_parse_split_mode, split_mode, SplitMode); DEFINE_CONFIG_PARSE_ENUM(config_parse_split_mode, split_mode, SplitMode);
static const char* const audit_set_mode_table[_AUDIT_SET_MODE_MAX] = {
[AUDIT_NO] = "no",
[AUDIT_YES] = "yes",
[AUDIT_KEEP] = "keep",
};
DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(audit_set_mode, AuditSetMode, AUDIT_YES);
/* For backward compatibility, an empty string has special meaning and equals to 'keep'. */
DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_audit_set_mode, audit_set_mode, AuditSetMode, AUDIT_KEEP);
int config_parse_line_max( int config_parse_line_max(
const char *unit, const char *unit,
const char *filename, const char *filename,

View File

@ -27,14 +27,6 @@ typedef struct JournalCompressOptions {
uint64_t threshold_bytes; uint64_t threshold_bytes;
} JournalCompressOptions; } JournalCompressOptions;
typedef enum AuditSetMode {
AUDIT_NO = 0, /* Disables the kernel audit subsystem on start. */
AUDIT_YES, /* Enables the kernel audit subsystem on start. */
AUDIT_KEEP, /* Keep the current kernel audit subsystem state. */
_AUDIT_SET_MODE_MAX,
_AUDIT_SET_MODE_INVALID = -EINVAL,
} AuditSetMode;
typedef struct JournalConfig { typedef struct JournalConfig {
/* Storage=, cred: journal.storage */ /* Storage=, cred: journal.storage */
Storage storage; Storage storage;
@ -45,7 +37,7 @@ typedef struct JournalConfig {
/* ReadKMsg= */ /* ReadKMsg= */
int read_kmsg; int read_kmsg;
/* Audit= */ /* Audit= */
AuditSetMode set_audit; int set_audit;
/* SyncIntervalSec= */ /* SyncIntervalSec= */
usec_t sync_interval_usec; usec_t sync_interval_usec;
/* RateLimitIntervalSec= */ /* RateLimitIntervalSec= */
@ -110,4 +102,3 @@ CONFIG_PARSER_PROTOTYPE(config_parse_line_max);
CONFIG_PARSER_PROTOTYPE(config_parse_compress); CONFIG_PARSER_PROTOTYPE(config_parse_compress);
CONFIG_PARSER_PROTOTYPE(config_parse_forward_to_socket); CONFIG_PARSER_PROTOTYPE(config_parse_forward_to_socket);
CONFIG_PARSER_PROTOTYPE(config_parse_split_mode); CONFIG_PARSER_PROTOTYPE(config_parse_split_mode);
CONFIG_PARSER_PROTOTYPE(config_parse_audit_set_mode);

View File

@ -6,7 +6,6 @@
typedef enum Storage Storage; typedef enum Storage Storage;
typedef enum SplitMode SplitMode; typedef enum SplitMode SplitMode;
typedef enum AuditSetMode AuditSetMode;
typedef struct JournalCompressOptions JournalCompressOptions; typedef struct JournalCompressOptions JournalCompressOptions;
typedef struct JournalConfig JournalConfig; typedef struct JournalConfig JournalConfig;

View File

@ -23,7 +23,7 @@ Journal.Storage, config_parse_storage, 0, offsetof(Journa
Journal.Compress, config_parse_compress, 0, offsetof(JournalConfig, compress) Journal.Compress, config_parse_compress, 0, offsetof(JournalConfig, compress)
Journal.Seal, config_parse_tristate, 0, offsetof(JournalConfig, seal) Journal.Seal, config_parse_tristate, 0, offsetof(JournalConfig, seal)
Journal.ReadKMsg, config_parse_tristate, 0, offsetof(JournalConfig, read_kmsg) Journal.ReadKMsg, config_parse_tristate, 0, offsetof(JournalConfig, read_kmsg)
Journal.Audit, config_parse_audit_set_mode, 0, offsetof(JournalConfig, set_audit) Journal.Audit, config_parse_tristate, 0, offsetof(JournalConfig, set_audit)
Journal.SyncIntervalSec, config_parse_sec, 0, offsetof(JournalConfig, sync_interval_usec) Journal.SyncIntervalSec, config_parse_sec, 0, offsetof(JournalConfig, sync_interval_usec)
# The following is a legacy name for compatibility # The following is a legacy name for compatibility
Journal.RateLimitInterval, config_parse_sec, 0, offsetof(JournalConfig, ratelimit_interval) Journal.RateLimitInterval, config_parse_sec, 0, offsetof(JournalConfig, ratelimit_interval)

View File

@ -19,10 +19,8 @@ DLSYM_PROTOTYPE(audit_log_acct_message) = NULL;
DLSYM_PROTOTYPE(audit_log_user_avc_message) = NULL; DLSYM_PROTOTYPE(audit_log_user_avc_message) = NULL;
DLSYM_PROTOTYPE(audit_log_user_comm_message) = NULL; DLSYM_PROTOTYPE(audit_log_user_comm_message) = NULL;
static DLSYM_PROTOTYPE(audit_open) = NULL; static DLSYM_PROTOTYPE(audit_open) = NULL;
#endif
int dlopen_libaudit(void) { int dlopen_libaudit(void) {
#if HAVE_AUDIT
ELF_NOTE_DLOPEN("libaudit", ELF_NOTE_DLOPEN("libaudit",
"Support for Audit logging", "Support for Audit logging",
ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED, ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED,
@ -37,12 +35,8 @@ int dlopen_libaudit(void) {
DLSYM_ARG(audit_log_user_avc_message), DLSYM_ARG(audit_log_user_avc_message),
DLSYM_ARG(audit_log_user_comm_message), DLSYM_ARG(audit_log_user_comm_message),
DLSYM_ARG(audit_open)); DLSYM_ARG(audit_open));
#else
return -EOPNOTSUPP;
#endif
} }
#if HAVE_AUDIT
static int try_audit_request(int fd) { static int try_audit_request(int fd) {
struct iovec iov; struct iovec iov;
struct msghdr mh; struct msghdr mh;

View File

@ -3,8 +3,6 @@
#include "forward.h" #include "forward.h"
int dlopen_libaudit(void);
#if HAVE_AUDIT #if HAVE_AUDIT
# include <libaudit.h> /* IWYU pragma: export */ # include <libaudit.h> /* IWYU pragma: export */
@ -13,6 +11,8 @@ int dlopen_libaudit(void);
extern DLSYM_PROTOTYPE(audit_log_acct_message); extern DLSYM_PROTOTYPE(audit_log_acct_message);
extern DLSYM_PROTOTYPE(audit_log_user_avc_message); extern DLSYM_PROTOTYPE(audit_log_user_avc_message);
extern DLSYM_PROTOTYPE(audit_log_user_comm_message); extern DLSYM_PROTOTYPE(audit_log_user_comm_message);
int dlopen_libaudit(void);
#endif #endif
bool use_audit(void); bool use_audit(void);