루트가 아닌 사용자로 화석을 시스템 서비스로 실행하고 싶습니다.
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