다음과 같이 구성된 systemd 서비스가 있습니다.
[Unit]
Description=example systemd service unit file.
[Service]
ExecStart=/path/to/program
EnvironmentFile=/etc/program.conf
User=someuser
[Install]
WantedBy=multi-user.target
이제 문제는 EnvironmentFile
어떤 사용자가 읽고 있는가 하는 것입니다. 행동할 것인가 root
, 행동할 것인가 someuser
? 문서는 그다지 명확하지 않지만 텍스트는 다음과 같습니다.
이 지시어로 나열된 파일은 프로세스가 실행되기 직전에 읽혀집니다(구체적으로는 이전 장치 상태의 모든 프로세스가 종료된 후). 이는 하나의 장치 상태에서 이러한 파일을 생성하고 이 옵션을 사용하여 다음 장치 상태에서 파일 시스템 변경(예: 바인드 마운트)이 발생하기 전에 서비스 관리자의 파일 시스템에서 읽을 수 있음을 의미합니다.
따라서 바인드 마운트를 에서 수행해야 할 수도 있습니다 . 이는 바인드 마운트 전에 root
환경 파일을 읽으므로 환경 파일을 로 읽는다고 가정할 수 있다는 의미입니까 ?root
실험해 볼 수 있지만 이에 대한 문서가 더 명확하지 않다는 사실에 조금 놀랐습니다. 어쩌면 내가 잘못된 곳을 찾고 있는 것일 수도 있습니다.
답변1
EnvironmentFile
몇 가지 실험을 통해 로 읽혀지는 것을 확인할 수 있습니다 root
. 따라서 정의된 환경 변수는 EnvironmentFile
에 속 root
하고 비슷한 권한을 갖고 있더라도 0600
로 실행되는 프로세스에 설정됩니다 User=someuser
.