我不确定这是否是在哪里发布的正确部分,如果不是,请告诉我应该在哪里发布以下问题:
我在一个有两台机器的局域网上:一台装有 OS X Yosemite,充当 Git 服务器,另一台运行 Ubuntu 的笔记本电脑充当 Git 客户端,通过git://
.
我正在阅读 Git 书籍。在这里https://git-scm.com/book/it/v2/Git-on-the-Server-Git-Daemon,Scott Chacon 说:
出于安全原因,强烈建议让这个守护进程以对存储库具有只读权限的用户身份运行——您可以通过创建新用户 git-ro 并以他们的身份运行守护进程来轻松做到这一点。为了简单起见,我们将简单地以与 Gitosis 相同的 git 用户身份运行它。
运行 git 守护进程的命令是:
/usr/bin/git daemon --base-path=/opt/git/ /opt/git/
现在,我可以在 OS X 机器上的当前用户(我当前的用户也是管理员)上完美地运行命令而不会出现任何问题,并且 Git 只读守护程序启动,但是一旦我尝试以非特权用户身份运行它它具有对 repo 的只读访问权限(在我的情况下 user git-ro
,如书中建议的那样),git daemon
抱怨并且没有开始:
$ /usr/bin/git daemon \
--user=git-ro --group=git-ro \
--reuseaddr \
--base-path=/opt/git/ \
/opt/git/
fatal: cannot drop privileges
我在 OS X 的 Terminal.app 上运行命令,我还没有设置 git 守护进程在启动时启动,因为我只是想在设置之前看看它是如何工作的。是什么cannot drop privileges
意思,我如何解决并使用对存储库具有只读权限的非特权用户运行守护程序?
感谢关注!
编辑:这里http://git.661346.n2.nabble.com/regression-quot-96b9e0e3-config-treat-user-and-xdg-config-permission-problems-as-errors-quot-busted-n-td7582202 .html#d1365658927000-296看来问题与执行命令的人的HOME目录有关,不是吗?如果是这样,我应该如何处理我的情况?
编辑 2:这是使用 sudo 运行的命令:
$ sudo git daemon --reuseaddr --user=git-ro --group=git-ro --base-path=/opt/git/ /opt/git/
守护程序启动,但是我运行了三个进程,其中两个以 root 身份运行:
$ ps aux | grep "git-ro"
git-ro 1477 0.0 0.0 2471332 1424 s000 S+ 7:34PM 0:00.01 git-daemon --reuseaddr --user=git-ro --group=git-ro --base-path=/opt/git/ /opt/git/
root 1476 0.0 0.0 2464108 1608 s000 S+ 7:34PM 0:00.01 git daemon daemon --reuseaddr --user=git-ro --group=git-ro --base-path=/opt/git/ /opt/git/
root 1475 0.0 0.1 2452612 2612 s000 S+ 7:34PM 0:00.01 sudo git daemon --reuseaddr --user=git-ro --group=git-ro --base-path=/opt/git/ /opt/git/
为什么守护进程仍然以 root 身份运行两个进程?这是预期的行为还是我应该进一步改进?
编辑 3:此外,为什么如果我运行lsof
并检查端口 9418 上正在侦听的内容,我看到两行git-ro
具有相同的 pid?这怎么可能?git daemon
进程以 root 身份运行到哪里去了?
$ sudo lsof -i :9418
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
git-daemo 1477 git-ro 5u IPv4 0xce9b2f57e8d5af93 0t0 TCP *:git (LISTEN)
git-daemo 1477 git-ro 6u IPv6 0xce9b2f57e60cacc3 0t0 TCP *:git (LISTEN)