e-securIT - La sécurité des systèmes d'information

ligne

e-securIT - Menu principal
What's new ?!?
Ressources
Le coin des bricoleurs !
Glossaire sécurité
Liens -Mailing lists - Forums
Forums
A propos du site e-securIT !

[Exécuter  Sendmail sans droit root]

Cette page présente successivement les raisons qui font que Sendmail est majoritairement exécuté avec l'identité de l'utilisateur "root" et propose une solution alternative pour permettre d'exécuter Sendmail sous une autre identité, avec des pouvoirs moins importants.
Attention : évaluer au préalable cette procédure sur une machine de test. Pour toutes remarques, n'hésiter pas à contacter : securit@free.fr.

[Pourquoi Sendmail utilise classiquement root ?]

Plusieurs raisons essentielles permettent de jusitifier l'exécution de Sendmail en tant que root, notamment :
- Sendmail écoute sur le port 25, port privilégié (inférieur à 1024).
- Les utilisateurs génèrent des fichiers .forward dans leur répertoire personnel afin de transférer leurs messages vers d'autres adresses SMTP. Sendmail doit pouvoir accéder à ce fichier afin d'en lire le contenu, même si les utilisateurs ont disposé un droit d'accès restrictif sur leur répertoire personnel (mode 700).
- Sendmail doit pouvoir devenir temporairement propriétaire des fichiers de listes de messagerie (mailing-lists) gérées par les utilisateurs (en prenant l'identité de l'utilisateur).

[Comment permettre à Sendmail de s'exécuter sans droit root]

Les étapes suivantes permettent de réaliser l'opération.

1. Création du compte d'exécution et mise en place des permissions

Il convient de créer en premier lieu le compte de service utilisé par Sendmail pour s'exécuter, et de fixer les droits adéquats sur les fichiers et répertoires utilisés par Sendmail :
- Créer un utilisateur "mail" dans le fichier /etc/passwd et un groupe "mail" dans le fichier  /etc/group.
L'utilisateur "mail" ne doit pas disposer de shell (/bin/false comme shell) et son compte doit être désactivé (* dans le champs password), soit une ligne de la forme suivante dans le fichier /etc/passwd :

mail:*:uid:gid:Compte de service Sendmail:/home/mail:/bin/false

- Disposition des droits sur les répertoires
Modifier les permissions du répertoire /var/spool/mail pour que le propriétaire soit root et le groupe mail : 

chown root:mail /var/spool/mail

Fixer les droits 1775 sur le répertoire /var/spool/mail (éventuellement 1770 si aucun programme local de messagerie n'accède le répertoire) :

chmod 1775 /var/spool/mail

Tous les répertoires contenus dans /var/spool/mail doivent disposer de droits d'accès 660.

chmod 660 /var/spool/mail/*

Le répertoire /var/spool/mqueue doit appartenir à mail et disposer de droits 700 :

chown mail /var/spool/mqueue ; chmod 600 /var/spool/mqueue.

2. Forcer Sendmail a utiliser le shell restreint smrsh

smrsh a pour objectif de remplacer /bin/sh et de contrôler et spécifier la liste explicite des programmes utilisables par Sendmail.
Remarque : ceci nécessite que smrsh soit compilé et installé sur le système (dans /usr/sbin/smrsh).

Il convient donc :

- De déterminer quels programmes sont autorisés pour Sendmail (ex. : /bin/mail, /usr/bin/procmail). Ceci permet aux programmes listés d'être exécutés depuis les fichiers des utilisateurs tels que .forward.
- De préciser à smrsh les programmes autorisés, soit, pour la commande mail :

cd /etc/smrsh ; ln -s /bin/mail mail

- De configurer Sendmail pour utiliser le shell restreint smrsh :

Remplacer dans le fichier /etc/mail/sendmail.cf la ligne :
Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
Par la ligne :
Mprog, P=/usr/bin/smrsh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
Relancer Sendmail :

/etc/rc.d/init.d/sendmail restart

3. Lancer Sendmail depuis Inetd et non comme démon

Pour permettre à Sendmail d'écouter sur le port 25 sans disposer de droits root, il convient de lancer le service non plus comme démon, mais via inetd (le super-démon). Pour celà, ajouter la ligne suivante dans le fichier /etc/inetd.conf :

smtp stream tcp nowait mail /usr/sbin/tcpd /usr/sbin/sendmail -bs

Remarques :
- L'option -bs précise que Sendmail dialogue en SMTP lorsqu'il envoit ou reçoit des messages.
- Lancer Sendmail via Inetd présente également l'avantage de pouvoir utiliser les TCP Wrappers afin de contrôler et filtrer les connexions effectuées avec le serveur de messagerie.

Arrêter le démon Sendmail :

/etc/rc.d/init.d/sendmail stop

Veiller à ne plus permettre à Sendmail de démarrer en tant que démon, par exemple (sous Linux) :

chkconfig --del sendmail

Relancer le super-démon inetd :

/etc/rc.d/init.d/inet restart

4. Scruter la queue de messages régulièrement

Il est maintenant nécessaire de préciser à Sendmail de scruter régulièrement la queue de messages. Il faut donc programmer le démon cron pour lancer périodiquement la vérification de queue par Sendmail.
Par exemple, pour effectuer une scrutation toutes les 5 minutes :
- Éditer la crontab pour le compte de service "mail" :

crontab -e -u mail

Insérer la ligne suivante (séparateur : tabulation) :

*/10   *   *   *   *   /usr/bin/sendmail -q

5. Dernière étape : modifier l'UID et le GID de Sendmail

Sendmail doit être exécuté avec l'UID "mail" et le GID "mail".
Pour cela, ajouter les lignes suivantes dans le fichier /etc/sendmail.mc :

define('confTEMP_FILE_MODE','0660')dnl
define('ALIAS_FILE','/etc/mail/aliases')

Pour que les changements soient effectués, exécuter les commandes suivantes :

m4 /etc/sendmail.mc > /etc/sendmail.cf
/etc/rc.d/init.d/inet restart

Changer les permissions sur les répertoires liés à Sendmail de la manière suivante :

chown mail:mail /usr/sbin/sendmail
chmod 6555 /usr/sbin/sendmail
chown mail /var/spool/mqueue/*
chgrp mail /etc/aliases.db
chmod 664 /etc/aliases.db

 

[Références]

- "Sendmail, 2nd edition" - Edition O'Reilly, janvier 1997, Bryan Costales & Eric Allman (ISBN 1-56592-222-0).
- "Sendmail security without source code changes" - Russell Coker.
- "Secure any sendmail installation" - Sendmail.net.
- "Securing Sendmail on 4 types of systems" - Sendmail.net.
- "Securing and optimizing Redha Linux 1.3" - Gerhard Mourani (ISBN 0-9700330-0-1).

ligne
 securIT@free.fr - Plein accès