Linux
- Clavier
- Couleurs
- Root
- GPG
- Aléatoire
- Bash
- Intégrité, diff et patch
- Backup
- Git
- SSH
- Fichier ISO
- Système
- Network
- Paquets
- Services
- Logging
- User
- SELinux
- Debian
Cheatsheet :
Clavier
# passer en français
setxkbmap fr
# réparer un terminal cassé
reset
Pour désactiver le bell : décommenter # set bell-style none dans /etc/inputrc, puis reboot.
Couleurs
Afficher la palette de couleurs :
# apt install colortest
colortest-8
colortest-16b
Affichage en technicolor :
function print { tput setaf 4; echo "[INFO] $1"; tput sgr0; }
Root
Pour reset un mot de passe root "oublié" :
- faire e dans le menu grub
- ajouter
rw init=/bin/bashà la fin de la lignelinux - faire Ctrl+x ou F10 pour démarrer l'image
GPG
https://www.hacksanity.com/kb/gnupg-create-manage-keys/
Pour générer une clé GPG, l'afficher, et l'exporter :
# sudo apt install gnupg
gpg --full-generate-key
gpg --list-keys
gpg --armor --export 3AA5C34371567BD2 | tee key.asc
Aléatoire
Générer de l'aléatoire (pas pour de la crypto) :
head /dev/urandom | sha256sum
head /dev/urandom | tr -dc a-zA-Z0-9 | head -c32; echo
head /dev/urandom -c32 | base64
Générer de l'aléatoire cryptographiquement sûr :
openssl rand -hex 32
openssl rand -base64 32
Afficher l'entropie du système :
cat /proc/sys/kernel/random/entropy_avail
Bash
Afficher la taille des fichiers ET des repertoires :
du -sh *
Read multiple files and jump at their end :
less ++G log/*
Trouver les fichiers contenants des motifs :
grep -Pil "mot1|mot2" *
Pour lancer une commande sur chaque ligne d'un retour :
find /etc -name *.txt | xargs -L1 -I% echo cp % /tmp
Reproduire une arborescence locale sur une machine distante (Ansible like) :
cd `dirname $0`
for local_file in `find files/$host -mindepth 1`; do
remote_file=${local_file#*$host}
if [ -d $local_file ]; then
ssh $host "mkdir -p $remote_file"
else
echo "$remote_file"; scp -q $local_file $host:$remote_file
fi
done
Télécharger un paquet en local (check https://pkgs.org pour les dependances) :
apt reinstall -d -o=dir::cache=/tmp openssh-server openssh-client
cd /tmp/archives
ncdu (ncurses disk usage) :
# pour trier par taille de fichier
ncdu --si
ggtssc
# pour trier par date de modification
ncdu --si -e
ggtMmc
Intégrité, diff et patch
Enregistrer et vérifier les empreintes récursivement :
find | xargs -L1 sha512sum | sort -k2 > hash.txt
diff hash.txt <(find | xargs -L1 sha512sum | sort -k2)
Différences entre 2 répertoires :
diff -qr dossier1 dossier2
Pour prendre en compte les mises à jours d'un fichier, tout en conservant les modifications personnelles :
diff -u base1 base2 > update.patch
patch mod1 update.patch -o mod2
Backup
Backup avec rsync (local/distant) :
rsync --delete -avu --exclude dossier /home/user/dossier remote@192.168.1.2:/home/remote/dossier
Git
Pour annuler le dernier commit :
git reset --soft HEAD~1
Pour ignorer un file/dir qui a déjà été commit :
- Le mettre dans
.gitignore - Faire
git rm --cached <filename>pour le supprimer du repo (n'est pas supprimé en local)
SSH
Rebond :
ssh -J host1 host2 ...
Pour monter un répertoire distant avec ssh :
apt install sshfs
# monter
sshfs user@host:/remote_dir /mnt
# démonter
fusermount -u /mnt
Se connecter dès qu'un hôte est disponible :
h=192.168.1.2; until nc -z -w1 $h 22; do sleep 1; echo waiting $h; done; ssh $h
Key Based Authentication
Générer une paire de clé sur la machine cliente :
h=projet2a ; ssh-keygen -f ~/.ssh/id_$h -C $h -t ed25519
# afficher l'empreinte d'une clé
ssh-keygen -lv -f ~/.ssh/id_projet2a
Copier la clé publique vers le serveur :
ssh-copy-id -i ~/.ssh/id_projet2a.pub natsec@172.16.22.1
# OU
# copier la clé publique dans le fichier /home/natsec/.ssh/authorized_keys du serveur
Editer le fichier ~/.ssh/config :
Host alias1 alias2 serveur_de_calcul
HostName 172.16.22.1
IdentityFile ~/.ssh/id_projet2a
User natsec
#Port 22
#ProxyJump jumphost
Si on a chiffré la clé privée avec une passphrase, pour éviter de retaper trop souvent la passphrase, on peut utiliser ssh-agent qui va la stocker en mémoire temporairement :
# lancer l'agent de gestion des clés
eval `ssh-agent`
# lister les identités
ssh-add -l
# ajouter la clé aux identités
ssh-add ~/.ssh/id_projet2a
Pour lire le contenu d'une clé publique :
ssh-keygen -f key.pub -e -m pkcs8 > pubkey.pem
openssl rsa -inform PEM -pubin -in pubkey.pem -noout -text
Fichier ISO
Pour rendre une clé bootable au dd :
lsblk
dd if=file.iso of=/dev/sdb bs=16M conv=fsync status=progress
Pour monter une image ISO :
mount -o loop debian-10.9.0-amd64-DVD-1.iso /media/cdrom
Système
Etendre une partition LVM
Sur l'hyperviseur : augmenter la taille du disque ou en ajouter un à la VM.
Dans la VM :
# créer une partition avec cfdisk
cfdisk /dev/sdX
[ New ]
prendre tout espace disponible
[ Type ]
Linux LVM
[ Write ]
q pour quitter
# faire prendre en compte les changement par l'OS
partprobe
# créer un Physical Volume (PV) sur la nouvelle partition (ex : /dev/sda4)
pvcreate [nouvelle partition]
# afficher les PV (et noter le Volume Group (VG) aux-quels ils sont associés)
pvs OU pvdisplay
# étendre le Volume Group (VG) au PV nouvellement créé
vgextend [nom du VG] [nouvelle partition]
# le VG s'étend maintenant sur la nouvelle partition
pvs OU pvdisplay
# afficher la taille du VG et l'espace disponible
vgs OU vgdisplay
# étendre le Logical Volume (LV ou autrement dit la partition à agrandir) avec l'espace disponible du VG
lvextend -l +100%FREE /dev/mapper/[nom du LV]
# faire prendre en compte la nouvelle taille de la partition par le système
resize2fs /dev/mapper/[nom du LV]
# super nickel !
df -h
Network
# lister les interfaces et les routes
alias ipl='ip -br a; echo; ip r'
# changer l'adresse ip
nano /etc/network/interfaces; systemctl restart networking && ip -br a; echo; ip r
# obtenir son IP publique :
curl ifconfig.me
DNS
On edite le fichier /etc/resolv.conf :
#search sous-domaine.domain.tld
nameserver 8.8.8.8
nameserver 192.168.1.254
LDAP
ldapsearch -x -H ldap://192.168.43.231:390 -b "ou=employees,ou=company,dc=nasa,dc=com" "(&(|(title=Dir*)(title=Ing*)(title=Resp*))(description=F))"
Paquets
Lister les fichers installés par un paquet : dpkg -L
Services
# afficher les ports en écoute
alias ss='ss -ltunp | column -t'
# lancer une tâche en arrière plan en la détachant du terminal
nohup <commande> &
Logging
# afficher les tentatives de connexion SSH échouées en temps réel
journalctl -f | grep -i "for invalid user"
# afficher les log d'un service en live
journalctl -uf <service>
User
Pour créer un utilisateur système wiki, on peut faire :
sudo useradd --system wiki -s /sbin/nologin
Pour ajouter un utilisateur au groupe sudo :
usermod -a user -G sudo
# deco reco
SELinux
Pour désactiver SELinux :
# en live
setenforce 0
# persistant
sed -i 's/SELINUX=.+/SELINUX=permissive/' /etc/selinux/sysconfig
Debian
Téléchargement de l'image
Il est préférable d'utiliser la version netinst, qui ne contient que les paquets essentiels, ce qui permet de respecter le principe de minimisation.
Pour obtenir l'image d'installation Debian, on se rend sur https://www.debian.org/CD/netinst/. Le fichier téléchargé est un .torrent, qui nous permet de télécharger l'image iso via le protocole BitTorrent.
Pour s'assurer que l'image n'a pas été modifiée, à cause d'une erreur de copie, ou par malveillance, on va vérifier l'empreinte de l'image. On se rend sur le répertoire https://cdimage.debian.org/debian-cd/current/amd64/bt-cd/, et on récupère les deux fichiers SHA512SUMS et SHA512SUMS.sign.
Vérification de la signature du fichier d'empreinte
On commence par vérifier que le fichier contenant l'empreinte de l'image a bien été généré par l'équipe Debian, et n'a pas été modidié depuis. Pour cela on vérifie la signature du fichier SHA512SUMS.
On récupère la clé publique de Debian en allant sur https://www.debian.org/CD/verify. Idéalement, il faudrait le faire avec une connection Internet différente de celle utilisée pour récupérer l'image. On regarde la dernière clé utilisée par l'équipe, et on note son identifiant :
pub 4096R/6294BE9B 2011-01-05
Empreinte de la clef = DF9B 9C49 EAA9 2984 3258 9D76 DA87 E80D 6294 BE9B
uid Debian CD signing key <debian-cd@lists.debian.org>
sub 4096R/11CD9819 2011-01-05
Pour récupérer la clé, on fait :
gpg --keyserver keyring.debian.org --recv 6294BE9B
On vérifie la signature du fichier :
user@debian: share $ gpg --verify SHA512SUMS.sign
gpg: les données signées sont supposées être dans « SHA512SUMS »
gpg: Signature faite le sam. 06 févr. 2021 20:38:14 CET
gpg: avec la clef RSA DF9B9C49EAA9298432589D76DA87E80D6294BE9B
gpg: Bonne signature de « Debian CD signing key <debian-cd@lists.debian.org> » [inconnu]
gpg: Attention : cette clef n'est pas certifiée avec une signature de confiance.
gpg: Rien n'indique que la signature appartient à son propriétaire.
Empreinte de clef principale : DF9B 9C49 EAA9 2984 3258 9D76 DA87 E80D 6294 BE9B
Si les deux empreintes commencent bien par DF9B 9C49 EAA9 2984, c'est bien l'équipe Debian qui a signé le fichier SHA512SUMS.
Vérification de l'empreinte
On peut maintenant comparer l'empreinte de l'image iso avec celle donnée par Debian avec :
sha512sum -c SHA512SUMS --ignore-missing
debian-10.8.0-amd64-netinst.iso: Réussi