James Carlson wrote:
> I'm working on the NWAM 0.5 ("picea") updates, and I've run into a
> security-related issue on which I need some advice and/or comments.
> 
> The current NWAM 0 code in Nevada looks through getutxent(3C) for an
> entry with ut_line == "console" and ut_host == ":0".  The ut_user for
> that entry is assumed to be the console user, who is authorized to
> make changes to the network.  It uses zenity to get in touch with that
> user.
> 
> That code is all being ripped out, and replaced with a GUI that is
> launched with the logged in user's ID, and that uses a door to
> communicate with nwamd.
> 
> This means that nwamd must now determine (from a door call) whether
> the caller has the right to change network parameters (such as setting
> up interfaces, tearing them down, selecting wireless access points,
> and so on).
> 
> I could just scan getutxent as the old code did, but this seems really
> ungood.  An alternative would be to call getuseruid(3SECDB), match out
> the "profiles" keyword, separate out the profiles list, call
> getprofnam(3SECDB) on each one, match out the "privs" keyword, compute
> the privileges with priv_str_to_set(3C), and finally check for
> PRIV_SYS_NET_CONFIG.
> 
> That seems like a lot of busy work, and I'm not sure that doing this
> is entirely "right" from a security perspective.
> 
> Are there other alternatives that I'm missing?  Perhaps something
> simpler?

If you want to determine whether the _user_ has the right to do 
something, the usual approach is to check for an authorization rather 
than a privilege. You would use chkauthattr() for that.

Krishna Yenduri wrote:
>  You can use the following calls to do that -
>     door_ucred(&cred);
>     ucred_getprivset(cred, pset);
>     priv_ismember(pset, PRIV_SYS_NET_CONFIG);
> 
>  nscd code is a good example.

That will tell you if the calling _process_ has this privilege, but if I 
understand the situation correctly, we already know that it does not. 
The proposal above was to examine the user's profile entries to 
determine if he could potentially run a process with this privilege, but 
that's not consistent with the way we usually determine the rights a 
user has.

This is exactly the problem that authorizations were designed to solve.

        Scott



Reply via email to