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
# ...