Systemd 장치는 서비스가 다시 시작될 때 사용자, 그룹 및 RuntimeDirectoryMode 설정만 적용합니다.

Systemd 장치는 서비스가 다시 시작될 때 사용자, 그룹 및 RuntimeDirectoryMode 설정만 적용합니다.

VPS에서 Fedora 28 x64를 사용하고 있습니다. 저는 postfix를 발신 메일 서버로만 설정하고 OpenDKIM을 사용하여 발신 이메일에 서명했습니다.

Postfix는 Unix 소켓 설정을 통해 OpenDKIM에 연결합니다./run/opendkim/opendkim.sock

권한 /run/opendkim/은 다음과 같습니다

drwx------. 2 opendkim opendkim 80 Jul 13 00:05 opendkim

Postfix가 OpenDKIM 밀터에 연결될 수 있도록 OpenDKIM 유닛 파일로 변경하여 추가하였습니다 Group. 전체 파일입니다.postfixRuntimeDirectoryMode=0750opendkim.service

장소:/usr/lib/systemd/system/opendkim.service

[Unit]
Description=DomainKeys Identified Mail (DKIM) Milter
Documentation=man:opendkim(8) man:opendkim.conf(5) man:opendkim-genkey(8) man:opendkim-genzone(8) man:opendkim-testadsp(8) man:opendkim-testkey http://www.opendkim.org/docs.html
After=network.target remote-fs.target nss-lookup.target syslog.target

[Service]
Type=forking
User=opendkim
Group=postfix
PIDFile=/run/opendkim/opendkim.pid
EnvironmentFile=-/etc/sysconfig/opendkim
ExecStart=/usr/sbin/opendkim $OPTIONS
ExecReload=/bin/kill -USR1 $MAINPID
RuntimeDirectory=opendkim
RuntimeDirectoryMode=0750

[Install]
WantedBy=multi-user.target

내가 직면한 문제는 OpenDKIM 서비스를 수동으로 다시 시작할 때만 , , 값이 적용된다는 것입니다 User. OpenDKIM은 통과할 수 있습니다.GroupRuntimeDirectoryModesystemctl enable opendkim

그러나 VPS를 다시 시작한 후에도 디렉터리 권한은 동일합니다.

drwx------. 2 opendkim opendkim 80 Jul 13 00:05 opendkim

실행해야 했던 systemctl restart opendkim권한을 변경하려면

drwxr-x---. 2 opendkim postfix 80 Jul 13 00:05 opendkim

왜 이런 일이 발생하는지 아시나요? 여기서 뭔가 빠졌나요?

답변1

opendkim 패키지에는 /run/opendkim시작 시 디렉터리를 생성하고 해당 디렉터리의 소유권과 권한을 설정하는 systemd-tmpfiles 구성이 포함되어 있습니다.

[root@localhost ~]# cat /etc/tmpfiles.d/opendkim.conf
D /var/run/opendkim 0700 opendkim opendkim -

따라서 시스템 서비스 단위에 대한 사용자 정의는 시작 시 덮어쓰여집니다.


~에 따르면지도 시간패키지와 함께 제공되는 README.fedora 링크에서 Postfix가 (UNIX 소켓 대신) 포트 8891의 로컬 TCP 소켓을 통해 OpenDKIM과 통신하도록 해야 합니다. 따라서 임시 디렉터리의 권한을 변경할 필요가 없습니다. 그래도 Postfix를 변경해야 합니다 main.cf.

smtpd_milters           = inet:127.0.0.1:8891

또한 opendkim 구성을 공장 기본값으로 복원해야 합니다.

##  Create a socket through which your MTA can communicate.
Socket  inet:8891@localhost

관련 정보