ExecStart経由で実行すると、権限がありません。

ExecStart経由で実行すると、権限がありません。

私は設定しました。Shadowsocks-libev以下のsystemctlサービスを使用して実行しました。

[Unit]
Description=Shadowsocks-Libev Manager Service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=nobody
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ExecStart=/usr/bin/ss-manager -c /etc/shadowsocks/%i.json

[Install]
WantedBy=multi-user.target

最近、私のShadowsocks設定ファイル()にグローバル読み取り権限があることを確認して、/etc/shadowsocks/manager.jsonそれを600に変更して所有者がいることを確認しましたnobody。これにより、何らかの理由でプロセスが起動時に構成ファイルを読み取ることができなくなりました。

systemctl start [email protected]

ss-manager[1357]: 2018-01-05 11:41:00 ERROR: Invalid config path.

これは、ファイルに対するすべての読み取り権限を取り消したときに表示されるのと同じエラーです。

ただし、まったく同じコマンドを使用してコマンドラインからShadowsocksを起動すると、正常に動作します。

sudo -u nobody /usr/bin/ss-manager -c /etc/shadowsocks/manager.json

nobodycat同様に、またはを使用してファイルを読み取るのに問題はありませんless

systemctlinで始まったプロセスを確認してみると実行中psであることがわかりnobody、プロセスがファイルを出力すると所有者に設定されていますnobody。なぜファイルにアクセスできないのですか? systemctlを介して実行することと端末で実行することに違いがあるのはなぜですか?

私の問題は次のようなものです。この問題ただし、ExecStartには引用符がないため、このソリューションは私の場合は機能しません。

ベストアンサー1

ユーザー関連の問題によって発生した問題を解決できましたnobody。しかし、このユーザーをユニークにする要素が何であるかはまだ完全にはわかりません。

実行すると、nobodyログに次の出力が表示されます。

Started Shadowsocks-Libev Manager Service.
ERROR: Invalid config path.
Main process exited, code=exited, status=255/n/a
Failed with result 'exit-code'.

これは、必要な権限があるにもかかわらず、構成ファイルにアクセスできないことを示します。

新しく作成された別のユーザー(ホームディレクトリなし)で実行すると、ログに次の出力が表示されます。

Started Shadowsocks-Libev Manager Service.
ERROR: mkdir: No such file or directory
ERROR: unable to create working directory
Main process exited, code=exited, status=255/n/a
Failed with result 'exit-code'.

これは、存在しないユーザーのホームディレクトリに書き込もうとするためです。

shadowsocksその後、独自のホームディレクトリに名前を付けた新しいユーザーを作成しました。

# useradd -m -s /usr/bin/nologin shadowsocks

このユーザーとして実行しても問題は発生しませんでした。

おすすめ記事