Linux


Cheatsheet :

Clavier

# passer en français
setxkbmap fr
# réparer un terminal cassé
reset

Pour dĂ©sactiver le 🔔 : dĂ©commenter # set bell-style none dans /etc/inputrc.

Root

Pour reset un mot de passe root oublié :

  1. faire e dans le menu grub
  2. ajouter rw init=/bin/bash Ă  la fin de la ligne linux
  3. faire ^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

Pour générer de l'aléatoire (pas pour de la crypto) :

head /dev/urandom | sha1sum
head /dev/urandom | tr -dc a-zA-Z0-9 | head -c32; echo
head /dev/urandom -c32 | base64

Bash

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) :

ncdu --si
    gg t ss c

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 :

  1. Le mettre dans .gitignore
  2. 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 s serveur_de_calcul
    HostName 172.16.22.1
    IdentityFile ~/.ssh/id_projet2a
    User natsec
    #Port 22
    #ProxyJump jumphost

Pour éviter de retaper trop souvent la passphrase de la clé privée, 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

Fichier ISO

Pour rendre une clé bootable :

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

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

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))"

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 -G sudo utilisateur

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