On Sat, Nov 26, 2011 at 02:34:53PM -0800, Junio C Hamano wrote: > Jeff King <peff@xxxxxxxx> writes: > > > The easiest way would be something like a "trust remote hooks" > > environment variable, off by default. Admins in situation (2) could set > > it for their git-daemon (or webserver, or whatever, or > > gitolite-over-ssh), once they decided it was safe. > > Alice and Bob may work on the same project, and they may want to trust > each other as participants of that project, but that does not mean Alice > wants to give Bob a blanket access to places she owns that are not shared > with the project members (e.g. her $HOME directory), so I am afraid "trust > remote hooks" is not a workable solution for the casual sharing on sites > that do not fall into either of your two classes. Of course. My point isn't that such a feature would cover all cases, but that it would give people a tool to make that decision for themselves, instead of blanket-forbidding it. > The real reason why the upload-hook violates the expectation of the users > is because it would run as the user who fetches, I think. If it ran with > the intersection of capabilities of the owner of the repository and the > user who is fetching, I suspect that we would not have to worry about it. Sure. And I think we would probably trust automatically a hook that is owned by the executing uid. Or possibly root, though that could be surprising in NFS root-squashed environments. > What would happen if we allowed some hooks to run only when the process is > running under a group-id that can write into the repository? When Alice > fetches from the repository, it would still run as her and would have an > access to her $HOME, so this won't really work yet, but I am wondering if > there is a workable alternative along this line. I don't think so. It comes down to this: Alice is executing arbitrary code from Bob's repository, which Bob (and maybe others) have access to write. This is giving Bob permission to run arbitrary code as Alice's user. Checking things like group access doesn't matter. If Alice is in the group, too, it doesn't make a difference; Bob can still write the files, and Alice is still running the code under her UID. I think the only solutions are: 1. Alice accepts that she can trust Bob enough to run his arbitrary code. 2. We use some technique to run the code as the repo owner's UID. The usual methods for doing (2) are: a. setuid, though doing it right can be quite tricky (e.g., cleansing environment, file descriptors, etc). And it requires root cooperation. b. running a server with a socket as Bob, and triggering the hook code from the server Bob could run a specialized server for (b) that listens on a unix socket and triggers his hook. But why? Why not just do the whole thing over git-daemon or smart http, which already exist? -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html