Commandes Linux

De Justine's wiki
Aller à la navigation Aller à la recherche

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.

Exemple de session nslookup ou je cherche l’adresse d’un serveur mail :
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 voir
  • sudo ip route del default pour en effacer une
  • sudo 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

  1. Je suis dans /mnt

pushd /root

  1. Je suis dans /root

popd

  1. 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>