I don't seem to get the filtering on auid to work ...
I am attaching a test case so you can see how I am testing this ..
I am on kernel.65 and audit 0.9.12
Test strategy:
1- add filter rules for a user
2- add a watch on a file
3- create two temp users (my users have to be in Wheel trusted group in
4- order to ssh into the system .. may not apply to everybody).
5- spawn ssh session user1@localhost and touch the watched file
6- Remove the file(so other user can touch it again)
7- spawn ssh session user2@localhost and touch the watched file
8- stop auditd and copy the audit.log to a temp file (/tmp/loginuid_logs)
For Step 1 above, I tried the following scenarios:
auditctl -a watch,always -F auid=uid1
auditctl -a watch,never -F auid!=uid1
or
auditctl -a watch,always -F auid=uid1
auditctl -a watch,never -F auid=uid2
Neither seems to work .. in the log I still see watch records for open
on the watched file generated by both users!!
- Loulwa
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/utsname.h>
int uid1=580;
int uid2=650;
char user1[] = "tmp-user1";
char user2[] = "tmp-user2";
char* password = "eal";
char* encryptedpassword = "42VmxaOByKwlA";
static const char* tempname = "/tmp/testXXXXXX\0";
int rc;
int fd1, fd2; /* file descriptor */
char script_cmd1[1000], script_cmd2[1000], exec_cmd[1000];
char *filename1, *filename2;
int main(int ac, char **av)
{
char command[256];
system("/etc/rc.d/init.d/auditd stop");
system("rm -f /var/log/audit/audit.log");
system("rm /tmp/loginuid_logs -f");
system("/etc/rc.d/init.d/auditd start");
/* Create expect script file to execute ftp session */
filename1 = (char *) malloc(strlen(tempname));
strcpy(filename1, tempname);
if ((fd1 = mkstemp(filename1)) == -1) {
printf("File creation error\n");
}
filename2 = (char *) malloc(strlen(tempname));
strcpy(filename2, tempname);
if ((fd2 = mkstemp(filename2)) == -1) {
printf("File creation error\n");
}
/* create test users */
sprintf(command, "/usr/sbin/useradd -u %d -m -G wheel -p %s
%s",uid1,encryptedpassword,user1);
system(command);
sprintf(command, "/usr/sbin/useradd -u %d -m -G wheel -p %s
%s",uid2,encryptedpassword,user2);
system(command);
/* insert watches and filters on loginuid "uid1" */
system("auditctl -w /tmp/file1 -k loginuid-key");
sprintf(command, "auditctl -a watch,always -F auid=%d", uid1);
system(command);
sprintf(command, "auditctl -a watch,never -F auid!=%d", uid1);
//sprintf(command, "auditctl -a watch,never -F auid=%d", uid2);
system(command);
sprintf(script_cmd1, "expect -c \"spawn /usr/bin/ssh %s@localhost
\nsleep 1 \nexpect -re \\\"password: \\\" \nsleep 1 \nsend
\\\"%s\\r\\n\\\" \nsleep 1 \nexpect -re \\\"> \\\" \nsleep 1 \nsend
\\\"touch /tmp/file1\\r\\n\\\" \nsleep 1 \nsend \\\"exit\\\"
\nsend_user \\\"exit\\n\\\"\"", user1, password);
sprintf(script_cmd2, "expect -c \"spawn /usr/bin/ssh %s@localhost
\nsleep 1 \nexpect -re \\\"password: \\\" \nsleep 1 \nsend
\\\"%s\\r\\n\\\" \nsleep 1 \nexpect -re \\\"> \\\" \nsleep 1 \nsend
\\\"touch /tmp/file1\\r\\n\\\" \nsleep 1 \nsend \\\"exit\\\"
\nsend_user \\\"exit\\n\\\"\"", user2, password);
write(fd1, script_cmd1, strlen(script_cmd1));
fchmod(fd1, S_IRWXU | S_IRWXG | S_IRWXO);
close(fd1);
sprintf(exec_cmd, "/bin/sh -f %s", filename1);
system(exec_cmd);
system("rm -f /tmp/file1");
sleep(1);
write(fd2, script_cmd2, strlen(script_cmd2));
fchmod(fd2, S_IRWXU | S_IRWXG | S_IRWXO);
close(fd2);
sprintf(exec_cmd, "/bin/sh -f %s", filename2);
system(exec_cmd);
/* Stop auditd to prevent more log entries. */
sleep(2);
system("auditctl -W /tmp/file1");
system("/etc/rc.d/init.d/auditd stop");
system("cat /var/log/audit/audit.log >> /tmp/loginuid_logs");
system("rm -f /tmp/file1");
/* cleanup users and files */
if (filename1 != NULL) {
unlink(filename1);
free(filename1);
}
if (filename2 != NULL) {
unlink(filename2);
free(filename2);
}
sprintf(command, "/usr/sbin/userdel -r %s", user1);
system(command);
sprintf(command, "/usr/sbin/userdel -r %s", user2);
system(command);
}