Ubuntu 15.04(およびDebian 8)でシステムサービスを設定しようとしています。私はプログラムを持っています/home/testuser/server/prrserver
。私のsystemdサービスprrserver
はtestuser:testuser
、.コマンドラインからサーバーを起動するとファイルを見つけます。何が間違っているのか知っていますか?おそらく、新しいプロセスをフォークしたときに新しいプロセスが実行されなくなり、何らかの理由でtestuserディレクトリにアクセスできないのでしょうか?prrserver
/home/testuser/server/prrproc
/home/testuser/server/data
prrserver
prrproc
prrproc
/home/testuser/server/data/foo
prrserver
testuser
[Unit]
Description=PRR Server
[Service]
Type=simple
User=testuser
Group=testuser
ExecStart=/home/testuser/server/prrserver
[Install]
WantedBy=multi-user.target
状態はこんな感じです。
systemctl status prrserver.service
â prrserver.service - PRR Server
Loaded: loaded (/lib/systemd/system/prrserver.service; enabled; vendor preset: enabled)
Active: active (running) since mån 2015-05-25 14:50:42 CEST; 1min 2s ago
Main PID: 21205 (prrserver)
CGroup: /system.slice/prrserver.service
ââ21205 /bin/sh /home/testuser/server/prrserver
ââ22101 /bin/sh /home/testuser/server/prrproc
maj 25 14:50:42 ubuntu-dev systemd[1]: Started PRR Server.
maj 25 14:50:42 ubuntu-dev systemd[1]: Starting PRR Server...
maj 25 14:50:53 ubuntu-dev prrserver[21205]: PRR Server started listening on port 10239
基本プロセスがプロセスをprrserver
開始し、prrproc
問題がプロセスにあるため、prrproc
サービス状態は緑色です。
答え1
理論的には、プライベートマウントネームスペースかもしれません。これは安全機能です。除外してみてください。
ProtectHome=off
答え2
私もこの質問に偶然接したが答えを見つけることができなかった。これが私が達成できたのです。しかし、可能であればより良い選択肢を提案してください。
ここで説明するアプローチは、@RegedUser00xのユースケースには正確ではありませんが、正しい方向に案内することができます。 特に、私の解決策はファイルシステムの権限を尊重しません。これはおそらく望ましくないでしょう。。
私が動作させることができた唯一の方法は、次の機能を追加することでした。CAP_DAC_READ_SEARCH
(引用)。
CAP_DAC_READ_SEARCH
ファイルの読み取り権限のチェックとディレクトリの読み取りと実行権限のチェックをバイパスします。
[Unit]
# ...
[Service]
# ...
# Disallow system modification
ProtectSystem=true
# Restrict access to the home folder while only allowing certain folders
ProtectHome=tmpfs
BindPaths=/home/myuser/useful_folder /home/myuser/useful_file
# CAP_DAC_READ_SEARCH Bypass file read permission checks and directory
# read and execute permission checks;
CapabilityBoundingSet= CAP_DAC_READ_SEARCH
[Install]
WantedBy=multi-user.target
# ...