On 6/5/2019 9:56 AM, David Howells wrote: > Casey Schaufler <casey@xxxxxxxxxxxxxxxx> wrote: > >> YES! > I'm trying to decide if that's fervour or irritation at this point ;-) I think I finally got the point that the underlying mechanism, direct or indirect, isn't the issue. It's the end result that matters. That makes me happier. >> And it would be really great if you put some thought into what >> a rational model would be for UID based controls, too. > I have put some thought into it, but I don't see a single rational model. It > depends very much on the situation. Right. You're mixing the kind of things that can generate events, and that makes having a single policy difficult. > In any case, that's what I was referring to when I said I might need to call > inode_permission(). But UIDs don't exist for all filesystems, for example, > and there are no UIDs on superblocks, mount objects or hardware events. If you open() or stat() a file on those filesystems the UID used in the access control comes from somewhere. Setting a watch on things with UIDs should use the access mode on the file, just like any other filesystem operation. Things like superblocks are sticker because we don't generally think of them as objects. If you can do statfs(), you should be able to set a watch on the filesystem metadata. How would you specify a watch for a hardware event? If you say you have to open /dev/mumble to sent a watch for mumbles, you're good there, too. > Now, I could see that you ignore UIDs on things like keys and > hardware-triggered events, but how does this interact with things like mount > watches that see directories that have UIDs? > > Are you advocating making it such that process B can only see events triggered > by process A if they have the same UID, for example? It's always seemed arbitrary to me that you can't open your process up to get signals from other users. What about putting mode bits on your ring buffer? By default you could only accept your own events, but you could do a rb_chmod(0222) and let all events through. Subject to LSM addition restrictions, of course. That would require the cred of the process that triggered the event or a system cred for "hardware" events. If you don't like mode bits you could use an ACL for fine granularity or a single "let'em all in" bit for coarse. I'm not against access, I'm against uncontrolled access in conflict with basic system policy. > David