標準のcourier-authdaemon initscriptの適応にヘルプを使用できます。
私は、postfix、courier、mariadb、amavisd-new、clamav、spamassassin、sasslを使用して小規模ビジネスサーバーを実行しています。 xenialにアップグレードした後、セットアップが以前のようにsaslの認証を拒否したため、問題が発生しました。これは、xenialのlibpam-mysqlの深刻な破損の結果であることをグーグルで学んだ。幸いなことに、courier-authdaemonのクーリエ認証ルーチンに対して認証することが可能であるため、それを指すようにpostfix smtpd.confを変更しました。 courier-authdaemonは、initscript(/et/init.d内)によって次のように制御されます。
#! /bin/sh -e
#
### BEGIN INIT INFO
# Provides: courier-authdaemon
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
prefix="/usr"
exec_prefix=${prefix}
sysconfdir="/etc/courier"
sbindir="${exec_prefix}/sbin"
daemonscript="${sbindir}/authdaemond"
rundir_courier="/var/run/courier"
rundir="/var/run/courier/authdaemon"
pidfile="${rundir}/pid"
. /lib/lsb/init-functions
# Check for a leftover init script
if [ ! -x $daemonscript ]; then
exit 0
fi
case "$1" in
start)
# Start daemon.
cd /
log_daemon_msg "Starting Courier authentication services" "authdaemond"
if [ ! -d "$rundir_courier" ]; then
mkdir -m 0775 $rundir_courier
chown daemon:daemon $rundir_courier
# set file context for SELinux (#668564)
[ -x /sbin/restorecon ] && /sbin/restorecon $rundir_courier
fi
if [ ! -d "$rundir" ]; then
mkdir -m 0750 $rundir
chown daemon:daemon $rundir
# set file context for SELinux (#668564)
[ -x /sbin/restorecon ] && /sbin/restorecon $rundir
fi
$daemonscript start
log_end_msg 0
;;
stop)
# Stop daemon.
cd /
log_daemon_msg "Stopping Courier authentication services" "authdaemond"
$daemonscript stop
log_end_msg 0
;;
restart|force-reload)
$0 stop
$0 start
;;
status)
status_of_proc -p "$pidfile" "" "authdaemond" && exit 0 || exit $?
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
exit 2
;;
esac
exit 0
次の問題:chroot jailでpostfixが実行されていますが、これは標準のcourier-authdaemonソケットにアクセスできません。だから私はこれを見つけました:
service courier-authdaemon stop
rm -rf /var/run/courier/authdaemon/ /var/spool/postfix/var/run/courier/authdaemon/
mkdir -p /var/spool/postfix/var/run/courier/authdaemon/
ln -s /var/spool/postfix/var/run/courier/authdaemon/ /var/run/courier/authdaemon
service courier-authdaemon start
postfix reload
これは基本的に認証デーモンを停止し、現在のディレクトリとpostfix chroot jailの両方の古いものを削除してから再度セットアップし、外部からchroot jail内へのリンクを設定して、すべてを再び起動します。うまくいく。リブート(またはクーリエの更新/アップグレード)後、クーリエがすべてを新しく設定するため、これらの変更を永続的にします。したがって、上記の修正をやり直す必要があります。
だから明らかに、私は誰かがブートアップ時に修正を適用する何かを見つけたかどうかを調べようとしていた。誰かがいたことがわかり、彼は次のようにauthdaemonのinitscriptを書き直しました
! /bin/sh -e
#
### BEGIN INIT INFO
# Provides: courier-authdaemon
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
prefix="/usr"
exec_prefix=${prefix}
sysconfdir="/etc/courier"
sbindir="${exec_prefix}/sbin"
daemonscript="${sbindir}/authdaemond"
rundir_courier="/var/run/courier"
rundir="/var/run/courier/authdaemon"
pidfile="${rundir}/pid"
. /lib/lsb/init-functions
# Check for a leftover init script
if [ ! -x $daemonscript ]; then
exit 0
fi
#== Postfix chrooted ==#+20131117 <[email protected]>
postfix_check() {
local PFINIT=/etc/init.d/postfix
local PFMASTER=/etc/postfix/master.cf
local PFSMTPD=/etc/postfix/sasl/smtpd.conf
if [ -s $PFINIT ] && [ -s $PFMASTER ] ; then
# Use Postfix
if [ "$(/usr/bin/awk '$1~/^smtp$/ && $8~/smtpd/ {print $5}
' $PFMASTER)0" != "n0" ]
then # chroot: Yes
if [ -s $PFSMTPD ] && [ "0$(/bin/sed -n \
-e '/^authdaemond_path:/s,.\+:\s*,,p' $PFSMTPD)" = "0$rundir/socket" ] &&
[ ! -L $rundir ]
then
/bin/rm -fr $rundir &&
/bin/ln -s /var/spool/postfix/$rundir $rundir_courier
fi
else # chroot: No
if [ -L $rundir ] ;then
/bin/rm -fr $rundir
fi
fi # Postfix chrooted ?
fi # Use Postfix
} # postfix_check()
#-- Postfix chrooted --#
case "$1" in
start)
# Start daemon.
cd /
log_daemon_msg "Starting Courier authentication services" "authdaemond"
if [ ! -d "$rundir_courier" ]; then
mkdir -m 0775 $rundir_courier
chown daemon:daemon $rundir_courier
# set file context for SELinux (#668564)
[ -x /sbin/restorecon ] && /sbin/restorecon $rundir_courier
fi
postfix_check
if [ ! -d "$rundir" ]; then
mkdir -m 0750 $rundir
chown daemon:daemon $rundir
# set file context for SELinux (#668564)
[ -x /sbin/restorecon ] && /sbin/restorecon $rundir
fi
$daemonscript start
log_end_msg 0
;;
stop)
# Stop daemon.
cd /
log_daemon_msg "Stopping Courier authentication services" "authdaemond"
$daemonscript stop
log_end_msg 0
;;
restart|force-reload)
$0 stop
$0 start
;;
status)
status_of_proc -p "$pidfile" "" "authdaemond" && exit 0 || exit $?
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
exit 2
;;
esac
exit 0
問題は、それが機能していないようであり、正規表現のスキルがこれをデバッグできるほどではないことです。ファイルの場所に関係があるのではないかと疑っていますが、わかりません。再起動後にコマンドを適用することを覚えておく必要がないように、正しい方向に私を向けることができる人はいますか?
問題は、Xenial 16.04がsasl PAMを破損し、systemd起動に切り替えたことです。 courier-authdaemonがchrootedを実行するために編集したinit.dスクリプトは実行されません。私はそれを難しい方法で見つけました。
今、同様の設定を実行します(postfix chrooted plus courierに対する認証、以前は14.04 TrustyでSASL PAMを使用していました)。
現在の設定は次のとおりです。
vi /etc/postfix/sasl/smtpd.conf
#pwcheck_method: saslauthd
#mech_list: plain login
#allow_plaintext: true
pwcheck_method: authdaemond
authdaemond_path: /var/run/courier/authdaemon/socket
mech_list: plain login
log_level: 9
vi /etc/systemd/system/courier-authdaemon.sh
#! /bin/sh -e
#
# Starts: courier-authdaemon
prefix="/usr"
exec_prefix=${prefix}
sysconfdir="/etc/courier"
sbindir="${exec_prefix}/sbin"
daemonscript="${sbindir}/authdaemond"
rundir_courier="/var/run/courier"
rundir="/var/run/courier/authdaemon"
rundir_chroot="/var/spool/postfix/var/run/courier/authdaemon"
pidfile="${rundir}/pid"
/bin/echo "Checkpoint 1 Courier authentication services" "authdaemond" >/log.txt
# Check for a leftover init script
if [ ! -x $daemonscript ]; then
exit 0
fi
/bin/echo "Checkpoint 2 Courier authentication services" "authdaemond" >>/log.txt
# Start daemon.
cd /
/bin/echo "Starting Courier authentication services" "authdaemond" >>/log.txt
# RAH 20170123. Change to chroot postfix setup
if [ ! -d "$rundir_courier" ]; then
/bin/echo "making parent location" "authdaemond" >>/log.txt
/bin/mkdir -m 0775 $rundir_courier
/bin/chown daemon:daemon $rundir_courier
# set file context for SELinux (#668564)
[ -x /sbin/restorecon ] && /sbin/restorecon $rundir_courier
fi
# clean up chroot location
if [ -d "$rundir_chroot" ]; then
/bin/echo "Cleaning chroot location" "authdaemond" >>/log.txt
/bin/rm -rf "$rundir_chroot"
fi
# remove traditional directory if it exists
if [ -L "$rundir" ]; then
/bin/echo "Unlinking traditional location" "authdaemond" >>/log.txt
/usr/bin/unlink "$rundir"
fi
if [ -d "$rundir" ]; then
/bin/echo "Cleaning traditional location" "authdaemond" >>/log.txt
/bin/rm -rf "$rundir"
fi
# make new chroot location
if [ ! -d "$rundir_chroot" ]; then
/bin/echo "making chroot location" "authdaemond" >>/log.txt
/bin/mkdir -p "$rundir_chroot"
# /bin/echo mkdir -p "$rundir_chroot"
/bin/chown daemon:daemon "$rundir_chroot"
[ -x /sbin/restorecon ] && /sbin/restorecon $rundir_chroot
fi
# link chroot location to the original location
if [ ! -L "$rundir" ]; then
/bin/echo "linking chroot location" "authdaemond" >>/log.txt
/bin/ln -sn "$rundir_chroot" "$rundir"
# /bin/echo /bin/ln -sfn "$rundir_chroot" "$rundir"
fi
# $daemonscript start
exit 0
systemd経由でスタートアップのオーバーライドを作成します
Sudo systemctl edit courier-authdaemon
systemdオーバーライドの内容を編集して、上記のシェルスクリプトをトリガーします。
$ more /etc/systemd/system/courier-authdaemon.service.d/override.conf
[Service]
ExecStartPre=/etc/systemd/system/courier-authdaemon.sh