Je pourrais utiliser l’aide pour l’adaptation du script standard courier-authdaemon.
Je dirige un serveur de petite entreprise avec postfix, courrier, mariadb, amavisd-new avec clamav et spamassassin et sasl. Après la mise à niveau vers xenial, j’ai eu des problèmes parce que le programme d’installation refusait de s’authentifier comme auparavant. J'ai appris à googler que c'était le résultat d'un libpam-mysql sérieusement cassé dans xenial. Heureusement, il est possible de s’authentifier auprès de routines d’authentification de courriers dans courier-authdaemon, j’ai donc modifié mon postfix smtpd.conf pour qu’il pointe vers cela. Courier-authdaemon est contrôlé par un initscript (dans /et/init.d) comme suit:
#! /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
Problème suivant: postfix est en cours d’exécution dans une prison chroot, qui ne peut pas accéder au socket standard messier-authdaemon. Alors j'ai trouvé ça:
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
Ce qui arrête fondamentalement le démon d’authentification, supprime les anciens éléments du répertoire courant et celui de la prison postfix, puis les reconfigure et établit le lien de l’extérieur vers la prison intérieure du chroot, puis tout redémarre. Qui fonctionne Ce qu’il ne fait pas, c’est de rendre ces modifications permanentes, car après un redémarrage (ou une mise à jour/surclassement du service de messagerie), le service de messagerie configure tout à nouveau, je dois donc rétablir le correctif ci-dessus.
Alors évidemment, j'essayais de savoir si quelqu'un aurait trouvé quelque chose à appliquer au correctif au démarrage. Il s'est avéré qu'il y avait quelqu'un, et il a récrit l'initscript authdaemon comme suit
! /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
Le problème est le suivant: cela ne semble pas fonctionner et mes compétences en expressions régulières ne me permettent pas de résoudre ce problème. Je soupçonne que cela a à voir avec les emplacements de fichiers, mais je ne suis pas sûr. Y a-t-il quelqu'un qui peut me diriger dans la bonne direction afin que je n'ai pas à me souvenir d'appliquer les commandes après un redémarrage?
Le problème est que Xenial 16.04 a cassé sasl PAM et est passé au démarrage de systemd. Le script init.d que vous avez édité pour que courier-authdaemon soit exécuté en mode chrooté ne soit jamais exécuté. J'ai découvert ça à la dure.
Je lance maintenant une configuration similaire à celle que vous utilisez (postfixe chrooté plus authentification contre courrier, alors que j’utilisais auparavant SASL PAM le 14.04 Trusty).
Voici ma configuration actuelle:
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
créer un remplacement pour le démarrage via systemd
Sudo systemctl edit courier-authdaemon
modifier le contenu de la substitution systemd pour déclencher le script Shell ci-dessus:
$ more /etc/systemd/system/courier-authdaemon.service.d/override.conf
[Service]
ExecStartPre=/etc/systemd/system/courier-authdaemon.sh