1. Commandes Linux

1.1. usefull

1.1.1. Affiche les volumes montés

df -h

1.1.2. Un ls avec arborescence récursif

tree /foo/bar

1.1.3. Affiche des renseignements sur les systèmes de fichiers des périphériques et blocs disponibles.

lsblk --fs

1.1.4. Liste Les UUIDs, les Labels et Types de toutes les partitions montées

blkid

1.1.5. Affiche les informations hardwares

lshw <-short -sanitize>

1.1.6. Affiche tous les processus actifs

ps -ef

1.1.7. liste les processus qui consomment le plus de mémoire

ps -eo pmem,pcpu,pid,args | tail -n +2 | sort -rnk 1 | head

ou

ps aux --sort=-%mem | awk 'NR<=11 {print $0}'

1.1.8. liste les processus qui consomment le plus de CPU

ps -eo pmem,pcpu,pid,args | tail -n +2 | sort -rnk 2 | head

ou

ps aux --sort=-%cpu | awk 'NR<=11 {print $0}'

1.1.9. suspendre une tâche en cours de traitement

CTRL + Z

1.1.10. Voir les processus qui utilise un port en particulier

lsof -i :port

1.2. Manipulation de fichiers

1.2.1. Sed

1.2.1.1. Remplacer un chaine de caractère avec la commande sed
sed -i -e "s/chaines1/chaine2/g" fichier
# si caractères spéciaux, ne pas oublier de les escaper :
sed -i -e "s/\/home/\/tmp/g" fichier

1.3. find - grep

1.3.1. Rechercher une chaine de caractères

-r = récursif -i = insensible à la casse -n = indique le numéro de la ligne où figure la chaine de caractères

1.3.1.1. exclure des dossiers

–exclude-dir=/foo/bar

1.3.2. pour que le résultat soit enregistré dans un fichier

grep -rin <ma_chaine_de_caractere> * > /foo/bar

1.3.3. Chercher une occurrence dans un répertoire en récursif

find . -type f -exec grep "path" '{}' \; -print | more

1.3.4. Rechercher un fichier dans l’arborescence

find / -type f -name mon_fichier

1.4. netstat - lsof

La commande netstat, pour « Network Statistics » permet d’obtenir de nombreuses informations sur les connexions réseaux et les tables de routage.

1.4.1. Liste les connexions actives tcp / udp avec le processus (program) utilisé

sudo netstat -ltunp

1.4.2. Découvrir quel port est utilisé par un programme

sudo netstat -ap | grep le_program

1.4.3. Trouver quel processus utilise un port particulier

sudo netstat -an | grep ':le_port'

lsof est une commande très utile pour retrouver quel utilisateur ou quel programme utilise quels fichiers.

Or dans linux , (tout est fichier) – périphériques, dossiers, … et même les “sockets” des connexions réseau.

Cet outil permet donc de facilement surveiller les activités d’un programme : qui l’utilise, quels fichiers utilise-t-il, utilise-t-il le réseau etc…

1.4.4. Lister toutes les connexions ouvertes et les ports à l’écoute avec l’user et le processus qui est à l’origine :

sudo lsof -i

1.4.5. sur un port particulier

sudo lsof -i :port

1.4.6. sur un programme / processus

sudo lsof -i -a -c mon_programme

1.4.7. sur un user

sudo lsof -i -a -u mon_user

1.5. scp

La commande SCP (Secure Copy) est utilisée pour copier des fichiers de manière sécurisée, basée sur le protocole ssh.

1.5.1. De local vers serveur distant

scp <fichier à envoyer> <utilisateur>@<hôte distant>:<dossier cible>
1.5.1.1. en récursif
scp -r <dossier à envoyer> <user@hôte distant>:<dossier cible>

1.5.2. d’un serveur distant vers local

scp -r user@<hôte distant>:/var/log/ /home/yishan
scp user@<hôte distant>:/home/user/file.txt /tmp

2. Vim

2.1. SheetSheat

2.1.1. Le déplacement (mode commande)

  • Aller en début de ligne → 0

  • Aller en fin de ligne → $

  • Ligne précédente (ou monter) → k

  • Ligne suivante (ou descendre) → j

  • Caractère précédent (ou aller à gauche) → h

  • Caractère suivant (ou aller à droite) → l

  • Mot précédent → b

  • Mot suivant → w

  • Page précédente → Ctrl+B (ou Page précédente avec vim)

  • Page suivante → Ctrl+F(ou Page suivante avec vim)

  • Aller à la ligne n → ngg ou nG (où n est le numéro de ligne)

  • Aller à la première ligne : gg

  • Aller à la dernière ligne → G

2.1.2. Quitter / Enregistrer (mode commande)

  • Enregistrer SANS quitter → :w

  • Quitter en enregistrant les modifications → :wq ou x

  • Quitter sans enregistrer les modifications → :q!

2.1.3. Insertion (mode commande et passer en mode édition)

  • Activer le mode insertion → i

  • Insérer au début de la ligne → I (i majuscule)

  • Activer le mode insertion, un caractère après le curseur → a

  • Insérer en fin de ligne → A

  • Insérer une ligne (en dessous du curseur) → o

  • Insérer une ligne (au dessus du curseur) → O

  • Quitte le mode édition → Echap

2.1.4. Remplacer (mode commande)

  • Remplacer le caractère sous le curseur → r puis le caractère à insérer

  • Remplacer avec le texte saisi → R puis le texte à remplacer

  • Effacer la suite de la ligne et passer en mode insertion → C

  • Quitte le mode remplacement → Echap

2.1.5. Copier / Couper / Coller (mode commande)

  • Copier la ligne courante → yy

  • Copier n lignes à partir de la ligne courante → nyy (Remplacer n par un nombre)

  • Coller (ligne en dessous le curseur) → p

  • Coller (ligne au dessus le curseur) → P

  • Couper la ligne courante → dd

  • Couper n lignes à partir de la ligne courante → ndd (Remplacer n par un nombre)

