<div dir="ltr">hi,<br><div class="gmail_extra"><br><div class="gmail_quote">2015-08-27 13:38 GMT+02:00 John Crispin <span dir="ltr"><<a href="mailto:blogic@openwrt.org" target="_blank">blogic@openwrt.org</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=""><br>
<br>
On 27/08/2015 13:25, Etienne Champetier wrote:<br>
><br>
><br>
> 2015-08-27 12:18 GMT+02:00 John Crispin <<a href="mailto:blogic@openwrt.org">blogic@openwrt.org</a><br>
</span>> <mailto:<a href="mailto:blogic@openwrt.org">blogic@openwrt.org</a>>>:<br>
<span class="">><br>
><br>
><br>
>     On 26/08/2015 18:20, Etienne Champetier wrote:<br>
>     ><br>
>     ><br>
>     > 2015-08-26 15:48 GMT+02:00 John Crispin <<a href="mailto:blogic@openwrt.org">blogic@openwrt.org</a> <mailto:<a href="mailto:blogic@openwrt.org">blogic@openwrt.org</a>><br>
</span>>     > <mailto:<a href="mailto:blogic@openwrt.org">blogic@openwrt.org</a> <mailto:<a href="mailto:blogic@openwrt.org">blogic@openwrt.org</a>>>>:<br>
<div><div class="h5">>     ><br>
>     >     On 26/08/2015 01:00, Etienne CHAMPETIER wrote:<br>
>     >     > This patch series rework a bit ujail,<br>
>     >     > and add capabilities support to it<br>
>     ><br>
>     >     nice<br>
>     ><br>
>     >     ><br>
>     >     > Seccomp filter are very powerful but not totally generic,<br>
>     >     > each arch can have different set of syscalls,<br>
>     >     > each libc can use different syscall for the same function,<br>
>     >     > and seccomp isn't supported on all arch.<br>
>     >     ><br>
>     >     > Capabilities are more high level, but still can restrict<br>
>     >     > jail to a sane minimum of privileges.<br>
>     ><br>
>     >     ><br>
>     >     > Patch 4 is a bit big and i can split it if needed, just tell me how<br>
>     ><br>
>     >     will have a closer look next few days<br>
>     ><br>
>     > forgot to say it's tested on ar71xx with CC (and also on ubuntu 14.04)<br>
>     ><br>
>     >     there seem to be a way to escape from the rebind mount jail that QCA has<br>
>     >     found<br>
>     ><br>
>     > more than one ;) can you share? (with root rights you can kexec, mount<br>
>     > /dev, ...)<br>
><br>
>     well if you are root you are root and can delete the bootloader. the<br>
>     idea of the jail is that you are not root.<br>
><br>
><br>
> Totaly disagree on that.<br>
> Many core program need 1 or a few capabilities, but don't start if you<br>
> are not root<br>
> take for exemple busybox ntpd,<br>
> <a href="http://git.busybox.net/busybox/tree/networking/ntpd.c#n2122" rel="noreferrer" target="_blank">http://git.busybox.net/busybox/tree/networking/ntpd.c#n2122</a><br>
> i'm pretty sure it only need CAP_SYS_TIME, but it check for root rights :)<br>
><br>
> root give you 2 things:<br>
> all the capabilities,<br>
> read write access on root file<br>
> there is no uid==0 in the kernel, only capabilities check<br>
><br>
> If you drop all capabilities, root is a normal user,<br>
> with the exception that he is in general the owner of most or all the file<br>
> (that's when namespaces come into play)<br>
><br>
> For me the idea of the jail is to restrict the daemon as much as possible,<br>
> without patching it, so if it need to be root ...<br>
><br>
<br>
<br>
</div></div>we just need support for the USERNS. i think but there will always be<br>
apps that refuse to start if !root.<br>
<br>
i had already added !root support to ubus using ACLs. this allows us to<br>
run at least all the openwrt services in the jail as !root<br>
<br>
so lets assume that we can run the majority of apps as !root but i agree<br>
that for the left overs we can implement CAPS support and we also need<br>
CGROUPS support i think. i hjope that i have time at the end of the year<br>
or start of 2016 to add all these.<br>
<br>
i think that we should always try to run as !root and only use real root<br>
if there is no technical way to avoid this (and patching lots of<br>
services is not a solution, as in remove the root check form ntp)<br>
<span class=""><br>
<br>
><br>
>     i will prvide details later on<br>
><br>
> cool<br>
><br>
><br>
><br>
>     > that's why you really need to limit rights with capabilities drop or<br>
>     > seccomp filter<br>
>     > (i'm adding a vague warning in usage)<br>
><br>
>     why do you want to run a privileged user and restrict is perms rather<br>
>     than just use an unprivileged user ?<br>
><br>
> see comment before<br>
><br>
><br>
><br>
>     ><br>
>     ><br>
>     >     and i have not had the time yet to finish my jailfs module.<br>
>     ><br>
>     > with my patches you don't see all the bind mount anymore ("in the host"),<br>
>     > they are only in the jail mount namespace.<br>
>     ><br>
>     > to see the mounts inside the jail you can still do<br>
>     > cat /proc/<jailed process pid>/mounts<br>
><br>
>     we dont want rebind mounts at all, they were only an intermediate<br>
>     solution<br>
><br>
><br>
> why? what's the problem with rebind mounts?<br>
> It work for me TM :)<br>
><br>
<br>
</span>sure we were also able to boot linux using shell scripts but the current<br>
c  code is nicer i think. having a filesystem level implementation seems<br>
much more powerful and clean to me.<br>
<span class=""><br>
><br>
><br>
>     ><br>
>     >     it<br>
>     >     runs and loads, i can do mounts and access files inside them using<br>
>     >     normal shell calls. however if is point a jail instance at the<br>
>     >     mountpoint it oops horribly. i suspect that i am either using vfs wrong<br>
>     >     or am missing locking/ref-counting somewhere. i'll throw the code onto<br>
>     >     github later today or tomorrow and post the link. maybe someone with<br>
>     >     more knowledge of vfs can help fix it.<br>
>     ><br>
>     > what problem are you fixing with jailfs? (real question/to be sure there<br>
>     > is no simpler solution)<br>
>     ><br>
><br>
>     jailfs is similar overlayfs as it has a lower dir that we overlay but<br>
>     now with changes but with a set of filter rules ... consider it like a<br>
>     firewall for file i/o<br>
><br>
><br>
> My question is what features does jailfs provides that you can't do now?<br>
> I'm not writing that to criticize or discourage you, just want to know ;)<br>
<br>
</span>sure, what i would like to see added in the next months is<br>
<br>
* USERNS<br>
* jailfs<br>
* cgroups<br>
* CAPS (new on my list)<br>
<br>
and whatever else might be useful.<br></blockquote><div><br></div><div>Just some random stuffs:<br></div><div><br></div><div>-new in kernel 4.3: ambient capabilities (great explanation in the commits)<br><a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08">http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=58319057b7847667f0c9585b9de0e8932b0fdb08</a><br><a href="http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=746bf6d64275be0c65b0631d8a72b16f1454cfa1">http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=746bf6d64275be0c65b0631d8a72b16f1454cfa1</a><br></div><div>This allow to keep capabilities across execve, without being root,<br></div><div>so if i've understood it right, i can launch a program as nobody, give him CAP_NET_ADMIN, and this program can execve 'ip', and we can make it work \o/<br></div><div><br></div></div><div class="gmail_quote"><div>-userns are a bit more complicated to setup, but there is great exemples in <a href="https://github.com/netblue30/firejail">https://github.com/netblue30/firejail</a><br></div><div><br></div><div>-I'll definitly give jailfs a try, but since it's there to add security, it think it would be great to send it upstream for review before we use it for everyone<br></div><div><br>-I don't know the performance overhead of cgroup, but memory cgroup could be really great for "hungry" softwares like transmission<br><br></div><div>-And for caps, my patches should do the trick<br><br>-we should add an option to set PR_SET_NO_NEW_PRIVS (if we don't use seccomp),<br></div><div>another option to switch user,<br>another to launch with strace (/etc/init.d/<aaa> strace),<br></div><div>(and also we need to write the glue code to use all this from the init scripts)<br></div><div><br></div><div>Good night<br></div><div>Etienne<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class=""><font color="#888888"><br>
        John<br>
</font></span><div class=""><div class="h5"><br>
<br>
><br>
> In any case thanks for your work<br>
><br>
> Etienne<br>
</div></div></blockquote></div><br></div></div>