systemdはrootではなくユーザーとしてfossilを実行します。

systemdはrootではなくユーザーとして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/reposchown

関連情報