2.1.6. Effacer (mode commande)

  • Effacer le caractère courant → x

  • Effacer la ligne courante → dd

  • Effacer n lignes à partir de la ligne courante → ndd (Remplacer n par un nombre)

  • Effacer le mot sous le curseur → dw

  • Effacer du curseur à la fin de la ligne → d$

  • Effacer du début de la ligne au curseur → d^

2.1.7. Rechercher (mode commande)

  • Appuyer sur la touche / puis taper la chaîne à rechercher. Appuyer sur la touche Entrée. Appuyer sur la touche n pour aller à l’occurrence suivante, N pour l’occurrence précédente.

  • Recherche en avant du mot texte → /texte

  • Recherche en arrière du mot texte → ?texte

  • Aller à l’occurrence suivante → n

  • Aller à l’occurrence précédente → N

2.1.8. Divers (mode commande)

  • Annuler la dernière action → u

  • Modifier la casse du caractère → ~ (la tilde avec AltGR+2)

3. Commandes Windows

3.1. commandes

3.1.1. Ouvre la base de registre

regedit.exe

3.1.2. Ouvre le gestionnaire de disques

diskmgmt.msc

3.1.3. Ouvre le gestionnaire de périphériques

devmgmt.msc

3.1.4. ouvre l’observateur d’évènements

eventvmr.exe

3.1.5. ouvre les paramètres de sons

mmsys.cpl

3.1.6. ouvre l’analyseur de performances

perfmon.msc

3.1.7. Ouvre l’éditeur des comptes utilisateurs

control userpassword

3.1.8. contrôle les utilisateurs et leurs accès

netplwiz

3.1.9. tasklist / Kill un processus

taskkill.exe /F /IM <nom_du_processus>

3.1.10. Vérifie et répare les fichiers systèmes

nfc /scannow

3.1.11. Obtenir la version du système

winver

3.1.12. Activer la fonctionnalité Machine virtuelle

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

4. Docker

4.1. commandes

4.1.1. Obtenir les informations de docker sur le système (paths, status, etc)

docker info

4.1.2. Lister les images disponibles sur le serveur

docker images

4.1.3. Lister les conteneurs qui tournent

docker container ps

4.1.4. Télécharger une image de docker hub ou d’un repo distant

docker pull <nom_image>

4.1.5. Démarrer une image

docker run <nom_image>

4.1.6. Lancer une image en arrière plan (option -d ) avec la possibilité d’intérargir (option -ti)

docker run -d -ti <nom_image>

4.1.7. Se rendre dans le conteneur pour effectuer des actions

docker exec -ti <id_conteneur> /bin/bash

4.1.8. Arrêter le conteneur docker

docker stop <id_conteneur>

4.1.9. Docker fournit une commande unique qui nettoiera toutes les ressources – images, conteneurs, volumes et réseaux – qui sont en suspens (non associées à un conteneur)

docker system prune

4.1.10. Pour supprimer en plus tous les conteneurs arrêtés et toutes les images non utilisées (pas seulement les images en suspens), ajoutez l’indicateur -a à la commande

docker system prune -a

4.1.11. Visualiser toutes les routes docker sur le système

docker network ls

4.1.12. Nettoyer les routes

docker network prune

4.1.13. Visualiser les logs d’un container

docker logs -f <nom_container>

4.2. docker-compose

4.2.1. Toutes les commandes courantes / utilisées

4.2.1.1. Option pour nommer le container
container_name: <nom>

Ex :

container name

4.2.1.2. démarrer / arrêter le docker-compose.yml en mode daemon

Se rendre dans le dossier ou le script est présent :

docker-compose up -d
4.2.1.3. Pour l’arrêter
docker-compose stop

5. Sysadmin

5.1. Apache 2

5.1.1. Installation sur serveur Debian 11

sudo apt update && sudo apt upgrade
sudo apt install apache2
sudo systemctl enable apache2
sudo systemctl start apache2
sudo systemctl status apache2

5.1.2. Autoriser les flux sur le parefeu

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status

5.1.3. mod_security

