即使 git-daemon-export-ok 存在,git-daemon 也会说“不在白名单中”

即使 git-daemon-export-ok 存在,git-daemon 也会说“不在白名单中”

我试图建立一个 git 服务器。我成功设置了 SSH 服务器,现在我尝试设置匿名 git 服务,但它无法正常工作。

我从 git 书中复制了示例 systemd 服务文件https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon,仅更改我拥有文件的路径:

$ cat /etc/systemd/system/git-daemon.service 
[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv /srv/src/

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

然后创建一个git用户和组:

$ sudo useradd -U --system git
$ sudo usermod -d /nonexistent git
$ sudo usermod -s /usr/sbin/nologin git
$ sudo usermod -c git git
$ getent passwd git      
git:x:998:998:git:/nonexistent:/usr/sbin/nologin
$ groups git
git : git

然后启用并启动该服务(我将在下面显示该服务处于活动状态并正在运行):

$ sudo systemctl enable git-daemon.service
Created symlink /etc/systemd/system/multi-user.target.wants/git-daemon.service ��� /etc/systemd/system/git-daemon.service.
$ sudo systemctl start git-daemon.service

然后创建文件来导出存储库:

$ touch /srv/src/alx/libalx.git/git-daemon-export-ok
$ ls -l /srv/src/alx/libalx.git/git-daemon-export-ok 
-rw-r--r-- 1 alx alx 0 Jan  7 18:49 /srv/src/alx/libalx.git/git-daemon-export-ok

然后尝试从中克隆:

$ git clone git://localhost/src/alx/libalx.git
Cloning into 'libalx'...
fatal: remote error: access denied or repository not exported: /src/alx/libalx.git

该服务抱怨它没有被列入白名单(但它是,不是吗?):

$ sudo systemctl status git-daemon.service 
��� git-daemon.service - Start Git Daemon
     Loaded: loaded (/etc/systemd/system/git-daemon.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-01-07 18:43:52 CET; 24min ago
   Main PID: 43138 (git)
      Tasks: 2 (limit: 3366)
     Memory: 528.0K
        CPU: 26ms
     CGroup: /system.slice/git-daemon.service
             ������43138 /usr/bin/git daemon --reuseaddr --base-path=/srv /srv/src/
             ������43139 /usr/lib/git-core/git-daemon --reuseaddr --base-path=/srv /srv/src/

Jan 07 18:43:52 rpi systemd[1]: Started Start Git Daemon.
Jan 07 18:43:59 rpi git-daemon[43144]: [43144] '/srv/src/alx/libalx.git': not in whitelist
Jan 07 18:50:02 rpi git-daemon[43175]: [43175] '/srv/src/alx/libalx.git': not in whitelist
Jan 07 18:50:03 rpi git-daemon[43176]: [43176] '/srv/src/alx/libalx.git': not in whitelist
Jan 07 18:52:54 rpi git-daemon[43186]: [43186] '/srv/src/alx/libalx.git': not in whitelist

为什么我无法通过 克隆git://


如果我传递一个完全无效的路径来克隆,我会在客户端得到相同的输出,但在服务器端日志是不同的:

$ git clone git://localhost/src/ald/sdf/sdf.git
Cloning into 'sdf'...
fatal: remote error: access denied or repository not exported: /src/ald/sdf/sdf.git
$ sudo systemctl status git-daemon.service 
...
Jan 07 19:13:37 rpi git-daemon[43261]: [43261] '/srv/src/ald/sdf/sdf.git' does not appear to be a git repository

答案1

几分钟前我自己就遇到了这个问题,并在解决问题的过程中遇到了你的问题。

从 systemd 文件中 git daemon 命令末尾的目录路径中删除尾部斜杠。这似乎会导致白名单出现问题,如 /var/log/syslog 中显示的错误所示。

ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv /srv/src

在我进行类似的更改后,我能够按预期使用 git 协议。

相关内容