Git
即使 git-daemon-export-ok 存在,git-daemon 也會說“不在白名單中”
我試圖建立一個 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 協議。