public inbox for linux-audit@redhat.com
 help / color / mirror / Atom feed
From: Matthew Booth <mbooth@redhat.com>
To: linux-audit <linux-audit@redhat.com>
Subject: A scriptable utility for setting auid
Date: Tue, 20 Feb 2007 21:29:25 +0000	[thread overview]
Message-ID: <1172006965.3947.14.camel@localhost.localdomain> (raw)


[-- Attachment #1.1.1: Type: text/plain, Size: 932 bytes --]

I needed a way to exclude a very large class of audit traffic [1] in
RHEL 4. It occurred to me that if I could launch a process and give it
the auid of a dedicated user, I could easily filter it out along with
all child processes. With this in mind I wrote the attached simple
wrapper round the audit_setloginuid. It sets its own auid to whatever
you give it, then execs a command.

I'm assuming that this would be better achieved in RHEL 5 using selinux
context filtering. However, I hope to use this tool to achieve useful
auditing on an Oracle RAC node on RHEL 4.

Matt

[1] It turns out that Oracle CSSD, which maintains cluster membership,
is a somewhat retarded shell script. Amongst many other things, it execs
both bash and awk about 8 times per second.
-- 
Red Hat, Global Professional Services

M:       +44 (0)7977 267231
GPG ID:  D33C3490
GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490

[-- Attachment #1.1.2: ausetauid.c --]
[-- Type: text/x-csrc, Size: 1738 bytes --]

/*
 * ausetauid: A utility to create a new process with a specified auid.
 *
 * ausetauid is a convenient wrapper round the audit_setloginuid function. It is
 * called as:
 *
 * ausetauid <audit user> <command> [<arguments ...>]
 *
 * It sets its auid to the uid of <audit user>, then execs <command>, passing
 * any arguments specified. The audit_setloginuid call results in a LOGIN audit
 * record being created.
 *
 * Matthew Booth <mbooth@redhat.com> - 20/02/2007
 */

#include <pwd.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

#include <libaudit.h>

/* Function prototypes */
static void __attribute__((nonnull))
       display_usage(const char * const exename);
static int __attribute__((nonnull))
       set_audit_user(const char * const username);

int main(const int argc, char *const argv[])
{
    int retval;

    if(argc < 3) {
        display_usage(argv[0]);
        return 1;
    }

    retval = set_audit_user(argv[1]);
    if(retval != 0) {
        return retval;
    }

    execv(argv[2], argv + 2);

    fprintf(stderr, "Failed to execute %s: %m\n", argv[2]);
    return 1;
}

static void display_usage(const char * const exename)
{
    fprintf(stderr, "Usage: %s <audit user> "
                    "<command> [<arguments ...>]\n", exename);
}

static int set_audit_user(const char * const username)
{
    struct passwd *pwd = NULL;

    pwd = getpwnam(username);
    if(NULL == pwd) {
        fprintf(stderr, "%s is not a valid username\n", username);
        return 1;
    }

    if(audit_setloginuid(pwd->pw_uid) != 0) {
        fprintf(stderr, "Failed to change audit login uid\n");
        return 1;
    }

    return 0;
}

[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

[-- Attachment #2: Type: text/plain, Size: 0 bytes --]



             reply	other threads:[~2007-02-20 21:29 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-20 21:29 Matthew Booth [this message]
2007-02-25 23:17 ` A scriptable utility for setting auid Steve Grubb
2007-02-25 23:35   ` Matthew Booth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1172006965.3947.14.camel@localhost.localdomain \
    --to=mbooth@redhat.com \
    --cc=linux-audit@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox