systemd에서 동적 사용자를 사용하여 비밀 파일에 대한 올바른 권한

systemd에서 동적 사용자를 사용하여 비밀 파일에 대한 올바른 권한

systemd 서비스에서 읽을 수 있도록 하려는 비밀 파일이 있습니다. DynamicUser=True이 서비스를 사용하고 있는데 ConfigurationDirectory=foo그 안에 비밀 파일을 넣었는데 /etc/foo/루트 사용자가 해당 파일을 소유한 경우 서비스에서 해당 파일에 액세스할 수 없습니다. 파일에 0644 권한을 부여해야만 작동하게 되었습니다. 이것은 약간 쓰레기처럼 보입니다. 실제로 저는 서비스와 루트만 파일에 액세스할 수 있기를 원합니다. 이를 수행할 수 있는 방법이 있습니까?

답변1

나는 당신이 사용할 수 있다고 확신합니다 :

ExecStartPre=+/usr/bin/install --owner=%u --mode=600 -T /etc/foo/secrets %T/secrets

+infont 접두어를 붙이면 /usr/bin/install루트 권한으로 실행됩니다(따라서 소스 파일에 대한 읽기 액세스 권한을 갖습니다). 그런 다음 이를 %T개인적으로 설치된 임시 디렉토리 에 복사 하고 소유자를 %u동적 사용자 이름으로 설정했습니다. 동일한 파일을 사용하는 여러 서비스 인스턴스가 있는 경우 복사본을 통해 일부 동시성 문제를 해결할 수도 있습니다.

답변2

~처럼조슈아 R. 스미스사용할 수 있다고 지적했습니다.자격 증명 로드. 구성의 파일을 로 복사하고 /run/credentials/example.service/권한을 500으로 설정하며 사용자를 example:root.

예는 다음과 같습니다:

[Service]
...
LoadCredential=config.json:/usr/local/etc/example/config.json
ExecStart=/usr/local/bin/example --config ${CREDENTIALS_DIRECTORY}/config.json

LoadCredentialEncrypted자격 증명 파일을 암호화하려는 경우에도 사용할 수 있습니다.

관련 정보