watch dir problem
Timothy R. Chavez
tinytim at us.ibm.com
Thu May 26 19:52:53 UTC 2005
On Thursday 26 May 2005 14:46, Timothy R. Chavez wrote:
> On Thursday 26 May 2005 14:39, Steve Grubb wrote:
> > Hello,
> >
> > I got a capture of audit doing a log rotate using:
> >
> > auditctl -w /var/log -k dir -p rwea
> >
> > type=SYSCALL msg=audit(05/26/05 15:24:55.023:13588534) : arch=i386
> > syscall=rename success=yes exit=0 a0=94bc008 a1=94bc028 a2=8051254 a3=8054e00
> > items=2 pid=1716 auid=unknown(4294967295) uid=root gid=root euid=root
> > suid=root fsuid=root egid=root sgid=root fsgid=root comm=auditd
> > exe=/sbin/auditd
> > type=FS_WATCH msg=audit(05/26/05 15:24:55.023:13588534) : watch=log
> > filterkey=dir perm=read,write,exec,append perm_mask=exec inode=29249
> > inode_uid=root inode_gid=root inode_dev=03:07 inode_rdev=00:00
> > type=FS_WATCH msg=audit(05/26/05 15:24:55.023:13588534) : watch=log
> > filterkey=dir perm=read,write,exec,append perm_mask=exec inode=29249
> > inode_uid=root inode_gid=root inode_dev=03:07 inode_rdev=00:00
> > type=PATH msg=audit(05/26/05 15:24:55.023:13588534) : item=0
> > name=/var/log/audit/audit.log inode=29307 dev=03:07 mode=dir,750 ouid=root
> > ogid=root rdev=00:00
> > type=PATH msg=audit(05/26/05 15:24:55.023:13588534) : item=1
> > name=/var/log/audit/audit.log.1 inode=29307 dev=03:07 mode=dir,750 ouid=root
> > ogid=root rdev=00:00
> >
> > The thing I'm wondering about is the mode not matching the object in PATH. The
> > watch is on a dir, but the item listed is not a dir, its a file with access
> > perms of 0640.
>
> Is the inode being reported the inode of audit/ or audit.log?
>
I suspect that it is. The way that path is being formed is from
sys_rename()->do_rename() right??
> static inline int do_rename(const char * oldname, const char * newname)
> {
> int error = 0;
> struct dentry * old_dir, * new_dir;
> struct dentry * old_dentry, *new_dentry;
> struct dentry * trap;
> struct nameidata oldnd, newnd;
>
> error = path_lookup(oldname, LOOKUP_PARENT, &oldnd);
> if (error)
> goto exit;
>
> error = path_lookup(newname, LOOKUP_PARENT, &newnd);
> if (error)
> goto exit1;
If this is true, as you can see, we only ever do a lookup on our parent. So the
inode information (and mode) will be for our parent.
If you were to do a "unlink" you'd see something similar in that the inode reported
with the path is the inode of it's parent directory.
This is my theory, at least.
-tim
More information about the Linux-audit
mailing list