On 12.12.2019 17:24, Stephen Smalley wrote: > On 12/11/19 3:36 PM, Andi Kleen wrote: >>>> In this circumstances CAP_SYS_PERFMON looks like smart balanced advancement that >>>> trade-offs between perf_events subsystem extensions, required level of control >>>> and configurability of perf_events, existing users adoption effort, and it brings >>>> security hardening benefits of decreasing attack surface for the existing users >>>> and use cases. >>> >>> I'm not 100% opposed to CAP_SYS_PERFMON. I am 100% opposed to new capabilities >>> that have a single use. Surely there are other CAP_SYS_ADMIN users that [cs]ould >>> be converted to CAP_SYS_PERFMON as well. If there is a class of system performance >>> privileged operations, say a dozen or so, you may have a viable argument. >> >> perf events is not a single use. It has a bazillion of sub functionalities, >> including hardware tracing, software tracing, pmu counters, software counters, >> uncore counters, break points and various other stuff in its PMU drivers. >> >> See it more as a whole quite heterogenous driver subsystem. >> >> I guess CAP_SYS_PERFMON is not a good name because perf is much more >> than just Perfmon. Perhaps call it CAP_SYS_PERF_EVENTS > > That seems misleading since it isn't being checked for all perf_events operations IIUC (CAP_SYS_ADMIN is still required for some?) and it is even more specialized than CAP_SYS_PERFMON, making it less likely that we could ever use this capability as a check for other kernel performance monitoring facilities beyond perf_events. > > I'm not as opposed to fine-grained capabilities as Casey is but I do recognize that there are a limited number of available bits (although we do have a fair number of unused ones currently given the extension to 64-bits) and that it would be easy to consume them all if we allocated one for every kernel feature. That said, this might be a sufficiently important use case to justify it. > > Obviously I'd encourage you to consider leveraging SELinux as well but I understand that you are looking for a solution that doesn't depend on a distro using a particular LSM or a particular policy. I will note that SELinux doesn't suffer from the limited bits problem because one can always define a new SELinux security class with its own access vector permissions bitmap, as has been done for the recently added LSM/SELinux perf_event hooks. > > I don't know who actually gets to decide when/if a new capability is allocated. Maybe Serge and/or James as capabilities and LSM maintainers. > > I have no objections to these patches from a SELinux POV. Stephen, thanks for meaningful input! ~Alexey