diff --git a/procédures/création_pm.md b/procédures/création_pm.md index dd97d14..636f8a7 100644 --- a/procédures/création_pm.md +++ b/procédures/création_pm.md @@ -2,51 +2,437 @@ Le but est d'intégrer une nouvelle machine physique dans le SI. -## Configuration initiale la machine -- installer Libreboot ; -- installer une Debian stable, branche main ; -- créer le sudoer, sans mot de passe, authentification ssh clé publique : admin666 ; -- créer un utilisateur cominfra, sans mot de passe, authentification ssh clé publique ; -- remplacer le noyau par Linux-libre-lts à l'aide du [tutoriel de la FSFLA](https://www.fsfla.org/ikiwiki/selibre/linux-libre/freesh.en.html). +## Installer un microprogramme libre +## Installation du système d'exploitation FSDG (Trisquel) -## Installer les paquets de base +### Préparation du média d'installation + +Récupérer l'image [Trisquel NetInstall](https://trisquel.info/fr/wiki/%EF%BB%BFinstallation-de-trisquel-netinstall-en-mode-texte), qui est la plus adaptée à [l'installation de serveurs](https://trisquel.info/en/wiki/install-trisquel-server). + +A la date d'écriture de cette procédure, on utilise Trisquel version 11 (Aramo) via la console série, sans écran. + +### Installation du système + +#### Démarrer le média d'installation sur la console série + +Utiliser `TAB` pour éditer la ligne de commande du menu de démarrage du média et remplacer +dans la ligne de commande du noyau `vga=788` par `console=ttyS0,115200n8`. + +Supprimer également la directive `quiet`. + +Appuyer sur entrée pour continuer le démarrage. + +#### Configuration de la langue et position + +Installer avec la langue anglaise et la locale `en_US.UTF8`. + +Indiquer le lieu en France, utiliser le miroir allemand. + +#### Création de l'utilisateur d'administration + +Créer l'utilisateur `admin666` avec un mot de passe fort. + +Enregistrer ce mot de passe dans le coffre (section infra générale). + +#### Partitionnement des disques + +Partitionner selon le schéma voulu pour la machine spécifique. Par exemple avec du RAID logiciel sur deux disques, une partition de démarrage (en `ext2`), une partition racine et une partition de stockage de machine virtuelle. + +#### Sélection des paquets de base de l'installateur + +Choisir d'installer `postfix`, `openssh` et `Trisquel console environment`. + +##### Configurer `postfix` + +Indiquer de configurer `postfix` en mode local. + +##### Configurer `GRUB` + +Installer GRUB sur le premier disque contenant une partition de démarrage. + +### Configuration critique du système + +#### Programme de démarrage (`grub`) + +Au premier démarrage du système, afin de pouvoir accéder à la console série, modifier la ligne de commande du noyau dans l'interface de GRUB avec la touche `e`. Ajouter la directive `console=ttyS0,115200n8` à la ligne `linux`. + +Une fois le système démarré, modifier le fichier `/etc/default/grub` : ``` -sudo apt install etckeeper molly-guard tig lm-sensors fancontrol screen emacs-nox vrms needrestart iotop htop curl ncdu iptraf tig unzip +GRUB_DEFAULT=0 +GRUB_TIMEOUT=5 +GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` +GRUB_CMDLINE_LINUX_DEFAULT="libata.force=noncq nohz=on console=ttyS0,115200n8" +GRUB_CMDLINE_LINUX="" + +GRUB_TERMINAL=serial +GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1" ``` -_NB: penser à configurer fancontrol ensuite._ - -## Paramétrage réseau - -Il faut corriger l'IPV6 statique à l'image de l'IPV4 choisie en éditant - ̀`/etc/network/interfaces`. - -On doit aussi nommer la machine : +Effectuer ensuite : ``` -sudo hostnamectl set-hostname NOM@DOMAINE +update-grub +update-initramfs -u ``` -On configure ensuite le routage : +#### Programme de redémarrage (`kexec`) + +Les démarrages gérés par le BIOS sont parfois longs et risqués, on préfère utiliser kexec. + +Installer avec : +``` +apt install kexec-tools. +``` + +#### Reconfiguration de la langue + +Utiliser la commande `dpkg-reconfigure locales` et sélectionner uniquement `fr_FR.UTF8`. + +Redémarrer à l'issue de cette commande. + + +### Installation des paquets de base +``` +apt install etckeeper molly-guard tig lm-sensors fancontrol screen emacs-nox needrestart iotop htop atop usbtop curl ncdu iptraf tig unzip ufw ifupdown net-tools bridge-utils +``` + +### Paramétrage réseau + +Il faut passer de netplan.io à networking : +``` +apt purge netplan.io +``` + +Éditer le service de résolution DNS dans `/etc/systemd/resolved.conf`, et modifier la ligne `#DNS=` en `DNS=192.168.0.1` (correspondant à l'adresse du routeur). + +Relancer le service : +``` +systemctl restart systemd-resolved +``` + +Supprimer le fichier `/etc/resolv.conf` et le regénérer : +``` +rm /etc/resolv.conf +ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf +``` + +Configurer dans `/etc/network/interfaces` : +``` +auto lo br0 +iface lo inet loopback +allow-hotplug ens10 +allow-hotplug ens9 + +# bridge for vm +iface br0 inet static + bridge_ports ens10 + address 192.168.1.2 + gateway 192.168.0.1 + broadcast 192.168.255.255 + netmask 255.255.0.0 + +iface br0 inet6 static + bridge_ports ens10 + address 2001:910:1028:0::2/128 + gateway 2001:910:1028::1 +``` + +Configurer ensuite le routage sur le routeur : + - aller sur https://routeur.libre-en-communs.org/cgi-bin/luci/admin/network/dhcp ; - onglet Static Leases, bouton Add : - - Hostname : nom de PM en domaine ; - - MAC : dispo sur la machine ; + - Hostname : nom de PM en domaine, + - MAC : dispo sur la machine, - IPv4 : choisir une 192.168.0.x (réservé infra générale, pour les machines physiques). - valider les changements. -## Configurer le courriel +Redémarrer la machine à la fin de ces étapes. +### Configuration SSH (`OpenSSH`) + +Créer l'utilisateur `cominfra` pour servir de proxy de connexion, sans mot de passe : ``` -sudo apt install postfix +adduser cominfra ``` -Il faut installer postfix en mode satellite et le faire envoyer les courriels vers mail.a-lec.org. - -## Installer et configurer la virtualisation +Placer toutes les clés publiques nécessaires dans `/home/cominfra/.ssh/authorized_keys` et +dans `/home/admin666/.ssh/authorized_keys`. +Configurer le serveur OpenSSH avec le fichier `/etc/ssh/sshd_config` : ``` -sudo apt install libvirt +Port 222 +AddressFamily any +ListenAddress 0.0.0.0 +ListenAddress :: +PubkeyAuthentication yes +PasswordAuthentication no +PermitEmptyPasswords no +ChallengeResponseAuthentication no +UsePAM yes +AllowAgentForwarding yes +AllowTcpForwarding yes +GatewayPorts yes +X11Forwarding no +PrintMotd no +TCPKeepAlive yes +PermitTunnel yes +AcceptEnv LANG LC\_* GIT\_* +Subsystem sftp /usr/lib/openssh/sftp-server +Match User admin666 Address *,!192.168.0.0/16,!::1,!127.0.0.1 + DenyUsers admin666 ``` +### Configuration de `sudo` +Utiliser la commande : +``` +sudo visudo +``` + +Modifier la ligne `%sudo ALL=(ALL:ALL) ALL` en `%sudo ALL=(ALL:ALL) NOPASSWD:ALL`. + +### Configuration du pare-feu (`UFW`) + +Autoriser les ports 222, 25, 5665, 68, 7789, 16514, 49152, 49153, 3493 : +``` +ufw allow 25 +ufw allow 68 +ufw allow 222 +ufw allow 3493 +ufw allow 5665 +ufw allow 7789 +ufw allow 16514 +ufw allow 49152 +ufw allow 49153 +``` + +Activer le pare-feu +``` +ufw enable +``` + +### Configuration du MTA (`Postfix`) + +Il faut configurer le MTA pour qu'il relaie les courriels vers mail.a-lec.org. + +Éditer `/etc/postfix/transport` : +``` +a-lec.org : +* discard: +``` + +Éditer `/etc/postfix/virtual` : +``` +@localhost admin@a-lec.org +@anthea.libre-en-communs.org admin@a-lec.org +``` + +Valider les changements : +``` +postmap /etc/postfix/transport +postmap /etc/postfix/virtual +postfix reload +``` + +### Configuration du moteur de virtualisation (`KVM + libvirt`) + +Installer les paquets : +``` +apt install qemu-kvm libvirt-daemon-system libvirt-clients +``` + +Créer un nouvel utilisateur dédié : virt-user +``` +adduser virt-user +adduser virt-user libvirt +``` + +### Configuration de `htop` + +Éditer le fichier `~/.config/htop/htoprc` pour les comptes `admin666` et `root` : +``` +fields=0 48 17 18 38 39 40 2 46 47 49 1 +sort_key=0 +sort_direction=1 +tree_sort_key=0 +tree_sort_direction=1 +hide_kernel_threads=1 +hide_userland_threads=0 +shadow_other_users=0 +show_thread_names=0 +show_program_path=1 +highlight_base_name=0 +highlight_megabytes=1 +highlight_threads=1 +highlight_changes=0 +highlight_changes_delay_secs=5 +find_comm_in_cmdline=1 +strip_exe_from_cmdline=1 +show_merged_command=0 +tree_view=0 +tree_view_always_by_pid=0 +header_margin=1 +detailed_cpu_time=0 +cpu_count_from_one=0 +show_cpu_usage=1 +show_cpu_frequency=0 +show_cpu_temperature=0 +degree_fahrenheit=0 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=0 +enable_mouse=1 +delay=15 +left_meters=LeftCPUs2 Blank Memory DiskIO NetworkIO Systemd +left_meter_modes=1 2 1 2 2 2 +right_meters=RightCPUs2 Blank CPU LoadAverage Tasks Uptime +right_meter_modes=1 2 1 2 2 2 +hide_function_bar=0 +``` + +### Configuration de `bash` + +Éditer `/etc/skel/.bashrc` et `/home/admin666/.bashrc` : + +
+``` +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. + +shopt -s checkwinsize + + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "\[\033[01;32m\]=(^-^)=${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='\[\033[01;32m\]=(^-^)=${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='=(^-^)=${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi + +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;=(^-^)=${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi +``` +
+ +Éditer le fichier `/root/.bashrc` : +``` +# ~/.bashrc: executed by bash(1) for non-login shells. + +# Note: PS1 and umask are already set in /etc/profile. You should not +# need this unless you want different defaults for root. +# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' +PS1='\[\033[01;32m\]=(^-^)=${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' + +# You may uncomment the following lines if you want `ls' to be colorized: +# export LS_OPTIONS='--color=auto' +# eval "`dircolors`" +alias ll='ls $LS_OPTIONS -l' + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi + +# more aliases +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi +```