Re: [PATCH v2] autofs-5.1.3 - fix ordering of seteuid/setegid in do_spawn

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19/10/17 10:20, Jeff Mahoney wrote:
> I wondered that too but decided against it since it’s happening with root privs anyway.

Right, it's probably not a problem, lets go with it how it is and see.

Whether to continue if seteuid() fails is a good question.
The assumption is it always succeeds but I guess it might not.

It probably shouldn't continue because if automounts in a dependent path
can't be mounted (via the open()) then the requested mount can't work
properly.

> 
> -Jeff
> 
> --
> Jeff Mahoney
> (apologies for the top post -- from my mobile)
> 
>> On Oct 18, 2017, at 10:07 PM, Ian Kent <raven@xxxxxxxxxx> wrote:
>>
>>> On 19/10/17 05:12, Jeff Mahoney wrote:
>>> In do_spawn, We call seteuid() prior to calling setegid() which means
>>> that, when we're using an unprivileged uid, we won't have permissions
>>> to set the effective group anymore.
>>>
>>> We also don't touch the group memberships so the permissions used to
>>> open the directory will will include all of root's supplementary groups
>>> and none of the user's.
>>>
>>> This patch reverses the ordering and uses initgroups() to reset the
>>> supplementary groups to the unprivileged user's groups.
>>>
>>> Signed-off-by: Jeff Mahoney <jeffm@xxxxxxxx>
>>> ---
>>> daemon/spawn.c | 15 +++++++++++++--
>>> 1 file changed, 13 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/daemon/spawn.c b/daemon/spawn.c
>>> index c640d97..62e9f02 100644
>>> --- a/daemon/spawn.c
>>> +++ b/daemon/spawn.c
>>> @@ -20,6 +20,7 @@
>>> #include <string.h>
>>> #include <sys/types.h>
>>> #include <dirent.h>
>>> +#include <grp.h>
>>> #include <time.h>
>>> #include <poll.h>
>>> #include <sys/wait.h>
>>> @@ -195,8 +196,18 @@ static int do_spawn(unsigned logopt, unsigned int wait,
>>>             * program group to trigger mount
>>>             */
>>>            if (euid) {
>>> -                seteuid(euid);
>>> -                setegid(egid);
>>> +                if (initgroups(tsv->user, egid) == -1)
>>
>> LOL, you spotted that one.
>>
>> I was wondering if the groups need to be restored after the open() ....
>> before the mount is executed.
>>
>>> +                    fprintf(stderr,
>>> +                        "warning: initgroups: %s\n",
>>> +                        strerror(errno));
>>> +                if (setegid(egid) == -1)
>>> +                    fprintf(stderr,
>>> +                        "warning: setegid: %s\n",
>>> +                        strerror(errno));
>>> +                if (seteuid(euid) == -1)
>>> +                    fprintf(stderr,
>>> +                        "warning: seteuid: %s\n",
>>> +                        strerror(errno));
>>>            }
>>>            setpgrp();
>>>
>>>
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe autofs" in
>>>
>>
>>
> 
> --
> To unsubscribe from this list: send the line "unsubscribe autofs" in
> 

--
To unsubscribe from this list: send the line "unsubscribe autofs" in



[Index of Archives]     [Linux Filesystem Development]     [Linux Ext4]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux