<div dir="ltr">I am running all commands as a non-root user. Here are the two commands I run:<div><br></div><div>strace ./toybox unshare --mount --map-root-user --user /bin/bash -c 'echo' 2>&1 | tee /tmp/user.txt</div>strace ./toybox unshare --mount --map-root-user /bin/bash -c 'echo' 2>&1 | tee /tmp/no_user.txt<div>strace unshare --mount --map-root-user /bin/bash -c 'echo' 2>&1 | tee /tmp/no_user_linux.txt<br><div><br></div><div>Here are how the strace's approximately look like. I do not need sudo to run these commands in my environment.</div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 10, 2024 at 7:56 AM Rob Landley <<a href="mailto:rob@landley.net">rob@landley.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Ok, cycling back to this...<br>
<br>
On 5/2/24 21:51, enh wrote:<br>
>> > it seems like -r _doesn't_ actually imply -U in practice (and they<br>
>> > seemed to have strace output to prove it).<br>
>><br>
>> So... should it?<br>
> <br>
> i think so? i have no idea about any of this, but<br>
> <a href="https://man7.org/linux/man-pages/man1/unshare.1.html" rel="noreferrer" target="_blank">https://man7.org/linux/man-pages/man1/unshare.1.html</a> says<br>
> <br>
>        -r, --map-root-user<br>
>            Run the program only after the current effective user and<br>
>            group IDs have been mapped to the superuser UID and GID in<br>
>            the newly created user namespace. This makes it possible to<br>
>            conveniently gain capabilities needed to manage various<br>
>            aspects of the newly created namespaces (such as configuring<br>
>            interfaces in the network namespace or mounting filesystems<br>
>            in the mount namespace) even when run unprivileged. As a mere<br>
>            convenience feature, it does not support more sophisticated<br>
>            use cases, such as mapping multiple ranges of UIDs and GIDs.<br>
>            This option implies --setgroups=deny and --user. This option<br>
>            is equivalent to --map-user=0 --map-group=0.<br>
> <br>
> which sounds like it supports the toybox documentation rather than the<br>
> toybox source?<br>
> <br>
>> What did they try to do, and what did they _want_ to happen?<br>
> <br>
> unshare --mount --map-root-user /bin/sh -c "mount --bind $A $B"<br>
<br>
Running that as my normal user gave EPERM on the unshare(CLONE_NEWNS) which is<br>
the reason I haven't poked at this more. (To be useful, it seems like it<br>
probably needs to be setuid and then drop permissions after unsharing stuff, and<br>
I need to come up to speed on the security implications of that and possibly<br>
write a "contain" command with as little novelty as possible. Which is not a can<br>
of worms I want to open without a clear desk...)<br>
<br>
Running it under sudo I got:<br>
<br>
openat(AT_FDCWD, "/proc/self/setgroups", O_WRONLY) = 3<br>
write(3, "deny", 4)                     = -1 EPERM (Operation not permitted)<br>
<br>
> they looked at strace for toybox and saw<br>
> <br>
> unshare(CLONE_NEWNS)                    = -1 EPERM (Operation not permitted)<br>
> <br>
> but for the util-linux one they saw<br>
> <br>
> unshare(CLONE_NEWNS|CLONE_NEWUSER)      = 0<br>
<br>
Are they root or a normal user? Because adding -U to the above command line I got:<br>
<br>
geteuid()                               = 1000<br>
getegid()                               = 1000<br>
unshare(CLONE_NEWNS|CLONE_NEWUSER)      = -1 EPERM (Operation not permitted)<br>
<br>
But with sudo, that succeeded and adding an ls -l to the bash command yes it did<br>
the bind mount, which is gone again when it exits.<br>
<br>
>> The "22.04" means it came out two years and one month ago, and that's what<br>
>> they're migrating me TO. So, you know, I can presumably feel less bad about my<br>
>> laptop...<br>
> <br>
> (to be fair, until _last week_ that was the current LTS release :-)<br>
> but, yeah, odd timing unless they deliberately like to be on the<br>
> previous LTS release! i'll throw no stones as long as i'm living so<br>
> close to the Android build server glass house though...)<br>
<br>
Got about half my laptop tabs closed so far! Working towards a reboot...<br>
<br>
Rob<br>
</blockquote></div>