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

이 사용자로 실행하는 데 아무런 문제가 발생하지 않았습니다.

관련 정보