Re: RFC: disablenetwork facility. (v4)
From: Bryan Donlan <hidden>
Date: 2009-12-29 19:08:54
Also in:
lkml
On Tue, Dec 29, 2009 at 1:36 PM, Eric W. Biederman [off-list ref] wrote:
Bryan Donlan [off-list ref] writes:quoted
On Tue, Dec 29, 2009 at 11:39 AM, Serge E. Hallyn [off-list ref] wrote:quoted
Quoting Bryan Donlan (bdonlan@gmail.com):quoted
On Tue, Dec 29, 2009 at 10:11 AM, Serge E. Hallyn [off-list ref] wrote:quoted
Eric, let me specifically point out a 'disable setuid-root' problem on linux: root still owns most of the system even when it's not privileged. So does "disable setuid-root" mean we don't allow exec of setuid-root binaries at all, or that we don't setuid to root, or that we just don't raise privileges for setuid-root?I, for one, think it would be best to handle it exactly like the nosuid mount option - that is, pretend the file doesn't have any setuid bits set. There's no reason to deny execution; if the process would otherwise be able to execute it, it can also copy the file to make a non-suid version and execute that instead. And some programs can operate with reduced function without setuid. For example, screen comes to mind; it needs root to share screen sessions between multiple users, but can operate for a single user just fine without root, and indeed the latter is usually the default configuration.That's fine with me, seems safe for a fully unprivileged program to use, and would make sense to do through one of the securebits set with prctl(PR_SET_SECUREBITS). In addition, I assume we would also refuse to honor file capabilities?Yes - essentially a one-time switch saying "never allow me to gain capabilities again".That is what I was thinking. Does setresuid case problems? Assuming the application that drop permissions could have successfully called setresuid?
It's probably reasonable to require that real == effective == saved == fs UID (and same for GID); anything else brings up sticky issues of "which UID is a higher capability?" If a process does this call, it's effectively saying that the only way it's going to be accessing resources beyond its current UID and capabilities is by talking to another process over a (unix domain) socket.