Module apache pour protéger le serveur des attaques courantes
5.1.3.1. Installer les paquets nécessaires
sudo apt install libapache2-mod-security2
5.1.3.2. Activer le module
sudo a2enmod security2
5.1.3.3. Configuration
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
sudo vi /etc/modsecurity/modsecurity.conf
# modifier la ligne suivante :
SecRuleEngine DetectionOnly
# par
SecRuleEngine On
5.1.3.4. Installer les règles OWASP ModSecurity Core Rule Set (CRS)
sudo apt install modsecurity-crs
5.1.3.5. Configuration
sudo vi /etc/apache2/mods-enabled/security2.conf
# Ajouter la lgine suivante :
IncludeOptional /usr/share/modsecurity-crs/*.conf
5.1.3.6. Redémarrer apache et vérifier le fonctionnement
Certaines règles peuvent générer de faux positifs, c’est-à-dire bloquer des requêtes légitimes (A affiner selon besoin)

5.1.4. mod_evasive

Module appache pour protéger le serveur contre les attaques DOS et bruteforce
5.1.4.1. Installation
sudo apt install libapache2-mod-evasive
5.1.4.2. Configuration

Création d’un répertoire pour stocker les logs de mode_evasive

sudo mkdir /var/log/mod_evasive
sudo chown -R www-data:www-data /var/log/mod_evasive

Création du fichier de conf'

sudo vi /etc/apache2/mods-available/mod-evasive.conf
<IfModule mod_evasive20.c>
    DOSHashTableSize    3097 # taille de la table de hachage utilisée pour stocker les adresses IP
    DOSPageCount        2    # nombre de requêtes autorisées pour la même page (URL) par intervalle de temps défini par DOSPageInterval.
    DOSSiteCount        50   # nombre de requêtes autorisées pour le même site (adresse IP) par intervalle de temps défini par DOSSiteInterval
    DOSPageInterval     1    # intervalle de temps en secondes pour DOSPageCount
    DOSSiteInterval     1    # intervalle de temps en secondes pour DOSSiteCount
    DOSBlockingPeriod   360   # durée de blocage en secondes lorsqu'une adresse IP enfreint les règles.
    DOSEmailNotify      security@yishan.io # adresse e-mail à laquelle envoyer les notifications lorsque mod_evasive bloque une adresse IP
    DOSLogDir           /var/log/mod_evasive # répertoire pour stocker les journaux de mod_evasive
    DOSWhitelist        127.0.0.1 # liste des adresses IP à exclure des contrôles de mod_evasive
</IfModule>
5.1.4.3. activer le module et redémarrer apache
sudo a2enmod evasive
sudo systemctl restart apache2

5.1.5. Sécurité En-têtes HTTP

5.1.5.1. Activation des modukes
sudo a2enmod headers
sudo a2enmod rewrite
5.1.5.2. Configuration
sudo vi /etc/apache2/apache2.conf
# Sécurité des en-têtes
<IfModule mod_headers.c>
    # Supprime le header "X-Powered-By"
    Header unset X-Powered-By

    # Supprime le header "Server"
    Header always unset Server

    # Active le header "X-Content-Type-Options"
    Header set X-Content-Type-Options nosniff

    # Active le header "X-XSS-Protection"
    Header set X-XSS-Protection "1; mode=block"

    # Active le header "X-Frame-Options"
    Header set X-Frame-Options SAMEORIGIN

    # Active le header "Referrer-Policy"
    Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
sudo vi /etc/apache2/conf-available/security.conf
ServerTokens Prod
ServerSignature Off
ServerName yishan.io
5.1.5.3. Redémarrage et vérification
sudo systemctl restart apache2
sudo systemctl status apache2
curl -I https://yishan.io

5.1.6. Permissions

5.1.6.1. user / group www-data
sudo chown -R www-data:www-data /var/www/html
5.1.6.2. chmod
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
A maintenir lors de l’ajout de nouveaux fichiers et répertoires

5.2. Logwatch

Logwatch est un utilitaire permettant de surveiller les journaux système et de créer des rapports. Ces rapports comprennent les tentatives de connexion infructueuses, les tentatives de connexion réussie, l’espace de stockage utilisé/disponible, les erreurs de kernel, etc.

5.2.1. Installer et configurer Logwatch – Debian 8

apt-get install logwatch
5.2.1.1. Le fichier de configuration se trouve ici
/etc/logwatch/conf/logwatch.conf
5.2.1.2. Modifications
MailTo = your_email
Range = yesterday
Detail = med
mailer = "/usr/sbin/sendmail -t"
Par défaut, logwatch créé une tâche cron qui envoie un mail journalier. Cf. /etc/cron.daily/00logwatch
5.2.1.3. Commande manuelle
logwatch --mailto your_email ...

5.3. Monit - Surveillance du système

5.3.1. Installation

apt-get install monit
systemctl enable monit
systemctl start monit
systemctl status monit

5.3.2. Configuration

5.3.2.1. Activer l’interface Web

vim /etc/monit/monitrc

décommenter les lignes suivantes :

set httpd port <port>
ssl enable
pemfile /var/certs/monit.pem
allow admin:<password> # require user 'admin' with password '<password>'
Ne pas oublier d’ajouter la règle iptables

5.3.3. Création du répertoire des certificats et création de celui de monit

mkdir /var/certs

openssl req -new -x509 -days 365 -nodes -out /var/certs/monit.pem -keyout /var/certs/monit.pem

chmod 700 /var/certs/monit.pem

5.3.4. Redémarrage

systemctl restart monit

5.3.5. Contrôle de la syntaxe du fichier de configuration

monit -t

5.3.6. Activation des services à monitorer

# rsyslog
ln -s /etc/monit/conf-available/rsyslog /etc/monit/conf-enabled/
# apache2
ln -s /etc/monit/conf-available/apache2 /etc/monit/conf-enabled/
# postfix
ln -s /etc/monit/conf-available/postfix /etc/monit/conf-enabled/
## modifier le chemin de master_bin
## kill le pid de sendmail qui écoute sur le :25
kill -9 <pid>
monit monitor postfix
# mysql
ln -s /etc/monit/conf-available/mysql /etc/monit/conf-enabled/


systemctl restart monit

5.4. Munin - Supervision Graphique

5.4.1. Installation des paquets et dépendances plugins

apt-get install munin munin-node munin-plugins-extra libapache2-mod-fcgid libwww-perl libcache-cache-perl

5.4.2. Activation du module fcgid d’apache2

a2enmod fcgid

5.4.3. Ajout de plugins supplémentaires

cd /etc/munin/plugins
# Mysql
ln -s /usr/share/munin/plugins/mysql_ mysql_
ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes
ln -s /usr/share/munin/plugins/mysql_innodb mysql_innodb
ln -s /usr/share/munin/plugins/mysql_isam_space_ mysql_isam_space_
ln -s /usr/share/munin/plugins/mysql_queries mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads mysql_threads
# Apache
ln -s /usr/share/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volume

5.4.4. Modification du fichier de configuration

vim /etc/munin/munin.conf
Décommenter :
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin

changer [localhost.localhost] par [yishan.io] # a simple host tree

5.4.5. Création du Vhost

cd /etc/apache2/sites-available && vim munin.conf

# munin.conf
<VirtualHost *:80>
 ServerName monitoring.yishan.io
 DocumentRoot /var/cache/munin/www/
 <Directory /var/cache/munin/www/>
 Options None
 Require all granted
 DirectoryIndex index.html
 </Directory>

ErrorLog ${APACHE_LOG_DIR}/munin_error.log
 CustomLog ${APACHE_LOG_DIR}/munin_access.log combined
 LogLevel warn
</VirtualHost>

5.4.6. Activation du site

a2ensite munin.conf

5.4.7. Redémarrage des services

systemctl restart apache2.service
service munin-node restart

5.4.8. Protéger l’accès à l’interface web de supervision

htpasswd -c /etc/munin/munin-htpasswd admin

5.4.9. Modification du vhost en conséquence

VirtualHost *:80>
 ServerName monitoring.yishan.io
 DocumentRoot /var/cache/munin/www/
 <Directory /var/cache/munin/www/>
 Options None
 AuthUserFile /etc/munin/munin-htpasswd
 AuthName "Munin"
 AuthType BASIC
 Require valid-user
 DirectoryIndex index.html
 </Directory>

ErrorLog ${APACHE_LOG_DIR}/munin_error.log
 CustomLog ${APACHE_LOG_DIR}/munin_access.log combined
 LogLevel warn
</VirtualHost>

5.4.10. Redémarrage à nouveau des services

systemctl restart apache2.service
service munin-node restart

5.4.11. Obtenir les suggestions de plugins et vérification de leurs statuts

munin-node-configure --suggest >> print

5.4.12. Réglages des plugins

vim /etc/munin/plugin-conf.d/munin-node

[mysql*]
env.mysqluser root

[http_loadtime]
env.target https://monsite, https://mon_autre_site, etc
env.requisites true

5.4.13. Redémarrage de munin

service munin-node restart

5.5. Serveur Web Complet

A été fait sur debian 9

5.5.1. Apache 2

apt install apache2 apache2-mod-php7.0

vim /etc/apache2/conf-available/security.conf

ServerTokens Full
ServerSignature Off
Header always set X-Content-Type-Options: "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"

5.5.2. ModSecurity (couche 7)

apt install libapache2-mod-security
cd /etc/modsecurity/ && mv modsecurity.conf-recommended modsecurity.conf
vim /etc/modsecurity/modsecurity.conf
SecRuleEngine On
SecDataDir /var/cache/modsecurity
SecServerSignature Elliot.ftw
cd /usr/share/modsecurity-crs/rules
ln -s * /etc/modsecurity/crs
cd /etc/modsecurit
vim crs-setup.con
SecGeoLookupDb /usr/share/GeoIP/GeoIP.dat
Décommenter le block request-912-DOS-protection
Décommenter le block http Argument / Upload limits
Décommenter le block Forbidden file extension
a2enmod security
a2enmod header
systemctl restart apache2.service

5.5.3. php7

apt install php7.0 php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php7.0-cli php7.0-cgi php7.0-imagick php7.0-imap php7.0-mcrypt php7.0-memcache php7.0-pspell php7.0-recode php7.0-snmp php7.0-sqlite php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-imagick imagemagick libruby php7.0-memcached memcache

5.5.4. MariaDB

apt install mariadb-client mariadb-server
mysql_secure_installation

5.5.5. phpmyadmin

apt install phpmyadmin
5.5.5.1. Ajout du script dans /etc/init/ pour start / stop phpmyadmin
EDIT Mise à jour de php 7.0 vers php7.3
wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
apt update
apt upgrade

5.6. Netdata

5.6.1. Installation sur debian 9 via les dépôts backports

apt install -t stretch-backports netdata

5.6.2. Configuration apache avec htaccess

vim netdata.conf

<VirtualHost *:80>
 RewriteEngine On
 ProxyRequests Off
 ProxyPreserveHost On

 ServerAdmin contact@yishan.io
 ServerName netdata.yishan.io

 <Proxy *>
AllowOverride AuthConfig
AuthName "Netdata"
AuthType Basic
AuthUserFile /etc/apache2/.htpasswd-netdata
Require valid-user
 AddDefaultCharset off
 Order deny,allow
 Allow from all
 </Proxy>

 ProxyPass "/" "http://localhost:19999/" connectiontimeout=5 timeout=30 keepalive=on
 ProxyPassReverse "/" "http://localhost:19999/"

 ErrorLog ${APACHE_LOG_DIR}/netdata-error.log
 CustomLog ${APACHE_LOG_DIR}/netdata-access.log combined
RewriteCond %{SERVER_NAME} =netdata.yishan.io
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

5.6.3. Création des identifiants via htpasswd

htpasswd -c /etc/apache2/.htpasswd-netdata user

5.6.4. Ouverture du port via iptables

iptables -t filter -A INPUT -p tcp --dport 19999 -j ACCEPT

5.6.5. Liens

5.7. Accès Phpmyadmin

Activer / désactiver l’accès à phpmyadmin lorsque je ne l’utilise pas pour des raisons de sécurité

Script à placer dans /etc/init.d

5.7.1. Creation du script

vim /etc/init.d/phpmyadmin
#!/bin/bash

if [ "$1" = "start" ];then
  chmod 755 /usr/share/phpmyadmin
else if [ "$1" = "stop" ];then
  chmod 000 /usr/share/phpmyadmin
else
     echo "usage: phpmyadmin start | stop"
  fi
fi

exit 0

5.7.2. Donner les droits d’execution

chmod + x /etc/init.d/phpmyadmin

5.7.3. Stopper / Démarrer

/etc/init.d/phpmyadmin stop
# ou
/etc/init.d/phphmyadmin start

6. Git

6.1. Commandes basiques

6.1.1. récupérer un repo distant en local

git clone "https://******.git"

6.1.2. Identification

git config --global user.email yishan@protonmail.com

6.1.3. Modification du fichier / des fichiers

git add "mon_fichier"
git commit -m "commentaire"

6.1.4. envoi sur Github / Gitlab

git push

6.1.5. suppression d’un fichier

git rm "mon_fichier"
git commit -m "commentaire"

6.1.6. Récupérer les dernières modifications distantes / mettre à jour son repo

git pull

7. shell

7.1. Installation ZSH & Configuration Terminal TILIX - Ubuntu 22.04

7.1.1. Téléchargement et installation de oh-my-zsh

sudo apt install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

7.1.2. Téléchargement et installation de Powerlevel10K

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

7.1.3. Téléchargement et installation des polices Hack Nerd Font

git clone https://github.com/ryanoasis/nerd-fonts # on peut juste télécharger la police souhaitée
cd nerd-fonts
sudo ./install.sh Meslo

7.1.4. Configuration de Tilix

  • Changer la police par MesloLGS Nerd Font Mono Regular

  • Changer le cursor par IBeam

  • Pour les couleurs : Activer l’option use themecolors for foreground/background

7.1.5. Modifier dans le fichier .zshrc la ligne suivante

ZSH_THEME="powerlevel10k/powerlevel10k"

7.1.6. Lancer la configuration

p10k configure

# ou

source .zshrc
choices: y-y-y-y-3-1-2-2-2-1-2-2-4-3-2-2-2-y-1-y

7.1.7. Antigen (gestion des plugins)

7.1.7.1. Installation d’Antigen
curl -L git.io/antigen > antigen.zsh
7.1.7.2. Ajouter les lignes suivantes au fichier .zshrc
#Load Antigen
source "/home/yishan/antigen.zsh"

#Load Antigen configurations
antigen init ~/.antigenrc
7.1.7.3. Création du fichier de config ~/.antigenrc
7.1.7.4. lui indiquer que les plugins seront déclarés via OMZ - .zshrc
antigen use oh-my-zsh

7.1.8. Ajouter les plugins suivants dans le fichier .zshrc

#=== Plugins ===

antigen bundle git
antigen bundle pip
antigen bundle command-not-found

antigen bundle zsh-users/zsh-completions
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-history-substring-search
antigen bundle lukechilds/zsh-nvm

et à la fin du fichier :

# === Antigen Apply ===
antigen apply

7.1.9. Alias - Ajouter dans le fichier .zshrc

# === Aliases ===
#= Apt-get
alias maj='sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade'
alias up='sudo apt-get update'
alias install='sudo apt-get install'
alias autoremove='sudo apt-get autoremove'
alias autoclean='sudo apt-get autoclean'
alias cache='sudo apt-cache search'
alias vi='nvim'
alias exa='exa -abghHliS'

# === SSH === = Deprecated / the conf is now on file config folder ssh

# === BANNER /  MOTD ===
alias neo='neofetch --config off --bold off --colors 4 1 8 8 8 7'

# = Fuck
eval $(thefuck --alias fuck)

7.2. Tmux

7.2.1. Installation

apt-get install tmux
https://github.com/tmux-plugins/tpm

7.2.2. Relancer la configuration de tmux

tmux source-file ~/.tmux.conf

7.2.3. Divise la fenêtre

tmux split-windows

ou

tmux split-windows -h

7.2.4. Renommer la fenêtre actuelle

Tmux rename-window
Prefix + ,

7.2.5. Lister les sessions en cours

tmux list-session
tmux ls

7.2.6. Fermer une session

tmux kill-session -t <N° de la session>

7.2.7. Copier / Coller

Touche MAJ + Clic Gauche / Clic Molette

7.2.8. Afficher l’heure dans une fenêtre

Prefix + t

7.2.9. Supprimer la fenêtre courante

Prefix + &

7.2.10. Scinder verticalement

Prefix + %

7.2.11. Scinder Horizontalement

Prefix + \"

7.3. Neovim

7.3.1. Installation

sudo apt install neovim
mkdir .config
touch .config/init.vim

7.3.2. Configuration de base init.vim

:set number
:set relativenumber
:set autoindent
:set tabstop=4
:set shiftwidth=4
:set smarttab
:set softtabstop=4
:set mouse=a
:set encoding=utf-8
:set fileencoding=utf-8

7.3.3. Ajout des plugins via Plug

7.3.3.1. Téléchargement de Plug
    sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
7.3.3.2. Ajout des plugins dans init.vim
    call plug=begin()

    Plug 'https://github.com/vim-airline/vim-airline'
    Plug 'https://github.com/preservim/nerdtree'
    Plug 'http://github.com/tpope/vim-surround'
    Plug 'https://github.com/rafi/awesome-vim-colorschemes'
    Plug 'https://github.com/neoclide/coc.nvim'
    Plug 'https://github.com/ryanoasis/vim-devicons'
    Plug 'https://github.com/tc50cal/vim-terminal'
    Plug 'https://github.com/preservim/tagbar'
    Plug 'https://github.com/terryma/vim-multiple-cursors'

    call plug=end()

7.3.4. Installer les plugins

:PlugInstall

7.3.5. Dépendances, Configuration

# tagbar
sudo apt install exuberant-ctags
# Tagbar
nmap <F8> :TagbarToggle<CR>
:set completeopt=preview
# colorscheme
:colorscheme jellybeans
# NerdTree
let g:NERDTreeDirArrowExpandable="+"
let g:NERDTreeDirArrowCollapsible="~"
nnoremap <C-f> :NERDTreeFocus<CR>
nnoremap <C-n> :NERDTree<CR>
nnoremap <C-t> :NERDTreeToggle<CR>
# coc-nvim

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install nodejs npm
cd /home/cmassieu/.local/share/nvim/plugged/coc.nvim
sudo npm install -g yarn
yarn install
yarn build
7.3.5.1. Installation des modules coc selon les langages utilisées
Ex :
    :CocInstall coc-python

8. Osint

8.1. exiftool

8.1.1. Installation ubuntu 22.04

  1. Ouvrez un terminal en appuyant sur Ctrl + Alt + T.

  2. Installez les dépendances nécessaires en tapant la commande suivante et en appuyant sur Entrée:

sudo apt install libimage-exiftool-perl
  1. Téléchargez la dernière version d’Exif Tool en tapant la commande suivante et en appuyant sur Entrée:

wget https://exiftool.org/Image-ExifTool-12.52.tar.gz
  1. Décompressez l’archive téléchargée en tapant la commande suivante et en appuyant sur Entrée:

tar -xzvf Image-ExifTool-12.52.tar.gz
  1. Accédez au répertoire en tapant la commande suivante et en appuyant sur Entrée:

cd Image-ExifTool-12.52
  1. Installez Exif Tool en tapant la commande suivante et en appuyant sur Entrée:

sudo perl Makefile.PL
make
sudo make install

Exif Tool est maintenant installé sur votre système Ubuntu 22.04. Vous pouvez le lancer en tapant simplement la commande exiftool suivie du nom du fichier image que vous souhaitez afficher les métadonnées. Par exemple, si vous voulez afficher les métadonnées de l’image "image.jpg", tapez la commande suivante et appuyez sur Entrée:

exiftool image.jpg

Pour supprimer toutes les métadonnées d’une image :

exiftool -all= image.jpg

9. java

9.1. Memory

9.1.1. OutOfMemoryError

il y a 2 type d’erreurs OutOfMemoryError

1.Heap space

cela signifie qu’il faut augmenter la quantité d’espace de la heap (tas) allouée à l’app lors du démarrage du démon.

2.PermGen space

Cela signifie que vous devez augmenter la quantité d’espace de génération allouée pour stocker les métadonnées d’objet Java. Augmenter la valeur du paramètre -Xmx n’aura aucun effet sur cette erreur.

9.1.2. Augmenter la quantité de mémoire allouée à l’app en modifiant les paramètres de la machine virtuelle Java (JVM).

java -Xmx<max-memory> -Xms<initial-memory> -jar app.war

<max-memory> est la quantité maximale de mémoire

<initial-memory> est la quantité de mémoire initiale allouée

Ex : java -Xmx2g -Xms512m -jar jenkins.war

9.1.3. Connaître les valeurs par défaut

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

10. Linux

10.1. Gestion des utilisateurs

10.1.1. Créer un nouvel utilisateur

adduser nom_utilisateur
10.1.1.1. Ajouter l’user au groupe sudo
usermod -aG sudo nom_utilisateur

10.1.2. Lister les groupes d’un utilisateur

groups <user>

10.1.3. supprimer un groupe d’un utilisateur

gpasswd -d <user> <group>

10.1.4. supprimer un user avec son home

userdel -r <user>

10.2. Locales

10.2.1. Debian 11 - Mettre en place locales fr_FR.UTF8

10.2.1.1. Installation
sudo apt install locales
10.2.1.2. Configuration
sudo dpkg-reconfigure locales
Decommenter l’us et activer fr_FR.UTF8 via la touche space
10.2.1.3. redémarrer le système
sudo reboot

10.3. Iptables

10.3.1. Lister les règles et IPs bannies

iptables -L

10.3.2. Lister un jail fail2ban en particulier

# Ex: postfix
iptables -L f2b-postfix

10.3.3. bloquer une adresse IP avec Iptables

10.3.3.1. IP seule
iptables -I INPUT -s IP_ADRESS -j DROP
10.3.3.2. Pour une plage d’adresses
iptables -I INPUT -s SUBNET/MASK -j DROP

10.3.4. Pour bannir une adresse d’un service en particulier (Apache par exemple)

iptables -I INPUT -s IP_ADRESS -p tcp --dport 80,443 -j DROP

10.3.5. Réinitialiser Iptables

# Reinitialiser
iptables -F
iptables -t nat -F
# Tout accepter
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
/etc/init.d/firewall
chmod a+x /etc/init.d/firewall
sudo update-rc.d firewall defaults

10.4. UFW

10.4.1. Installation et configuration des règles de base

sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing

10.4.2. Post changement du port ssh par defaut

sudo ufw delete allow ssh
sudo ufw allow 22000/tcp
sudo ufw enable

10.5. Fail2ban

10.5.1. Installation sur debian 9

Version : 0.9.6
apt install fail2ban
systemctl enable fail2ban
systemctl start fail2ban
cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

10.5.2. Changements effectués

vim /etc/jail.local
bantime = 3600
findtime = 600
maxretry = 3
destemail = security@yishan.io
sender = fail2ban
action = %(action_mwl)s
# Ajout du numéro du port ssh qqui a été modifié
port = ssh,numero_du_port_ssh
# Jails mis en enabled = true
 sshd, sshd-ddos, apache-auth, apache-badbots, apache-botsearch, apache-fakegooglebot, apache-modsecurity, apache-nohome, apache-noscript, apache-overflows, apache-shellshock, courier-auth, courier-smtp, dovecot, mysqld-auth, postfix, postfix-rbl, postfix-sasl, recidive, sendmail-auth, sendmail-reject

# Jails Perso
[wordpress]
port = http,https
logpath = /var/log/apache2/wp_access.log
enabled = true

10.5.3. Ajout des filtres dans /etc/fail2ban/filter.d/

vim /etc/fail2ban/filter.d/wordpress.conf
# Fail2Ban filter for WordPress

[Definition]

failregex = <HOST> - - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] "POST /wp-login.php HTTP/1.1" 200

ignoreregex =

10.5.4. Vérification du statut des jails

fail2ban-client status
fail2ban-client status <jail>

10.6. Cron APT

10.6.1. Mise à jour automatique du système, des paquets

10.6.1.1. Installation
apt install cron-apt
10.6.1.2. logs
/var/log/cron-apt/log
10.6.1.3. Conf
echo "upgrade -y -o APT::Get::Show-Upgraded=true" > /etc/cron-apt/action.d/4-YesUpgrade
10.6.1.4. Planification
/etc/cron.d/cron-apt
# Every night at 4 o'clock.
 0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt

10.7. Gestion des disques

10.7.1. Lister l’espace disque sur les différentes partitions – utilisé et restant

df -h

10.7.2. Dans le répertoire courant, lister en ordre décroissant la taille des fichiers et sous répertoires

du -ah --max-depth=1 | sort -nr

10.7.3. Dans le répertoire courant, lister les 20 premiers plus gros fichiers

du -xmhs ./* | sort -hr | head 20

10.7.4. Afficher la taille d’un répertoire, ex : home

du home/ -hs

10.7.5. Commande courante

du -sch *

10.8. Wgetpaste

Wgetpaste, permet via un pipe, d’envoyer le résultat d’une commande vers un pastebin et de récupérer l’URL de destination.

10.8.1. Installation Archlinux

Yaourt -S wgetpaste

10.8.2. Fichier de configuration

~/.wgetpaste.conf

# Default nick for pastes
DEFAULT_NICK=yishan
# Default service to paste to
DEFAULT_SERVICE=dpaste
# change default language for the ca and the osl services
DEFAULT_LANGUAGE_ca="bash"
DEFAULT_LANGUAGE_osl="Diff"
# change default expiration period for the ca service
DEFAULT_EXPIRATION_ca="1 day"

10.8.3. Utilisation

wgetpaste --help
cat .wgetpaste.conf | wgetpaste

10.9. Firewalld

10.9.1. Ouvrir un port ou une range

firewall-cmd --add-port=19999/tcp
firewall-cmd --add-port=60000-61000/udp --permanent

10.9.2. Redémarrer le service pour prise en compte de la conf

systemctl restart firewalld.service

10.10. Chroot

10.10.1. Chroot – Marche à suivre

Dans un premier temps, booter sur un liveCD de la distribution adéquate.

Dans cet exemple, /dev/sda1 est la partition racine de mon système

mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
mount -t proc /proc /mnt/proc
mount -t sysfs /sys /mnt/sys
chroot /mnt /bin/bash

10.10.2. Pour quitter

exit
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt

10.10.3. exemples de tâches qui peut-être fait sous système chrooté

  • Installation / réinstallation de Grub

  • Passwd Root perdu

  • Réparation du système

  • Mise à jour

  • Débug

10.10.4. Chroot sur POP OS

lsblk
sudo mount /dev/sda3 /mnt
sudo mount /dev/sda1 /mnt/boot/efi/
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo cp -n /etc/resolv.conf /mnt/etc/
sudo chroot /mnt

10.11. SSH

10.11.1. Se connecter par clés asymétriques

10.11.1.1. Création de la paire de clés (privée / publique)
sh-keygen -b 4096 # Saisir une passphrase
Les clés sont stockées dans le répertoire .ssh de l’utilisateur.
10.11.1.2. Importer la clé publique sur le serveur sur lequel on souhaite se connecter
ssh-copy-id utilisateur@serveur # Saisir une dernière fois le passwd

10.12. Systemd

10.12.1. Presentation

Systemd est un remplaçant du démon init system V pour Linux. Il a pour but d’offrir une meilleure gestion des dépendances entre services, ainsi que de permettre le chargement en parallèle des services au démarrage.

Cela permet réduire le temps de démarrage du système et de lancer moins de processus.

Les distributions Fedora, Mageia, Open SUSE et Debian ont adopté ce système par défaut dans leurs distributions respectives.

Ubuntu utilise upstart et Gentoo utilise OpenRC.

systemd est le premier processus qui démarre sur votre système (PID 1) et il est responsable de l’initialisation, de la gestion et de l’arrêt des autres services et processus sur votre système.

10.12.2. Fichiers de configuration

La configuration des services se trouve par défaut dans le répertoire /lib/systemd/system ou /usr/lib/systemd/system.

On utilisera le répertoire /etc/systemd/system pour stocker ses modifications et configurations personnelles, ce qui a le gros avantage que ces fichiers ne seront pas effacés en cas de mise à jour du système.

10.12.3. Commandes Utiles Systemctl

10.12.3.1. Activer / Désactiver un service au démarrage du système
systemctl enable <mon_service>
systemctl disable <mon_service>
10.12.3.2. Démarrer / arreter / redémarrer un service
systemctl start <mon_service>
systemctl stop <mon_service>
systemctl restart <mon_service>
10.12.3.3. Voir le statut d’un service
systemctl status <mon_service>
10.12.3.4. Lister tous les services actifs
systemctl list-units --type=service
10.12.3.5. Lister toutes les unités présentes sur le système
systemctl list-units
10.12.3.6. voir tous les services qui ont un problème
systemctl --failed --type=service
10.12.3.7. Identifiez les services inactifs
systemctl list-units --type=service --state=inactive
10.12.3.8. Désactivez les services inutiles
sudo systemctl disable <service_name>
10.12.3.9. Créer un service simple

vim /etc/systemd/system/mon-service.service

Description= Description du service
ConditionPathExists=/usr/sbin/commande
[Service]
Type=forkingExecStart=/bin/sh -c 'commande'
TimeoutSec=0StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
10.12.3.10. On rends le fichier executable
chmod a+x /etc/systemd/system/mon-service.service
10.12.3.11. On recharge Systemd
systemctl --system daemon-reload
10.12.3.12. On le lance et on vérifie
systemctl start mon-service.service
systemctl status mon-service.service

10.12.4. Les services propres à systemd

Systemd utilise en interne un certain nombre de services pour la gestion du système, citons en quelques uns :

  • systemd-journald : messages du système et des programmes

  • systemd-logind : connexion des utilisateurs

  • systemd-vconsole-setup : configuration des consoles virtuelles

  • systemd-remount-api-vfs : remontage du système de fichier, en tenant compte des options de fstab

  • systemd-sysctl : application des paramètres système de /etc/sysctl.conf

  • systemd-stdout-syslog-bridge : utilisation de syslog pour les processus de systemd

  • systemd-tmpfiles-setup : création de fichiers et répertoires temporaires

10.12.4.1. Lister le temps de démarrage des differents services
systemd-analyze blame

10.13. Journalctl

La commande journalctl est utilisée pour interroger et afficher les journaux du système gérés par le gestionnaire de système systemd.

10.13.1. afficher les dernières logs

journalctl -xn 50 -e

10.13.2. afficher les dernières logs d’un service en particulier (ex : fail2ban)

journalctl -xn 50 -u fail2ban.service

10.13.3. afficher toutes les erreurs des services systemd après redémarrage du système

journalctl -b -p err -u systemd

10.13.4. afficher toutes les erreurs de tous les services

journalctl -b -p err -n 50

11. Vagrant

11.1. Vagrant

11.1.1. Installation sur Ubuntu 22.10

sudo apt install virtualbox vagrant

11.1.2. Fichier de configuration pour une Debian 11 KDE

# Définition de la box (image du système d'exploitation) à utiliser
Vagrant.configure("2") do |config|
    config.vm.box = "debian/bullseye64"

    # Configuration de la machine virtuelle
    config.vm.provider "virtualbox" do |vb|

    # Configuration de la mémoire et du processeur
      vb.memory = 4096
      vb.cpus = 2

    # Configuration de la carte réseau
      vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
      vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]

    # Ajout de mémoire vidéo
      vb.customize ["modifyvm", :id, "--vram", "256"]

    # Ajout de la prise en charge du son
      vb.customize ["modifyvm", :id, "--audio", "pulse"]

    # Ajout d'un contrôleur IDE
      #vb.customize ["storagectl", :id, "--name", "IDE Controller", "--add", "ide"]

    # Ajout d'un lecteur CD/DVD
      #vb.customize ["storageattach", :id, "--storagectl", "IDE Controller", "--port", 1, "--device", 0, "--type", "dvddrive", "--medium", "emptydrive"]
    end

    # Configuration du système d'exploitation
    config.vm.provision "bash", inline: <<-SHELL

    # Mise à jour de la liste des paquets
      apt-get update

    # Installation de KDE et des outils de développement
      apt-get install -y kde-plasma-desktop build-essential

    # Configuration du bureau KDE comme environnement par défaut
      update-alternatives --set x-session-manager /usr/bin/startplasma-x11

    # Installation de Flatpak
      apt-get install -y flatpak
      flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

    # Installation de Lutris
      flatpak install -y flathub net.lutris.Lutris

Nommer le script : vagrantfile

Mes autres scripts sont ici

11.1.3. Commandes principales

Pour le démarrer :

vagrant up

Acceder à la machine :

vagrant ssh

Arrêter :

vagrant halt

Détruire :

vagrant destroy

Réexécuter le script de provisionning apres modif :

vagrant provision

Afficher l’état :

vagrant status

12. Vmware

12.1. Conversion Image VMDK

12.1.1. Se connecter sur un des esxi en ssh

12.1.2. commandes

cd /vmfs/volumes/volume01/yourmachine
vmkfstools -i Windows2008-tmp.vmdk  -d thin Windows2008.vmdk

13. Divers

13.1. Clavier Qwerty - Azerty

Ex:

qwerty azerty

13.2. Hexchat

Cacher la version du client utilisé

Sur le client :

/set irc_hide_version on

13.3. ZNC - Bouncer IRC

13.3.1. ZNC on debian Stretch

Version 1.6.5 ipv6: yes, SLL: yes, DNS: Threads, charset: yes
13.3.1.1. Installation
apt install znc
13.3.1.2. Creation de l’environnement user
adduser user
13.3.1.3. entrer dans l’env user
su - user
13.3.1.4. Creation du fichier de conf’
znc --makeconf

13.3.2. ouvrir le port via iptables

13.3.3. Accès à l’interface web

13.4. Rutorrent / Rtorrent

13.4.1. Installation des paquets nécessaires sur debian 11

sudo apt install rtorrent screen curl apache2 php libapache2-mod-php libtorrent21

13.4.2. Création de l’utilisateur

sudo adduser box

13.4.3. Configuration rtorrent

su - box
vi .rtorrent.rc
# fonctionnement avec systemd
system.daemon.set = true

# connexion avec rutorrent
scgi_port = 127.0.0.1:5000

# Répertoires de base
directory = /home/box/torrents/Downloads
session = /home/box/torrents/.session

# Ports d'écoute et options de réseau
port_range = 50000-50000
port_random = no
check_hash = yes
encryption = allow_incoming,try_outgoing,enable_retry

# Limites de téléchargement et d'upload
download_rate = 0
upload_rate = 0

# Taille du cache
max_memory_usage = 256M

# DHT
dht = off

13.4.4. Installation rutorrent

cd /var/www/
sudo git clone https://github.com/Novik/ruTorrent.git
sudo chown -R www-data:www-data /var/www/ruTorrent

13.4.5. Creation du vhost apache

sudo vi /etc/apache2/sites-available/rutorrent.conf
<VirtualHost *:80>
    ServerName box.yishan.io
    DocumentRoot /var/www/ruTorrent
    <Directory /var/www/ruTorrent>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/box_error.log
    CustomLog ${APACHE_LOG_DIR}/box_access.log combined
</VirtualHost>

13.4.6. Ajout d’un htaccess

sudo htpasswd -c /etc/apache2/.htpasswd box
sudo vi /var/www/ruTorrent/.htaccess

AuthType Basic
AuthName "Restricted Access"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
13.4.6.1. Activation et redémarrage
sudo a2ensite rutorrent.conf
sudo systemctl restart apache2.service
sudo certbot --apache -d box.yishan.io

13.4.7. création du service rtorrent pour systemd

[Unit]
Description=rTorrent System Daemon
After=network.target

[Service]
Type=simple
User=box
Group=box

ExecStartPre=-/bin/rm -f /home/box/.session/rtorrent.lock
ExecStart=/usr/bin/rtorrent
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

13.4.8. Troubleshooting

cd /var/www/ruTorrent/plugins/ && sudo rm -rf _cloudflare
sudo chmod 775 /home/box/torrents/.session/
sudo apache2ctl configtest ; sudo tail -f /var/log/apache2/box_error.log