Outils pour utilisateurs

Outils du site


admin:services:apt-dater

Ceci est une ancienne révision du document !


< retour à la page de l'administration technique

Chaque serveur de FedeRez est configuré pour être mis à jour via apt-dater.

Infos générales

En speed

Ajouter une clef pour un admin sur une machine managée par apt-dater

Sur chaque machine(s) concernée(s) (en gros hexagon, quigon et baldrick):

:!: Attention ici exemples de zertrin et David_5.1, adapter les clefs et les IP autorisées à votre cas !

# en tant que root
cat << EOF >> ~aptdater/.ssh/authorized_keys
no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc,no-X11-forwarding,from="127.0.0.0/8,91.121.177.109,2001:41d0:1:f26d::1" ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBADNkXj0+teRl15r6PasiFBCSy4TPIzBQwpyR+DqDwkd4l6B23wY0A/psfZMoSPV6c2PxgOh7WKZMMrturZTR4wUBAACUHVxJCvroLwbaJvJNqVRBqUhNluWoNLSVpSIskoGOEf9E1dtAM24nZdqThBUFTnK7Ws2umPtiybncpUJOL/UPg== david@sinquin/ks51
no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc,no-X11-forwarding,from="127.0.0.0/8,91.121.136.69,2001:41d0:1:b745::1" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO2O2dQgm7g2/M2Jg9xkSKhPqjHTK/Jx0pOIVP/CDSuv zertrin@gluon
EOF

Installer apt-dater sur une machine de management

Installation du paquet (exemple Debian, pour les autres distros, débrouillez vous !):

apt-get install apt-dater

