Taille: 3580
Commentaire: zou !
|
← Version 8 à la date du 2020-05-20 00:05:20 ⇥
Taille: 3999
Commentaire: Buster ⇒ arrivée du /run volatile…
|
Texte supprimé. | Texte ajouté. |
Ligne 3: | Ligne 3: |
La version de `bind9` disponible sous [:Debian:] est maintenant automatiquement lancée sous l'utilisateur `bind` par défaut, mais toujours pas en `chroot`, ce qui serait pourtant une bonne idée du point de vue sécurité. | La version de `bind9` disponible sous [[Debian]] est maintenant automatiquement lancée sous l'utilisateur `bind` par défaut, mais toujours pas en `chroot`, ce qui serait pourtant une bonne idée du point de vue sécurité. |
Ligne 12: | Ligne 12: |
mkdir -p /srv/chroot/bind cd /srv/chroot/bind |
mkdir -p /var/chroot/bind cd /var/chroot/bind |
Ligne 22: | Ligne 22: |
ln -s /srv/chroot/bind/etc/bind /etc/ | ln -s /var/chroot/bind/etc/bind /etc/ # fichiers racine DNS if [ -e /usr/share/dns ] ; then # dist ≥ Debian Buster mkdir -p usr/share cp -a /usr/share/dns usr/share/ fi |
Ligne 28: | Ligne 34: |
ln -s /srv/chroot/bind/var/cache/bind /var/cache/ | ln -s /var/chroot/bind/var/cache/bind /var/cache/ |
Ligne 31: | Ligne 37: |
mv /var/run/bind var/run/ ln -s /srv/chroot/bind/var/run/bind /var/run/ chown -R bind:bind var/run/bind/run chmod -R u=rwX,g=rX,o= var/run/bind/run |
if [ -e /var/run/bind ] ; then # dist < Debian Squeeze mv /var/run/bind var/run/ chown -R bind:bind var/run/bind/run chmod -R u=rwX,g=rX,o= var/run/bind/run ln -s /var/chroot/bind/var/run/bind /var/run/ elif [ -e /var/run/named ] ; then # dist ≥ Debian Squeeze mv /var/run/named var/run/ chown -R root:bind var/run/named chmod -R u=rwX,g=rwX,o=rX var/run/named ln -s /var/chroot/bind/var/run/named /var/run/ else echo "*** ERREUR ***" fi if [ -e /run ] ; then # dist ≥ Debian Buster ln -s var/run fi |
Ligne 37: | Ligne 55: |
usermod -d /srv/chroot/bind bind | usermod -d /var/chroot/bind bind |
Ligne 40: | Ligne 58: |
sed -i '/^OPTIONS=/c OPTIONS="-u bind -t /srv/chroot/bind"' /etc/default/bind9 # configurer sysklogd pour accepter les messages de logs depuis le bind emprisoné (version Sarge) [ -r /etc/init.d/sysklogd -a ! -r /etc/default/syslogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /srv/chroot/bind/dev/log"#' /etc/init.d/sysklogd && invoke-rc.d sysklogd restart |
sed -i '/^OPTIONS=/c OPTIONS="-u bind -t /var/chroot/bind"' /etc/default/bind9 |
Ligne 46: | Ligne 61: |
[ -r /etc/default/syslogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /srv/chroot/bind/dev/log"#' /etc/default/syslogd && invoke-rc.d sysklogd restart | [ -r /etc/default/syslogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /var/chroot/bind/dev/log"#' /etc/default/syslogd && invoke-rc.d sysklogd restart |
Ligne 49: | Ligne 64: |
[ -r /etc/syslog-ng/syslog-ng.conf ] && sed -i '/unix-stream("\/dev\/log");/a\\t# bind9 chroot\n\tunix-stream("/srv/chroot/bind/dev/log");' /etc/syslog-ng/syslog-ng.conf && invoke-rc.d syslog-ng restart | [ -r /etc/syslog-ng/syslog-ng.conf ] && sed -i '/unix-stream("\/dev\/log");/a\\t# bind9 chroot\n\tunix-stream("/var/chroot/bind/dev/log");' /etc/syslog-ng/syslog-ng.conf && invoke-rc.d syslog-ng restart # configurer rsyslog pour accepter les messages de logs depuis le bind emprisoné (rsyslog vient par défaut avec Lenny) [ -r /etc/rsyslog.conf ] && echo '$AddUnixListenSocket /var/chroot/bind/dev/log' >> /etc/rsyslog.d/bind9.conf && invoke-rc.d rsyslog restart |
Ligne 54: | Ligne 72: |
{i} Il n'y a pas de moyen plus propre pour `sysklogd` dans Sarge (BogueDebian:241350) |
|
Ligne 65: | Ligne 81: |
17938 ? Ss 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind 17939 ? S 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind 17941 ? S 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind 17942 ? S 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind 17943 ? S 0:00 /usr/sbin/named -u bind -t /srv/chroot/bind |
17938 ? Ss 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17939 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17941 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17942 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17943 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind |
Ligne 72: | Ligne 88: |
Et on peut aussi vérifier que le répertoire racine du processus `named` est bien devenu `/srv/chroot/bind` : | Et on peut aussi vérifier que le répertoire racine du processus `named` est bien devenu `/var/chroot/bind` : |
Ligne 76: | Ligne 92: |
lrwxrwxrwx 1 root root 0 Jul 13 14:05 /proc/17938/root -> /srv/chroot/bind | lrwxrwxrwx 1 root root 0 Jul 13 14:05 /proc/17938/root -> /var/chroot/bind |
Ligne 82: | Ligne 98: |
Une bonne documentation sur les autres aspects largement aussi importants (allow-transfer, allow-query) : [http://www.security-labs.org/full-page.php3?page=411 Sécuriser un serveur de nom] (à copier-coller et adapter ici si besoin). | Une bonne documentation sur les autres aspects largement aussi importants (allow-transfer, allow-query) : [[http://www.security-labs.org/full-page.php3?page=411|Sécuriser un serveur de nom]] (à copier-coller et adapter ici si besoin). |
Ligne 84: | Ligne 100: |
["CatégorieRecommandationDRI"] | [[CatégorieRecommandationsARI]] |
Ce document décrit une procédure semi-automatique de sécurisation du service DNS avec bind9.
La version de bind9 disponible sous Debian est maintenant automatiquement lancée sous l'utilisateur bind par défaut, mais toujours pas en chroot, ce qui serait pourtant une bonne idée du point de vue sécurité.
Mettre en place la protection
# stopper l'exécution de bind pendant son emprisonnement invoke-rc.d bind9 stop # créer la prison pour bind mkdir -p /var/chroot/bind cd /var/chroot/bind mkdir -p dev etc var/cache var/run cp -a /dev/log /dev/null /dev/random dev/ cp -p /etc/localtime etc/ # la configuration mv /etc/bind etc/ chown -R root:bind etc/bind chmod -R u=rwX,g=rX,o= etc/bind ln -s /var/chroot/bind/etc/bind /etc/ # fichiers racine DNS if [ -e /usr/share/dns ] ; then # dist ≥ Debian Buster mkdir -p usr/share cp -a /usr/share/dns usr/share/ fi # le cache mv /var/cache/bind var/cache/ chown -R bind:bind var/cache/bind chmod -R u=rwX,g=rX,o= var/cache/bind ln -s /var/chroot/bind/var/cache/bind /var/cache/ # le pid if [ -e /var/run/bind ] ; then # dist < Debian Squeeze mv /var/run/bind var/run/ chown -R bind:bind var/run/bind/run chmod -R u=rwX,g=rX,o= var/run/bind/run ln -s /var/chroot/bind/var/run/bind /var/run/ elif [ -e /var/run/named ] ; then # dist ≥ Debian Squeeze mv /var/run/named var/run/ chown -R root:bind var/run/named chmod -R u=rwX,g=rwX,o=rX var/run/named ln -s /var/chroot/bind/var/run/named /var/run/ else echo "*** ERREUR ***" fi if [ -e /run ] ; then # dist ≥ Debian Buster ln -s var/run fi # changer le répertoire personnel de bind vers sa future prison usermod -d /var/chroot/bind bind # modifier les options de demarrage de bind sed -i '/^OPTIONS=/c OPTIONS="-u bind -t /var/chroot/bind"' /etc/default/bind9 # configurer sysklogd pour accepter les messages de logs depuis le bind emprisoné (version Etch) [ -r /etc/default/syslogd ] && sed -i '/^SYSLOGD=/s#"\(.*\)"#"\1 -a /var/chroot/bind/dev/log"#' /etc/default/syslogd && invoke-rc.d sysklogd restart # configurer syslog-ng pour accepter les messages de logs depuis le bind emprisoné [ -r /etc/syslog-ng/syslog-ng.conf ] && sed -i '/unix-stream("\/dev\/log");/a\\t# bind9 chroot\n\tunix-stream("/var/chroot/bind/dev/log");' /etc/syslog-ng/syslog-ng.conf && invoke-rc.d syslog-ng restart # configurer rsyslog pour accepter les messages de logs depuis le bind emprisoné (rsyslog vient par défaut avec Lenny) [ -r /etc/rsyslog.conf ] && echo '$AddUnixListenSocket /var/chroot/bind/dev/log' >> /etc/rsyslog.d/bind9.conf && invoke-rc.d rsyslog restart # enfin, redemarrer bind dans sa prison ! invoke-rc.d bind9 start
Vérifier que tout va bien
En surveillant, comme d'habitude, le contenu du fichier /var/log/daemon.log qui ne doit pas contenir d'erreur ou d'avertissement (warning) suite aux redémarrage des deux services.
En faisant un ps ax | grep named, le résultat doit ressembler à cela :
# ps ax | grep named 17938 ? Ss 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17939 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17941 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17942 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind 17943 ? S 0:00 /usr/sbin/named -u bind -t /var/chroot/bind
Et on peut aussi vérifier que le répertoire racine du processus named est bien devenu /var/chroot/bind :
# ls -l /proc/17938/root lrwxrwxrwx 1 root root 0 Jul 13 14:05 /proc/17938/root -> /var/chroot/bind
Documentation
Une bonne documentation sur les autres aspects largement aussi importants (allow-transfer, allow-query) : Sécuriser un serveur de nom (à copier-coller et adapter ici si besoin).