Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

Red Hat, Alma Linux : Installer et configurer un serveur FTP avec vsFTPd

Introduction



vsFTPd est un serveur FTP libre. Il permet de transférer des fichiers par Internet ou par le biais d'un réseau informatique local (intranet).
Toute personnes en ayant l'autorisation, peut télécharger et envoyer des fichiers. Il permet la création d'un espace anonyme.

Ce tutoriel est identique pour les bases Red Hat 8 et 9 (et dérivées)

Installation



Pour installer le serveur vsftpd, installer le paquet :

Code BASH :
dnf install vsftpd


Configurer vsftpd



La configuration se passe dans le fichier /etc/vsftpd/vsftpd.conf

Plus d'informations sur l'article : https://www.linuxtricks.fr/wiki/vsftpd-le-fichier-de-configuration-vsftpd-conf

Une fois paramétré, on active et démarre le service :

Code BASH :
systemctl enable --now vsftpd


Si on utilise SELinux, on autorise le FTP à accéder au système de fichiers :

Code BASH :
setsebool -P ftpd_full_access on


Et si on utilise Firewalld, on autorise le port FTP :

Code BASH :
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload


Se connecter



On peut utiliser le client lftp :

dnf install lftp

Dans l'exemple, je me connecte avec l'utilisateur adrien sur la machine 192.168.21.144 :
Code BASH :
lftp -u adrien 192.168.21.144