En tant qu'utilisateur normal, lancer une première fois apt-dater et quittez immédiatement. Cela aura pour effet de créer les fichiers de configuration d'apt-dater dans $XDG_CONFIG_HOME/apt-dater (c'est à dire en général ~/.config/apt-dater).

Modifier ~/.config/apt-dater/hosts.conf :

Ajouter (ou remplacer l'entrée d'exemple IBH par) :

[FedeRez]
Hosts=aptdater@hexagon.federez.net;aptdater@quigon.federez.net;aptdater@baldrick.federez.net;

Relancer apt-dater, les serveurs seront dans la section Unknown. Rafraichir les serveurs avec la commande g. En cas de soucis, la commande e aide au diagnostic.

Mise en place initiale d'apt-dater sur les machines managées

Note: toutes les étapes ci-dessous se font en tant que superutilisateur.

Installation

Installation du paquet :

apt-get install apt-dater-host

Configuration initiale

La config suivie ici s'inspire très fortement de celle disponible sur https://sdeziel.info/apt-dater/index.html.

Ajout d'un utilisateur dédié

adduser --quiet --system --home /var/lib/aptdater --group --shell /bin/sh aptdater
adduser aptdater ssh

Configuration de SSH pour apt-dater

On n'autorise que des connexions par clef depuis certaines IPs et on n'autorise que l'exécution d'un wrapper de sécurisation:

mkdir -m 0700 ~aptdater/.ssh

Ajout de la clef d'un admin dans le authorized_keys d'aptdater:

:!: Attention ici exemple de David_5.1, adapter la clef et les IP autorisées à votre cas !

touch ~aptdater/.ssh/authorized_keys
chown aptdater: -R ~aptdater/.ssh
cat << EOF >> ~aptdater/.ssh/authorized_keys
no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc,no-X11-forwarding,from="127.0.0.0/8,91.121.177.109,2001:41d0:1:f26d::1" ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBADNkXj0+teRl15r6PasiFBCSy4TPIzBQwpyR+DqDwkd4l6B23wY0A/psfZMoSPV6c2PxgOh7WKZMMrturZTR4wUBAACUHVxJCvroLwbaJvJNqVRBqUhNluWoNLSVpSIskoGOEf9E1dtAM24nZdqThBUFTnK7Ws2umPtiybncpUJOL/UPg== david@sinquin/ks51
EOF

Configuration de sudo pour apt-dater

cat << "EOF" >> /etc/sudoers.d/apt-dater-host
# package installation is denied
aptdater ALL = (root) NOPASSWD: /usr/bin/apt-get update
aptdater ALL = (root) NOPASSWD: /usr/bin/apt-get clean
aptdater ALL = (root) NOPASSWD: /usr/bin/apt-get dist-upgrade
aptdater ALL = (root) NOPASSWD: /usr/bin/apt-get --assume-yes dist-upgrade
aptdater ALL = (root) NOPASSWD: /usr/bin/apt-get dist-upgrade --assume-yes
aptdater ALL = (root) NOPASSWD: /usr/bin/apt-get --quiet --simulate --fix-broken --allow-unauthenticated dist-upgrade
aptdater ALL = (root) NOPASSWD: /usr/bin/apt-get dist-upgrade --quiet --simulate --fix-broken --allow-unauthenticated
aptdater ALL = (root) NOPASSWD: /usr/sbin/needrestart
EOF
chmod 0440 /etc/sudoers.d/apt-dater-host

Demande de validation des mise à jour

Pour qu'une demande de confirmation de la liste des paquets à mettre à jour soit faite, il faut modifier /etc/apt-dater-host.conf pour qu'il contienne ASSUMEYES=0; :

sed -i 's/^$ASSUMEYES=1;$/$ASSUMEYES=0;/' /etc/apt-dater-host.conf

Limitation de la priorité d'apt-dater apt-dater (optionnel)

printf "aptdater\t-\tpriority\t10\n" > /etc/security/limits.d/aptdater.conf

Création d'un wrapper pour sécuriser apt-dater

Ce qui suit n'a jamais été aperçu en état de marche, il est donc déconseillé de l'appliquer sans autre forme de procès.

À placer dans /usr/local/bin/apt-dater-host-wrapper

#!/bin/sh
 
set -e
set -u
 
# Explicitly set the PATH to that of ENV_SUPATH in /etc/login.defs and unset
# various other variables. For details, see:
# https://wiki.ubuntu.com/SecurityTeam/AppArmorPolicyReview#Execute_rules
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export ENV=
export CDPATH=
 
LOGGER="/usr/bin/logger"
APT_DATER_HOST="$(which apt-dater-host)"
KILL="/bin/kill"
SLEEP="/bin/sleep"
 
# Install command allowed?
INSTALL_ALLOWED="false"
if [ "$#" -eq 1 ]; then
  if [ "$1" = "--install-allowed" ]; then
    INSTALL_ALLOWED="true"
  fi
fi
 
illegal_command() {
  # Do not log SSH_ORIGINAL_COMMAND for security reasons
  $LOGGER "$(basename $0) illegal command denied"
  # Default deny
  $KILL -9 $PPID
  exit 0
}
 
check_ssh_command() {
  if [ "$#" -lt 2 ]; then
    # not in the form of apt-dater-host upgrade
    illegal_command
  fi
 
  if [ "$1" != "apt-dater-host" ]; then
    # not invoking apt-dater-host
    illegal_command
  else
    # Remove the 1st arg with later replace it with the
    # fully qualified path to apt-dater-host
    shift
  fi
 
  COMMAND="$1"
  shift
 
  if [ "$COMMAND" = "refresh" -o "$COMMAND" = "kernel" ]; then
    $APT_DATER_HOST $COMMAND
  elif [ "$COMMAND" = "upgrade" ]; then
    # Don't kill the shell session right away when
    # upgrading/installing to please apt-dater
    $APT_DATER_HOST $COMMAND && $SLEEP 0.5
  elif [ "$COMMAND" = "install" ]; then
    if [ "$INSTALL_ALLOWED" = "true" ]; then
      # Don't kill the shell session right away when
      # upgrading/installing to please apt-dater
      $APT_DATER_HOST $COMMAND $* && $SLEEP 0.5
    else
      illegal_command
    fi
  fi
}
 
if [ -z "$SSH_ORIGINAL_COMMAND" ]; then
  illegal_command
fi
 
case "$SSH_ORIGINAL_COMMAND" in
  *\&*)
    illegal_command
    ;;
  *\(*)
    illegal_command
    ;;
  *\{*)
    illegal_command
    ;;
  *\;*)
    illegal_command
    ;;
  *\>*)
    illegal_command
    ;;
  *\`*)
    illegal_command
    ;;
  *\|*)
    illegal_command
    ;;
  apt-dater-host\ refresh)
    check_ssh_command $SSH_ORIGINAL_COMMAND
    ;;
  apt-dater-host\ upgrade)
    check_ssh_command $SSH_ORIGINAL_COMMAND
    ;;
  apt-dater-host\ install\ *)
    check_ssh_command $SSH_ORIGINAL_COMMAND
    ;;
  apt-dater-host\ kernel)
    check_ssh_command $SSH_ORIGINAL_COMMAND
    ;;
  *)
    illegal_command
    ;;
esac

En oubliant pas de le rendre exécutable:

chmod 0755 /usr/local/bin/apt-dater-host-wrapper

Le contrôleur

Le contrôleur se trouve sur carlosgon.

Note : cette section est fortement inspiré de la doc du Rézo Metz

Installation du contrôleur

sudo apt-get install apt-dater

On crée l'user 'apt-dater' :

useradd -r -m apt-dater -g apt-dater
mkdir /home/apt-dater/.ssh
chmod 700 /home/apt-dater/.ssh/ && chown apt-dater:apt-dater /home/apt-dater/.ssh

On crée une clef SSH sur le contrôleur :

ssh-keygen -t ecdsa -b 521

Ensuite, on restreint l'utilisation du compte apt-dater à carlosgon en éditant '/etc/security/access.conf' pour avoir :

+ : apt-dater : localhost 127.0.0.1 ::1 carlosgon.federez.net
- : apt-dater : ALL

et '/etc/pam.d/sshd' pour décommenter :

account  required     pam_access.so

Ainsi, il sera nécessaire de rebondir sur carlosgon pour utiliser apt-dater.

Utiliser apt-dater sur le contrôleur

Le contrôleur se trouve actuellement sur carlosgon.

On se connecte au contrôleur en tant qu'user apt-dater via SSH.
Pour cela, on se crée une clé SSH personnelle (évidemment protégée par une passphrase), que l'on ajoute aux clés autorisées pour l'user apt-dater sur le contrôleur :

user@carlosgon : ssh-keygen -t ecdsa -b 521

en root (on peut utiliser la commande suivante pour passer en root : sudo -Es; on sort ensuite avec exit / Ctrl+D) :

cat ~$USER/.ssh/id_ecdsa.pub >> ~apt-dater/.ssh/authorized_keys

On peut alors faire :

ssh apt-dater@localhost

et utiliser apt-dater.

L'interface en ncurses est relativement simple, et il ne faut pas hésiter à lire la documentation en cas de doute.
Les machines sont triées par catégories, et il est conseillé de toujours commencer par mettre à jour des VM non critiques en premier, puis les VM critiques (passerelle, parefeu, BDD…), et enfin les hôtes de machines virtuelles.

À savoir : le R devant un hôte apt-dater signifie que cette machine nécessite un reboot.
Il faut soit s'y connecter et lancer un reboot dessus, soit le faire (pour une VM) depuis le virtualiseur, ce qui est moins propre mais plus pratique si il faut faire un reboot de masse.

On peut lancer une mise à jour d'un groupe de serveurs avec u et passer d'un serveur à l'autre avec n puis Ctrl+a, d pour sortir de chaque screen associé à un serveur.

Raccourci

Pour éviter de saisir toutes les commandes de connexion et d'avoir une clé sur era, on peut créer deux clés sur le client SSH. L'une servira pour une connexion classique au serveur, l'autre pour apt-dater. Dans le fichier de configuration SSH locale ~<you>/.ssh/config, mettre :

Host apt-dater
Hostname carlosgon.federez.net
User <you>
ForwardAgent yes
IdentityFile ~/.ssh/<identité_apt-dater_(rsa)>

Host carlosgon
Hostname carlosgon.federez.net
User <you>
IdentityFile ~/.ssh/<identité_serveurs>

L'option ForwardAgent transmet la clé utilisée pour la première connexion à l'agent du proxy pour pouvoir l'utiliser lors de la seconde connexion. C'est ainsi que l'on se passe d'une clé apt-dater sur era.

Ensuite, on demande à era de d'exécuter certaines actions lorsque l'on offre la première clé. Dans ~<you>/.ssh/authorized_keys sur carlosgon, en plus de mettre les deux clés publiques, on ajoute l'option command à la première.

command="ssh -t apt-dater@localhost apt-dater" ssh-rsa ...

Liens (potentiellement) utiles

admin/services/apt-dater.1587846126.txt.gz · Dernière modification : 2020/04/25 22:22 de zertrin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki