[Pkg-shadow-devel] Bug#352494: passwd: confusing error message if /proc is not found

Nicolas François nicolas.francois at centraliens.net
Mon Feb 13 00:35:19 UTC 2006


Hi,

Thanks for your look at the patch.

On Mon, Feb 13, 2006 at 09:20:29AM +1100, Russell Coker wrote:
> On Monday 13 February 2006 06:12, Nicolas François <nekral.lists at gmail.com> 
> wrote:
> 
> The patch looks incorrect in terms of passwd.c and chage.c.
> 
> SE Linux is a second level of security, so all the Unix permission checks (IE 
> the traditional use of amroot) must be used in addition to the SE Linux 
> checks.  But the use of is_selinux_enabled() looks OK.

In chage, amroot is used to give more privilegdes.
On non SELinux systems, amroot = (ruid == 0)

On SELinux systems (i.e. when is_selinux_enabled()>0), I thought we had to
restrict even more, thus:
amroot = (ruid == 0);
if (amroot && is_selinux_enabled () > 0)
    amroot = (selinux_check_passwd_access (PASSWD__ROOTOK) == 0);



For passwd, only root can change other users' password (on non SELinux
systems)
if (!amroot && pw->pw_uid != getuid ()) {
    exit(1);
}

When compiled with SELINUX support, I thought this could be correct:
If selinux is not enabled, exit in the same situations.
If selinux is enabled, exit if the user tries to change another user's
password and the selinux_check_passwd_access test fails.

if (   (!(is_selinux_enabled() > 0)
        && (pw->pw_uid != getuid ())
        && !amroot)
    || ((is_selinux_enabled() > 0)
        && (pw->pw_uid != getuid ())
        && (selinux_check_passwd_access(PASSWD__PASSWD) !=0)
/* Sould it be:
        && (!amroot || (selinux_check_passwd_access(PASSWD__PASSWD) !=0))
*/
   ) {
    exit(1);
}

Thanks for your time,
-- 
Nekral




More information about the Pkg-shadow-devel mailing list