[Pkg-shadow-devel] audit support

Nicolas François nicolas.francois at centraliens.net
Wed Sep 3 13:08:17 UTC 2008


Hello,

Thanks for your answers.

I found some issues in userdel.c (see attached patch).

In a future version, I will change these 1 and 0 results to
SHADOW_AUDIT_SUCCESS and SHADOW_AUDIT_FAILURE.

On Tue, Sep 02, 2008 at 08:14:59PM -0400, sgrubb at redhat.com wrote:
> On Tuesday 02 September 2008 18:11:01 Nicolas François wrote:
> > IIRC, AUDIT_ADD_GROUP/AUDIT_ADD_USER were not defined in some previous
> > versions of libaudit.
> 
> True. But these defines go way back. All the way to audit-1.0.5. That was Oct 
> 2005.
> 
> 
> > Do you think it might be useful to redefine it to AUDIT_USER_CHAUTHTOK if
> > configure detects such case?
> 
> The problem is that AUDIT_USER_CHAUTHTOK means that the password or 
> credentials was updated. I suppose you could allow that. But its clearly 
> wrong.

OK. Then I will just fail in configure if these constants are not defined.

Note that AUDIT_USER_CHAUTHTOK is still used wrongly in groupmod and
usermod (at least).

For these two, I think I can find the right audit type in some cases, but
in other cases, when there is a change but not addition or removal of an
account, there might be nothing to log (e.g. the current "changing
comment" in usermod.c)

> > I've also added some log in case of *_unlock() failures (this means the
> > system is left in an inconsistent way).
> 
> What the audit system is intended to record is the willful change of user 
> information. If a failure is due to something the user did, we want to record 
> it. If there is a resource problem that the user has no influence over like 
> malloc failing, we do not want to cause the user to be singled out in the 
> audit logs. If however, they are doing something they are not allowed to do, 
> we want it recorded. If we have started modifying files and the admin will 
> have to "undo" or correct something, we want that recorded.
> 
> 
> > Note that "adding SELinux user mapping" in useradd.c is not part of
> > upstream shadow. It might be easier for your later maintenance to change
> > the audit_logger in the patch that introduce this.
> 
> Ok. Any chance of merging that patch too? :)

It's planned, but more complex for me than the audit logging.

> SE Linux introduced the notion 
> of roles around 2 years ago. When a user is created, he needs to be mapped to 
> a default role befpre they ever try to log in. Maybe this can be conditional 
> in configure as --with-seinux? We get beat up sometimes for selinux patches 
> being hard to find and other distros not knowing everything they needed to 
> apply. It helps everybody if its all out in the open.
> 
> 
> > I have some questions regarding the type to use in some cases:
> > (AUDIT_ADD_GROUP, AUDIT_ADD_USER, AUDIT_USER_CHAUTHTOK?)
> >  * "changing user defaults" message in useradd.c?
> 
> I suppose there is AUDIT_USYS_CONFIG. But this is usually associated with hw 
> clock changes. We could change it to that if you want. I was primarily 
> noticing that rpm was adding users & groups to systems and it was not being 
> recorded as such.

This one is just to notify that /etc/default/useradd was changed.
(no changes in the passwd, shadow, group or gshadow databases)
So AUDIT_USYS_CONFIG looks better to me.

> >    AUDIT_USER_CHAUTHTOK or no audit log
> >  * "adding user to group" in useradd
> >    You changed it to AUDIT_ADD_USER, but it is a modification in the group
> >    file.
> 
> I was thinking that was a failure in the act of adding a user. If its adding a 
> user to an existing group, then its not adding a group. If you see a place 
> where it was adding a new group, then we should record that as adding a 
> group. Adding a user to a group is still adding a user - but modifying a 
> group.

OK. I will check. It might be that it will cancel the addition of the
user, and then AUDIT_ADD_USER is the right type.

> >  * gr_unlock() failure in useradd
> >    (i.e. the user was added, and the group file was possibly changed, and
> >    there were a later failure when the group file was unlocked)
> 
> This is sufficient to call adding a user if a group was not added. If a group 
> was added, and it failed we need to record that.

I read the second sentence as "If a group was intended to be added, and it
failed..."
right?

> > Is there a need to report to audit if an error is detected before any
> > changes are committed to the user/group databases (and before the change
> > is reported to audit)?
> 
> Only permission problems or things that are the user's fault. If malloc fails 
> or something beyond the user's control, we don't need to blame them for it 
> until files are starting to be modified. At that point, we need to have a 
> success/fail event since things have been changed and the admin may need to 
> review the state of affairs.
> 
> 
> > Here are some examples:
> >  + *_lock() failures
> >    Those failures should be caused by another account management program
> >    still running.
> 
> Not really if no file has been changed and the lock failure is not due to 
> permission problems.

OK. I will remove the failure logging (unless the intend to add a
group/user was logged before).

> >  + useradd <invalid user name>
> >  + useradd <already existing user>
> 
> Not really. No change to any file was made. If we have an audit message 
> already leave it. If we don't have one, no need to add it since this has been 
> through CAPP and LSPP evals.

OK. No changes.

> One thing I will mention is that long term, i think shadow-utils needs some 
> work consolidating logging and audit.

I fully agree with that.
Would it make sense to change the libaudit logging to:
 * After options processing
   => log the intended actions
      (e.g. useradd will (it depends on the configuration/options)
      probably add an user and a group => "adding user" + "adding group",
      result=1)
      (or should I explicitly log "intent to add user")
 * On failure (there is usually a fail_exit function)
   => log which action failed
      (e.g. "adding user" or "adding group", or both failed, result=0)
 * On success
   => nothing (the intent was logged, an no failures)
      (or should I explicitly log "user added")
 * Log failures that (may) require admin action
   e.g. the user was successfully removed, but we could not remove the
   home directory.

For syslog logs, I would also like to define a logging policy
 * Log changes to system files
 * Log failures that result in or indicate inconsistent system files
   (e.g. failure to unlock /etc/passwd, failure to open /etc/passwd)
(* Log some attempts to change system files)

> Many are identical.

You mean syslog and libaudit receive the same log?
Or some libaudit logs cannot be differentiated?

Should I avoid these two cases?

Best Regards,
-- 
Nekral
-------------- next part --------------
diff -u src/userdel.c src/userdel.c
--- src/userdel.c	2008-09-02 09:03:20.000000000 -0400
+++ src/userdel.c	(copie de travail)
@@ -172,7 +172,7 @@
 #ifdef WITH_AUDIT
 		audit_logger (AUDIT_DEL_USER, Prog,
 			      "deleting user from group", user_name, user_id,
-			      0);
+			      1);
 #endif
 		SYSLOG ((LOG_INFO, "delete `%s' from group `%s'\n",
 			 user_name, ngrp->gr_name));
@@ -272,7 +272,7 @@
 #ifdef WITH_AUDIT
 		audit_logger (AUDIT_DEL_USER, Prog,
 			      "deleting user from shadow group", user_name,
-			      user_id, 0);
+			      user_id, 1);
 #endif
 		SYSLOG ((LOG_INFO, "delete `%s' from shadow group `%s'\n",
 			 user_name, nsgrp->sg_name));
@@ -798,16 +798,13 @@
 			fprintf (stderr,
 				 _("%s: error removing directory %s\n"),
 				 Prog, user_home);
-#ifdef WITH_AUDIT
-			audit_logger (AUDIT_DEL_USER, Prog,
-				      "deleting home directory", user_name,
-				      user_id, 1);
-#endif
 			errors++;
 		}
 #ifdef WITH_AUDIT
+		else {
 		audit_logger (AUDIT_DEL_USER, Prog,
 			      "deleting home directory", user_name, user_id, 1);
+		}
 #endif
 	}
 


More information about the Pkg-shadow-devel mailing list