Commandes Linux
Commandes Linux
Des commandes diverses, classées selon leur domaine.
Raccourcis console:
- ctrl + r : sert à rechercher très facilement une commande déjà tapée dans le terminal auparavant. Plus rapide que la commande history. Très utile !
- ctrl + e et ctrl + a : passer au début ou à la fin de la ligne de commande
- ctrl + maj + c / ctrl + maj + v : copier/coller
- esc + . : reprend le dernier argument utilisé.
- esc + # : commente la commande actuelle et donne un nouveau prompt. Utile pour garder la ligne actuelle dans l'historique même si elle n'est pas bonne.
Divers
DNS
dig
- Demander un transfert de zone:
dig @1.2.3.4 zone.tld -t AXFR
- Demander une trace complète avec interrogation des serveurs racine:
dig +trace +all @9.9.9.9 www.google.fr
Aspirer un site avec wget
Attention, c'est long ! Et ça peut prendre de la place.
wget -m -k -p -c -E http://sametmax.com
Changer de nom d'hôte
La commande pour changer de nom d'hôte sur les OS avec systemd :
sudo hostnamectl set-hostname nouveaunomdhote
Il faut ensuite modifier le fichier /etc/hosts en accord pour éviter les messages d'erreur
echo ‘ message ‘ | wall #Balance un message à tous les shells
wall sert à lire le contenu d’un fichier ou autre à tous les shells connectés
grep
grep sert à rechercher une chaîne de caractères dans un fichier. Elle peut s'utiliser avec des regex pour devenir un puissant outil de recherche. Dans sa forme la plus simple:
grep texte-à-trouver monfichier.txt
La commande affiche les lignes contenant une occurence du texte recherché.
Elle a des options utiles :
- -i pour ignorer la casse
- -n pour indiquer le numéro de ligne contenant le texte
grep est assez utile dans les redirections.
Services
SystemD
Pour manipuler les services avec SystemD: systemctl <action> <service>
Les actions sont :
- start
- stop
- restart
- reload
- status
- enable
- disable
Pour lister les services en cours : systemctl list-units --type=service
Editions de fichiers
Sous vim/vi :
supprimer une ligne entière(raccourci de "couper") : dd
• supprimer un caractère : x
• annuler la dernière action : u
• copier une ligne: Y
• coller la ligne : p
• quitter vi sans enregistrer: faire ESC puis deux points (:) et saisir q (pour quit) soit ESC puis :q
• enregistrer son fichier : faire ESC puis deux points (:) et saisir w (pour write)
• enregistrer son fichier et quitter : faire ESC puis deux points (:) et saisir wq
• ...
Sécurité
dpkg –verify : Sert à vérifier tous les fichiers modifiés, à prendre avec des pincettes (il se sert de ses propres checksums, qu’un attaquant pourrait modifier)
aide : cf https://kali.training/topic/monitoring-and-logging/ fait à peu près la même chose mais en plus complet
chkrootkit / rkhunter : Ces scripts servent à détecter les rootkits.
theharvester (sur kali): Recueuille des infos en cherchant des adresses mail et autres sur des moteurs de recherche : Exemple :
theharvester - d innertech.ovh -l 10 -b google : -d le domaine, -l limite à 10 résultats, -b google le moteur de recherche.
chntpw : En root : Une fois la partition windows montée sur un Linux, et qu’on est dans le dossier Windows/System32/config :
chntpw -i SAM: Permet de modifier des mots de passe Windows, changer le rôle d’utilisateurs, etc
iptables :
backup des règles : iptables-save > fichier.rules
restauration : iptables-restore < fichier.rules
lister les règles : iptables -L
faire une règle : iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT #Adaptable
Supprimer une règle : iptables -D INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
IPtables
- voir les règles dans leur chaînes avec leur numéro :
iptables -L -v --line-numbers
- Insérer une règle à une ligne particulière (ici 10):
iptables -I RH-Firewall-1-INPUT 10 -i eth0 -p tcp --dport 6556 -j ACCEPT
- Une bonne commande pour savoir quelle règle nous bloque (les règle qui sont mises à jour sont mises en surbrillance) :
watch -n1 -d "iptables -vnxL | grep -v -e pkts -e Chain | sort -nk1 | tac | column -t"
- Voir les règles d'une chaîne avec leur numéro
iptables -L RH-Firewall-1-INPUT --line-numbers
- Supprimer une règle par son numéro
iptables -D RH-Firewall-1-INPUT 19
macof Permet d’innonder la table mac-address d’un switch cible avec de fausses @MAC générées aléatoirement. Le but est soit de faire tomber un switch, soit de la faire fonctionner en mode hub pour récupérer tout ce qui passe ensuite avec un wireshark.
macof -i eth0 -s 10.0.0.8 -d 10.0.0.50
-i : interface -s source -d : destination (aucun argument obligatoire)
dsniff Sert à sniffer des mots de passe en clair qui passeraient par là. Pas besoin d’options de base, même si -d (debug mode) peut être utile.
Gestion de fichiers
which : similaire à whereis : cherche l’emplacement d’une commande
SCP :
Copy the file "foobar.txt" from a remote host to the local host
$ scp your_username@remotehost.edu:foobar.txt /some/local/directory
Copy the file "foobar.txt" from the local host to a remote host
$ scp foobar.txt your_username@remotehost.edu:/some/remote/directory
Réseau
Afficher informations reçues par DHCP (DNS, IP...)
Elles se trouvent dans un fichier .lease, généralement dans /var/lib/dhcp (Debian) ou /var/lib/NetworkManager.
Afficher la gateway
ip r
route -n
Résolution de nom de domaine :
host : host www.google.fr me renvoie l'@IP de google.fr
Ping
-c permet de limiter le nombre de paquets envoyés
-i permet de changer l'intervalle entre les paquets (valeur en secondes)
-M do : do pour "Don't Fragment", et elle peut s'associer avec:
-s (Attend une valeur en octets) qui sert à choisir la taille du paquet, pour tester le MTU d'un réseau. Quand on utilise cette option, la valeur que je donne à -s ne tient pas compte du header IPv4. Cependantla taille totale du paquet IPv4 est indiquée entre parenthèses.
Traceroute
Sert à savoir par où passe un paquet entre le départ et l'arrivée. (Son fonctionnement "interne" est détaillé dans Cisco)
-n : sert à ne pas résoudre les noms de domaine (informations numériques)
--resolve-hostnames : sur ma version, on n'as pas de -n, mais on ça à la place pour résoudre les noms de domaines
traceroute6 sert à faire de l'IPv6
-T : faire le traceroute avec des paquets TCP SYN (besoin d'être root)
-I : faire le traceroute avec des paquets ICMP
Les routeurs ne répondent pas forcément de la même façon en fonction de ce que l'on utilise. Par défaut, le traceroute Linux utilise des paquets UDP (Windows utilise ICMP par défaut).
La 1.9.4 utilise le mot SUPERMAN dans ses données envoyées. Amusant, non?
nslookup : sert aussi à discuter avec les serveurs DNS.
justine@Justine-pc:~$ nslookup
> server 1.1.1.1
Default server: 1.1.1.1
Address: 1.1.1.1#53
> set type=mx
> google.com
Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
google.com mail exchanger = 40 alt3.aspmx.l.google.com.
google.com mail exchanger = 50 alt4.aspmx.l.google.com.
google.com mail exchanger = 10 aspmx.l.google.com.
google.com mail exchanger = 20 alt1.aspmx.l.google.com.
google.com mail exchanger = 30 alt2.aspmx.l.google.com.
Authoritative answers can be found from:
> server alt3.aspmx.l.google.com
Default server: alt3.aspmx.l.google.com
Address: 108.177.125.26#53
Default server: alt3.aspmx.l.google.com
Address: 2404:6800:4008:c01::1a#53
netstat : Montrer connexions et ports ouverts
netstat -l liste les ports en listen
netstat -lntup : -l pour listen, t pour tcp, u pour udp, -n pour le numéro sans resolve le nom, p pour le programme
lsof -i : montre les connexions avec le PID correspondant
nmap -sS -p- -Pn : Fait un scan nmap syn/stealth sur tous les ports en passant la découverte des hôtes
-sS pour SYN, -sT pour tcp connect, -sU pour udp, -sUV pour udp avec versions…
-iL permet de chharger les ip à partir d’un fichier texte (une ip par ligne)
-nmap a aussi des scripts, avec --script. Ils sont rangés en catégories : par ex’emple on peut utiliser auth, brute, broadcast, default, discovery, dos, exploit, vuln, discovery, external, fuzzer, intrusive, malware, safe ou version : ce sont toutes les catégories de scripts. Si je fais nmap --script vuln @ip, je ferais un scan de toutes les vulnérabilités sur ma cible.
fping : permet les balayages ping. Exemple :
fping -a -g 192.168.0.1 192.168.0.100 : -a sert à afficher uniquement les actifs, -g permet de définir la plage ip
route -n : affiche la table de routage de l'ordinateur
TCPdump
tcpdump : capture de traces réseaux, analysables en live ou avec wireshark. En Sudo .
tcpdump -i eth0 : basique
tcpdump -i eth0 -n : affichage numérique
tcpdump -i eth0 -n -v : verbeux
tcpdump -i eth0 -n -v -A : Dump des paquets.
tcpdump -i eth0 -n -v -A -w fichier_trace.out : Génère un fichier de la trace lisible par Wireshark (un fichier binaire, pas du texte). on peut y coller du grep en live.
Utilisation avancée avec des filtres
TCPDump permet de faire des filtres, un peu comme Wireshark. Il suffit de taper ma commande suivie d'un filtre en quotes. Exemples:
- 'port http'
- 'port 80'
- 'src port http'
- 'dst port 80'
- 'src host 192.168.1.1'
- 'dst host 192.168.1.1'
- 'host 192.168.168.1.1' ---> S'applique aux adresses IP source et destinataire
- 'tcp'
- 'udp'
- 'icmp' [Et plein d'autres protocoles reconnus par TCPdump]
On peut combiner des filtres:
- 'host www.google.fr or linuxfr.org' [On peut utiliser des opérateurs booléens]
- 'port http and host not proxy.societe.local'
- '(port http or https) and net proxy.societe.local' [net correspond à tout ce qui vient du même réseau que le proxy
Exemple de commande complète :sudo tcpdump -i enp0s3 -w monfichier.out 'filtre' #Ici le filtre sera activé dans le fichier
Gestion d'utilisateurs
usermod : permet de modifier les paramètres d'un utilisateur
Scripting
./script : lancer un script
bash -x essai.sh : lancer le script en mode debug
read : entrer des valeurs pour les assigner à des variables.
- read nom : on affiche rien, on attend juste que l'utilisateur entre une valeur
- read nom prenom : on enregistre dans deux variables, avec deux valeurs attendues, si l'utilisateur donne plus, tout ce qui reste va dans la dernière variable.
- read -p 'Entrez une valeur' variable : On affiche un prompt, pour indiquer à l'utilisateur ce que l'on attend
- read -n 10 nom : On limite à 10 caractères. L'entrée s'arrête d'elle même arrivée à 10 caractères.
- read -t 10 variable : on limite le temps donné pour entrer la valeur (temps en secondes)
- read -s variable : on affiche pas le texte saisi par l'utilisateur
Activer le routage sur Linux
Pour activer le routage sur Linux (c'est-à-dire router les paquets d'une interface à l'autre, avec du NAT) :
- Dans /etc/sysctl.conf, décommenter la ligne :
net.ipv4.ip_forward=1
- Puis entrer la commande
sysctl -p
pour recharger la configuration - Ensuite, pour le NAT, rentrer la règle suivante :
iptables -t nat -A POSTROUTING -o nom_de_votre_interface_WAN -j MASQUERADE
- On peut sauvegarder cette règle en installant le paquet iptables-persistent, qui propose de sauvegarder pendant l'installation
Il faut aussi que routeur Linux ait la box en route par défaut :
ip route add default adresse_de_l'interface_de_la_box
- Puis faire
ip route
pour vérifier.
Il faut aussi penser vérifier les routes du client :
sudo ip route
pour les voirsudo
ip route del default
pour en effacer unesudo ip route add default via ip_lan_du_routeur
Ctrl + Z, fg, bg
- Ctrl + c met fin au processus en cours
- Ctrl + Z le passe en arrière plan, il est alors mis en pause
- fg (ou bg, c'est pareil) permet de reprendre le processus en arrière plan
sed
Remplacer la première occurence d'un truc par un autre truc
sed 's/truc/autre_truc/' fichier_lu >> fichier_de_sortie
Commandes de maintenance au quotidien
Ici, les commandes à utiliser au quotidien sur des machines qui remonteraient dans la supervision.
Compresser les fichiers plus vieux que x
find /some/folder -mtime +11 -type f -exec gzip {} \; #Le temps est en jours
Voir les dossiers les plus lourds
du -a /some/folder | sort -n -r | head -n 20
Créer un disque USB avec DD
<source> sudo dd bs=4M if=path/to/input.iso of=/dev/sd<?> conv=fdatasync status=progress </source>
Ou mieux, sans s'embêter avec DD (pas testé): <source> cat image.iso >/dev/sdb </source>
... Avec PV, pour avoir une barre de progression
<source> cat image.iso | pv >/dev/sdb </source>
Strace : voir les appels systèmes d'une commande
<source> strace ls execve("/usr/bin/ls", ["ls"], 0x7fffd0e92440 /* 61 vars */) = 0 brk(NULL) = 0x560441477000 arch_prctl(0x3001 /* ARCH_??? */, 0x7fff0a21d830) = -1 EINVAL (Invalid argument) access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=87496, ...}) = 0 mmap(NULL, 87496, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f60a3d63000 close(3) </source>
ldd : Voir les libs utilisées par une app
<source> ldd bin/engine.so linux-gate.so.1 (0xf7ef7000) libtier0.so => not found libvstdlib.so => not found libsteam_api.so => /lib/libsteam_api.so (0xf6dd9000) libSDL2-2.0.so.0 => not found librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf6dce000) libopenal.so.1 => not found libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf6cc9000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf6cc3000) libstdc++.so.6 => /lib/i386-linux-gnu/libstdc++.so.6 (0xf6ae5000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf6ac2000) /lib/ld-linux.so.2 (0xf7ef8000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf68d2000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf68b3000) </source>
pushd et popd : travailler facilement avec les répertoires
pushd et popd permettent de créer une pile de répertoire. pushd en met au sommet de la pile. popd l'enlève. Je me situe toujours dans le répertoire du sommet de la pile.
<source lang="bash"> pushd /mnt
- Je suis dans /mnt
pushd /root
- Je suis dans /root
popd
- Je reviens dans /mnt
</source>
xargs
La commande xargs permet de récupérer la sortie d'une commande pour la piper sur une autre en tant qu'argument (et pas seulement par l'entrée standard). Par exemple, un exemple servant à copier une liste de fichiers .txt d'un répertoire dans un autre: <source> ls -1 ${repertoire_source}/*.txt | xargs -i -t cp {} ${repertoire_cible} </source>