Re: [PATCH bpf-next] bpf, capabilities: introduce CAP_BPF
From: Steven Rostedt <rostedt@goodmis.org>
Date: 2019-08-28 00:44:37
Also in:
bpf, linux-security-module, netdev
On Tue, 27 Aug 2019 16:34:47 -0700 Andy Lutomirski [off-list ref] wrote:
quoted
quoted
CAP_TRACING does not override normal permissions on sysfs or debugfs. This means that, unless a new interface for programming kprobes and such is added, it does not directly allow use of kprobes.kprobes can be created in the tracefs filesystem (which is separate from debugfs, tracefs just gets automatically mounted in /sys/kernel/debug/tracing when debugfs is mounted) from the kprobe_events file. /sys/kernel/tracing is just the tracefs directory without debugfs, and was created specifically to allow tracing to be access without opening up the can of worms in debugfs.I think that, in principle, CAP_TRACING should allow this, but I'm not sure how to achieve that. I suppose we could set up inode_operations.permission on tracefs, but what exactly would it do? Would it be just like generic_permission() except that it would look at CAP_TRACING instead of CAP_DAC_OVERRIDE? That is, you can use tracefs if you have CAP_TRACING *or* acl access? Or would it be: int tracing_permission(struct inode *inode, int mask) { if (!capable(CAP_TRACING)) return -EPERM; return generic_permission(inode, mask); }
Perhaps we should make a group for it?
Which would mean that you need ACL *and* CAP_TRACING, so administrators would change the mode to 777. That's a bit scary. And this still doesn't let people even *find* tracefs, since it's hidden in debugfs. So maybe make CAP_TRACING override ACLs but also add /sys/fs/tracing and mount tracefs there, too, so that regular users can at least find the mountpoint.
I think you missed what I said. It's not hidden in /sys/kernel/debug. If you enable tracefs, you have /sys/kernel/tracing created, and is completely separate from debugfs. I only have it *also* automatically mounted to /sys/kernel/debug/tracing for backward compatibility reasons, as older versions of trace-cmd will only mount debugfs (as root), and expect to find it there. mount -t tracefs nodev /sys/kernel/tracing -- Steve
quoted
Should we allow CAP_TRACING access to /proc/kallsyms? as it is helpful to convert perf and trace-cmd's function pointers into names. Once you allow tracing of the kernel, hiding /proc/kallsyms is pretty useless.I think we should.