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 프로토콜을 사용할 수 있었습니다.

관련 정보