You've found an unveil bug in su.  It needs to allow read access to
/etc/shells also, for this specific !altshell + asme + ruid case.

Index: su.c
===================================================================
RCS file: /cvs/src/usr.bin/su/su.c,v
retrieving revision 1.71
diff -u -p -u -r1.71 su.c
--- su.c        23 Aug 2018 16:52:13 -0000      1.71
+++ su.c        20 Oct 2018 16:47:19 -0000
@@ -164,6 +164,8 @@ main(int argc, char **argv)
                err(1, "unveil");
        if (unveil(_PATH_AUTHPROGDIR, "x") == -1)
                err(1, "unveil");
+       if (unveil(_PATH_SHELLS, "r") == -1)
+               err(1, "unveil");
 
        for (;;) {
                /* get target user, default to root unless in -L mode */



> Today I upgraded my desktop PC from OpenBSD amd64 6.3 to 6.4.
> 
> Up to 6.3 I was able to simply execute "su -m" to become superuser
> while keeping all my enviroment. Now under 6.4 I'm no longer able to
> do it:
> 
> casa:/home/giannici> su -m
> Password:
> su: permission denied (shell).
> 
> 
> In the man page of su I see "As a security precaution, if the target
> user's shell is a non-standard shell (as defined by getusershell(3))
> and the caller's real UID is non-zero, su will fail.".
> 
> But here is the output of "/etc/shells":
> 
> casa:/home/giannici> cat /etc/shells
> #       $OpenBSD: shells,v 1.8 2009/02/14 17:06:40 sobrado Exp $
> #
> # list of acceptable shells for chpass(1).
> # ftpd(8) will not allow users to connect who are not using
> # one of these shells, unless the user is listed in /etc/ftpchroot.
> /bin/sh
> /bin/csh
> /bin/ksh
> /usr/local/bin/bash
> /usr/local/bin/tcsh
> 
> And here is the first line of vipw:
> 
> root:$2b$XXXXXXXXXXXXXXXXSomeothercharacters:0:0:daemon:0:0:Charlie
> &:/root:/bin/ksh
> 
> 
> Why I can do "su" but I cannot do "su -m" anymore?
> 
> Thanks.
> 

Reply via email to