Debian

無法在 /etc/default/opendkim 中更改 Debian 拉伸中的 OpenDKIM 套接字

  • April 15, 2021

我正在嘗試在 Debian stretch 上設置 opendkim,但我無法更改套接字。我想將套接字更改為,/var/spool/postfix/opendkim/opendkim.sock以便可以將其與 postfix 一起使用。

我已添加Socket local:/var/spool/postfix/opendkim/opendkim.sock/etc/opendkim.conf

並嘗試添加SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock/etc/default/opendkim我必須創建)。

無論我改變什麼或我多久重啟一次opendkim,它總是/var/run/opendkim/opendkim.sock用作它的套接字。

➜  ~ netstat -a | fgrep LISTEN | grep open
unix  2      [ ACC ]     STREAM     LISTENING     5534128  /var/run/opendkim/opendkim.sock

➜  ~ sudo systemctl status opendkim.service

● opendkim.service - OpenDKIM DomainKeys Identified Mail (DKIM) Milter
  Loaded: loaded (/lib/systemd/system/opendkim.service; enabled; vendor preset: enabled)
  Active: active (running) since Sun 2017-04-30 12:41:54 CEST; 5min ago
    Docs: 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
 Process: 25246 ExecStart=/usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock (code=exited, status=0/SUCCESS)
Main PID: 25248 (opendkim)
   Tasks: 7 (limit: 4915)
  CGroup: /system.slice/opendkim.service
          ├─25248 /usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock
          └─25249 /usr/sbin/opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock

Apr 30 12:41:54 vServer systemd[1]: Starting OpenDKIM DomainKeys Identified Mail (DKIM) Milter...
Apr 30 12:41:54 vServer systemd[1]: Started OpenDKIM DomainKeys Identified Mail (DKIM) Milter.
Apr 30 12:41:54 vServer opendkim[25249]: OpenDKIM Filter v2.11.0 starting (args: -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)

我究竟做錯了什麼?(我想這是我的錯誤,因為我找不到其他有同樣問題的人)

更新:

更改和更改後綴配置/etc/default/opendkimSOCKET="inet:8891@localhost"使用此套接字會導致inet:localhost:8891: Connection refused

更新2:

我現在已替換為捆綁在 debian 拉伸包中的文件:

# Command-line options specified here will override the contents of                                                                                                         
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.                                                                                                       
#DAEMON_OPTS=""                                                                                                                                                             
# Change to /var/spool/postfix/var/run/opendkim to use a Unix socket with                                                                                                   
# postfix in a chroot:                                                                                                                                                      
RUNDIR=/var/spool/postfix/var/run/opendkim                                                                                                                                  
#RUNDIR=/var/run/opendkim                                                                                                                                                   
#                                                                                                                                                                           
# Uncomment to specify an alternate socket                                                                                                                                  
# Note that setting this will override any Socket value in opendkim.conf                                                                                                    
# default:                                                                                                                                                                  
SOCKET=local:$RUNDIR/opendkim.sock                                                                                                                                          
# listen on all interfaces on port 54321:                                                                                                                                   
#SOCKET=inet:54321                                                                                                                                                          
# listen on loopback on port 12345:                                                                                                                                         
#SOCKET=inet:12345@localhost                                                                                                                                                
# listen on 192.0.2.1 on port 12345:                                                                                                                                        
#SOCKET=inet:12345@192.0.2.1                                                                                                                                                
USER=opendkim                                                                                                                                                               
GROUP=opendkim                                                                                                                                                              
PIDFILE=$RUNDIR/$NAME.pid                                                                                                                                                   
EXTRAAFTER=   

這包括決定套接字的以下行:

if [ -f /etc/opendkim.conf ]; then                                                                                                                                          
   CONFIG_SOCKET=`awk '$1 == "Socket" { print $2 }' /etc/opendkim.conf`                                                                                                    
fi                                                                                                                                                                          

# This can be set via Socket option in config file, so it's not required                                                                                                    
if [ -n "$SOCKET" -a -z "$CONFIG_SOCKET" ]; then                                                                                                                            
   DAEMON_OPTS="-p $SOCKET $DAEMON_OPTS"                                                                                                                                   
fi

我終於找到了解決方案。

/etc/init.d/opendkim似乎沒有做任何事情。但相反,/lib/systemd/system/opendkim.service使用了硬編碼錯誤套接字的服務文件。

但是 debian 包似乎也包含一個 bash 來生成正確的 systemd 服務。

所以執行後

/lib/opendkim/opendkim.service.generate
systemctl daemon-reload
service opendkim restart

並重新啟動 opendkim 套接字文件出現在預期的位置,可以通過呼叫來驗證:

tail /var/log/mail.log | grep OpenDKIM

更新:似乎有一個關於這個問題的 debian 錯誤報告:#861169

2021 年更新:

由於這個問題仍然經常被閱讀,我想讓每個人都知道最近的新聞條目

$$ … $$ 我們提醒使用者最好通過編輯 /etc/opendkim.conf 來配置 opendkim。/etc/default/opendkim 中的舊預設文件仍然可用,腳本 /lib/opendkim/opendkim.service.generate 也是如此。但是,與預設配置文件 /etc/opendkim.conf 相比,這些沒有提供額外的價值。請藉此機會檢查您的配置設置。

同樣以 Debian Bullseye 開頭,/etc/default/opendkim開頭為:

# NOTE: This is a legacy configuration file. It is not used by the opendkim
# systemd service. Please use the corresponding configuration parameters in
# /etc/opendkim.conf instead.
#
# Previously, one would edit the default settings here, and then execute
# /lib/opendkim/opendkim.service.generate to generate systemd override files at
# /etc/systemd/system/opendkim.service.d/override.conf and
# /etc/tmpfiles.d/opendkim.conf. While this is still possible, it is now
# recommended to adjust the settings directly in /etc/opendkim.conf.

引用自:https://serverfault.com/questions/847435