Table des matières
< retour à la page de l'administration technique
Chaque serveur de FedeRez est configuré pour être mis à jour via apt-dater.
Comment faire les mises à jour ?
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 ...
Installation sur les hosts
Il est nécessaire de configurer chaque host pour que apt-dater puisse s'y connecter et le mettre à jour.
Installation manuelle
On installe tout simplement apt-dater-host
sudo apt-get install apt-dater-host
Puis on crée un utilisateur pour apt-dater
sudo useradd -r -m apt-dater sudo adduser apt-dater ssh sudo mkdir /home/apt-dater/.ssh sudo chmod 700 /home/apt-dater/.ssh/ && sudo chown apt-dater:apt-dater /home/apt-dater/.ssh
On va ensuite donner le droit à cet utilisateur de faire juste ce dont on a besoin qu'il fasse
sudo visudo # pour éditer /etc/sudoers
Dans ce fichier on s'assure qu'il y ai
apt-dater ALL=NOPASSWD: /usr/bin/apt-get, /usr/sbin/needrestart
Pour que apt-dater puisse lancer apt-get et needrestart.
On va ensuite ajouter la clé ssh du contrôleur
sudo vim /home/apt-dater/.ssh/authorized_keys
La clé à copier est la suivante (à l'heure de l'écriture de cette doc, le contrôleur est sur carlosgon)
ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBABiFSxq4uwdxLv6PoR3yDots5thriIXRWl2+2h1PVLfF2OhpoijdcOedKKATHlvbq5J7m8vwYV7kscEICMS1KoG1gA0E56aR47yY1e3XN1OnqmXQ/XbglsAaWouygURcevEQoPxso/Kei3wXTGFOcnjzQA311CMBUrOsZmqEy0lp84nrg== apt-dater@carlosgon
Ne pas oublier de changer l'owner du fichier…
sudo chown apt-dater:apt-dater /home/apt-dater/.ssh/authorized_keys
Il ne faut pas oublier d'ajouter la nouvelle machine au contrôleur !
Installation via Ansible
Il y a un rôle ansible pour faire ça : https://gitlab.federez.net/federez/ansible-apt-dater/. Il se lance avec le ansible federez.
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.
Configuration du contrôleur, ajout d'hôtes
Quelques éléments de configuration du contrôleur, notamment en ce qui concerne l'ajout d'hosts. Le fichier qui nous intéresse est dans /etc/apt-dater/hosts.xml
. Sa structure est assez simple à comprendre. Il faut juste penser à y ajouter les nouveaux hosts.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hosts SYSTEM "file:///usr/share/xml/schema/apt-dater/hosts.dtd"> <hosts xmlns:xi="http://www.w3.org/2001/XInclude"> <group name="Virtualiseurs"> <host name="ronderu.federez.net" comment="Virtualiseur VR"/> <host name="kdell.federez.net" comment="Virtualiseur au Crans"/> </group> <group name="Kdell (conteneurs et machines virtuelles)"> <host name="gitlab-runner.federez.net" /> <host name="myriagon.federez.net" /> <host name="nonagon.federez.net" /> <host name="octogon.federez.net" /> <host name="parangon.federez.net" /> <host name="pentagon.federez.net" /> </group> <group name="Ronderu (conteneurs et machines virtuelles)"> <host name="argon.federez.net" /> <host name="chiliagon.federez.net" /> <host name="hendecagon.federez.net" /> <host name="icosagon.federez.net" /> <host name="federez-test.federez.net" /> <host name="dragon.federez.net" /> <host name="memoragon.federez.net" /> <host name="carlosgon.federez.net" /> </group> <group name="Serveurs externes"> <host name="dodecagon.federez.net"/> <host name="coronagon.federez.net"/> <host name="saigon.federez.net"/> </group> </hosts>
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
- Site officiel : http://www.ibh.de/apt-dater/
- Référence pour la config et la sécurisation d'apt-dater : https://sdeziel.info/apt-dater/index.html