Re: Git clone reads safe.directory differently?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>> I was able to overcome this by creating /home/alice/git-shell-commands/upload-pack-safe,
>> placing the following there
>> 
>> 	#!/bin/sh
>> 
>> 	git -c safe.directory="$1" upload-pack $1
>> 
>> and running:
>> 
>> 	git -c safe.directory="*" clone -u upload-pack-safe alice@xxxxxxxxxxxxxxx:/shared/repository
>> 
>> This seems to be another interface edge case. Is my solution reasonable,
>> or is there something else that would be more consistent?
 
> So yeah, that would work. But it might be simpler still to just put
> "[safe]directory = *" into /home/alice/.gitconfig. Then the client side
> does not have to do anything differently (or you could even put in a
> more limited relaxation of the rules, like "/shared/repository/*" or
> whatever).

A little feedback to regarding why I chose to avoid .gitconfig along
with some consequences:

I have a system built around Git in which I use the permissions approaches
I have described in this email thread. The downside of .gitconfig is
that its effect is global. I fear I might lose track of the fact that I
have turned off a security protection in a global way, possibly years
down the road as I maintain my system.  Instead, I went about this by
patching particular uses of Git to use "-c" and so on. I only needed to
do this at two or three places my code executes Git out of dozens.

This makes my intention clear in the code (that executes Git) and lessens
the likelihood of me (a year or so later?) forgetting I am responsible
for ensuring the circumstances leave my use of safe.directory safe.

I suppose the inconsistency surrounding "-c" that we have discussed sort
of works against my approach. Indeed, I wonder if in an ideal world we
should remove the dangerous features that have good intentions
(hardlinks and so on) and instead require users to opt in to them.
I say ideal world because this ignores backward/forward compatibility
issues.

Perhaps a compromise would be to tie safe.directory to the type
of source directory given to clone. Would a remote URL be enough to
turn off the safe.directory checks on a clone, similar to the effect of
a remote URL on --local/--no-local?

The current behavior seems to mean:

	(1) -c safe.directory works for some sub-commands, but not clone,

	(2) clone requires your additional workaround, and 

	(3) your workaround does not work with SSH/git-shell for the
	obvious reason that git-shell needs to limit the "commands" it
	will run; this requires another level of intervention.

Another thing I came across was in the git-clone man page:

	"When given, and the repository to clone from is accessed via ssh,
	this specifies a non-default path for the command run on the other end."

Your "-u 'git -c safe.directory=X upload-pack'" workaround uses
upload-pack in the absence of SSH, so I wonder if "and the repository
to clone from is accessed via ssh" is inaccurate.

-- 
Mike

:wq




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux