We have an ongoing effort in neutron to move to rootwrap-daemon. https://review.openstack.org/#/q/status:open+project:openstack/neutron+branch:master+topic:bp/rootwrap-daemon-mode,n,z
To speed up multiple system calls, and be able to spawn daemons inside namespaces. I have to read a bit what are the good & bad points of privsep. The advantage of rootwrap-daemon, is that we don’t need to change all our networking libraries across neutron, and we kill the sudo/rootwrap spawn for every call, yet keeping the rootwrap permission granularity. Miguel Ángel Ajo On Friday, 13 de February de 2015 at 10:54, Angus Lees wrote: > On Fri Feb 13 2015 at 5:45:36 PM Eric Windisch <e...@windisch.us > (mailto:e...@windisch.us)> wrote: > > ᐧ > > > > > > from neutron.agent.privileged.commands import ip_lib as priv_ip > > > def foo(): > > > # Need to create a new veth interface pair - that usually > > > requires root/NET_ADMIN > > > priv_ip.CreateLink('veth', 'veth0', peer='veth1') > > > > > > Because we now have elevated privileges directly (on the privileged > > > daemon side) without having to shell out through sudo, we can do all > > > sorts of nicer things like just using netlink directly to configure > > > networking. This avoids the overhead of executing subcommands, the > > > ugliness (and danger) of generating command lines and regex parsing > > > output, and make us less reliant on specific versions of command line > > > tools (since the kernel API should be very stable). > > > > One of the advantages of spawning a new process is being able to use flags > > to clone(2) and to set capabilities. This basically means to create > > containers, by some definition. Anything you have in a "privileged daemon" > > or privileged process ideally should reduce its privilege set for any > > operation it performs. That might mean it clones itself and executes > > Python, or it may execvp an executable, but either way, the new process > > would have less-than-full-privilege. > > > > For instance, writing a file might require root access, but does not need > > the ability to load kernel modules. Changing network interfaces does not > > need access to the filesystem, no more than changes to the filesystem needs > > access to the network. The capabilities and namespaces mechanisms resolve > > these security conundrums and simplify principle of least privilege. > > Agreed wholeheartedly, and I'd appreciate your thoughts on how I'm using > capabilities in this change. The privsep daemon limits itself to a > particular set of capabilities (and drops root). The assumption is that most > OpenStack services commonly need the same small set of capabilities to > perform their duties (neutron -> net_admin+sys_admin for example), so it > makes sense to reuse the same privileged process. > > If we have a single service that somehow needs to frequently use a broad > swathe of capabilities then we might want to break it up further somehow > between the different internal aspects (multiple privsep helpers?) - but is > there such a case? There's also no problems with mixing privsep for > frequent operations with the existing sudo/rootwrap approach for rare/awkward > cases. > > - Gus > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > (mailto:openstack-dev-requ...@lists.openstack.org?subject:unsubscribe) > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > >
__________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev