Projet

Général

Profil

Fat Client without desktop » Historique » Version 10

« Précédent - Version 10/19 (diff) - Suivant » - Version actuelle
Laurent Flori, 21/12/2017 10:25


Client lourd sans bureau graphique et log centralisés sur le serveur

  • Démarrer une machine en pxe
  • Monter le root filesystem depuis ndb
  • Installer et configurer ssh-server
  • Gestion des logs centralisés

Pour reproduire instancier une machine aca eolebase 2.6.2 (NON instanciée) avec une seconde interface sur le réseau pédago1

cat >> /etc/network/interfaces << EOF
auto ens5
iface ens5 inet static
    address 10.1.2.254
    netmask 255.255.255.0
EOF
ifup ens5
Query-Auto

Préparer le serveur

Génrérer une pare de clefs ssh pour root

ssh-keygen -t rsa

Installer les paquets nécessaires

apt-get install dnsmasq pxelinux squashfs-tools nbd-server ltsp-server debootstrap systemd-journal-remote

Configuration du serveur de log

- Créer et donner les droits adéquats au répertoire de destination pour les logs des hôtes distants:

mkdir -p /var/log/journal/remote
chown -R systemd-journal-remote /var/log/journal/remote/

Créer un fichier /root/make_certs avec le contenu suivant

#!/bin/bash

SERVER=10.1.2.254
CLIENT=client

mkdir -p certs/{server,client} && cd certs

openssl req -newkey rsa:2048 -days 3650 -x509 -nodes -out ca.pem -keyout ca.key -subj '/CN=Certificate authority/'

cat >ca.conf <<EOF
[ ca ]
default_ca = this

[ this ]
new_certs_dir = .
certificate = ca.pem
database = ./index
private_key = ca.key
serial = ./serial
default_days = 3650
default_md = default
policy = policy_anything

[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
EOF

touch index
echo 0001 >serial

#Server
openssl req -newkey rsa:1024 -nodes -out ./server/$SERVER.csr -keyout ./server/$SERVER.key -subj "/CN=$SERVER/" 
openssl ca -batch -config ca.conf -notext -in ./server/$SERVER.csr -out ./server/$SERVER.pem

#Client
openssl req -newkey rsa:1024 -nodes -out ./client/$CLIENT.csr -keyout ./client/$CLIENT.key -subj "/CN=$CLIENT/" 
openssl ca -batch -config ca.conf -notext -in ./client/$CLIENT.csr -out ./client/$CLIENT.pem

Générer les certficats

chmod +x make_certs && ./make_certs

Mettre en place les clefs pour le serveur

mkdir /etc/ssl/journal
cp /root/certs/ca.pem /etc/ssl/journal/
cp /root/certs/server/10.1.2.254{.key,.pem} /etc/ssl/journal/

Editer la configuration du service systemd-journal-remote:

cat > /etc/systemd/journal-remote.conf << EOF
[Remote]
 Seal=false
 SplitMode=host
 ServerKeyFile=/etc/ssl/journal/10.1.2.254.key
 ServerCertificateFile=/etc/ssl/journal/10.1.2.254.pem
 TrustedCertificateFile=/etc/ssl/journal/ca.pem
EOF

Redémarrer le serveur systemd-journal-remote

systemctl restart systemd-journal-remote

Configuration (très minimale) du serveur dnsmasq

cp /etc/dnsmaq.conf /etc/dnsmasq.conf.orig
cat > /etc/dnsmasq.conf << EOF
dhcp-boot=pxelinux.0
dhcp-range=10.1.2.10,10.1.2.50,12h
enable-tftp
interface=ens5
tftp-root=/var/lib/tftpboot/ltsp/Eole
EOF

Créer les répertoires tftp

mkdir -p /var/lib/tftpboot/ltsp/Eole

Redémarrer le server dnsmasq
systemctl restart dnsmasq

Configuration de l'environement de construction des images lstp

Se rendre dans le répertoire /usr/share/ltsp/plugins/ltsp-build-client/:

cd /usr/share/ltsp/plugins/ltsp-build-client/
cp -a Ubuntu Eole && cd Eole

Supprimer un plugin (on ne veut jamais de serveur graphique)

rm 030-artwork

On crée deux plugins:

- Gérer correctement le path nbdroot au boot

cat > 031-nbd-root << 'EndPlugin'
#Gestion du path nbd pour l'image embarquée
case "$MODE" in
    after-install)
        sed -i 's?CMDLINE_NBD.*$?CMDLINE_NBD="root=/dev/nbd0 nbdroot='$NBDSERVER${BASE%/}/$CHROOT'"?' $BASE/$CHROOT/etc/ltsp/update-kernels.conf
        ;;
esac

EndPlugin

- Paramétrer le serveur ssh

cat > 050-ssh-custom << 'EndPlugin'
#Gestion du serveur ssh:
# - activation
# - connexion du root par clef
# - copie de la clef du root
case "$MODE" in
    commandline)
            add_option "root-ssh-pubkey" "`eval_gettext "enable root access pubkey"`" "advanced" "true" 
            ;;
    configure)
            if [ -n "$option_root_ssh_pubkey_value" ]; then
                ROOT_SSH_PUBKEY="$option_root_ssh_pubkey_value" 
            fi
            ;;
    finalization)
            if [ $ROOT_SSH_PUBKEY ];then
                    echo "Enabling SSH server" 
                    sed -i 's/^ssh/#ssh/' $BASE/$CHROOT/usr/share/ltsp/init-ltsp.d/50-rm-system-services
                    sed -i 's/^#PermitRootLogin/PermitRootLogin/' $BASE/$CHROOT/etc/ssh/sshd_config
                    mkdir $BASE/$CHROOT/root/.ssh
                    cat $ROOT_SSH_PUBKEY > $BASE/$CHROOT/root/.ssh/authorized_keys
                    sed -i 's?^etc/ssh/?#etc/ssh/?' /etc/ltsp/ltsp-update-image.excludes
            fi
        ;;
esac

EndPlugin

Préparer un fichier de construction pour le client:

cat > /etc/ltsp/ltsp-build-client.conf << 'EOF'
VENDOR=Eole
ARCH=amd64
BASE=/opt/ltsp
CHROOT=${VENDOR}
MIRROR="http://test-eole.ac-dijon.fr/ubuntu/" 
EXTRA_MIRROR="http://eole.ac-dijon.fr/eole eole-2.6.2 main cloud" 
APT_KEYS="/etc/apt/trusted.gpg.d/eole-archive-keyring.gpg" 
DIST=artful
APT_GET_OPTS="-y --no-install-recommends" 
FAT_CLIENT_DESKTOPS="tmux" 
EARLY_PACKAGES="ltsp-client-core" 
LATE_PACKAGES="openssh-server systemd-journal-remote" 
EOF

Commenter les lignes pour les clefs ssh et pour .root dans le fichier /etc/ltsp/ltsp-update-image.excludes

Lancer la génération de l'image

ltsp-build-client --config /etc/ltsp/ltsp-build-client.conf --prompt-rootpass --skipimage

Installer les clefs pour systemd-journal-upload

mkdir /opt/ltsp/Eole/etc/ssl/journal/
cp /root/certs/ca.pem /opt/ltsp/Eole/etc/ssl/journal/
cp /root/certs/client/client{.pem,.key} /opt/ltsp/Eole/etc/ssl/journal/

Configurer systemd-journal-upload dans l'image

cat > /opt/ltsp/Eole/etc/systemd/journal-upload.conf << EOF
[Upload]
 URL=10.1.2.254
 ServerKeyFile=/etc/ssl/journal/client.key
 ServerCertificateFile=/etc/ssl/journal/client.pem
 TrustedCertificateFile=/etc/ssl/journal/ca.pem
EOF

Activer systemd-journal-upload au démarrage et ssh

ltsp-chroot -a Eole -m
systemctl enable systemd-journal-upload
systemctl enable ssh

On peut supprimer rsyslog de l'image

apt-get remove rsyslog

On peut reconstuire l'image

exit
ltsp-update-image Eole

Lancer la consultation des logs sur le le serveur

journalctl -D /var/log/journal/remote/ -f

Démarrer une machine en PXE et regarder les logs arriver sur le serveur