Git

即使 git-daemon-export-ok 存在,git-daemon 也會說“不在白名單中”

  • January 8, 2022

我試圖建立一個 git 伺服器。我成功設置了SSH伺服器,現在我試圖設置一個匿名git服務,但它不能正常工作。

我從 git book https://git-scm.com/book/en/v2/Git-on-the-Server-Git-Daemon複製了範例 systemd 服務文件,只更改了我擁有文件的路徑:

$ 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

然後創建文件以導出 repo:

$ 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

幾分鐘前我自己剛剛遇到了這個問題,並在解決這個問題的過程中遇到了你的問題。

從 systemd 文件中 git 守護程序命令末尾的目錄路徑中刪除尾部斜杠。這似乎會導致白名單出現問題,如 /var/log/syslog 中所示的錯誤所示。

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

在我進行了類似的更改後,我能夠按預期使用 git 協議。

引用自:https://unix.stackexchange.com/questions/685481