Dans ce tutoriel, je vais recenser quelques astuces et commandes pratiques sous Linux qui peuvent vous faire gagner du temps pour optimiser l’administration d’un serveur sous Linux. Que vous soyez débutant ou chevronné ces tips vont vous faire gagner du temps, c’est sûre. 100% pratique. Pour ceux qui souhaite définir un bandeau à chaque connexion de leurs serveurs/VPS, je vous conseille la création d’un MOTD (Message Of The Day).
Sommaire de l'article
- 1 Lister les modules chargés par Apache avec Apachectl
- 2 Surveiller les connexions SSH de son serveur
- 3 Vider le contenu d’un fichier
- 4 Code de retour d’une commande sous Linux
- 5 Exécuter un script CRON uniquement au redémarrage de votre serveur
- 6 L’enchaînement des commandes sous Linux
- 7 Etre averti par mail des updates de son serveur avec Yum-Cron
- 8 Désactiver un service Linux au démarrage
- 9 Comment faire un reset du password root sous CentOS
- 10 Lister tous les paquets installés sur une machine Linux
- 11 Changer le fuseau horaire de votre serveur Linux
- 12 Désactiver l’IPV6 sur Ubuntu
- 13 Corriger l’erreur Could not get lock /var/lib/dpkg/lock-frontend – open (11: Resource temporarily unavailable)
- 14 Récupérer votre adresse IP publique avec wget
Lister les modules chargés par Apache avec Apachectl
ApacheCtl va vous permettre de lister tous vos modules Apache actifs afin de faire du tri et ne garder que les essentiels. Il est important tant au niveau sécurité et des performances de votre serveur web, de ne charger que les modules nécessaires.
Pour afficher la liste des modules Apache, nous allons utiliser la commande apachectl.
Apachectl est une sorte d’interface pour le serveur Apache. Elle est destinée à aider l’administrateur à contrôler le bon fonctionnement du daemon Apache.
Vous trouverez toutes les options en utilisant la commande :
# apachectl help
En ce qui concerne notre tutoriel, nous allons utiliser la commande suivante :
# apachectl –t –D DUMP_MODULES
La liste de tous vos modules chargés doit s’afficher.
Vous pouvez aussi avoir le même résultat avec la commande phpinfo(), qui affiche les modules chargés et autres informations dans une page PHP.
Surveiller les connexions SSH de son serveur
Il est important de surveiller les connexions SSH échouées sur son serveur. Mais je dirais qu’il est aussi important de logger les connexions réussies. Découvrons ensemble comment mettre en place ce suivi avec un mail d’alerte. La commande utilisée pour envoyer le message sera mail.
Mail est une commande qui permet d’envoyer des courriels sous Unix. Elle nécessite au préalable que la résolution de nom soit possible via un DNS.
Exemple d’envoi de mail :
#> echo "corps du message" | mail –s "Sujet du mail" adresse@destinataire.com
Le but de ce tutoriel, c’est qu’à chaque démarrage de session en SSH nous ayons un mail pour vérifier qu’une personne non autorisée ne se connecte pas en cachette sur notre serveur.
Nous allons utiliser l’utilitaire mail pour générer notre message d’alerte et surveiller les connexions SSH sur notre serveur. Pour que cette astuce fonctionne il faut créer le fichier sshrc dans le répertoire /etc/ssh/.
Le fichier sshrc est exécuté à chaque démarrage des connexions SSH.
#vim /etc/ssh/sshrc
Rajouter ces lignes dans le fichier sshrc :
ip='echo $SSH_CONNECTION | cut -d " " -f 1' hostname='hostname' logger -t ssh-wrapper $USER login from $ip echo "User $USER just logged in $hostname from $ip" | mail -s "SSH Login" votreadresse@mail.com
Enregistrer le fichier puis déconnectez-vous de votre serveur et reconnectez-vous en SSH. Au bout de quelques instants vous recevrez dans votre boite aux lettres ce message :
Voici une astuce simple à mettre en place sur vos serveurs, pour logger discrètement qui se connecte à vos serveurs.
Vider le contenu d’un fichier
Récemment, pour améliorer la rapidité d’une sauvegarde, j’ai dû adapter mon script en vidant le contenu d’un fichier. Voici plusieurs commandes pour vider le contenu d’un fichier sous Linux. Si ce fichier est critique, je vous conseille de réaliser une sauvegarde avant.
- echo /dev/null > fichier_a_vider
- echo “” > fichier_a_vider (Générera un fichier de 1 ko avec un saut de ligne)
- printf “” > fichier_a_vider (Générera un fichier de 0 ko sans saut de ligne)
- > fichier_a_vider
Code de retour d’une commande sous Linux
Si vous écrivez souvent des scripts sous Linux, cette astuce va sûrement vous intéresser pour gérer les erreurs dans votre script.
Toutes les commandes Linux retournent un code d’erreur compris entre 0 et 255. La valeur 0 représente la valeur OK (succès de la commande). Les valeurs supérieur à 0 représente la valeur KO (échec de la commande).
pour afficher le code erreur de la dernière commande exécutée sur votre système, vous devez saisir :
echo $?
Vous pouvez vous-même, modifier la valeur de retour pour un de vos scripts. Un script shell étant lui-même une commande, il est possible de lui faire retourner un code d’erreur avec la commande spéciale exit.
Il est possible d’indiquer dans un script exit 1 afin d’indiquer que le script a rencontré une erreur et/ou exit 0 afin d’indiquer que tout c’est bien déroulé.
Exécuter un script CRON uniquement au redémarrage de votre serveur
Voici une autre astuce vraiment pratique lorsqu’on doit exécuter un script au redémarrage de votre serveur. Un exemple récent auquel j’ai dû faire face, le reboot de mon VPS et mon instance Emby en container était bloquée car les fichiers son sur un disque virtuel sur Pcloud. Lors du reboot du VPS la reconnexion du disque virtuel via rclone n’est pas automatique. Voici donc une solution pour remédier à ce problème.
Pour définir une commande à exécuter lorsque le système redémarre, remplacez les champs de date et d’heure par @reboot. La nouvelle commande dans le CRON serait :
@reboot spécifie que cron doit exécuter la commande spécifiée après chaque démarrage. Encore une fois, nous devons ajouter la commande au fichier crontab avec la commande crontab -e, pour rappel vous pouvez lister le contenu de votre CRON avec la commande crontab -l
L’instruction @reboot exécute une commande immédiatement après le démarrage de votre serveur. Si vous souhaitez bénéficier d’une période de veille avant l’exécution de la commande. Vous pouvez définir un tempo en seconde en rajoutant la commande sleep dans votre ligne CRON après le @reboot.
600 représente 10 minutes exprimées en secondes, et sleep est l’option à utiliser lors de la spécification du temps avant l’exécution.
L’enchaînement des commandes sous Linux
Lorsqu’on réalise des tâches d’administrations, on peut être amené a enchainer plusieurs commandes de suite. Alors au-lieu de les taper les unes après les autres, on peut réaliser un enchainement de commandes grâce aux caractères d’enchainement.
Voici une petite description des 3 caractères d’enchainement sous Linux.
Le point virgule
Un enchainement de commande avec un point virgule enchaînera les commandes sans se soucier de la réussite ou de l’échec de chacune. On peut utiliser ces commandes quand nous sommes sûr de leurs réussites ou alors quand leurs bonnes exécutions n’est pas importante.
Par exemple si l’on souhaite créer un dossier puis s’y rendre pour y créer un fichier vide, on exécutera le commande suivante :
C’est la manière la moins propre d’enchainer les commandes sous Linux. On peut imaginer une gestion plus complexe des commandes avec une mini gestion des erreurs. Il serait alors préférable d’être capable de n’exécuter les commandes suivantes uniquement si les précédentes se sont correctement executées.
Le « && »
Il est parfois nécessaire d’exécuter une commande que si la commande précédente a réussie. Par exemple si l’on souhaite vérifier l’existence d’un dossier et, si il existe, créer un fichier dedans :
cd /home/~/mondossier1 && touch monfichier1
Dans cet exemple, si la commande cd /home/~/mondossier1 ne s’exécute pas correctement (c’est à dire que le dossier n’existe pas), la commande touch monfichier1 qui créer un fichier vide ne s’exécutera pas et ne déclenchera pas de message d’erreur. Intéressant non!
Linux enregistre un paramètre à chaque exécution de commande qui peut être récupéré dans un script par exemple. Ce paramètre se met à « 0 » si la commande s’est executée correctement et à « 2 » quand la commande à échouée.
Pour déterminer si une commande a bien réussie, Linux analyse ce paramètre et, dans le cas d’un « 0 » avec un enchainement de commande « && », il exécute la commande suivante.
Si le paramètre en question est « 2 », il met donc fin à l’exécution des prochaines commandes.
Le « || »
il peut être aussi intéressant d’exécuter une commande uniquement si la commande précédente ne se déroule pas correctement au lieu de mettre fin à toute la ligne de commande. Cela est possible avec les caractères « || ».
Si l’on souhaite, comme auparavant, voir si un dossier existe et si c’est le cas y créer un fichier. On peut également vouloir créer le dossier si il n’est pas encore présent :
cd /home/~/dossier1 || mkdir / /home/~/mondossier1 && touch monfichier1
C’est un exemple simple mais on peut imaginer des choses beaucoup plus complexes.
Ici, le paramètre de vérification de l’exécution de la commande n’est pas « 0 » (= la commande « cd /home/~/mondossier1 » à échouée), on créera le fichier avec la commande « mkdir ». Puis dans un second temps on créera le fichier « monfichier1 ».
Etre averti par mail des updates de son serveur avec Yum-Cron
Si vous êtres administrateur et que vous gérez plusieurs serveurs sous RockyLinux par exemple, il peut vous être utile d’être averti lors de nouvelles mises à jour disponibles. Pour cela nous allons utiliser l’outil yum-cron.
Pour installer le logiciel il suffit de saisir la commande suivante :
#yum install yum-cron
L’installation s’effectue en quelques secondes. Maintenant nous allons paramétrer yum-cron pour nous envoyer un mail dès qu’une mise à jour pointe son nez.
Toute la configuration de yum-cron se trouve dans le fichier /etc/sysconfig/yum-cron.
les principales options à modifier sont :
- CHECK_ONLY : Si vous mettez YES, vérifie uniquement si des mises à jour existent pour votre système.
- DOWNLOAD_ONLY : Cela implique que CHECK_ONLY soit positionné à YES. Permet de télécharger sans les installer les mises à jour disponibles.
- MAILTO : Saisissez ici l’adresse mail de destination pour recevoir les alertes.
- SYSTEMNAME : Ce paramètre vous permet de personnaliser le sujet du mail. Vous pourrez par exemple créer une règle pour classer directement ces mails.
Une fois les modifications faites dans le fichier, enregistrer le et redémarrer le service avec la commande suivante :
#/etc/init.d/yum-cron restart
Chaque jour en cas de nouvelles mises à jour, vous recevrez un mail de ce type avec la liste des paquets à mettre jour.
Désactiver un service Linux au démarrage
Si comme moi, lors de vos reboots de serveurs, vous souhaitez désactiver un service au redémarrage d’un serveur, pour éviter qu’il rentre en conflit avec d’autres services comme docker par exemple, voici la solution.
Tout d’abord si vous souhaitez savoir quels services se lancent au démarrage de votre serveur Linux et le temps que mets chacun d’entre-eux à démarrer, voici une commande qui va vous plaire (Sous Ubuntu). Vous obtiendrez la liste de tous les services lancés au démarrage ainsi que leur temps de lancement en commençant par les plus lent….
# systemd-analyze blame
Maintenant, pour supprimer un service au démarrage de Linux (Ubuntu), utiliser la commande suivante :
# sudo systemctl disable <Nom_du_service>.service
En désactivant le service apache2, mon docker va pouvoir se lancer et lancer ses containers rapidement et sans problème. Ouf!!!
Si vous souhaitez, activer un service au démarrage de votre serveur, vous devrez utiliser cette commande :
# sudo systemctl enable <Nom_du_service>.service
Comment faire un reset du password root sous CentOS
Si vous avez perdu votre mot de passe root sur une machine CentOS, voici une procédure très simple pour le changer. Nous allons voir comment réinitialiser le mot de passe root en cinq étapes.
Pour réaliser cet exploit, il est quand même nécessaire d’avoir un accès physique à la machine.
Etape 1 : redémarrer la machine et accéder au menu de configuration de Grub.
Etape 2 : Placez-vous sur un item du menu, puis appuyer sur la touche « e » (permet d’éditer le menu)
Etape 3 : Se placer sur la ligne qui contient Kernel et appuyer de nouveau sur « e », pour éditer la ligne de lancement du kernel.
Etape 4 : Ajouter le chiffre 1 à la fin de la ligne et appuyer sur Entrée.
Etape 5 : Rebooter en appuyant sur la touche « b ». Après quelques secondes vous aurez accès au shell et en utilisant la commande passwd, vous pourrez changer le mot de passe du root.
Voici une technique simple et efficace pour faire un reset d’un mot de passe oublié.
Lister tous les paquets installés sur une machine Linux
Grâce à une simple commande, vous allez pouvoir lister sur votre serveur les paquets installés. Outre l’aspect inventaire de cette commande, vous pouvez surveiller les installations et repérer les dysfonctionnement dû à l’installation d’un paquet. Très utile pour les sys-admin.
Les formats de paquets
Les paquets peuvent prendre plusieurs formes en fonction de votre distribution. Le format RPM (RedHat Package Manager), a été, comme son nom l’indique, créé à l’origine pour la distribution Red Hat. Depuis, de nombreuses distributions l’ont utilisé, on peut citer par exemple CentOS ou SuSE. Il existe d’autres formats de paquets dans le monde Linux qui sont DEB (pour Debian) et TGZ (pour Slackware).
Qu’est-ce qu’un paquet ?
C’est un fichier (une archive, un peu comme un fichier .tar ou .zip) qui contient tous les fichiers appartenant à une application, une bibliothèque, etc. ainsi que des scripts de contrôle qui sont exécutés lors de l’installation ou de la désinstallation de l’application. Ce fichier contient également toutes les dépendances à d’autres applications, bibliothèques, etc.
Lister les paquets installés sous Ubuntu
# dpkg --list
Voici l’explication par colonne :
- Le statut du paquet : la plupart du temps, il sera affiché « ii », qui signifie » installer. Mais l’on pourra également trouver « H » pour « semi-installé » ou d’autres états dont la signification est précisée juste avant le début de la liste
- Le nom du paquet tel que présent dans les dépôts
- La version du paquet, une information qui sera la plupart du temps très utile pour les dépendances par exemple
- L’architecture du système pour le paquet
- La description du paquet, afin de voir si celui-ci nous semble utile ou pas.
Bonus !! Sauvegarder les paquets installés sous Ubuntu dans un fichier texte
Cette astuce vous permet de stocker tous les paquets dans un fichier texte en vue d’une nouvelle installation sur une autre machine. Cela peut vous faire gagner du temps.
# dpkg --get-selections > liste-des-paquets_`hostname`_`date +%Y-%m-%d-%H-%M`
Pour restaurer les paquets, voici les commandes à respecter sur une machine :
# sudo apt-get update # sudo apt-get install dselect # sudo dselect update # sudo dpkg --set-selections < liste-des-paquets> # sudo apt-get -u dselect-upgrade
Sous CentOS, la commande équivalente pour afficher les paquets installés est :
# yum list installed
Changer le fuseau horaire de votre serveur Linux
Il peut arriver sur certaines installations Linux que l’heure ne soit pas une heure locale mais UTC (pour Universal Time Coordinated). En France cela pose des problèmes surtout si vous renvoyez vos logs vers un syslog comme Splunk par exemple, il faut toujours jongler avec les heures en enlevant 2 ou 1 heures suivant la saison. La meilleure heure pour un serveur est l’heure locale. Voici la commande pour paramétrer votre serveur Linux avec le bon fuseau horaire :
# sudo dpkg-reconfigure tzdata
Désactiver l’IPV6 sur Ubuntu
Tout est dit dans le titre. Si l’IPv6 ne vous sert à rien sur votre serveur Linux, on le désactive. Voici comment en quelques lignes de commandes, comment se débarasser de l’IPv6 sous Ubuntu.
Pour savoir si l’IPv6 est activé sur vos interfaces réseau, il suffit d’utiliser la commande suivant :
# ifconfig
Comme toujours avant je vous conseille d’effectuer une mise à jour de votre système avec les commandes suivantes :
# sudo apt update # sudo apt upgrade
Ensuite éditer le fichier sysctl.conf :
# vi /etc/sysctl.conf
Puis rajouter à la fin du fichier les lignes suivantes :
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf..disable_ipv6 = 1
Remplacer <nom_de_l’interface> par le nom de votre interface sur le serveur, ou il faut désactiver l’IPv6. Par défaut l’IPv6 sera désactiver sur l’interface de loopback.
Pour que les modifications soient prises en compte, inutile de redémarrer votre serveur. Utiliser cette commande :
# sysctl -p
Enfin, pour vérifier si la commande a bien désactiver l’IPv6 sur les interfaces, retaper ifconfig, il ne devrait y avoir aucune ligne inet6.
Vous tentez d’installer ou de mettre à jour un logiciel ou votre distribution avec la commande APT et vous avez ce message d’erreur :
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
Cette erreur survient généralement lorsqu’une précédente mise à jour s’est mal déroulée et le processus est bloqué. Vous avez plusieurs solutions pour résoudre ce problème.
Vous pouvez utiliser la ligne de commande Linux pour rechercher et tuer le processus en cours. Pour ce faire, utilisez la commande ci-dessous:
# ps aux | grep -i apt
Cela vous montrera l’identifiant du processus exécutant apt ou apt-get. Dans l’exemple ci-dessus, l’ID de processus est 3274. Vous pouvez ignorer la dernière ligne contenant «grep –color = auto».
Vous pouvez utiliser l’identifiant du processus pour le tuer avec la commande :
sudo kill -9
Ou sinon vous pouvez utilisez une méthode plus radicale. Cette commande va tuer toutes les instances d’un programme en cours d’exécution :
sudo killall apt apt-get
Grâce à la commande wget, vous allez pouvoir récupérer très rapidement votre adresse IP Publique.
Récupérer votre adresse IP publique avec wget
Vous pourrez ensuite l’utiliser dans des scripts par exemple où pour faire des vérifications si vous utilisez une connexion VPN.
$ wget -qO- icanhazip.com
Une petite explication s’impose :
La commande wget est un gestionnaire de téléchargement libre. Il est issu du projet GNU, il permet le téléchargement avancé de fichiers sur des réseaux et sur Internet. Par exemple, il permet de créer des miroirs de sites, ou d’effectuer des téléchargements récursifs. Son nom vient de World Wide Web et de GET qui est le nom de la commande utilisée dans le protocole HTTP pour récupérer un fichier. Il est capable de communiquer avec les protocoles HTTP et FTP. (Source Wikipédia)
La syntaxe des commandes wget est relativement simple :
wget [option] [URL]
Pour avoir plus de renseignements taper :
$ man wget
Voici le résultat de la commande :
De manière plus générale, si vous souhaitez connaitre votre IP publique lorsque vous naviguez sur un site, que ce soit chez vous ou dans votre entreprise vous pouvez aller sur ce site : http://icanhazip.com/. Pratique, simple et efficace.
Bonjour,
c’est très bon cette page. Et ce site.
Merci