multiuser disabled - fail more gracefully

Kazuo Kuroi kazuo at irixnet.org
Tue Mar 9 23:43:46 AWST 2021


Hello Geoff,

That's a good suggestion. but I suggest that if your code can't run on 
UNIX platforms that it would need an include guard against it. Matt has 
taken a lot of time to ensure this not only runs on proprietary old C 
compilers, but also on older OSes where OpenSSH is not a good option.

I only express personal hesitancy here because I had to, along with 
another dev, meddle greatly in svr-chansession to allow it to run on 
IRIX properly - and I'm mildly concerned your proposed change could 
introduce linuxisms if it's not include guarded.

I would thus ask that any changes are first included on a Linux include 
guard, and then we could test it on other platforms like IRIX or AIX 
before we remove it.

Just my .02 as the sorta-kinda maintainer for IRIX.

- Kaz Kuroi

On 3/9/2021 5:18 AM, Geoff Winkless wrote:
> Hi
>
> I appreciate that there's an compile-time option
> DROPBEAR_SVR_MULTIUSER=0 to skip the setuid/gid sections, but can I
> make a humble suggestion that we fail gracefully if someone* runs a
> dropbear that _doesn't_ have that option configured on a linux kernel
> that's compiled single-user.
>
> *Not me, of course, I would obviously never do anything that stupid...
>
> The idea being, if you're running as root and logging in as root, it
> shouldn't matter if the setuid stuff fails, so for example In
> svr-chansession.c, something like:
>
>          /* We can only change uid/gid as root ... */
>          if (getuid() == 0) {
>
> -                if ((setgid(ses.authstate.pw_gid) < 0) ||
> +                if ((setgid(ses.authstate.pw_gid) < 0 &&
> ses.authstate.pw_uid != 0) ||
>                         (initgroups(ses.authstate.pw_name,
>                                                  ses.authstate.pw_gid) < 0)) {
>                          dropbear_exit("Error changing user group");
>                  }
> -                if (setuid(ses.authstate.pw_uid) < 0 &&
> ses.authstate.pw_uid != 0) {
> +                if (setuid(ses.authstate.pw_uid) < 0 &&
> ses.authstate.pw_uid != 0) {
>                         dropbear_exit("Error changing user");
>                  }
>          } else {
>
> There are a few other places (probably everywhere where SVR_MULTIUSER
> is checked, I suppose) where the same principle could be applied.
>
> Geoff


More information about the Dropbear mailing list