systemd는 루트가 아닌 사용자로fossil을 실행합니다.

systemd는 루트가 아닌 사용자로fossil을 실행합니다.

루트가 아닌 사용자로 화석을 시스템 서비스로 실행하고 싶습니다.

useradd  -r fossil

touch /etc/systemd/system/fossil.service

화석.서비스 파일:

[Unit]
User=fossil
Group=fossil
Description=Fossil Service
After=network.target
StartLimitIntervalSec=0
 
[Service]
Type=simple
User=fossil
Group=fossil
WorkingDirectory=/opt/fossil/repos
ExecStart=/usr/bin/fossil server --localhost  --port 9000 --repolist  /opt/fossil/repos
Restart=always
RestartSec=3
 
[Install]
WantedBy=multi-user.target

Fossil user/group is an owner of /opt/fossil directory.

sudo systemctl daemon-reload
sudo systemctl stop fossil
sudo systemctl start fossil
sudo systemctl status fossil -l

산출:

fossil.service - Fossil Service
       Loaded: loaded (/etc/systemd/system/fossil.service; enabled; vendor preset: enabled)
       Active: activating (auto-restart) (Result: exit-code) since Mon 2022-09-26 17:59:10 CEST; 1s ago
      Process: 2015 ExecStart=/usr/bin/fossil server --localhost --port 9000 --repolist /opt/fossil/repos (code=exited, status=200/CHDIR)
     Main PID: 2015 (code=exited, status=200/CHDIR)

sudo journalctl -u fossil

인쇄물:

.... systemd[12954]: fossil.service: Changing to the requested working directory failed: Permission denied
Sep 27 systemd[12954]: fossil.service: Failed at step CHDIR spawning /usr/bin/fossil: Permission denied
Sep 27 systemd[1]: fossil.service: Main process exited, code=exited, status=200/CHDIR
Sep 27 systemd[1]: fossil.service: Failed with result 'exit-code'.
Sep 27 systemd[1]: fossil.service: Service RestartSec=3s expired, scheduling restart.
Sep 27 systemd[1]: fossil.service: Scheduled restart job, restart counter is at 1.
Sep 27 systemd[1]: Stopped Fossil Service.
Sep 27 systemd[1]: Started Fossil Service.
ls -all /opt/fossil
drwxr-xr-x 4 fossil fossil 4096 Sep 27 repos

줄을 없애면

User=fossil

모든 것이 잘 작동합니다.

화석 사용자로서 어떻게 화석을 만들 수 있나요?

답변1

나는 이것에 대해 아무것도 모르지만 fossil귀하의 문제는 분명히 권한과 관련이 있습니다.

이것을 실행한 적이 있다면 sudo fossil ... /opt/fossil/repos아마도 해당 디렉토리에 소유하고 전역적으로 쓸 수 없는 파일이 있을 것입니다 root.

포괄적인 솔루션은 다음과 같습니다.

sudo chown -R fossil:fossil /opt/fossil

보다 목표화된 접근 방식은 다음과 같습니다.

sudo chown -R fossil:fossil /opt/fossil/repos

이는 필요한 모든 파일/디렉토리의 소유권을 반복적으로 변경합니다 fossil.

이는 일반적으로 다른 패키지에 의존하지 않는 재배치 가능한 패키지와 어쨌든 자신만의 작은 세계에서 실행되도록 의도된 콘텐츠를 포함하기 /opt/<package>/때문에 일반적으로 안전합니다 ./opt

바이너리가 /usr/bin/fossil포함되어 있지 않아 자체적으로 덮어쓸 수 없기 /opt때문에 이것이 더 마음에 듭니다.fossil

하지만 최대한 좁은 권한을 제공하는 것이 좋습니다. 그럼 안에 무엇이 있는지보세요 /opt/fossil. 이 작업은 전통적인 bin/, etc/, lib/, 로 분할된 경우에만 var/수행됩니다 var/. 자체적으로 건드리지 말아야 할 구성 파일이 있는 경우 해당 파일이 속하지 않는지 확인하세요 fossil. 예를 들어 분명히 읽기-쓰기 데이터 디렉터리가 있으면 해당 디렉터리만 있으면 됩니다 /opt/fossil/repos.chown

관련 정보