Voici un exemple de navigation, création de dossier et d'envoi de fichier :
Code TEXT :
Password: 
lftp adrien@192.168.21.144:~> cd ftp/
lftp adrien@192.168.21.144:~/ftp> 
lftp adrien@192.168.21.144:~/ftp> mkdir test
mkdir ok, `test' created     
lftp adrien@192.168.21.144:~/ftp/test> put Enigme8-HD.mp4
104630528 bytes transferred in 2 seconds (57.35 MiB/s)                 
lftp adrien@192.168.21.144:~/ftp/test> 
 

vsftpd : Le fichier de configuration vsftpd.conf

Introduction



Cet article récapitule les options de configuration du fichier vsftpd.conf pour un serveur FTP sous Linux.

Articles associés






Fichier de configuration



Le fichier de configuration est situé dans /etc/vsftpd/vsftpd.conf.
Il existe aussi des fichiers spécifiques dans /etc/vsftpd/

Activer le FTP Anonyme



Pour activer le FTP anonyme, permettant d'accéder au FTP sans compte d'utilisateur, modifier :

Code BASH :
anonymous_enable=YES


L'arborescence est le contenu du dossier personnel de l'utilisateur ftp (Sur CentOS : /var/ftp)

Pour désactiver, mettre la valeur sur NO.

Définir les ports du mode passif



Pour fixer les ports du client dans le cas d'un mode passif :
Code BASH :
pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100


Le FTP pour les utilisateurs locaux



Activer la connexion



Attention, le FTP n'étant pas sécurisé, les informations transitent en clair.

Pour permettre aux utilisateurs locaux d'écrire dans leur espace personnel :
Code BASH :
local_enable=YES
write_enable=YES
local_umask=022


Avec cela, les utilisateurs peuvent remonter dans l'arborescence du système.

Emprisonner les utilisateurs dans leur dossier personnel



Pour les emprisonner dans leur /home, activer les options :

Code BASH :
chroot_local_user=NO
chroot_list_enable=YES
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list


Créer le fichier /etc/vsftpd/chroot_list et indiquer (1 utilisateur par ligne) la liste des utilisateurs à chrooter.

Si la ligne chroot_local_user est à YES, tous les utilisateurs sont chrootés SAUF ceux de la liste.

La solution la plus sécure, est de retirer les droits du dossier chrooté de l'utilisateur et de créer un dossier dans lequel il a les droits d'écrire.

Exemple avec l'utilisateur adrien :
Code BASH :
mkdir /home/adrien/pub
chown -R adrien:adrien
chmod a-w /home/adrien


FTPS : Le FTP sur SSL



Pour configurer VSFTPD en utilisant FTPS (FTP sécurisé) avec un certificat voici comment procéder.

On doit d'abord posséder un certificat évidemment.
Si on en a pas on pourra en générer un "autosigné" avec la commande suivante :

Code BASH :
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem


On définit de bonnes permissions au fichier généré :
Code BASH :
chmod 600 /etc/vsftpd/vsftpd.pem


Et on ajoute ces options dans le fichier vsftpd.conf :

Code BASH :
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem


Troobleshooting



Connexion et actions lentes



Si vsftpd est lent à la connexion et que votre serveur n'utilise que l'IPv4n désactivez l'IPv6 sur le serveur et faites écouter vsftpd qu'en IPv4 :
Code BASH :
listen=YES
listen_ipv6=NO

fastfetch : Résumé original des infos système

Introduction



Fastfetch est un petit utilitaire en ligne de commande conçu pour afficher des informations système de base sur votre terminal de manière rapide et efficace. Développé en C, il est plus léger et rapide que d'autres alternatives telles que neofetch ou screenfetch

Il extrait rapidement les informations système essentielles telles que le nom de la distribution, le noyau, la version de la distribution, l'architecture du processeur, et plus encore, puis les affiche de manière claire et concise dans votre terminal.

Evidemment, l'affichage produit est personnalisable à souhait.

Installation



Pour installer fastfetch, il suffit d'installer le paquet du même nom :

Fedora
Code BASH :
dnf install fastfetch


Red Hat Enterprise Linux et dérivées (nécessite l'activation du dépôt EPEL) :
Code BASH :
dnf install fastfetch


Gentoo et dérivées :
Code BASH :
emerge -av app-misc/fastfetch


Debian, Ubuntu et dérivées :
Non disponible dans les dépôts, récupérer le .deb sur le github : https://github.com/fastfetch-cli/fastfetch/releases

Utilisation



Par défaut, fastfetch fonctionne en appelant simplement la commande fastfetch :

Code BASH :
fastfetch


La sortie produite est la suivante sur mon système :

fastfetch-defaut



On voit qu'on a le logo de la distribution utilisée ainsi que les informations suivantes :
- Utilisateur et nom de la machine
- Version et architecture du système d'exploitation utilisé
- Carte mère de l'hôte
- Version du noyau actuellement démarré
- Temps de fonctionnement (Uptime)
- Informations sur les paquets installés (formats RPM et Flatpak)
- Shell utilisé et sa version
- Moniteurs utilisés, résolutions, fréquence de rafraichissement
- Environnement de bureau utilisé et version, Gestionnaire de fenêtres utilisé
- Thèmes utilisés (Gestionnaire de fenêtres, thème de bureau, des icônes, police d'écriture, thème et taille du curseur)
- Terminal utilisé (Type, logiciel, police d'écriture)
- Informations CPU et GPU
- Informations mémoire, swap
- Informations sur les disques montés
- Information réseau (adresse IP locale)
- Langue du système
- Mozaïque de couleurs

L'outil est dans la capacité d'afficher plus d'informations que celles collectées par défaut.
De plus il est possible de personnaliser l'affichage en retirant des informations non utiles.

Personnallisation de fastfetch



L'outil fastfetch dispose d'un grand nombre d'options appellables.
Pour des raisons pratiques, il est plus intéressant de générer un fichier de configuration, et de personnaliser le comportement grace à celui-ci.

Pour générer une configuration par défaut, on utilisera la commande suivante :

Code BASH :
fastfetch  --gen-config


Sur des anciennes versions de fastfetch, il sera peut être nécessaire de préciser le format "jsonc" du fichier de config via :
Code BASH :
fastfetch  --gen-config jsonc


Après exécution, on est informé de la configuration créée :

Code :
A sample config file has been written in `/home/adrien/.config/fastfetch/config.jsonc`


Il s'agit d'un fichier json classique qui comporte des informations sur la documentation dans les 3 premières lignes du fichier :
Code JAVASCRIPT :
// ~/.config/fastfetch/config.jsonc
// See https://github.com/fastfetch-cli/fastfetch/wiki/Configuration for more details
// See *.jsonc in https://github.com/fastfetch-cli/fastfetch/tree/dev/presets/examples for more examples


C'est ce fichier qu'on modifiera et que fastfetch ira chercher s'il est présent.


Exemple 1 : Personnalisation simple



Voici une première configuration que j'ai pu faire :

Code JAVASCRIPT :
// ~/.config/fastfetch/config.jsonc
// See https://github.com/fastfetch-cli/fastfetch/wiki/Configuration for more details
// See *.jsonc in https://github.com/fastfetch-cli/fastfetch/tree/dev/presets/examples for more examples
{
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
    "logo": {
        "padding": {
            "top": 2
        }
    },
    "modules": [
        "title",
        "separator",
        "datetime",
        "os",
        "locale",
        "shell",
        "host",
        "kernel",
        "uptime",
        "packages",
        "display",
        "de",
        "wm",
        "cpu",
        "gpu",
        "memory",
        "swap",
        "disk",
        "localip",
        "battery",
        "poweradapter"
    ]
}


Ici, j'ai ajouté des éléments :
- Date et heure

J'ai déplacé des éléments :
- Langue du système, Shell

J'ai retiré des éléments de la configuration par défaut qui ne m'intéressaient pas :
- Les thèmes utilisés, polices utilisées, informations sur le curseur, la mozaïque de couleurs

Ce qui donne :

fastfetch-perso-1



Exemple 2 : Ajout d'options aux modules



Voici une deuxième configuration possible en personnalisant certains modules.

Code JAVASCRIPT :
// ~/.config/fastfetch/config.jsonc
// See https://github.com/fastfetch-cli/fastfetch/wiki/Configuration for more details
// See *.jsonc in https://github.com/fastfetch-cli/fastfetch/tree/dev/presets/examples for more examples
{
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
    "logo": {
        "padding": {
            "top": 1
        }
    },
    "modules": [
        "title",
        "separator",
        "os",
        "host",
        "kernel",
        "uptime",
        "packages",
        "shell",
        "display",
        "de",
        "terminal",
        {
            "type": "cpu",
            "temp": true,
            "freqNdigits": 1
        },
        {
            "type": "gpu",
            "temp": true
        },
        "memory",
        {
            "type": "disk",
            "folders": "/:/home:/media/DATA:/media/BACKUP"            
        },
        "localip",
        "locale",
        "break"
    ]
}


Ici, j'ai ajouté à la sortie de l'exemple 1 la température du CPU et du GPU, limité à 1 chiffre après la virgule la fréquence du CPU et filtré les volumes à afficher :

Ce qui donne :

fastfetch-perso-2



Aller plus loin



Evidemment, la limite s'arrête à votre créativité !

Les options disponibles à fastfetch :
Code BASH :
fastfetch --help


Des exemples sont disponibles ici :
https://github.com/fastfetch-cli/fastfetch/tree/dev/presets

La documentation sur les modules est ici :
https://github.com/fastfetch-cli/fastfetch/wiki/Json-Schema

La structure du JSON de configuration et des personnalisations possibles ici :
https://raw.githubusercontent.com/fastfetch-cli/fastfetch/dev/doc/json_schema.json

SSH : Installer et configurer un serveur SSH

ssh_logo



Qu'est ce que SSH et OpenSSH




Secure Shell (SSH) est un programme mais aussi un protocole de communication sécurisé. Grâce à SSH, on peut se connecter à distance sur une machine, transférer des fichiers, si celle-ci dispose d'un serveur SSH,

OpenSSH (OpenBSD Secure Shell) est un ensemble d'outils informatiques libres permettant des communications sécurisées sur un réseau informatique en utilisant le protocole SSH.

Installation du serveur OpenSSH



Pour installer le serveur ssh sur notre machine, installer le paquet openssh-server

Gentoo et Calculate Linux :

Code BASH :
emerge net-misc/openssh


CentOS et Fedora :

Code BASH :
dnf install openssh-server


CentOS 7 et 6 :
Code BASH :
yum install openssh-server


Debian :

Code BASH :
apt install openssh-server



Configurer le service SSH



Lancer le service au démarrage



Gentoo (OpenRC) / Calculate Linux :

Code BASH :
rc-update add sshd default
/etc/init.d/sshd start


Fedora et CentOS :

Code BASH :
systemctl enable --now sshd.service


Debian :

Code BASH :
systemctl enable --now ssh.service



Affiner la configuration de SSH



Désactiver les connexions SSH en root



Il est recommandé de ne pas permettre la connexion en root.

Pour cela, éditer le fichier /etc/ssh/sshd_config et modifier cette ligne:

Code :
PermitRootLogin no


Si on souhaite se connecter en root directement, on peut n'autoriser que la connexion avec clé :

Code :
PermitRootLogin prohibit-password


Ne pas oublier de redémarrer SSH.


Changer le port de SSH



Je vous recommande de changer le port.

Par exemple, utiliser le port 2222, éditer /etc/ssh/sshd_config :

Code BASH :
Port 2222


Ne pas oublier d'ajouter une exception pour le parefeu :) Exemple avec firewalld :

Code BASH :
firewall-cmd --add-port=2222/tcp --permanent
firewall-cmd --reload


Si on utilise SELinux, on doit changer le booléen concerné :

Code BASH :
semanage port -a -t ssh_port_t -p tcp 2222


Redémarrer SSH pour prendre effet.


Autoriser le SSHFS



Il se peut que lorsque vous tentez de vous connecter en SSHFS sur votre seveur, celui-ci indique Connexion reset by peer.

Pour cela, éditer le fichier /etc/ssh/sshd_config et modifier/ajouter cette ligne:

Sous Gentoo :

Code :
Subsystem       sftp    /usr/lib64/misc/sftp-server


Chez CentOS, cela ressemble à

Code :
Subsystem    sftp    /usr/libexec/openssh/sftp-server


Ne pas oublier de relancer SSH


Autoriser/Interdire des utilisateurs



Il est possible d'autoriser une liste de certains utilisateurs à se connecter. Modifier ou ajouter cette ligne dans le sshd_config :

Code BASH :
AllowUsers user1 user2 user3


Il est possible de refuser la connexion que de certains utilisateurs. Modifier ou ajouter cette ligne dans le sshd_config :

Code BASH :
DenyUsers user1 user2 user3


Autoriser/Interdire des groupes



Il est possible d'autoriser une liste de certains groupes à se connecter. Modifier ou ajouter cette ligne dans le sshd_config :

Code BASH :
AllowGroups groupe1 groupe2


Il est possible de refuser la connexion que de certains groupes. Modifier ou ajouter cette ligne dans le sshd_config :

Code BASH :
DenyUsers groupe1 groupe2



Afficher une bannière



Si le serveur est public, on peut ajouter une bannière, une sorte de message affiché à la connexion.

Exemple :

Code BASH :
###############################################################################
#                                                                             #
#  WARNING : Unauthorized access to this system is forbidden and will be      #
#  prosecuted by law. By accessing this system, you agree that your actions   #
#  may be monitored if unauthorized usage is suspected.                       #
#                                                                             #
###############################################################################


On décommente la ligne "Banner" dans le fichier /etc/ssh/sshd_config et on y place le nom du fichier de la bannière :

Code BASH :
Banner /etc/banner


On créé le fichier /etc/banner avec notre bannière dedans


Directive Match



Si on souhaite encore personnaliser certaines options dans SSh pour certains groupes, utilisateurs ou adresses, on peut utiliser la directive Match :

Voici deux exemples.

Autoriser l'accès root en fonction de certaines adresses :
Code BASH :
Match Address 192.168.21.0/24
    PermitRootLogin yes
 
Match Address *
    PermitRootLogin no


Ou bien n'autoriser que quelques options pour un groupe particulier (CF Tuto SFTP) :
Code BASH :
Match Group sftpusers
    ChrootDirectory /sftp/%u
    AllowTcpForwarding no
    ForceCommand internal-sftp



Ne pas oublier le parefeu



Bien qu’automatiquement, lors de l'installation d'openssh, celui-ci ouvre le parefeu, vérifier, selon la distribution utilisée que le parefeu est bien ouvert sur le port 22 en TCP.

Avec firewalld :

Code BASH :
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload



Tester sa connexion ssh :



En local



Ouvrir une console, et tester de se connecter (dans mon exemple, avec l'utilisateur adrien) :

Code BASH :
adrien@masupermachine ~ $ ssh adrien@127.0.0.1                                                                                                                                                                                                   
Password:                                                                                                                                                                                                                                   
Last login: Thu Jan 24 20:50:28 CET 2013 from 192.168.1.200 on pts/3                                                                                                                                                                        
adrien@masupermachine ~ $  



A distance



Ouvrir une console sur un autre PC (on considère que l'IP de ma machine où est installée SSH est 192.168.1.101 :

Code BASH :
adrien@masupermachine ~ $ ssh adrien@192.168.1.101                                                                                                                                                                                                   
Password:                                                                                                                                                                                                                                   
Last login: Thu Jan 24 20:50:28 CET 2013 from 192.168.1.200 on pts/3                                                                                                                                                                        
adrien@masupermachine ~ $  


Si on a changé le port :

Code BASH :
ssh adrien@192.168.1.101 -p2222 


Depuis Windows, on pourra utiliser PuTTY ou Bash dans Windows 10.


Et si on parlait de clés ?



Le mot de passe pour se connecter en SSH, c'est bien mais ... Si on se connectait avec une clé que seul notre ordinateur et le serveur en ont connaissance ?

C'est une bonne alternative au mot de passe. Si le serveur est directement connecté à l'Internet, il est préférable, d'utiliser une paire de clés privées/publiques et d'interdire le mot de passe.

Mais cela peut être pratique, pour ne pas saisir de mot de passe et se connecter cash au serveur (automatismes rsync par exemple).


Générer la paire de clés



Dans l'exemple qui suit, je vais générer la clé au format RSA avec une taille de 4096 bits :

Code BASH :
ssh-keygen -t rsa -b 4096


Il faut renseigner par la suite le nom du fichier, valider pour laisser par défaut dans /home/$USER/.ssh/id_rsa.

Ensuite, on nous demande de saisir une passphrase. C'est une suite de caractères (une phrase mnémotechnique, qu'il faudra saisir à chaque connexion).
La passphrase est fortement recommandée. Le seul cas où vous pouriez par exemple ne pas en mettre, c'est pour effectuer des copies de fichiers avec scp ou rsync via des scripts où la saisie d'une passphrase est problématique. Mais dans ce cas, sécurisez bien votre clé privée !

On peut utiliser des types plus récents et performants tels que ECDSA ou ED25519 au lieu de RSA avec l'option -t :

Code BASH :
ssh-keygen -t ed25519


ecdsa et ed25519 : c'est de la cryptographie sur des courbes elliptiques. Retenez rapidement que c'est plus efficace et moins consommateur de ressources. Il y a plein d'infos sur le net à ce sujet.

Voici ce que contient le fichier de clé publique sur notre client:

Code TEXT :
adrien@client ~ $ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3Nz[...]dR/7L adrien@client



Configurer le serveur



Et maintenant ? Comment je configure mon serveur ?

Et bien, la clé publique, précédemment générée est à copier coller sur le serveur, dans le fichier ~/.ssh/authorized_keys.

Attention ! Le contenu du fichier ~/.ssh/id_rsa.pub doit tenir sur une seule et même ligne !

Pour éviter les erreurs de frappe, si le client est un Linux, on peut transférer le fichier via cette commande :

Code BASH :
ssh-copy-id adrien@serveur

Si la paire de clés n'est pas dans l'emplacement par défaut, on utilisera l'option -i :
Code BASH :
ssh-copy-id -i .ssh/id_rsa.pub adrien@serveur



Sur notre serveur, nous obtenons ensuite ceci :

Code TEXT :
adrien@serveur ~ $ cat .ssh/authorized_keys
ssh-rsa AAAB3N[...]oe1 adrien@client


Si plusieurs clients ont des accès au serveur, il y aura plusieurs lignes dans le fichier ~/.ssh/authorized_keys du serveur.

Maintenant, on teste la connexion au serveur.

Si c'est la première fois qu'on se connecte au serveur par ssh, avec notre client, il peut y avoir un avertissement. Valider par "Yes"

Cf. exemple en dessous


Nous sommes connectés.

On ferme la connexion avec la commande exit et on tente de se connecter : RAS, rien à saisir !

Code TEXT :
adrien@client ~ $ ssh adrien@192.168.1.101
The authenticity of host '192.168.1.101 (192.168.1.101)' can't be established.
ECDSA key fingerprint is d3:01:93:21:a4:37:24:d0:49:58:f2:57:67:7b:be:02.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.101' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/adrien/.ssh/id_rsa': 
Last login: Thu Jan 24 19:05:59 CET 2013 on :0
adrien@serveur ~ $ exit
déconnexion
Connection to 192.168.1.101 closed.
adrien@client ~ $ ssh adrien@192.168.1.101
Enter passphrase for key '/home/adrien/.ssh/id_rsa': 
Last login: Thu Jan 24 20:38:37 CET 2013 from 192.168.1.200 on pts/3
adrien@serveur ~ $ 


Et voila, notre client et notre serveur sont configurés.

Les déclinaisons des commandes ssh (telles rsync, scp et sftp) bénéficient du système de clés privées/clés publiques.

Si on est sur de notre coup, on peut désactiver les connexions par mot de passe à notre serveur pour n'autoriser que des connexions par clés.

Ne faites cela que si vous êtes sûr de votre coup, sinon, il vous faudra accéder à la machine physique si vous perdez la clé (vol d'ordinateur client, destruction du disque dur ...) et que vous n'avez pas d'autres clients configurés.

Pour cela, éditer le fichier /etc/ssh/sshd_config et passer la valeur PasswordAuthentication à no et UsePAM à no

Recharger la configuration de ssh.


Et si je ne veux plus qu'un client accède à mon serveur



Et bien la réponse à cette question est simple, il suffit de supprimer la ligne correspondante dans le fichier ~/.ssh/authorized_keys du serveur.

Changer la passphrase



Il est possible de changer la passphrase d'une clé privée, pour cela, on a l'option -p de ssh-keygen à notre disposition :

Code BASH :
ssh-keygen -p -f .ssh/id_rsa



Infos pratiques côté Client



~/.ssh/config : Configuration simple



Je vais vous présenter quelque chose qui m'a simplifié la vie : les alias SSH.

Si on a l'habitude de se connecter à plusieurs serveurs SSH, (noms d'hôtes différents, ports différents) et que vous avez parfois la flemme de taper toute la ligne :

Code BASH :
ssh -p 5222 adrien@192.168.10.100


Il est possible de créer des alias.

Il suffit de créer le fichier ~/.ssh/config.

Voici un exemple :

Code BASH :
Host srv1
  HostName 192.168.10.100
  Port 5222
  User adrien



Ainsi, j'ai juste à taper en console ssh srv1 et cela est équivalent à ssh -p 5222 adrien@192.168.10.100.

~/.ssh/config : Configuration avancée



Alias de tunnel



Il est même possible de créer un alias tunnel.

Je vous montre un exemple, puis je vous explique :

Code BASH :
Host webmin
  HostName 192.168.1.11
  Port 22
  User adrien
  LocalForward 8080 192.168.1.11:10000
 


Quand je fais faire ssh webmin, ça va m'ouvrir un tunnel SSH entre mon PC et le serveur ayant l'IP 192.168.1.11.

On créé donc un tunnel SSH, qui va "relier" le port 8080 de ma machine sur le port 10000 de la machine distante.

Si le serveur n'a que le pot 22 d'ouvert, c'est intéressant. Car je peux accéder à webmin (qui écoute sur le port 10000) maintenant, avec le navigateur sur mon PC à l'adresse https://127.0.0.1:8080 .


Tunnels et redirection de ports



Redirection locale de port



L'option -L : locale pour rediriger un port distant vers une destination (machine) locale

La syntaxe de la commande :

Code BASH :
ssh machine-distante -L port-local:HOSTNAME:port-distant 


Pour expliquer je vais prendre un cas concret :

Je suis sur Internet avec ma machine (client), et j'ai un accès en SSH sur un serveur (srvssh). Ce serveur est dans le même réseau qu'un serveur web (srvweb avec une IP 192.169.1.50). Ce serveur Web n'est pas joignable directement depuis Internet.

On peut se connecter sur le srvssh en faisant une redirection de port 80 du srvweb sur un port de notre machine cliente :

Code BASH :
ssh srvssh -L 1234:192.168.1.50:80


Ensuite, en saisissant sur la machine cliente dans un navigateur web http://127.0.0.1:1234 je tombe sur mon serveur web :)

Interdire l'ouverture d'un shell (tunnel pour redirection de port uniquement)



Si vous lancez cette commande sur un de vos serveurs pour effectuer un tunnel, il est possible d'utiliser l'option -N qui permet de ne pas ouvrir un shell. Pour empêcher avec l'utilisateur concerné d'ouvrir un shell, sur le serveur distant, il est possible après coup de modifier la ligne de la clé dans le fichier .ssh/authorized_keys en indiquant devant :

Code BASH :
no-pty,no-X11-forwarding,permitopen="localhost:1234",command="/bin/echo interdit-de-lancer-un-shell" ssh-rsa......


Bien sûr, assurez-vous de pouvoir ouvrir un shell avec un autre utilisateur ou un autre moyen !
Il est possible par exemple, pour le tunnel, d'utiliser un utilisateur "tunnel" sur le serveur distant.

Pour plus de détails sur les tunnels, vous pouvez consulter SSH : Créer un tunnel pour rediriger des ports d'une machine à l'autre

Redirection distante de port



L'option -R distante (remote) pour rediriger un port local vers une destination (machine) distante

La syntaxe de la commande :

Code BASH :
ssh -R port-distant:HOSTNAME:port-local  machine-distante


Pour expliquer je vais prendre un cas concret :

J'ai un serveur derrière un pare-feu (nommé srvssh) et j'ai un serveur à la maison (srvmaison) qui a le SSH accessible sur Internet. Je peux donc lancer depuis srvssh cette commande :

Code BASH :
ssh -R 1234:localhost:22 srvmaison


Ainsi depuis la maison, sur le serveur concerné, si je tape

Code BASH :
ssh user-srvssh@localhost -p1234 


Le mot de passe du serveur srvssh sera demandé et on sera connecté.

Très pratique pour ouvrir un tunnel inverse :)


Redirection dynamique de port (Proxy SOCKS)



L'option -D dynamique pour un transfert de port dynamique basé sur SOCKS.

La syntaxe :

Code BASH :
ssh -D port serveur-distant


Pour expliquer je vais prendre un cas concret :

C'est assez utile si on veut naviguer via un proxy SOCKS. On est connecté sur un point d'accès Wi-Fi public avec notre PC. Tout le flux est potentiellement non sécurisé et peut être modifié.

On peut alors, si on dispose d'un serveur SSH accessible (chez soi par exemple) se connecter via la commande :

Code BASH :
ssh -D 8080 srvmaison


Dans Firefox on va dans les options réseau, et on sélectionne Configuration Manuelle du proxy et dans Hôte SOCKS on renseigne 127.0.0.1 et comme port 8080 :

firefox_socks

Le trafic web passe par notre tunnel SSH (sécurisé depuis le PC client jusqu’à srvmaison) puis sort par le modem du réseau de srvmaison.

SSH : sshpass, la connexion SSH par mot de passe non-interactive

Introduction



Quand on se connecte à une machine en ssh (ou avec un transfert de fichiers avec rsync ou scp), il est nécessaire de taper son mot de passe.
Pour les scripts, j'utilise un couple de clé publique/privé. C'est la méthode à privilégier qui est bien plus robuste notamment en cas d'attaque de type brute-force.

Cependant, parfois, vous avez besoin d'un mot de passe. Si vous déployez pour la première fois des clés sur beaucoup de serveurs et qu'ils ont tous un mot de passe, cela vous permettra aussi d'accélérer le déploiement.

sshpass va nous permettre de nous connecter en ssh sans que la demande de mot de passe soit à saisir par l'utilisateur.

Il existe plusieurs solutions pour passer le mot de passe à ssh avec sshpass :
- variable d'environnement
- dans la ligne de commande
- dans un fichier

J'en ai rapidement parlé il y a un moment dans l'article https://www.linuxtricks.fr/wiki/ssh-commandes-sftp mais je souhaite faire un article dédié ici à cet utilitaire.

Nous allons voir ici comment l'utiliser !

Installation



Si le logiciel n'est pas installé, on l'installe :

Gentoo :
Code BASH :
emerge -av net-misc/sshpass


Red Hat Enterprise Linux (et dérivées) et Fedora :
Code BASH :
dnf install sshpass


Debian et Ubuntu :
Code BASH :
apt install sshpass


Utilisation



Utilisation générale



La commande s'utilise avant ssh ou autres outils reposant sur ssh tels que rsync ou sftp par exemple :

Code BASH :
sshpass [options] commande paramètres


Passer dans la ligne de commande le mot de passe



Pour passer en clair le mot de passe dans la commande, on utilisera l'option -p de sshpass.

Exemple avec une commande ssh :
Code BASH :
sshpass -p monmotdepassecostaud ssh adrien@192.168.21.100


Nous sommes directement connecté !

Il est nécessaire de bien sécuriser le script concerné (ne permettre en lecture que pour l'utilisateur) !!
A noter, les autres utilisateurs ne voient pas le mot de passe avec la commande ps -ef sur la machine, il est masqué avec des "zzz" :

Code BASH :
adrien   31966  6204  0 11:27 pts/0    00:00:00 sshpass -p zzzzzzz ssh adrien@192.168.21.100


Utiliser une variable d'environnement



Plutôt que de passer le mot de passe dans la ligne de commande, on peut utiliser la variable "SSHPASS" et stocker dedans le mot de passe ! On utilisera alors l'option -e de sshpass.

Exemple ici avec une commande rsync (qui utilise par défaut SSH lors d'une copie distante) :
Code BASH :
export SSHPASS="monmotdepassecostaud"
sshpass -e rsync -avzh /tmp/ adrien@192.168.21.100:/home/adrien/tmp/


Le transfert débute sans demande de mot de passe.
On peut évidemment effacer la variable après utilisation !

Code BASH :
unset SSHPASS


Utiliser un fichier où le mot de passe est stocké



On peut aussi utiliser un fichier si on le souhaite, je n'en vois pas l'utilité en pratique.
Peut être si vous avez plusieurs scripts dans plusieurs langages ? Ou des caractères bizarres dans votre mot de passe qui empêche l'utilisation en ligne de commande / variable d'environnement ?

Le mot de passe lu sera la première ligne du fichier, sans le saut de ligne.

Exemple avec une commande ssh :
Code BASH :
echo monmotdepassecostaud > $HOME/mdpsshpass
sshpass -f /root/mdpsshpass ssh adrien@192.168.21.100


Comme la variable d'environnement, on peut supprimer le fichier après utilisation s'il ne sert pas à autre chose !

Code BASH :
rm $HOME/mdpsshpass


D'autres méthodes ...



L'outil permet aussi d'utiliser d'autres méthodes, mais je n'en vois pas l'intérêt, comme l'utilisation d'un file descriptor, ou de définir à nouveau un prompt de mot de passe.

Dans tous les cas, n'oubliez pas, pour toute la documentation de l'outil :

Code BASH :
man sshpass


Cas pratique sur retour d'expérience



sshpass dans une boucle BASH



Si vous faites un script avec un while qui prend une liste dans un txt (ici je passe le mdp avec l'option -p pour vous illustrer) :

Code BASH :
while read srv
do
      sshpass -p password ssh user@$srv cat /etc/redhat-release
done  liste-server.txt


La boucle va :
- s'arrêter au premier serveur
- la liste des serveurs sur lesquels vous ne vous êtes pas connectés demandent de valider l'emprunte

Pour cela on va respectivement :
- utiliser l'option -n pour ne pas lire depuis l'entrée standard
- utiliser l'option StrictHostKeyChecking

Ce qui donne :

Code BASH :
while read srv
do
      sshpass -p password ssh -n -o StrictHostKeyChecking=no user@$srv cat /etc/redhat-release
done  liste-server.txt


:magic:

fwupd : Mettre à jour les firmware et BIOS depuis Linux

Introduction



Dans cet article, nous allons voir comment mettre à jour les firmware (micro-logiciels) de notre PC depuis Linux.
Cela va se faire avec le logiciel fwupd

Les informations sont celles de Linux Vendor firmware Service (LVFS) https://fwupd.org/

Prérequis



Pour que l'outil fonctionne correctement et puisse mettre à jour les BIOS, et autre micrologiciels, l'UEFI est nécessaire.
C'est sur cette partition en FAT32 que seront téléchargés les micrologiciels avant s'être installés au reboot.

En effet, l'UEFI ne sait lire que des partitions de type FAT32.

Installation



Sous Gentoo, on prendra soin d'activer quelques USE, dans mon cas celui de DELL est très important :

Code BASH :
echo "sys-apps/fwupd dell uefi synaptics tpm nvme thunderbolt" >> /etc/portage/package.use/custom


Puis on installe fwupd :

Code BASH :
emerge -av sys-apps/fwupd


Pour le monde RedHat :

Code BASH :
dnf install fwupd


Utiliser fwupd



Une fois le logiciel installé, on pourra vérifier les matériels utilisés supportés avec :

Code BASH :
fwupdmgr get-devices


Voici un retour sur un Dell Latitude 3510 :

Code TEXT :
Latitude 3510
|
|-BC511 NVMe SK hynix 256GB:
|     Device ID:          03281da317dccd2b18de2bd1cc70a782df40ed7e
|     Summary:            NVM Express Solid State Drive
|     Current version:    11002101
|     Vendor:             SK hynix (NVME:0x1C5C)
|     Serial Number:      NS08T001210808R0V
|     GUIDs:              b8db34a1-4794-5f13-894e-b2e29353380f ← STORAGE-DELL-108363
|                         8811e962-e1d5-e811-9f8b-f2801f1b9fd1
|     Device Flags:       • Internal device
|                         • Updatable
|                         • Requires AC power
|                         • Needs a reboot after installation
|                         • Device is usable for the duration of the update
|
|-System Firmware:
|     Device ID:          c0835b948fda726b85f43575dd3d39012bbfe99e
|     Current version:    1.2.0
|     Minimum Version:    1.2.0
|     Vendor:             Dell Inc. (DMI:Dell Inc.)
|     GUID:               cec92681-7c50-4276-90b6-219f70c8410c
|     Device Flags:       • Internal device
|                         • Updatable
|                         • Requires AC power
|                         • Supported on remote server
|                         • Needs a reboot after installation
|                         • Cryptographic hash verification is available
|                         • Device is usable for the duration of the update
|
|-TPM 2.0:
|     Device ID:          c6a80ac3a22083423992a3cb15018989f37834d6
|     Summary:            Platform TPM device
|     Current version:    7.2.1.0
|     Vendor:             Dell Inc. (PCI:0x1028)
|     GUIDs:              76da9d47-c402-51a4-b01c-7123339a91f4 ← 09ed-2.0
|                         ff71992e-52f7-5eea-94ef-883e56e034c6 ← system-tpm
|     Device Flags:       • Internal device
|                         • Updatable
|                         • Requires AC power
|                         • Needs a reboot after installation
|
|-UEFI Device Firmware:
|     Device ID:          df945476b677e792dab827b25b9807ed655fc132
|     Current version:    190
|     Minimum Version:    190
|     Vendor:             DMI:Dell Inc.
|     GUID:               ffd6eef5-4372-4adc-8eeb-3dc0b7338375
|     Device Flags:       • Internal device
|                         • Updatable
|                         • Requires AC power
|                         • Needs a reboot after installation
|                         • Device is usable for the duration of the update
|
|-UEFI Device Firmware:
|     Device ID:          341ba8ecc98c656bf43ce14c21bca347967a1f00
|     Current version:    285221121
|     Minimum Version:    285221121
|     Vendor:             DMI:Dell Inc.
|     GUID:               8811e962-e1d5-e811-9f8b-f2801f1b9fd1
|     Device Flags:       • Internal device
|                         • Updatable
|                         • Requires AC power
|                         • Needs a reboot after installation
|                         • Device is usable for the duration of the update
|
|-UEFI dbx:
      Device ID:          362301da643102b9f38477387e2193e57abaa590
      Summary:            UEFI Revocation Database
      Current version:    77
      Minimum Version:    77
      Vendor:             UEFI:Linux Foundation
      Install Duration:   1 second
      GUIDs:              00fe3755-a4d8-5ef7-ba5f-47979fbb3423 ← UEFI\CRT_E28D59CA489BD2AD580F2EA5D62D6A29BB9C02AE5A818434A37DA7FC11DFF9E9
                          4a6cd2cb-8741-5257-9d1f-89a275dacca7 ← UEFI\CRT_E28D59CA489BD2AD580F2EA5D62D6A29BB9C02AE5A818434A37DA7FC11DFF9E9&ARCH_X64
                          c6682ade-b5ec-57c4-b687-676351208742 ← UEFI\CRT_A1117F516A32CEFCBA3F2D1ACE10A87972FD6BBE8FE0D0B996E09E65D802A503
                          f8ba2887-9411-5c36-9cee-88995bb39731 ← UEFI\CRT_A1117F516A32CEFCBA3F2D1ACE10A87972FD6BBE8FE0D0B996E09E65D802A503&ARCH_X64
      Device Flags:       • Internal device
                          • Updatable
                          • Needs a reboot after installation



On rafraîchira la base de données avant la recherche de mise à jour avec :

Code BASH :
fwupdmgr refresh


Code TEXT :
Updating lvfs
Downloading…             [***************************************]
Downloading…             [***************************************]
Successfully downloaded new metadata: 1 local device supported



Pour vérifier les mises à jour des composants supportés :

Code BASH :
fwupdmgr get-updates


Voici un retour sur le Dell Latitude 3510 qui a besoin de mises à jour :

Code TEXT :
|
|-System Firmware:
  |   Device ID:          c0835b948fda726b85f43575dd3d39012bbfe99e
  |   Current version:    1.2.0
  |   Minimum Version:    1.2.0
  |   Vendor:             Dell Inc. (DMI:Dell Inc.)
  |   GUID:               cec92681-7c50-4276-90b6-219f70c8410c
  |   Device Flags:       • Internal device
  |                       • Updatable
  |                       • Requires AC power
  |                       • Supported on remote server
  |                       • Needs a reboot after installation
  |                       • Cryptographic hash verification is available
  |                       • Device is usable for the duration of the update
  | 
  ├-Latitude 3410, Latitude 3510 System Update:
  |     New version:      1.4.1
  |     Remote ID:        lvfs
  |     Summary:          Firmware for the Dell Latitude 3410, Latitude 3510
  |     License:          Proprietary
  |     Size:             14,4 Mo
  |     Created:          2020-08-26
  |     Urgency:          Critical
  |     Vendor:           Dell Inc.
  |     Flags:            is-upgrade
  |     Description:      
  |     This stable release fixes the following issues:
  |     
  |     • Fixed the issue where Data wipe option disappear upon the first reboot after changing SATA mode option
  |     • Fixed the issue LED will blinks 1 amber 4 white after resuming from sleep mode that on NeoKylin Operation System.
  |     • Fixed the issue where LED blinks incorrectly when do BIOS auto recovery with invalid recovery file
  |   
  |-Latitude 3410, Latitude 3510 System Update:
        New version:      1.3.0
        Remote ID:        lvfs
        Summary:          Firmware for the Dell Latitude 3410, Latitude 3510
        License:          Proprietary
        Size:             14,4 Mo
        Created:          2020-07-17
        Urgency:          Critical
        Vendor:           Dell Inc.
        Flags:            is-upgrade
        Description:      
        This stable release fixes the following issues:
 
        • Fixed the issue where the keyboard brightness hotkey cannot adjust the brightness after resuming from sleep mode in Linux operating system.
        • Fixed the issue where the cursor stops responding on the setup menu while booting for the first time.
        • Fixed the issue where the system stops responding at the Dell logo screen. This issue occurs when you press F2 or F12 to enter the BIOS setup menu.


Pour lancer la mise à jour, on exécutera :

Code BASH :
fwupdmgr update


Voici ce qui est retourné sur le Dell (on est invité à rebooter évidemment) :

Code TEXT :
• BC511 NVMe SK hynix 256GB has no available firmware updates
Upgrade available for System Firmware from 1.2.0 to 1.4.1
Latitude 3510 must remain plugged into a power source for the duration of the update to avoid damage. Continue with update? [Y|n]: Y
Downloading…             [***************************************] Less than one minute remaining…
Decompressing…           [***************************************]
Authenticating…          [***************************************]
Updating System Firmware…[***************************************]
Scheduling…              [***************************************]
Successfully installed firmware
• TPM 2.0 has no available firmware updates
• UEFI Device Firmware has no available firmware updates
• UEFI Device Firmware has no available firmware updates
• UEFI dbx has no available firmware updates
An update requires a reboot to complete. Restart now? [y|N]:


Au reboot, la mise à jour s'opère :

fwupd-dell-bios

BASH : Tester si un script est lancé en root

Introduction



Dans ce court article, nous allons voir comment tester, dans un script BASH si celui ci est utilisé en tant que root.
Ici, la vérification est fonctionnelle si :
- Le script est lancé en tant que root directement.
- Le script est lancé avec la commande su -lc 'lescript.sh'
- Le script est lancé avec la commande sudo lescript.sh

Nous n'utiliserons pas la variable $EUID

Commandes de base



Nous allons utiliser la commande id qui nous affiche les informations de l'utilisateur :
Code BASH :
id

Code :
uid=0(root) gid=0(root) groupes=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),26(tape),27(video)


La caractéristique de root est que son UID est de 0. On récupérera cette valeur avec l'option -u :

Code BASH :
id -u

Code TEXT :
 0 


A partir de là, il ne reste qu'un simple test à faire, et si cette valeur n'est pas 0, on peut quitter le script avec un code erreur (ici de 1) avec

Code BASH :
exit 1


Le bout de code



Code BASH :
if [[ $(id -u) -ne 0 ]]
then
   echo "Ce script doit être lancé en tant que root" 
   exit 1
fi

Linux : Détecter la plateforme de virtualisation utilisée

virtualisation-logo



Introduction



Il peut être utile de savoir si le système fonctionne sur une machine virtuelle ou non.
Dans le cas de scripts, cela peut être utile pour optimiser les performances du système, en installant par exemple des outils invité.

Dans cet article, nous allons voir comment utiliser les outils de systemd et/ou virt-what qui répondent à ce besoin.
Ces outils sont tout en un.

Méthode avec systemd via systemd-detect-virt



On le sait tous, systemd fait beaucoup de choses et il sait détecter aussi si le système est installé sur une machine physique ou dans une machine virtuelle !
Il sait détecter l'hyperviseur dans le second cas.

Vu que c'est inclus dans systemd, il n'est pas nécessaire d'installer d'outils supplémentaires. Le seul prérequis est que votre système utilise systemd.
C'est donc le cas pour :
- Red Hat Enterprise Linux 7 et plus et ses dérivées
- Fedora depuis de nombreuses années
- Ubuntu depuis 16.04 LTS et dérivées
- Debian depuis 8 et dérivées

La commande à invoquer est la suivante :
Code BASH :
systemd-detect-virt


Si on est dans une machine physique, l'outil renvoie :
Code TEXT :
none


Si on est dans un conteneur LXC, l'outil renvoie :
Code TEXT :
lxc


Si on est dans une machine virtuelle, le script nous renvoie la platrforme virtuelle utilisée.

VMware (ESXi, VxRail) :
Code TEXT :
vmware


Xen (XCP-ng) :
Code TEXT :
xen


Proxmox, Libvirt :
Code TEXT :
kvm


Microsoft Hyper-V :
Code TEXT :
microsoft


Virtualbox :
Code TEXT :
oracle


Plus de valeurs indiquées dans la page de manuel de systemd-detect-virt :
Code BASH :
man systemd-detect-virt


Voici un petit bout de code utilisable par exemple pour Fedora ou Red Hat Enterprise Linux pour installer par exemple les additions-invité en fonction de la plateforme de virtualisation utilisée:

Code BASH :
VMTYPE=$(systemd-detect-virt)
if [[ "$VMTYPE" = "kvm" ]]
then
    dnf install qemu-guest-agent -y > /dev/null
    systemctl enable --now qemu-guest-agent.service > /dev/null
fi
if [[ "$VMTYPE" = "vmware" ]]
then
    dnf install open-vm-tools -y > /dev/null
    systemctl enable --now vmtoolsd.service > /dev/null
fi



Méthode avec virt-what



Si notre système n'utilise pas systemd, on pourra utiliser virt-what qui est un script shell permettant la détection de la plateforme virtuelle sur laquelle on est.
Avant de pouvoir l'utiliser, il suffit de l'installer.

Fedora, Red Hat et dérivées :
Code BASH :
dnf install virt-what


Debian, Ubuntu et dérivées :
Code BASH :
apt install virt-what


Gentoo et dérivées :
Code BASH :
emerge -av app-emulation/virt-what


La commande à invoquer est la suivante :
Code BASH :
virt-what


Il est nécessaire d'être root pour lancer le script.

Si la commande ne retourne rien : on est sur une machine physique.

Si on est dans un conteneur LXC, l'outil renvoie :
Code TEXT :
lxc


Si on est dans une machine virtuelle, le script nous renvoie la platrforme virtuelle utilisée.

VMware (ESXi, VxRail) :
Code TEXT :
vmware


Xen (XCP-ng) :
Code TEXT :
xen


Proxmox, Libvirt :
Code TEXT :
kvm


Microsoft Hyper-V :
Code TEXT :
hyperv


Virtualbox :
Code TEXT :
virtualbox


Plus de valeurs indiquées dans la page de manuel de virt-what :
Code BASH :
man virt-what


Voici un petit bout de code utilisable par exemple pour Fedora ou Red Hat Enterprise Linux pour installer par exemple les additions-invité en fonction de la plateforme de virtualisation utilisée:

Code BASH :
VMTYPE=$(virt-what)
if [[ "$VMTYPE" = "kvm" ]]
then
    dnf install qemu-guest-agent -y > /dev/null
    systemctl enable --now qemu-guest-agent.service > /dev/null
fi
if [[ "$VMTYPE" = "vmware" ]]
then
    dnf install open-vm-tools -y > /dev/null
    systemctl enable --now vmtoolsd.service > /dev/null
fi



Copier et restaurer le MBR (Master Boot Record)

Introduction



Pour copier le MBR, il suffit d'utiliser la commande dd.

Un master boot record (MBR) est le secteur de démarrage de 512 octets qui constitue le premier secteur d'un périphérique de stockage de données partitionné d'un disque dur.

Le MBR n'est plus utilisé avec les systèmes UEFI qui utilisent un schéma de partitionnement GPT. Il est présent sur les schémas de partitionnement MSDOS et c'est dans le MBR que s'installe le gestionnaire d'amorçage.
Le démarrage sur un schéma GPT (UEFI) est géré par une partition EFI, formatée en FAT32 ayant les drapeaux BOOT et ESP.

Il peut être utile de le sauvegarder si jamais on l'écrase par erreur. Je le perds souvent avec ma clé USB Ventoy.

Informations MBR



Pour rappel, la taille totale du MBR est de 512 octets et contient précisément :
  • 446 octets contenant le bootstrap.
  • 64 octets contenant les infos de la table de partition
  • 2 octets contenant la signature


On utilisera la valeur de 446 octets pour restaurer le bootloader uniquement, sans toucher au schéma de partitionnement.
On utilisera la valeur de 512 octets pour restaurer tout le MBR (bootloader + schéma de partitionnement)

Sauvegarder le MBR



Si le MBR à sauvegarder est celui di disque identifié tel que /dev/sdh, on utilisera la commande suivante :

Code BASH :
dd if=/dev/sdh of=/tmp/mbrsdh.dd bs=512 count=1


Le MBR est alors stocké dans le fichier /tmp/mbrsdh.dd qu'on pourra stocker où on veut.

Restaurer le MBR



Pour restaurer juste le bootloader, on restaurera uniquement les 446 octets de la sauvegarde créée précédemment avec dd (ici sur le disque identifié /dev/sdh) :

Code BASH :
dd if=/tmp/mbrsdh.dd of=/dev/sdh bs=446 count=1


Si on souhaite restaurer le bootloader ET le schéma de partitionnement du disque (à ne pas faire si le disque est différent ou qu'il a été repartitionné différemment), on restaurera les 512 octets :

Code BASH :
dd if=/tmp/mbrsdh.dd of=/dev/sdh bs=512 count=1

virt-what : Détecter la plateforme de virtualisation utilisée

virtualisation-logo



Introduction



Il peut être utile de savoir si le système fonctionne sur une machine virtuelle ou non.
Dans le cas de scripts, cela peut être utile pour optimiser les performances du système, en installant par exemple des outils invité.

Dans cet article, nous allons voir comment utiliser l'outil virt-what qui répond à ce besoin.


Installation



virt-what est un script shell qui va détecter la plateforme virtuelle sur laquelle on est.
Avant de pouvoir l'utiliser, il suffit de l'installer.

Fedora, Red Hat et dérivées :
Code BASH :
dnf install virt-what


Debian, Ubuntu et dérivées :
Code BASH :
apt install virt-what


Gentoo et dérivées :
Code BASH :
emerge -av app-emulation/virt-what


Et c'est tout !

Utilisation



Pour utiliser l'outil, il n'y a pas d'options particulières.
Il suffit de lancer la commande :

Code BASH :
virt-what


Il est nécessaire d'être root pour lancer le script.

Interpréter le résultat



Si la commande ne retourne rien : vous êtes sur une machine physique.

Si on est dans un conteneur LXC, l'outil renvoie :
Code TEXT :
lxc


Si on est dans une machine virtuelle, le script nous renvoie la platrforme virtuelle utilisée.

VMware (ESXi, VxRail) :
Code TEXT :
vmware


Xen (XCP-ng) :
Code TEXT :
xen


Proxmox, Libvirt :
Code TEXT :
kvm


Microsoft Hyper-V :
Code TEXT :
hyperv


Virtualbox :
Code TEXT :
virtualbox


Plus de valeurs indiquées dans la page de manuel de virt-what :
Code BASH :
man virt-what


Cas d'usage



Si vous avez un script de post-installation, vous pouvez installer virt-what et installer par exemple les additions-invité.

Voici un petit bout de code utilisable par exemple pour Fedora ou Red Hat Enterprise Linux :

Code BASH :
VMTYPE=$(virt-what)
if [[ "$VMTYPE" = "kvm" ]]
then
    dnf install qemu-guest-agent -y > /dev/null
    systemctl enable --now qemu-guest-agent.service > /dev/null
fi
if [[ "$VMTYPE" = "vmware" ]]
then
    dnf install open-vm-tools -y > /dev/null
    systemctl enable --now vmtoolsd.service > /dev/null
fi


Maintenant, vous pouvez améliorer vos scripts !

Vérifier le système de fichiers au démarrage du système

Introduction



La réparation des systèmes de fichiers sous Linux ne peut se faire que lorsque la partition est démontée (comme vu dans l'article Systèmes de fichiers sous Linux : commandes pour gérer EXT4, XFS et BTRFS

Si on souhaite vérifier le système de fichiers racine / ou une partition qu'on ne peut pas démonter, il faudra le faire sur un système non-démarré.

Pas besoin de démarrer avec un système live via clé USB, on pourra procéder sans matériel supplémentaire.

Prérequis



Il est nécessaire d'avoir confguré correctement le fichier /etc/fstab en ayant au préalable la valeur 1 en fin de ligne pour la partition racine, et 2 pour les autres systèmes de fichiers sur lesquels vous voulez une vérification.

Pour plus d'informations, je vous renvoie vers l'article sur le fichier /etc/fstab

Mise en oeuvre



Suivant le système d'initialisation utilisé, la procédure sera différente.

Pour un système d'initialisation systemd



La plupart des distributions Linux utilisent systemd : Debian, Ubuntu, Linux Mint, Fedora, Red Hat Enterprise Linux, Rocky Linux, Alma Linux, Arch Linux, Mageia, OpenSUSE....

Il existe un service systemd-fsck@.service qui s'occupe de la vérification des systèmes de fichiers. C'est ce service que l'on va appeler via un paramètre passé au noyau.

Pour modifier les paramètres noyau, cela se fait en éditant la ligne au niveau du chargeur d'amorçage GRUB.
S'il ne s'affiche jamais, on laisse enfoncé la touche "Majuscule" au démarrage et il va s'afficher.
Ensuite, on édite la ligne en appuyant sur "e".

On va ensuite éditer la ligne qui commence par linux en ajoutant à la fin ceci :

Code BASH :
fsck.mode=force fsck.repair=yes


Attention : le clavier est en qwerty, avec un clavier azerty on appuiera sur les touches :

Code :
fsck:,ode=force fsck:repqir=yes


Ensuite on valide par F10 ou Ctrl+X.

Si au démarrage vous avez une animation, vous pouvez appuyer sur "Echap" pour voir la progression de la vérification.
Voici un exemple sur ma machine de test Fedora :

fsck-systemd




Pour un système d'initialisation OpenRC ou sysvinit



Pour les distributions utilisant OpenRC ou sysvinit, c'est un peu plus simple.

Il suffit de créer le fichier forcefsck à la racine.

Avant de redémarrer le système, on saisira simplement la commande :

Code BASH :
touch /forcefsck


Puis on redémarre :

Code BASH :
reboot


Si au démarrage vous avez une animation, vous pouvez appuyer sur "Echap" pour voir la progression de la vérification.
Voici un exemple sur ma machine de test Gentoo :

fsck-openrc




Le fichier /forcefsck est détruit automatiquement après le reboot.

NFS : Paramétrer les partages avec le fichier exports

nfs



Introduction



Dans cet article, je vais récapituler le paramétrage du fichier /etc/exports qui contient la liste des partages NFS.
Cela s'applique au serveur NFS.

Installer le serveur



Sur ce site, j'ai déjà rédigé les tutoriels pour installer un serveur NFS :
- Sous Gentoo : https://www.linuxtricks.fr/wiki/gentoo-installer-un-serveur-nfs
- Sous CentOS 7 : https://www.linuxtricks.fr/wiki/centos-7-installer-un-serveur-nfs
- Sous Red Hat 8 et Alma Linux 8 : https://www.linuxtricks.fr/wiki/red-hat-8-alma-linux-8-installer-et-configurer-un-serveur-nfs
- Sous Debian : https://www.linuxtricks.fr/wiki/debian-installer-un-serveur-nfs

Le fichier exports



On indique dans le fichier /etc/exports quels répertoires on souhaite partager et à qui :

Code BASH :
vi /etc/exports


On peut partager un dossier à une seule machine :
Code BASH :
/media/partage           192.168.21.200(rw,sync)


Ou à un réseau :
Code BASH :
/media/partage           192.168.21.0/24(rw,sync)


Ou à plusieurs machines (on répètera les IP des machines avec les options suivies par un espace) :
Code BASH :
/media/partage           192.168.21.0.100(rw,sync) 192.168.21.0.101(rw,sync)


Attention, il ne faut aucun espace entre le réseau et les options!

Il existe une multitude d'options. Je vous en détaille certaines les plus couramment utilisées :
  • rw : Cette option permet d'avoir les droits de lecture et d'écriture sur le répertoire partagé.
  • ro : Cette option permet d'avoir les droits de lecture seule sur le répertoire partagé.
  • sync : Ne répond aux requêtes qu'après avoir écrit les modifications sur le stockage (lent). C'est le comportement par défaut.
  • async : Cette option enfreint le protocole nfs et répond aux requêtes même si les modifications ne sont pas écrites sur le stockage. Peut être utile dans certains cas.
  • subtree_check : Active la vérification des droits d'accès des sous-dossiers. C'est le comportement par défaut.
  • no_subtree_check : Ignore la vérification des droits d'accès des sous-dossiers (perte d'un petit peu de sécurité mais peut améliorer la fiabilité)
  • root_squash : Force le mapping de l'utilisateur root (UID=0) vers l'utilisateur anonyme.
  • no_root_squash : Ne force pas le mapping de l'utilisateur root (UID=0) vers l'utilisateur anonyme
  • no_all_squash : Ne force pas le mapping des utilisateurs (Option par défaut)
  • all_squash : Force le mapping de tous les utilisateurs vers l'utilisateur anonyme. Utile pour un FTP public exporté par NFS
  • anonuid=NNN : Définit l'UID de l'utilisateur anonyme (NNN est le nombre du UID concerné)
  • anongid=NNN : Définit l'UID de l'utilisateur anonyme (NNN est le nombre du UID concerné)


Exemple où on force l'UID à 1001 pour tous les utilisateurs du partage, avec accès en lecture/écriture.
J'utilise cette option pour que tous les fichiers écrits sur ce partage soit attribués à mon utilisateur sur mon PC principal (partage NFS temporaire pour des images Clonezilla)
Code BASH :
/media/DATA/nfs  192.168.21.0/24(rw,all_squash,anonuid=1001,anongid=1001,async)



Pour appliquer les changements :
Code BASH :
exportfs -a


Sur les clients, pour voir la liste des partages NFS actifs :
Code BASH :
showmount -e

GDM : Forcer la mire de connexion sur un écran précis

Introduction



Dans le cas où on utilise plus d'un écran, la mire de connexion sur gdm se place sur le moniteur principal. Parfois, ce moniteur n'est pas celui que vous souhaitez.
Dans le cas où on a un PC portable avec un écran externe, ça s'affiche sur l'écran intégré du PC portable.
Dans le cas où on a un PC fixe, cela s'affiche sur le premier écran de la carte graphique.

On peut vouloir afficher l'écran de connexion sur un autre écran. C'est le but de ce mini tuto.

Définir un moniteur principal



Si on utilise GDM, on utilise probablement GNOME en environnement de bureau.
Ces 2 composants lisent la même configuration stockée dans un fichier .xml

Pour générer ce fichier de configuration, on va définir le moniteur principal depuis l'environnement de bureau en se rendant dans Paramètres GNOME -> Ecrans

Définir le moniteur principal en le sélectionnant :

gnome-ecran-principal



Cela va mettre à jour le fichier de configuration qui se trouve dans ~/.config/monitors.xml.

Sur mon PC, pour information, voici le contenu de ce fichier XML (on notera la balise primary à yes sur l'écran 22" DELL) :
Code XML :
 version="2">
  >
    >
      >0>
      >0>
      >1>
      >
        >
          >eDP-1>
          >BOE>
          >0x05df>
          >0x00000000>
        >
        >
          >1366>
          >768>
          >60.003177642822266>
        >
      >
    >
    >
      >1366>
      >0>
      >1>
      >yes>
      >
        >
          >HDMI-1>
          >DEL>
          >DELL P2217>
          >K27YY88KAJ2I>
        >
        >
          >1680>
          >1050>
          >59.954250335693359>
        >
      >
    >
  >
>


Appliquer la config à GDM



GDM est lancé en tant qu'utilisateur "gdm". On va donc copier notre fichier monitors.xml dans la config de l'utilisateur de gdm.

Grâace à la commande suivante, on va récupérer le chemoin du dossier personnel de gdm :
Code BASH :
getent passwd gdm


Le résultat produit est ceci sur ma Fedora Workstation :
Code TEXT :
gdm:x:42:42:GNOME Display Manager:/var/lib/gdm:/usr/sbin/nologin


Le dossier personnel de GDM est /var/lib/gdm

On va donc copier ~/.config/monitors.xml pour l'utilisateur gdm :
Code BASH :
sudo cp ~/.config/monitors.xml /var/lib/gdm/.config/monitors.xml


Une fois fait, on donne les droits à l'utilisateur (et au groupe) gdm sur ce fichier :
Code BASH :
sudo chown gdm:gdm /var/lib/gdm/.config/monitors.xml


Après reboot, gdm s'affiche sur l'écran précédemment défini.

Si l'écran principal n'est pas défini à un moment donné (par exemple débranché) gdm s'affichera sur un écran disponible

Utilisation de DNF : Commandes de base

Introduction



Qu'est ce que dnf ?

dnf est l'outil de gestion des paquets dans Fedora au delà de la version 22

dnf est utilisé dans un terminal et sert à installer, désinstaller des logiciels; mais aussi pour mettre à jour la distribution.

dnf gère parfaitement les dépendances, contrairement à rpm.

dnf possède de nombreuses options..


Utilisation des utilitaires



Installer



La principale utilisation de dnf, c'est l'installation des logiciels dans la distribution :

Code BASH :
dnf install paquet



Désinstaller



Pour désinstaller un paquet, c'est aussi simple :

Code BASH :
dnf remove paquet


Si on souhaite désinstaller aussi les dépendances non utilisées :

Code BASH :
dnf autoremove paquet



Mettre à jour



Pour mettre à jour un paquet :

Code BASH :
dnf upgrade paquet


Et pour mettre à jour la distribution :

Code BASH :
dnf upgrade


A noter : On peut exclure un paquet d'une mise à jour :

Code BASH :
dnf --exclude=paquet update


Les jokers fonctionnent aussi, moyennant un échappement du caractère :

Code BASH :
dnf --exclude=kernel\* update


Si vous ne souhaitez installer que les bugfixes ou les patch de sécurité (ou les 2) :

Code BASH :
dnf update --security --bugfix



Rétrograder la version d'un paquet



Il est aussi possible (s'il est présent dans les dépôts) de rétrograder la version d'un paquet via

Code BASH :
dnf downgrade paquet



Réinstaller un paquet



Même si c'est quasiment jamais utilisé, il est possible aussi via dnf de réinstaller un paquet. Ça le réinstalle dans la même version :

Code BASH :
dnf reinstall paquet



Recherche de paquets



Pour rechercher un paquet par son nom, on peut utiliser :

Code BASH :
dnf list paquet


Si on ne connait pas le nom du paquet, on peut utiliser le joker (échappement du caractère nécessaire) :

Code BASH :
dnf list \*paqu\*


Lister tous les paquets disponibles dans les dépôts :

Code BASH :
dnf list


Lister tous les paquets installés :

Code BASH :
dnf list installed


Si on veut étendre la recherche à la description, utiliser alors

Code BASH :
dnf search mot



Rechercher un paquet contenant un fichier



Si on a besoin d'un fichier précis, on peut grâce à dnf chercher le paquet correspondant :

Code BASH :
dnf provides /usr/bin/fichier


Avoir des infos sur un paquet



Pour avoir des informations détaillées sur un paquet, on peut utiliser la commande

Code BASH :
dnf info paquet


Afficher l'historique des transactions



Avec dnf, on peut aussi afficher un historique des transactions réalisées :

Code BASH :
dnf history


Voici un exemple de sortie :

Code TEXT :
ID     | Ligne de commande         | Date et heure    | Action(s)      | Modifié
--------------------------------------------------------------------------------
     3 | autoremove dnfdragora     | 2020-09-13 12:00 | Removed        |   17   
     2 | install neofetch          | 2020-09-13 12:00 | Install        |   24   
     1 |                           | 2020-09-13 11:48 | Install        | 1261 EE


Trouver les paquets qui dépendent d'un autre



Pour savoir quels paquets dépendent d'un autre (par exemple si on veut la liste des paquets qui ont besoin de qt5-linguist), on fera :

Code BASH :
dnf repoquery --whatrequires qt5-linguist --repo fedora-source


Trouver les paquets explicitement installés



Pour savoir quels paquets ont été explicitement installés (qui n'ont pas été installés par dépendance), on pourra utiliser l'option userinstalled à dnf history :

Code BASH :
dnf history userinstalled


Installer les dépendances de construction



Quand on fait du packaging, on renseigne dans le fichier SPEC des paquets à installer par dépendances (Requires) mais aussi des dépendances nécessaires pour la compilation (BuildRequires).
Pour installer rapidement tous les BuildRequires :

Code BASH :
dnf builddep monprogramme.spec


Utiliser uniquement le cache



Si pour une raison particulière on ne veut pas que dnf aille rechercher les métadonnées sur Internet, on peut dire à dnf d'utiliser le cache uniquement.

Pour cela, on a l'option --cacheonly ou -C :

Code BASH :
dnf install -C /var/tmp/rpms/*.rpm



Manipulations avec les dépôts




Lister les dépôts



Pour lister les dépôts installés :

Code BASH :
dnf repolist all


Activer ou Désactiver un dépôt



Pour activer un dépôt de manière permanente :

Code BASH :
dnf config-manager --set-enabled nomdepot


Et pour désactiver un dépôt de manière permanente :

Code BASH :
dnf config-manager --set-disabled nomdepot



Activer ou désactiver un dépôt pendant la mise à jour



De manière temporaire, on peut activer un dépôt pour une mise à jour :

Code BASH :
dnf --enablerepo=nomdepot update


ou le désactiver :

Code BASH :
dnf --disablerepo=nomdepot update



Modification de la configuration



Limiter la bande passante de dnf



Pour limiter la bande passante de dnf, éditer le fichier /etc/dnf/dnf.conf et utiliser l'option throttle . On ajoutera la valeur max_parallel_downloads pour limiter à 1 (par défaut, 3) :

Code BASH :
throttle=20k
max_parallel_downloads=1


Le paramètre de connexions est à placer à 1 sinon, dnf par défaut parallélise les téléchargements (par 3) et du coup, la limitation de la bande passante ne fonctionne plus !

Désactiver les deltarpm



Les deltarpm permettent de réduire la taille des téléchargements, mais l'opération de reconstruction des RPM est coûteuse en disque. Si la connexion est bonne, on peut désactiver l'utilisation des deltarpm en ajoutant ceci au fichier /etc/dnf/dnf.conf :

Code BASH :
deltarpm=0


Ajouter une exclusion permanente



Si vous souhaitez exclure la mise à jour de manière permanente un paquet (pour éviter l'option --exclude à chaque mise à jour), éditer /etc/dnf/dnf.conf . Ajouter la ligne exclude puis tous les noms de paquets concernés séparés par un espace :

Code BASH :
exclude=kernel* firefox libreoffice*


Protéger des paquets de la suppression



Si vous souhaitez ajouter un paquet à protéger (pour ne pas qu'il soit supprimé par inadvertance ou par orphelins) vous devez ajouter le nom du paquet à un fichier .conf dans /etc/dnf/protected.d/

Exemple /etc/dnf/protected.d/adrien.conf

Un nom de paquet par ligne.


Utiliser un proxy avec dnf



Deux possibilités :

Passer par bash :

Code BASH :
http_proxy="http://ip_proxy:3128"
export http_proxy


Directement dans le fichier /etc/dnf/dnf.conf :

Code BASH :
proxy=http://ip_proxy:3128


Utiliser le miroir le plus rapide



Par défaut, dnf peut utiliser un miroir super lent. Il existe une astuce pour bénéficier d'un miroir rapide. Editer le fichier /etc/dnf/dnf.conf, et placer l'instruction fastestmirror :

Code BASH :
fastestmirror=true


Désactiver les statistiques



Depuis Fedora 32, DNF envoie par défaut tous les 7 jours une requête permettant de comptabiliser des machines actives avec le type de version utilisée.

Si vous êtes opposé à cela, vous pouvez ajouter dans le fichier /etc/dnf/dnf.conf, l'instruction countme :

Code BASH :
countme=False



Conserver un certain nombre de kernels (installonly_limit)



Par défaut, dnf permet de conserver 3 kernels (les 3 plus récents). C'est configuré grâce à la variable installonly_limit du fichier dnf.conf.

Pour par exemple ne conserver que 2 kernels, éditer /etc/dnf/dnf.conf et ajouter la ligne

Code BASH :
installonly_limit=2


La valeur minimale est 2. Si vous mettez 0, cela veut dire de garder de manière illimitée.

Afficher toute la config dnf



Si vous voulez consulter les variables et la config de dnf sur votre système :

Code BASH :
dnf config-manager --dump



Les modules



Un article est dédié aux modules : https://www.linuxtricks.fr/wiki/utilisation-de-dnf-les-modules

GDM : Forcer la mise de connexion sur un écran

Introduction



Dans le cas où on utilise plus d'un écran, la mire de connexion sur gdm se place sur le moniteur principal. Parfois, ce moniteur n'est pas celui que vous souhaitez.
Dans le cas où on a un PC portable avec un écran externe, ça s'affiche sur l'écran intégré du PC portable.
Dans le cas où on a un PC fixe, cela s'affiche sur le premier écran de la carte graphique.

On peut vouloir afficher l'écran de connexion sur un autre écran. C'est le but de ce mini tuto.

Définir un moniteur principal



Si on utilise GDM, on utilise probablement GNOME en environnement de bureau.
Ces 2 composants lisent la même configuration stockée dans un fichier .xml

Pour générer ce fichier de configuration, on va définir le moniteur principal depuis l'environnement de bureau en se rendant dans Paramètres GNOME -> Ecrans

Définir le moniteur principal en le sélectionnant :

gnome-ecran-principal



Cela va mettre à jour le fichier de configuration qui se trouve dans ~/.config/monitors.xml.

Sur mon PC, pour information, voici le contenu de ce fichier XML (on notera la balise primary à yes sur l'écran 22" DELL) :
Code XML :
 version="2">
  >
    >
      >0>
      >0>
      >1>
      >
        >
          >eDP-1>
          >BOE>
          >0x05df>
          >0x00000000>
        >
        >
          >1366>
          >768>
          >60.003177642822266>
        >
      >
    >
    >
      >1366>
      >0>
      >1>
      >yes>
      >
        >
          >HDMI-1>
          >DEL>
          >DELL P2217>
          >K27YY88KAJ2I>
        >
        >
          >1680>
          >1050>
          >59.954250335693359>
        >
      >
    >
  >
>


Appliquer la config à GDM



GDM est lancé en tant qu'utilisateur "gdm". On va donc copier notre fichier monitors.xml dans la config de l'utilisateur de gdm.

Grâace à la commande suivante, on va récupérer le chemoin du dossier personnel de gdm :
Code BASH :
getent passwd gdm


Le résultat produit est ceci sur ma Fedora Workstation :
Code TEXT :
gdm:x:42:42:GNOME Display Manager:/var/lib/gdm:/usr/sbin/nologin


Le dossier personnel de GDM est /var/lib/gdm

On va donc copier ~/.config/monitors.xml pour l'utilisateur gdm :
Code BASH :
sudo cp ~/.config/monitors.xml /var/lib/gdm/.config/monitors.xml


Une fois fait, on donne les droits à l'utilisateur (et au groupe) gdm sur ce fichier :
Code BASH :
sudo chown gdm:gdm /var/lib/gdm/.config/monitors.xml


Après reboot, gdm s'affiche sur l'écran précédemment défini.

Si l'écran principal n'est pas défini à un moment donné (par exemple débranché) gdm s'affichera sur un écran disponible

Ubuntu 24.04 et + : Changer le port d'écoute du serveur SSH

ssh_logo



Introduction



Testant la béta d'Ubuntu 24.04 LTS, j'ai remarqué que le changement de port du serveur openssh est sans effet. Cet article a pour but de vous expliquer le changement et de vous donner la solution pour changer le port d'écoute.

Changer le port d'écoute n'améliorera pas la sécurité du système (un attaquant trouvera facilement le port utilisé par le serveur SSH), mais peut éviter de pourrir les logs par les bots qui scannent le port 22.

Après quelques recherches , depuis la version 1:9.0p1-1ubuntu1 de openssh-server dans Ubuntu 22.10 (et supérieur), OpenSSH est configuré par défaut pour utiliser l'activation de socket systemd. Cela signifie qu'il ne sera pas démarré tant qu'une demande de connexion entrante n'aura pas été reçue.

Une unité de type socket avec systemd est une entité qui représente un point d'écoute pour la communication réseau, permettant aux processus de se connecter et de communiquer entre eux via des sockets.

Chez Canonical, le choix a été fait pour, je cite : réduire la mémoire consommée par les instances de serveurs Ubuntu par défaut, ce qui est particulièrement intéressant avec Ubuntu fonctionnant dans des VM ou des conteneurs LXD.

C'est donc systemd qui va gérer le port d'écoute du serveur openssh. Par conséquent, si on a besoin de le changer le port d'écoute, on ne changera pas la ligne Port dans le fichier /etc/ssh/sshd_config.
D'ailleurs, un commentaire est présent dans le fichier de configuration indiquant : Port and ListenAddress options are not used when sshd is socket-activated, which is now the default in Ubuntu.

Cet article concerne les nouvelles installations, car lors de la mise à niveau depuis Ubuntu 22.04 LTS les paramètres seront migrés : On upgrades from Ubuntu 22.04 LTS, users who had configured Port settings or a ListenAddress setting in /etc/ssh/sshd_config will find these settings migrated to /etc/systemd/system/ssh.socket.d/addresses.conf

Changer le numéro de port



Paramétrage systemd



Dans cette section, nous allons voir comment changer le port d'OpenSSH.

On va y créer un fichier de configuration directement avec la commande suivante :

Code BASH :
systemctl edit ssh.socket


Cette commande va créer, s'il n'existe pas, le dossier /etc/systemd/system/ssh.socket.d/ et créer un fichier de configuration appelé override.conf.

On va ajouter la section [Socket] et la paramétrer comme suit avant la ligne ### Edits below this comment will be discarded :

Code BASH :
[Socket]
ListenStream=22022


Si le serveur possède plusieurs adresses IP, on pourra n'écouter que sur une seule d'entre elles :
Code BASH :
ListenStream=192.168.21.210:2022


Ensuite, on recharge la configuration de systemd :
Code BASH :
systemctl daemon-reload 


Et on redémarre le socket ssh :
Code BASH :
systemctl restart ssh.socket


Paramétrage pare-feu ufw



Si on utilise le pare-feu fourni par défaut dans Ubuntu (ufw), on n'oubliera pas d'ouvrir le port précédemment défini.

On ajoute notre port personnalisé (exemple avec mon port 22022) :

Code BASH :
ufw allow 22022/tcp


Solution de contournement



Si on le souhaite, on peut revenir à un démarrage classique du serveur OpenSSH.
Cela n'est cependant pas conseillé je pense, car c'est une volonté d'Ubuntu de ne plus utiliser ce fonctionnement standard d'OpenSSH.

On pourra alors désactiver le socket systemd pour SSH :
Code BASH :
systemctl disable --now ssh.socket


On pourra recharger le démon systemd :
Code BASH :
systemctl daemon-reload


Et on réactive OpenSSH avec son service classique :
Code BASH :
systemctl enable --now ssh.service


Ensuite, les modifications habituelles sur le port d'écoute dans le fichier /etc/ssh/sshd_config seront fonctionnelles.

Fedora : Installer le pilote propriétaire Broadcom pour carte Wi-Fi et Bluetooth

broadcom-logo



Introduction



Dans cet article, nous allons voir comment installer le micrologiciel propriétaire Broadcom pour cartes Wi-Fi et Bluetooth sous Fedora.

Si vous disposez d'un PC récent, je vous conseille de désactiver le Secure Boot, les modules n'étant pas signés.

Suis-je concerné ?



Il se peut que dans certaines configurations, les cartes Wi-Fi Broadcom fonctionnent parfaitement. Si tel n'est pas le cas (carte wi-fi non détectée, ou performances extrêmement dégradées), vous êtes arrivé ici.

Vous pouvez identifier votre carte réseau Broadcom avec la commande lspci listant les périphériques PCI :

Code BASH :
lspci -k


Chez moi, voici la liste des cartes réseaux disponibles :

Code TEXT :
01:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
    Subsystem: AzureWave AW-NE785 / AW-NE785H 802.11bgn Wireless Full or Half-size Mini PCIe Card
    Kernel driver in use: ath9k
    Kernel modules: ath9k
02:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4313 802.11bgn Wireless Network Adapter (rev 01)
    Subsystem: Dell Device 0015
    Kernel driver in use: bcma-pci-bridge
    Kernel modules: bcma
0c:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5761 Gigabit Ethernet PCIe (rev 10)
    Subsystem: Dell Device 053d
    Kernel driver in use: tg3
    Kernel modules: tg3


On voit ici que ma carte est Broadcom Inc. and subsidiaries BCM4313 802.11bgn Wireless Network Adapter et que le module utilisé est bcma-pci-bridge.

C'est un module générique qui n'est pas du tout performant, et vous aurez besoin d'installer le micrologiciel propriétaire.

Prérequis



Evidemment, vu qu'il s'agit d'un périphérique réseau qui ne fonctionne pas correctement, assurez-vous d'avoir accès à internet avec une autre méthode (cable Ethernet, deuxième carte Wi-Fi ou partage USB avec le smartphone)

Dans un premier temps, installer les dépôts RPM Fusion Free et NonFree : https://www.linuxtricks.fr/wiki/fedora-ajouter-des-depots-supplementaires

Avant d'installer le micrologiciel Broadcom, assurez-vous que le système est à jour :

Code BASH :
dnf upgrade


S'il y avait des mises à jour, redémarrez le système.

Code BASH :
reboot


Installation



Le pilote propriétaire de Broadcom est disponible dans RPM Fusion Nonfree. Un seul paquet est nécessaire, et il va récupérer tout ce qui va bien : broadcom-wl

On l'installe comme ceci :

Code BASH :
dnf install broadcom-wl


Cela va installer notamment akmod-wl qui se chargera de compiler pour vous automatiquement le pilote Broadcom.
Aussi, à chaque mise à jour du noyau, le pilote sera automatiquement recompilé aussi. On ne se préoccupe de rien.

Aucune configuration n'est à effectuer, le paquet s'occupe de tout.

Une fois fait, on reboot le système :

Code BASH :
reboot


Tests



On peut relancer la commande lspci du début :

Code BASH :
lspci -k


Chez moi, voici le retour pour la carte Boradcom :

Code TEXT :
02:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4313 802.11bgn Wireless Network Adapter (rev 01)
    Subsystem: Dell Device 0015
    Kernel driver in use: wl
    Kernel modules: bcma, wl
 


On remarque que le module utilisé n'est plus bcma-pci-bridge mais wl qui correspond au module de Broadcom

On constate aussi que les performances sont bien meilleures !

Fedora : Installer le pilote Broadcom pour carte Wi-Fi et Bluetooth

broadcom-logo



Introduction



Dans cet article, nous allons voir comment installer le pilote Broadcom pour cartes Wi-Fi et Bluetooth sous Fedora.

Si vous disposez d'un PC récent, je vous conseille de désactiver le Secure Boot, les modules n'étant pas signés.

Suis-je concerné ?



Il se peut que dans certaines configurations, les cartes Wi-Fi Broadcom fonctionnent parfaitement. Si tel n'est pas le cas, vous êtes arrivé ici.

Vous pouvez identifier votre carte réseau Broadcom avec la commande lspci listant les périphériques PCI :

Code BASH :
lspci -k


Chez moi, voici la liste des cartes réseaux disponibles :

Code TEXT :
01:00.0 Network controller: Qualcomm Atheros AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
    Subsystem: AzureWave AW-NE785 / AW-NE785H 802.11bgn Wireless Full or Half-size Mini PCIe Card
    Kernel driver in use: ath9k
    Kernel modules: ath9k
02:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4313 802.11bgn Wireless Network Adapter (rev 01)
    Subsystem: Dell Device 0015
    Kernel driver in use: bcma-pci-bridge
    Kernel modules: bcma
0c:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5761 Gigabit Ethernet PCIe (rev 10)
    Subsystem: Dell Device 053d
    Kernel driver in use: tg3
    Kernel modules: tg3


On voit ici que ma carte est Broadcom Inc. and subsidiaries BCM4313 802.11bgn Wireless Network Adapter et que le module utilisé est bcma-pci-bridge.

C'est un module générique qui n'est pas du tout performant, et vous aurez besoin d'installer le micrologiciel propriétaire.

Prérequis



Evidemment, vu qu'il s'agit d'un périphérique réseau qui ne fonctionne pas correctement, assurez-vous d'avoir accès à internet avec une autre méthode (cable Ethernet, deuxième carte Wi-Fi ou partage USB avec le smartphone)

Dans un premier temps, installer les dépôts RPM Fusion Free et NonFree : https://www.linuxtricks.fr/wiki/fedora-ajouter-des-depots-supplementaires

Avant d'installer le micrologiciel Broadcom, assurez-vous que le système est à jour :

Code BASH :
dnf upgrade


S'il y avait des mises à jour, redémarrez le système.

Code BASH :
reboot


Installation



Le pilote propriétaire de Broadcom est disponible dans RPM Fusion Nonfree. Un seul paquet est nécessaire, et il va récupérer tout ce qui va bien : broadcom-wl

On l'installe comme ceci :

Code BASH :
dnf install broadcom-wl


Cela va installer notamment akmod-wl qui se chargera de compiler pour vous automatiquement le pilote Broadcom.
Aussi, à chaque mise à jour du noyau, le pilote sera automatiquement recompilé aussi. On ne se préoccupe de rien.

Aucune configuration n'est à effectuer, le paquet s'occupe de tout.

Une fois fait, on reboot le système :

Code BASH :
reboot


Tests



On peut relancer la commande lspci du début :

Code BASH :
lspci -k


Chez moi, voici le retour pour la carte Boradcom :

Code TEXT :
02:00.0 Network controller: Broadcom Inc. and subsidiaries BCM4313 802.11bgn Wireless Network Adapter (rev 01)
    Subsystem: Dell Device 0015
    Kernel driver in use: wl
    Kernel modules: bcma, wl
 


On remarque que le module utilisé n'est plus bcma-pci-bridge mais wl qui correspond au module de Broadcom

On constate aussi que les performances sont bien meilleures !

shutdown : Arrêter et redémarrer un système Linux (systemd)

Introduction



La commande shutdown permet d'arrêter ou redémarrer un système Linux de manière contrôlée.

La commande shutdown est historiquement une commande système dédiée.

Cet article ne traite que du comportement de la commande shutdown sur un système utilisant systemd (Fedora, Red Hat Enterprise Linux 7+, Debian 8+, Ubuntu 16.04+ )
En effet, la commande shutdown n'est plus qu'un lien symbolique vers la commande /usr/bin/systemctl. Pour le vérifier :

Code BASH :
readlink -f $(which shutdown)


La commande shutdown nécessite les droits root pour être exécutée.

Arrêt et redémarrage du système



Pour arrêter le système, on invoquera la commande sans options ou avec l'option -h :
Code BASH :
shutdown -h


L'arrêt sera initié 60 secondes après la validation de la commande.
Un message est envoyé à tous les utilisateurs connectés avertissant de l'arrêt du système :
Code :
Broadcast message from root@testdays on pts/3 (Thu 2024-02-22 18:37:07 CET):
The system will power off at Thu 2024-02-22 18:38:07 CET!


Les sessions connectées graphiquement ne reçoivent pas le message de diffusion. Seules les sessions TTY reçoivent les messages de diffusion.

Il est possible de spécifier now pour réaliser l'action d'arrêt du système immédiatement :
Code BASH :
shutdown -h now


Si on souhaite redémarrer le système, l'option -r est à utiliser (sans now, le redémarrage s'opère au bout de 60 secondes) :
Code BASH :
shutdown -r now


Cette commande a le même effet que reboot, qui effectue le redémarrage du système immédiatement

Planifier un arrêt du système



Grâce à la commande shutdown, on pourra planifier l'arrêt (avec -h) ou le redémarrage (avec -r) en spécifiant une chaîne d'indication d'heure de la forme suivante :
  • +m : où m est le délai en minutes
  • hh:mm : où hh:mm est l'heure à laquelle exécuter l'action


Par exemple, pour planifier un redémarrage à 22:00 :
Code BASH :
shutdown -r 22:00


Code :
Reboot scheduled for Thu 2024-02-22 22:00:00 CET, use 'shutdown -c' to cancel.


5 minutes avant le redémarrage planifié, les utilisateurs ne peuvent plus se connecter au système (hormis root) :
Code :
[adrien@SSH222 ~]$ ssh 192.168.21.100
adrien@192.168.21.100's password:
System is going down. Unprivileged users are not permitted to log in anymore. For technical details, see pam_nologin(8).
Connection closed by 192.168.21.100 port 22

shutdown-nologin



Annuler un arrêt planifié



Lorsqu'un arrêt ou redémarrage a été planifié, il est possible de l'annuler.

On pourra vérifier si un arrêt ou redémarrage a été planifié avec :
Code BASH :
shutdown --show


Ce qui peut nous retourner ce type de message si c'est le cas :
Code :
Shutdown scheduled for Thu 2024-02-22 22:00:00 CET, use 'shutdown -c' to cancel.


Pour annuler la planification, invoquer shutdown avec l'option -c :
Code BASH :
shutdown -c


Un message est envoyé à tous les utilisateurs connectés avertissant de l'annulation :
Code :
Broadcast message from root@testdays on pts/1 (Thu 2024-02-22 18:59:42 CET):
System shutdown has been cancelled


Personnaliser les messages de diffusion



Lorsque la commande shutdown est utilisée, un message est diffusé à tous les utilisateurs :
Code :
Broadcast message from root@testdays on pts/1 (Thu 2024-02-22 19:02:41 CET):
The system will power off at Thu 2024-02-22 19:07:41 CET!


Il est possible de ne pas afficher ce message avec --no-wall aussi bien dans le cas de la planification que de l'annulation de la planification :
Code BASH :
shutdown -h +5 --no-wall


Il n'est pas possible, à ma connaissance, de personnaliser le message envoyé par shutdown.
La solution possible est la suivante : Planifier l'opération avec l'option --no-wall et d'utiliser la commande wall en complément :
Code BASH :
shutdown -h +5 --no-wall
 wall "On reboot dans 5 minutes!"


On notera que le shell qui émet la commande wall ne reçoit pas le message de diffusion.
❌