Linux

Système Système : Débian Réseau avancé Apache et PHP
Système : utilisateurs Utilisation du bash Iptables MYSQL
Système : droit des fichiers Bureautique : image Samba Autres services réseaux
Système : fichiers Bureautique : audio DHCP programmation bash
Système : partitions Bureautique : video DNS Android
Système : périphériques Tex et Metapost LDAP Raspberry
Système : interface graphique Réseau LDAP et Samba
Création du pdf

Système

?
Pour emacs / maxima

lancer le mode : M-x maxima-mode

lancer l'execution : C-c C-b

afficher le buffer : C-c C-p

maxima stop : C-c C-k

Indent buffer : M-C-q

Check parenthesis : C-)
Pour les VirtualBox :
  • Monter un disque ".vdi"
    apt-get install qemu-utils
    rmmod nbd
    modprobe nbd max_part=8
    qemu-nbd -c /dev/nbd0 a.dvi
    fdisk -l /dev/nbd0
  • D\'emonter le disque virtuel
    umount /dev/nbd0p1
    qemu-nbd -d /dev/nbd0
    rmmod nbd
Depuis l'utilisation de systemd sous Linux, le fichier /etc/rc.local n'est plus exécuté au démarrage.
  • Créer un fichier /etc/systemd/system/rc-local.service
    [Unit]
    Description=/etc/rc.local Compatibility
    ConditionPathExists=/etc/rc.local

    [Service]
    Type=forking
    ExecStart=/etc/rc.local start
    TimeoutSec=0
    StandardOutput=tty
    RemainAfterExit=yes
    SysVStartPriority=99

    [Install]
    WantedBy=multi-user.target
  • Changer les droits chmod +x /etc/rc.local
  • Activez le service : systemctl enable rc-local
Pour envoyer un mail à chaque connexion de l'utilisateur, il suffit de mettre la ligne ci-dessous dans le fichier "~/.profiles" :
echo 'Accès Shell Root le ' `date` `who` | \
mail -s "`hostname`" monitoring@test.com
Pour avoir des informations sur la mémoire du système :
 cat /proc/meminfo
Pour installer Java manuellement sur un ordinateur :
  • tar -xvf ~/Downloads/jdk-7u3-linux-i586.tar.gz
  • mkdir -p /usr/lib/jvm/jdk1.7.0
  • mv jdk1.7.0_03/* /usr/lib/jvm/jdk1.7.0/
  • update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.7.0/bin/java" 1
  • update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0/bin/javac" 1
  • update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.7.0/bin/javaws" 1
  • Ajouter les lignes suivants dans /etc/profile :
    JAVA_HOME=/usr/lib/jvm/jdk1.7.0
    PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
    export JAVA_HOME
    export JRE_HOME
    export PATH
De plus, pour que Java soit intégré dans Firefox :
cd /usr/lib/mozilla/plugins
ln -s /usr/java/jdk1.8.0_51/jre/lib/i386/libnpjp2.so
Lorqu'on veut suivre les logs au fur et à mesure dans un fichier :
 tail -f /var/log/syslog
Le package quota permet de gérer l'espace disque utilisé par les fichiers de chaque utilisateur.

Voici quelques renseignements globaux sur son fonctionnement :
  • Sous Debian, on installe ce package par apt-get install quota
  • On vérifie sa présence dans le système par le lancement de la commande quota_v2.ko :
     lsmod | grep quota
  • Pour que le module soit pris en charge sur une partition montée, il faut que celle-ci intègre les options usrquota et grpquota (respectivement pour les fichiers appartenant aux utilisateur ou aux groupes)
  • Pour chaque partition utilisant les quotas, il faut vérifier la présence des fichiers aquota.user et aquota.group
  • Deux critères de limitation sont disponibles :
    • par l'espace utilisé
    • par le nombre de fichiers créés (inode)
    Mais aussi deux limites peuvent être fixés :
    • hard : l'utilisateur ne pourra pas dépassé cette limite. Une erreur système lui sera rapporté.
    • soft : l'utilisateur pourra créer son fichier, mais une alerte lui sera indiqué fia le système warmquota (voir le fichier /etc/warmquota.conf)
Voici quelques commandes liées à l'usage des quotas :
  • Analyse d'une partition pour mettre à jour les fichiers aquota.user et aquota.group de la partition /home :
     quotacheck -vugm /home
  • Pour activer les quotas pour les utilisateurs sur la partition /home :
     quotaon -u /home
    Pour activer les quotas pour les groupes sur la partition /home :
     quotaon -g /home
    Parallèlement, il y a la commande quotaoff pour désactiver les quota sur une partition
  • La commande setquota permet de définir les quotas pour un utilisateur, un groupe ou par défaut :
    • setquota -u user 100 200 10 15 /home
      Cette commande attribuera à l'utilisateur user :
      • pour la limitation en espace utilisé : 100 pour la limite soft et 200 pour la limite de hard
      • pour la limitation du nombre de fichiers : 10 pour la limite soft et 15 pour la limite hard
  • La commande repquota permet d'afficher les informations de quota pour les utilisateurs :
  • Afficher les informations des utilisateurs sur la partition /home :
     repquota -u /home
  • Afficher les informations de groupes sur la partition /home :
     repquota -g /home
  • Afficher les informations sur toutes les partitions :
     repquota -a
La commande tar permet de gérer et de créer des archives compressées ou non :
  • Pour la compression :
    • Crée une archive non-compressée du dossier /home dans le fichier a.tar et affiche les fichiers traités :
       tar -cvf /mnt/a.tar /home/
      De même mais conserve l'adresse absolue des fichiers :

       tar -cvPf /mnt/a.tar /home/
    • Voici différentes options pour la compression de l'archive lors de sa création :
       -j (bzip2) ; -z (gzip) ; --lzma (lzma)
      Voici la même compression du dossier /home mais cette fois avec la compression "gzip" :
       tar -cvzf /mnt/a.tar /home/
    • Il est également possible de compresser l'archive par l'usage externe du compresseur :
       tar -cv /home/ | gzip > a.gzip
  • Pour la décompression :
    • Décompresse l'archive : tar -xvf a.tar
    • Affiche le contenu d'une archive sans la décompresser :
       tar -tf a.tar
Affcihe l'ensemble des variables d'environnements
 printenv

Système : utilisateurs

Lors de l'ouverture d'une session, le chargement du profil s'effectue par l'exécution des trois fichiers suivant :
  • /etc/profile
  • ~/.profile
  • ~/.bashrc
où le symbole ~ représente le dossier de l'utilisateur courant.

Les deux premiers fichiers sont lus qu'une fois lors du log de l'utilisateur. Le troisième fichier est lu à chaque lancement de la commande bash
La commande who permet d'afficher tous les utilisateurs actuellement loggués au système.
  • Pour connaitre l'heure de boot du système : who -b
  • Pour afficher toutes les informations disponibles par cette commande :
     who -a
La commande groups permet d'afficher tous les noms de groupes auxquels appartient l'utilisateur courant.
Cette commande est équivalente à id -Gn
A tout moment, pour connaitre le login de l'utilisateur courant, lancez la commande whoami
La commande id permet d'avoir des informations sur l'uid et le groupe primaire et les groupes secondaires d'un utilisateur :
  • Pour avoir des informations sur l'utilisateur courant :
     id
  • Pour avoir des informations sur l'utilisateur user :
     id user
  • Pour récupérer tous les gid des groupes de l'utilisateur user :
     id -G user
  • Pour récupérer tous les noms des groupes de l'utilisateur user :
     id -Gn user
La commande grpck permet de vérifier l'intégrité des fichiers /etc/group et /etc/gshadow

Pour lancer cette commande en lecture seule :
 grpck -r
La commande pwck vérifie l'intégrité des fichiers /etc/passwd et /etc/shadow

Pour vérifier ces fichiers en lecture seule :
 pwck -r
Les commandes su et sudo.
Ces deux commandes permettent d'exécuter des commandes sous un autre utilisateur ou de changer l'utilisateur courant du bash.
  • La commande su est une commande de bas-niveau inclus dans toutes les distributions de Linux

    Voici quelques utilisations de su :
    • Change l'utilisateur courant dans le bash :
       su root
    • Change l'utilisateur courant dans le bash en chargeant les variables d'environnement de l'utilisateur :
       su -l root
    • Permet d'utiliser la commande chmod avec les droits de l'utilisateur :
       su -c "chmod 777 a.txt" root
  • La commande sudo fait partie du package sudo qui permet une utilisation plus souple de la commande su
    Ce package propose le fichier /etc/sudoers qui permet à un utilisateur du système d'exécuter une commande sous l'identité d'un autre utilisateur.

    Voici comment l'utilisateur www-data peut utiliser le gestionnaire de fichiers pcmanfm :
     www-data ALL=(ALL) NOPASSWD: /usr/bin/pcmanfm
La commande groupmod permet de modifier les informations relatives au groupe du système :
  • Pour modifier le gid du groupe users :
     groupmod -g 52 users
  • Pour changer le nom d'un groupe :
     groupmod -n utilisateurs users
  • Pour modifier le mot de passe d'un groupe :
     groupmod -p xxxx users
Les commandes lastlog et faillog permettent de connaitre respectivement les logs réussis et râtés de chaque utilisateur.
La commande usermod permet de modifier les données des fichiers /etc/passwd et /etc/group :
  • Pour modifier le groupe primaire de l'utilisateur user :
     usermod -g prof user
  • Pour ajouter les groupes "math" et "info" à l'utilisateur user :
     usermod -G math,info user
  • Voici commen enlever l'utilisateur user du groupe "root" :
     usermod -aG root user
  • La commande suivante permet de changer le dossier personnel et interdit l'usage de tout shell à l'utilisateur user lui interdisant de se loguer :
     usermod -d /home/pascal -s /bin/false thomas
  • La commande suivante change le nom de l'utilisateur user et modifie son uid :
     usermod -u 1001 -l tom user
  • La commande suivante empêche l'utilisateur de se logguer :
     usermod -U user
    Pour annuler cette commande, on exécute :
     usermod -L user
Supprimer un utilisateur :
  • la commande userdel efface un utilisateur. C'est une commande de bas-niveau.
  • la commande deluser est un script perl utilisant la commande userdel
Ajouter un utilisateur :
  • La commande useradd est une commande de bas-niveau ajoutant un utilisateur au système :

    Par exemple :
    • useradd -c "compte personnel" -g "users" -m -d "/home/utilisateur" tom
      Cette commande ajoute l'utilisateur "tom" qui aura pour dossier personnel "/home/utilisateur" et le crée si nécessaire (-m), son groupe primaire sera "users" et aura pour commentaire dans le fichier /etc/password "compte personnel"
    • Pour créer un utilisateur sans accès au login :
       useradd -s /dev/false tom
    • Définit le groupe primaire et les groupes secondaires de l'utilisateur tom :
       useradd -g users -G apache,root tom
  • La commande adduser est une commande perl utilisant useradd
Sous Debian, les fichiers /etc/default/useradd et /etc/login.defs permettent de configurer le comportement par défaut de ces commandes. Faire useradd -D pour voir les valeurs par défaut
Le fichier /etc/gshadow permet de protéger l'ajout d'un utilisateur dans un groupe via un mot de passe.
La commande passwd gère les mots de passe sur le système :
  • L'appel simple passwd permet de changer le mot de passe de l'utilisateur courant
  • Pour changer le mot de passe de l'utilisateur user :
     passwd user
  • Affiche des informations sur le mot de passe de l'utilisateur courant :
     passwd -S
  • Affiche les informations des mots de passe de tous les utilisateurs :
     passwd -aS
  • Pour désactiver la possibilité du compte utilisateur :
     passwd -l utilsateur
  • Un mot de passe vide pour se logguer sans mot de passe :
     passwd -d user
  • passwd -i 5 -m 3 -x 70 -w 2 user
    L'utilisateur user verra les changements suivants sur son mot de passe :
    • l'utilisateur pourra toujours se connecter 5 jours après l'expiration du mot de passe ;
    • les changements de mot de passe doivent être espacés de 3 jours
    • l'utilisateur doit changer ses mots de passe au maximum tous les 70 jours
    • un avertissement sera affiché deux jours avant l'expiration du mot de passe
Le fichier /etc/shadow

Chaque ligne du fichier /etc/shadow est composé de 9 champs :
  • 1: le nom de l'utilisateur
  • 2: le mot de passe chiffre ; si sa valeur commence "!" ou "*" l'utilisateur ne pourra pas se logguer (utilisateur système / accès ssh)
  • 3: date du dernier changement de mot de passe (depuis le 1 janvier 1970)
  • 4: nombre de jours minimum avant de pouvoir changer le mot de passe
  • 5: nombre de jours avant l'expiration du mot de passe
  • 6: nombre de jours avant l'avertissement stipulant l'expiration du mot de passe
  • 7: nombre de jours entre l'expiration du mot de passe et la désactivation du compte
  • nombre de jours, à compter du 1er janvier 1970, après lequel le compte sera désactivé
  • champs réservé
Voici un exemple de codage de mot de passe dans ce fichier. Considérons la ligne :
 thomas:$1$ujD66Lzn$fu1vc.eQNetN.QrBxe8fq/:15196:0:99999:7:::
Le mot de passe est $1$ujD66Lzn$fu1vc.eQNetN.QrBxe8fq qui est composé de 3 champs :
  • 1: 1 l'algorithme de cryptage est "md5"
  • 2: ujD66Lzn la clef de cryptage
  • 3: fu1vc.eQNetN.QrBxe8fq/ le mot de passe crypté
Le fichier /etc/group

Chaque ligne du fichier /etc/group est composé de quatre champs :
  • 1: le nom du groupe
  • 2: le mot de passe ou x s'il est codé
  • 3: le gid : numéro identifiant de manière unique le fichier
  • 4: tous les noms d'utilisateurs ayant ce groupe comme groupe secondaire
Le fichier /etc/passwd

Chaque ligne du fichier /etc/passwd est composé de 7 champs :
  • 1: le nom de l'utilisateur
  • 2: le mot de passe ; s'il est chiffré x apparaitra
  • 3: l'uid unique de l'utilisateur
  • 4: le gid - le numéro du groupe principal
  • 5: informations personnelles de l'utilisateur utilisées par le système
  • 6: le répertoire personnel de l'utilisateur
  • 7: le shell utilisé par l'utilisateur (/dev/false si il ne peut se logguer)
Ordonne tous les noms de groupe local par ordre alphabétique et sauvegarde le résultat dans le fichier :
 sort < /etc/group > a.txt

Système : droit des fichiers

Sous Linux, existe par défaut sur tous les systèmes l'utilisateur nobody et nogroup qui permettent de définir respectivement un utilisateur et un groupe qui ne correspondra à personne.
Seul le super-utilisateur root pourra utiliser ses fichiers en tant que propriétaire et en tant qu'appartenant au groupe d'appartenance du fichier.
La commande umask permet de définir un masque par défaut pour l'attribution des droits lors de la création d'un nouveau fichier :
  • la commande umask affiche le masque actuel.
  • la commande umask 0222 définit le nouveau masque à 0222
Voici quelques exemples de masque et de leur effet :
  • umask 100 : les fichiers et les dossiers seront cr\'ees respectivement avec les droits 666 et 677.
  • umask 020 : les fichiers et les dossiers seront cr\'ees respectivement avec les droits 646 et 757.
  • umask 004 : les fichiers et les dossiers seront cr\'ees respectivement avec les droits 662 et 773.
  • umask 357 : les fichiers et les dossiers seront cr\'ees respectivement avec les droits 310 et 310.
La commande chgrp permet de changer le groupe propriétaire d'un fichier :
 chgrp mygroup a.sh
La commande chown permet de changer le propriétaire d'un fichier :
  • Pour que user devienne le propriétaire du fichier a.sh
     chown user a.sh
  • Cette commande permet de modifier en même temps le groupe du fichier :
     chown user:mygroup a.sh
  • Modifie le propriétaire en root tous les fichiers appartenant à l'utilisateur user du dossier courant et de ses sous-répertoires :
     chown root -R --from=user
Les droits spéciaux des fichiers sont différents suivant qu'on les applique :
  • aux fichiers :
    Prenons un fichier a.txt dont la commande "ls -l" affiche :
     -rwxrwxrwx 1 thomas users 4096 mar 28 08:35 a.sh
    • setuid : lors de l'exécution d"un fichier possédant ce droit, son éxécution s'effectuera avec les droits du propriétaire du fichier et non pas avec ceux de l'utilisateur courant.
      Pour activer le setuid :
       chmod u+s a.sh ou chmod 4555 a.sh
      Le fichier aura alors l'affichage par ls -l :
       -rwsrwxrwx 1 thomas users 76 mar 28 08:35 a.sh
    • setgid : lors de l'exécution du fichier, celui s'exécutera avec les droits du groupe propriétaire et non pas avec ceux de l'utilisateur courant.
      Pour activer le setgid :
       chmod g+s a.sh ou chmod 2555 a.sh
      Le fichier aura alors pour affichage par ls -l :
       rwxrwsrwx 1 thomas users 76 mar 28 08:35 a.sh
    • sticky bit : avec cette permission le fichier restera en mémoire après sa première exécution afin d'être appelé les prochaines fois avec plus de rapidité.
      Pour activer le sticky bit :
       chmod o+s a.sh ou chmod 1555 a.sh
      Le fichier aura alors pour affichage par ls -l :
       rwxrwxrwt 1 thomas users 76 mar 28 08:35 a.sh
    Monter un système avec les options nosuid et noguid permet d'anniler les deux droits setuid et setgid sur ce système de fichiers (utile pour sécuriser la monter d'un disque externe)
  • aux dossiers :
    Prenons l'exemple d'un dossier dossier dont la commande "ls -l" affiche :
     drwxrwxrwx 1 thomas users 4096 mar 28 08:35 dossier
    • setuid : avec cette permission, tous les fichiers créés dans le dossier ont automatiquement comme propriétaire le propriétaire de dossier
      Pour activer le setgid :
       chmod u+s dossier ou chmod 4555 dossier
      Le dossier aura pour affichage par "ls -l" :
       drwxrwsrwx 1 thomas users 4096 mar 28 08:35 dossier
    • setgid : avec cette permission, tous les fichiers créés dans le dossier ont automatiquement comme groupe d'appartenance le groupe de dossier
      Pour activer le setgid :
       chmod g+s dossier ou chmod 2555 dossier
      Le dossier aura pour affichage par "ls -l" :
       drwxrwsrwx 1 thomas users 4096 mar 28 08:35 dossier
    • sticky bit : avec cette permission, tout utilisateur ayant les droits en écriture peut également y effacer les fichiers dont il n'est pas propriétaire
      Pour activer le setgid :
       chmod o+s dossier ou chmod 1555 dossier
      Le dossier aura pour affichage par "ls -l" :
       drwxrwxrwt 1 thomas users 4096 mar 28 08:35 dossier

Système : fichiers

  • Déplace par lots tous les fichiers ayant l'extension ".bak" dans le dossier /home/aa :
     find /etc -iname '*bak*' -type f -print | xargs /bin/cp -t /home/aa/
  • Effacer tous les fichiers ayant une extension ".exe"
     find . -iname "*.exe" -exec rm {}\;
  • Chercher un fichier en fonction de :
    • sa date de création :
       find . -ctime -2 (2 jours) ; find . -cmin -10 (10 minutes)
    • sa date de modification :
       find . -mtime -2 (2 jours) ; find . -mmin -10 (10 minutes)
    • sa date du dernier accès :
       find . -atime -2 (2 jours) ; find . -amin -10 (10 minutes)
  • Cherche un fichier en fonction de son propriétaire
    • Nom du propriétaire : find /home -user nom
    • Uid du propriétaire : find /home -uid nom
  • Cherche un fichier en fonction de son groupe
    • Nom du groupe : find /home -group nom
      Ou qui n'appartienne pas à ce groupe : find /home -not -group nom
    • Gid du groupe : find /home -gid nom
  • Chercher un fichier qui une permission particulière
     find /home -t f -perm 704
  • Pour connaitre la taille des fichiers appartenant à l'utilisateur ayant 1000 pour uid :
    find /home/user/Téléchargements/ -type f -uid 1000 -print0 | \
    du --files0-from=- -hc
  • Chercher les fichiers n'ayant pas de propriétaire
     find -nouser
  • Chercher un fichier en fonction de son type :
    • les fichiers : find /home -t f
    • les dossiers : find /home -t d
    • les liens symboliques : find /home -t l
  • Rechercher un fichier de plus de 1Mo :
     find . -size +1M
Renommer tous les fichiers par lots. Ici, on les passe en minuscule :
 rename 'y/A-Z/a-z/' *
Pour copier seulement les fichiers de la partition root vers /mnt
 cp -P / /mnt
Le drapeau -P permet de ne suivre que les fichiers physiques (AAAAAAAAAAAAAAAAAAAAA)
  • Affiche le numéro inode du fichier
     ls -i
  • Crée une liste des fichiers du dossier
     ls -m
  • Affiche les numéro uid et gid du propriétaire et du groupe
     ls -nl
  • Affiche des informations de temps sur les fichiers
     ls -l --time=atime temps du dernier accès
     ls -l --time=ctime temps de la création

Système : partitions

Une impossibilité d'écrire sur un disque venir peut venir :
  • d'un manque d'espace qu'on détecte à l'aide de la commande :
     df -h
    et on peut vérifier le contenu de chaque dossier un par un à l'aide de la commande :
     du -csh /
  • d'un trop grand nombre d'inodes présent sur le serveur :
     df -i
    alors on vérifie le nombre de fichiers par sous dossier :
     find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n
Voici un bash pour créer une sauvegarde incrémentielle de plusieurs dossiers
#/bin/bash

sync() {
origDir=$1
destDir="/media/user/5698f413-4a8d-4213-837e-372d32358a43/${2}"

##==== Efface la dixieme sauvegarde
if [ -d "${destDir}/home-10" ]; then
echo "Efface le dossier 10";
rm -R "${destDir}-10";
fi;

##==== Remonte le numéro de chacun
echo "Remonte les numéro de dossier"
for i in {0..9}; do
j=$((9-${i}));
k=$((${j}+1));
if [ -d "${destDir}-${j}" ]; then
mv "${destDir}-${j}" "${destDir}-${k}";
fi;
done;

##=== Verifie l'existence du dossier 1
if [ -d "${destDir}-1" ]; then
##=== Copie le dossier 1 pour préparation de la mise à jour
cp -al "${destDir}-1" "${destDir}-0"
fi;

##=== Mise à jour du dossier
OPTIONS=(-v --recursive --owner --group --force --delete --times);
# OPTIONS_PLUS=(--filter '- /home/user' --filter '- /home/root' --filter '- /home/USER.BAK' --filter '- /home/android' --filter '- /home/Android');
OPTIONS_PLUS=(--exclude='user' --exclude='Android' --exclude='android' --exclude='USER.BAK');
rsync "${OPTIONS[@]}" "${OPTIONS_PLUS[@]}" ${origDir}/* ${destDir}-0/
return 0;
}

sync "/home" "home"
sync "/etc" "etc"
sync "/root" "root"
sync "/media/user/sauv1/photo" "photo"
sync "/media/user/sauv2/Musique" "Musique"
Information sur le temps de création, temps d'accès, temps de modification d'un fichier :
  • temps du dernier changement d'inode (création, changement de droit) : stat -C %Z
  • temps du dernier accès : stat -c %X fichier
  • temps de la dernière modification : stat -c %Y fichier
Tous ces temps sont en seconde depuis le 1er janvier 1970
Il peux être intéressant de demonter au système de vérifier le système de fichiers d'une partition lorsqu'elle le monte au démarrage :
  • Pour demander un check du filesystem au redémarrage
     tunefs -c 1 /dev/sda1
  • Pour forcer la vérification des partitions au démarrage, on crée un fichier forcefsck à la racine du système (fichier /forcefsck).
    Sous Debian/Ubuntu, c'est le script "/etc/init.d/checkfs.sh" qui s'occupe de vérifier la présence de ce fichier et lance la vérification des partitions.
Pour effacer un fichier comportant des caractères bizarres ou accentués, voici la procédure :
  • On récupère son numéro inode par : ls -i
  • On vérifie qu'il est accessible par :  find . -inum xxxx
  • On l'efface : find . -inum xxx -delete
Voici quelques commandes pour tester les performances d'un disque dur :
  • Teste la lecture
     dd if=/dev/sda1 of=/dev/zero bs=1M count=400 iflag=direct
  • Teste l'écriture
     dd if=/dev/zero of=/dev/sda1 bs=1M count=400 skip=1000 oflag=direct
On peut renouveller ces commandes en désactivant le cache du disque :
 hdparm -W0 /dev/sda

On peut désactiver l'utilisation de cache dans le système par :
 sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
Le package cryptsetup permet de crypter un système de fichiers. Voici la procédure à effectuer pour crypter et monter manuellement la partition :
  • cryptsetup luksFormat -c aes -h sha256 /dev/hda7 : code la partition
  • cryptsetup luksAddKey /dev/hda7 : ajoute une clé
  • cryptsetup luksDump /dev/hda7 : vérifie le status
  • cryptsetup luksOpen /dev/hda7 crypthome : monte le cryptage dans un périphérique
    On peut vérifier la présence de ce périphérique crypté : ls /dev/mapper
  • mkfs.ext4 /dev/mapper/crypthome : formate de la partition
  • mount -t ext3 /dev/mapper/crypthome /mnt/ : monte la partition
Pour monter automatiquement la partition lors du démarrage :
  • Dans le fichier /etc/fstab :
     /dev/mapper/crypthome /home ext4 defaults,errors=remount-ro 0 2
  • Dans le fichier /etc/crypttab :
     crypthome UUID=23a43730-4ce4-4deb-b81d-e8fdcd100397 none luks,timeout=120
  • On peut cr\'eer un syst\\`\null{}eme de fichiers dans un fichier afin d'être "transportable" plus facilement :
    ## Cr\'eation d'un fichier de 40Mo
    dd if=/dev/zero of=/home/partVirt.img bs=1K count=40960

    ## Formatage de la partition
    ##-F force la cr\'eation ; -m 0 pas d'espace r\'eserv\'e pour root
    mkfs -t ext2 -F -m 0 /home/partVirt.img

    ## Monter le syst\\`\null{}eme de fichiers
    mount /home/partVirt.img /mnt -o loop
  • Pour cr\'eer un disque virtuel à partir d'un fichier
    dd if=/dev/zero of=//home/virtualDD bs=1M count=100
    losetup -fP /home/virtualDD
    losetup -a
    losetup -d /dev/loop0
  • Lorsque Linux monte une partition (via mount ou le fichier /etc/fstab), on peut indiquer des "options" qui influenceront l'usage de la partition par le système.
  • Voici quelques-unes des options de montage d'une partition :
    • defaults : utilise les options par défaut :
       généralement : rw,suid,dev,exec,auto,nouser,async
    • ro monte le système en lecture seule
    • rw monte le système en écriture
    • suid il permet d'utiliser le "setuid bit" d'un fichier
    • nosuid il désactive le "setuid bit" d'un fichier
    • dev
    • exec
    • auto indique que le système de fichiers sera monté au lancement de la commande mount -a
    • user permet à tout utilisateur de monter ce système de fichiers à la demande
    • nouser indique que seul le super-utilisateur root peut monter la partition
    • async
    Linux "surveille" l'accès au fichier en conservant les temps d'accès. Cette surveillance peut entraîner une écriture sur le disque. Certaines de ces options sont notamment à désactiver (si cela ne pose pas de problème de sécurité) pour prolonger la vie des disques SSD :
    • strictatime : enregistre le temps d'accès à chaque fois
    • noatime : désactive l'enregistrement du temps d'accès
    • nodiratime : désactive l'enregistrement du temps d'accès que pour les dossiers
    • relatime : modifie l'accès-temps sous certaines condition optimisant l'écriture sur le disque
    • lazytime : garde dans la mémoire vive les changement de temps d'accès optimisant au maximum l'accès en écriture au disque. L'écriture se fera toutes les 24h ou sous certaines conditions.
  • Voici quelques exemples d'utilisation de ces options
    • Monter une partition NTFS avec pour propriétaire l'utilisateur 1000 (uid) et appartenant au groupe 1002 (gid) :
       mount -t ntfs-3g /dev/sda1 /mnt -o uid=1000,gid=1002
    • Monte une partition NTFS et choisi une permission par défaut de 760 :
       mount -t ntfs-3g /dev/sda1 /mnt -o umask=760
      les commandes fmask et dmask gèrent les droits respectivement pour les fichiers et les dossiers.
    • Monte la partition en lecture seule :
       mount -t ntfs-3g /dev/sda1 /mnt -o ro
    • Interdit l'exécution de fichiers à partir de ce système de fichiers :
       mount -t ext2 /dev/hda1 /mnt/part -o noexec
Le fichier /etc/fstab contient toutes les partitions qui seront montés automatique au démarrage du système ou lors du lancement de la commande mount -a

Chaque ligne est composées de 6 champs :
  • 1 champ : l'identifiant de la partition : çà peut être le chemin à la partition (ex: /dev/sda1) ou l'uuid du disque (on commence la ligne par UUID=xxxx-xxx-...)
  • 2 champ : indique le dossier de montage de la partition
  • 3 champ : indique le type du système de fichiers
  • 4 champ : indique les options de montage du système de fichiers
  • 5 champ : indique si oui (1) ou non (0) le système de fichiers subit une sauvegarde par la commande dump
  • 6 champ : indique le comportement de la commande fsck au démarrage. Avec la valeur 0, la partition ne sera pas vérifiée. Avec une valeur différente de zéro, elle sera vérifiée et cette valeur indique l'ordre de vérification : mettre 1 pour la partition racine et 2 pour les autres.
Voici un exemple d'une telle ligne :
 /dev/sda9 /home ext3 defaults 0 2
Sous Debian, le fichier /etc/mtab garde en mémoire les partitions montées dans le système.
Pour démonter le système de fichiers /dev/sda1
 umount /dev/sda1

Démonter tous les systèmes de fichiers du périphérique /dev/sda
 umount /dev/sda*

Pour forcer un disque dur à être démonté :
 umount /dev/sdb1 -f -l

Si une partition ne veut pas être démonter, rechercher les processus utilisant cette partitin :
  • recherche les fichiers utilisés : lsof | grep /dev/sda1
Voici quelques commandes liées au système de fichiers ISO-9660 (lié aux fichier .iso)
  • Vérifie que le système prend en charge ce système de fichiers :
     modprobe isofs
  • Monter un système de fichiers iso-9660 :
     mount -t iso9660 /dev/cdrom /mnt -o loop
Voici quelques commandes liées au système de fichiers NTFS
  • Vérification que le système prend en compte le système NTFS :
     modprobe ntfs | grep ntfs
  • Pour installer la prise en charge du NTFS dans le système :
     apt-get install ntfs-3g
  • Formate rapidement une partition :
     mkntfs -f /dev/sda1
  • Modifie la label :
     mkntfs -L nouveauLabel /dev/sda1
  • Recherche les fichiers effacés :
     ntfsundelete /dev/sda1
  • Il est possible de faire le clone d'une partition ntfs à l'aide de la commande ntfsclone
Voici quelques commandes liées au système de fichiers FAT32
  • Vérification que le système prend en compte FAT32 :
     cat /proc/filesystems | grep vfat
  • Sous débian, installez le package "msdostool" :  apt-get install msdostool
    • choisit la version 32 de fat : mkdosfs -F 32 /dev/sda1
    • vérifie les badblocks et prend "monLabel" pour label : mkdosfs -c -n "monLabel" /dev/sda1
    • créé un système de fichiers de 100 blocks dans le fichier "f.iso" : mkdosfs -C "f.iso" 100
Voici quelques commandes liées au système de fichiers Extended :
  • e2label : modifie le label du système de fichiers.
  • tune2fs : gère les options du système de fichiers.
    • définit le nombre de fois que le système sera monté avant le prochain contrôle :
       tune2fs -c 10 /dev/sda1
      On désactive le contrôle (déconseillé) par : tune2fs -c 0 /dev/sda1
    • définit le temps écoulé maximum entre deux contrôles :
      Deux mois : tune2fs -i 2m /dev/sda1
      Trois semaines : tune2fs -i 3w /dev/sda1
    • modifie le comportement du système face à une erreur lors d'un contrôle :
      remonte le système en lecture seule :  tune2fs -e remount-ro /dev/sda1
      crée un "kernel panic" :  tune2fs -e panic /dev/sda1
    • Modifie le UUID d'une partition :
      affecte un nouvel uuid : tune2fs -U "c1b9d5a2-f162-11cf-9ece-0020afc76f16"
      efface l'uuid : tune2fs -U clear
      choisit un uuid aléatoire : tune2fs -U random
    • Réserve 5% de la partition au super-utilisateur : tune2fs -m 5 /dev/sda1
Test un système de fichiers :
  • répare le maximum d'erreurs sans intervention de l'utilisateur : mkfs.ext4 -p /dev/sda1
  • répond "yes" à toutes les questions mkfs.ext4 -y /dev/sda1
  • avec la recherche des badblocks : mkfs.ext4 -c -c /dev/sda1
Création du système de fichiers d'une partition :
  • Un système ext4 : mkfs.ext4 /dev/sda1
  • Un système FAT32 avec le label "monLabel" : mkfs.vfat -L "monLabel" /dev/sda1
La Master Boot Record (MBR) contient la table des partitions primaires. Elle occupe les 512 premiers octets de tout disque :
  • Sauvegarde la MBR dans un fichier :
     dd if=/dev/sda of=/root/sauv.mbr bs=512 count=1
  • Efface entièrement la MBR : dd if=/dev/zero of=/dev/hda bs=512 count=1
Connaitre tous les périphériques de blocs :
 fdisk -l
Modifier les partitions du disque "/dev/sda" :
 fdisk /dev/sda
Recherche tous les fichiers ouverts appartenant au dossier "tmp" et ses sous dossiers :
 lsof +D /tmp
Vérifie une partition en recherchant les secteurs défectuers (badblock) et réorganise les dossiers :
 fsck.ext4 -cDfty -C 0 /dev/sda1
  • Connaitre l'espace utilisé et libre de chaque dossier : df
  • Afficher l'espace utilisé et libre de chaque dossier "humainement" lisible :  df -h
  • Connaitre le nombre de fichiers d'une système de fichiers : df -i
La commande cpio permet de gérer des archives de fichiers :
  • Crée une archive "a.cpio" des fichiers du dossier courant :
     find /home/aGarder -depth -print | cpio -oaV -O a.cpio
  • Extrait une archive sans conserver les chemins absolues des fichiers :
     cpio -idv --no-absolute-filename < a.cpio
Comment aligner des partitions lors de leur création avec parted :
 parted -a optimal /dev/sdc mkpart primary 3000MB 100
La commande du permet de connaitre la taille occupée par des fichiers :
  • Pour connaitre la taille du dossier courant du -csh *
  • Pour connaitre la taille du dossier courant et affiche tous les élèments du dossier courant et en affiche la taille :
     du -hd1
  • Connaitre la taille des fichiers d'une partition sortir du disque physique (sans suivre les liens) :
     du -cuhx *
  • Affiche aussi la taille des fichiers cachés :
     du -hs $(ls -A)
Liste tous les disques par leur uuid :
 ls -l /dev/disk/by-uuid/
Affiche des informations sur toutes les "block devices" de l'ordinateur
 blkid

Système : périphériques

?
Pour ne pas tenir compte de l'évènement LID (capot des portable)

Recherche l'identifiant système du LID

cat /proc/bus/input/devices

Eteindre

echo PNP0C0D:00 | tee /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0D:00driver/unbind
Lorsque le message evbug apparait trop dans syslog :
 echo 'blacklist evbug' >> /etc/modprobe.d/disable-evbug.conf
Udev est un gestionnaire de périphère installé dans le noyau Linux depuis la version 2.6. Il permet de peupler le répertoire /dev
  • Pour connaitre les évènements de udev :
     udevadm monitor --env
  • Le script suivant permet au système de vérifier l'insertion d'un média de type "clé-usb" et de le monter dans un répertoire de /media
    (extrait de https://unix.stackexchange.com/questions/44454/how-to-mount-removable-media-in-media-label-automatically-when-inserted-with)
    ### Contenu du fichier /etc/udev/rules.d/85-storage-automount.rules
    ENV{DEVTYPE}=="partition", RUN+="/lib/udev/storage-automount.sh", ENV{REMOVE_CMD}="/lib/udev/storage-autounmount.sh"

    ### Contenu du fichier /lib/udev/storage-automount.sh
    #!/bin/sh

    # set the mountpoint name according to partition or device name
    mount_point=$ID_FS_LABEL
    if [ -z $mount_point ]; then
    mount_point=${DEVNAME##*/}
    fi

    # if a plugdev group exist, retrieve it's gid set & it as owner of mountpoint
    plugdev_gid="$(grep plugdev /etc/group|cut -f3 -d:)"
    if [ -z $plugdev_gid ]; then
    gid=''
    else
    chown root:plugdev $mount_point
    gid=",gid=$plugdev_gid"
    fi

    # create the mountpoint directory in /media/ (if not empty)
    if [ -n $mount_point ]; then
    mkdir -p /media/$mount_point
    /bin/mount -v -t $ID_FS_TYPE -o rw,nosuid,nodev,relatime,uid=1000,gid=33,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisk2 $DEVNAME /media/$mount_point
    fi

    ### Contenu du fichier /lib/udev/storage-autounmount.sh
    #!/bin/sh

    # set the mountpoint name according to partition or device name
    mount_point=$ID_FS_LABEL
    if [ -z $mount_point ]; then
    mount_point=${DEVNAME##*/}
    fi

    # remove the mountpoint directory from /media/ (if not empty)
    if [ -n $mount_point ]; then
    umount -l /media/$mount_point
    rm -R /media/$mount_point
    fi
    Pour que udev puisse monter une partition, il faut dans le fichier /lib/systemd/system/udev.service, il faut modifier le fichier :
    [Service]
    MountFlags=shared
    Quelques explications :
    • La commande udevadm monitor --env montre la présence d'un évènement de type "partition"
    • Lors de l'apparition de l'évènement "partition", le script storage-automount.sh sera exécuté
    • On rajoute le script storage-autounmount.sh lors du démontage de la partition
    • Le package udisks2 sera utilisé pour le montage et démontage de la partition. Le passage des droits passera par polkit et surtout les deux actions org.freedsktop.udisk2.filesystem-mount-system et org.freedesktop.udisks2.filesystem-unmount-others que vous trouverez dans le fichier /usr/share/polkit-1/actions/org.freedesktop.udisk2.policy (certaines des "default action" doivent mises à "yes")
Pour connaître le driver d'un périphérique réseau :
 lshw -class network
Le "speaker" de la carte mère permet à la carte mère d'émettre un beep.
  • L'usage du speaker passe par l'utilisation du module pcspkr du noyau :
     lsmod | grep sp
  • Pour supprimer , on rajoute un fichier xxx.conf dans le dossier /etc/modprobe.d/ dont le contenu est :
     blacklist pcspkr

Système : interface graphique

La commande xinput permet d'avoir des informations sur les périphériques d'entrée utilisés par le "X server"
  • Pour connaître les périphériques utilisés par Xorg, on saisit la commande :
     xinput list
  • En récupérant le numéro du périphérique utilisée (ici 13), on liste l'ensemble des propriétés du périphérique :
     xinput list-props 13
  • L'option set-prop permet de modifier des paramètres d'usage du périphérique.
    Par exemple, l'option Finger permet de définir la pression des doigts activant les fonctions. Voici la ligne correspondante :
     Synaptics Finger (278): 60, 70, 0
    Pour modifier la valeur, on lance la commande :
     xinput set-prop 13 278 30 50 0
  • Voici le fichier /etc/X11/corg.conf de mon portable Asus :
    Section "Device"
    Identifier "Card0"
    Driver "intel"
    Option "Backlight" "intel_backlight"
    EndSection

    Section "InputClass"
    Identifier "touchpad catchall"
    Driver "synaptics"
    MatchIsTouchpad "on"
    Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0"
    Option "FingerLow" "30"
    Option "FingerHigh" "40"
    EndSection
  • Pour désactiver le bouton "power", éditer le fichier /usr/share/X11/xkb/symbols/inet et modifier la valeur de POWR
Lorsqu'on souhaite qu'un script lancé par l'utilisateur root utilise l'affichage du "X server", on doit indiquer l'accès au serveur par les deux lignes suivants :
export DISPLAY=:0
export XAUTHORITY=/home/user/.Xauthority
Autre code pour pouvoir lancer startx depuis une console, il faut mettre dans le fichier /etc/X11/Xwrapper.conf
needs_root_rights=yes
allowed_users=anybody
Puis actualiser le package dpkg-reconfigure xserver-xorg-legacy
Xfce4 est un gestionnaire de fenêtres "léger" pour Linux.
  • Voici quelques commandes liés à l'usage et à la modification des touches de raccourcis :
    • Le fichier se trouve ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
    • Puis, on lance les deux commandes suivantes avec l'utilisateur courant (pas root)
      killall xfconfd && /usr/lib/x86_64-linux-gnu/xfce4/xfconf/xfconfd &
      killall xfsettingsd && xfsettingsd &
    • On peut supprimer le paramétrage des touches par défaut en changeant le nom du fichier
       /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml.bak
  • D'autres choses pour xfce4 (toujours lancer avec l'utilisateur courant :
    • Relancer les paramètres de xfce4 :
       xfdesktop --reload
    • Pour lire la configuration des touches :
       xfconf-query -c xfce4-keyboard-shortcuts -lv

Système : Débian

Voici un exemple de script qui se lancera lors du démarrage du système : ici, il relancera le service udev.
  • On crée le fichier myscript dans le dossier /etc/init.d :
    #! /bin/sh

    ### BEGIN INIT INFO
    # Provides: perso
    # Required-Start: $remote_fs $syslog
    # Required-Stop: $remote_fs $syslog
    # Default-Start: 2 3 4 5
    # Default-Stop:
    ### END INIT INFO

    service udev restart
  • On demande au système d'exécuter le script à chaque démarrage en exécutant l'instruction :
     update-rc.d -f myscript defaults
Pour connaitre le type de votre processeur (amd64, i386, armv6, ...) :
 dpkg --print-architecture
Pour Debian : le système NetworkManager permet de gérer "automatiquement" l'usage des interfaces réseau. Sa configuration passe par le fichier /etc/network/interfaces

Voici quelques exemples de configuration
  • Pour donner une ip statique à l'interface eth0
    iface eth0 inet static
    address 192.168.51.200
    netmask 255.255.255.0
    network 192.168.51.0
    broadcast 192.168.51.255
    gateway 192.168.51.1
    dns-nameservers 41.207.177.1 41.207.160.45
    dns-search pedagogie.local
  • Pour donner une ip par DHCP :
    iface eth1 inet dhcp
  • Pour une carte Wifi :
    iface eth0 inet dhcp
    wireless-essid monPointAcces
    wireless-channel 11
    wireless-mode Ad-hoc
    wireless-nic maMachine
    wireless-key 2345235235
    wireless-keymode restricted
    Il faut au préalable installer le package wireless-tools
  • Il est possible d'exécuter un script avant et/ou après qu'une carte soit montée :
    iface eth1 inet dhcp

    pre-up /root/check-mac-address.sh eth1 AA:BB:CC:DD:EE:FF
    post-up /usr/sbin/ethtool -s eth1 wol g
Pour Debian, la commande apt-cache permet d'avoir des informations sur les packages installés sur le système et sur les packages actuellement disponibles dans les dépots :
  • Pour rechercher un package ou un mot clé dans l'ensemble des dépots :
     apt-cache search motClef
  • Pour connaitre les dépendances du package samba-common :
     apt-cache depends samba-common
  • La commande suivant présent tous les dépôts et leur priorité dans leur utilisation pour choisir un package :
     apt-cache policy
  • Pour connaitre la version d'un package installé sur le système et/ou la version disponible sur le seruveur :
     apt-cache policy samba-common
  • Affiche les différentes versions d'un package disponibles sur les dépots :
     apt-cache madison samba
  • Pour connaitre des informations sur le package samba
     apt-cache showpkg samba
  • Pour connaitre l'ensemble des packages disponibles sur le système :
     apt-cache pkgnames
Pour Debian, la gestion des packages passe par le système apt

Les serveurs sur internet centralisant les dépots s'appelle des dépôt. On définit les dépots utilisés par un système dans le fichier /etc/apt/source.list
Chaque ligne est de la forme :
 deb http://ftp.fr.debian.org/debian/ jessie main contrib
Pour ce dépot, le système ira dans le dossier http://ftp.fr.debian.org/debian/dists/jessie/main/ chercher le fichier Contents-xxx.gzxxx est l'architecture de votre ordinateur qui contient la description de l'ensemble des packages disponibles pour ce dépot.

Le dossier /var/cache/apt contient des sauvegardes des packages dernièrement téléchargés et installés. Ce dossier peut être effacé pour récupérer de la place sur le système.

Une fois mis à jour par la commande apt-get update, le dossier /var/lib/apt/lists contiendra un fichier par dépot qui est le contenu du fichier Contents-xxx.gz

En cas de problèmes dans l'utilisation des paquets (notamment avec un téléchargement partiel d'une archive), on efface tout le cache :
rm /var/lib/apt/lists/*
rm /var/lib/apt/lists/partial/*
rm /var/cache/apt/archives/*
rm /var/cache/apt/archives/partial/*
Pour Debian, la comande apt-get s'occupe de la gestion des packets sur le système :
  • La commande apt-get update cherche tous les dépots dans le fichier /etc/apt/source.list et met à jour la liste des packages disponibles pour chaque dépot.
  • Pour installer le package pack, on exécute :
     apt-get install pack
  • Pour supprimer un package deux manières principalement :
    • apt-get remove pack : retire le package du système mais conserve certains fichiers comme les fichiers de configuration ou les fichiers de données liés au package
    • apt-get purge pack : retire le package du système et efface tous les fichiers liés au package.
  • Pour effacer entièrement un package du système :
     apt-get autoremove --purge mysql-server
  • Pour mettre l'ensemble des packages du système à jour :
     apt-get update && apt-get upgrade
  • Pour télécharger la source d'un package (pour le compiler manuellement par exemple) :
     apt-get source pack
  • Verifie l'intégrité des dépendances entre les packages du système :
     apt-get check
  • Pour vider le cache du système apt (notamment le dossier /var/cache/apt) :
     apt-get clean
  • Pour éviter d'installer des packages de documentations :
     apt-get --no-install-recommends install xxxx
    Pöur automatiser ce choix, on saisit dans un fichier /etc/apt/apt.conf.d/90-perso.conf, le code suivante :
    APT::Install-Suggests "0";
    APT::Install-Recommends "0";
  • Pour limiter le débit utilisé pour l'installation d'un package :
     apt-get install -o Acquire::http::Dl-Limit=50 wxmaxima
  • Exemple pour débugger les échanges HTTP :
     apt-get -o Debug::Acquire::http=true update
Sous Debian, voici comment installer un package qui n'est pas de sa distribution. Prenons l'exemple d'une distribution sous Jessie qui souhaite installer un package de Stretch
  • On ajoute la ligne suivante dans le fichier /etc/apt/sources.list :
     deb http://ftp.fr.debian.org/debian stretch main contrib non-free
  • Pour qu'on n'installe des packages de Scretch seulement lorsqu'on le souhaite, on va baisser la priorité de ce dépot pour qu'il ne soit pas choisi par défaut. On crée le fichier /etc/apt/preference.d/90-stretch.pref avec le contenu :
    Package: *
    Pin: release n=stretch
    Pin-Priority: 50
  • On met le système apt à jour : apt-get update
  • On vérifie que les packages du dépot Stretch a une priorité inférieure à ceux du dépot de Jessie. Pour cela, on lance la commande :
     apt-cache policy emacs
    qui doit afficher le résultat suivant :
    leafpad:
    Installé : (aucun)
    Candidat : 0.8.18.1-4
    Table de version :
    0.8.18.1-5 0
    50 http://ftp.fr.debian.org/debian/ stretch/main amd64 Packages
    0.8.18.1-4 0
    500 http://ftp.fr.debian.org/debian/ jessie/main amd64 Packages
    On remarque la priorit\'e de 50 sur le dépot stretch
  • Maintenant, si on veut installer un package de ce dépot, on lance la commande :
     apt-get install -t stretch leafpad
Sur Debian, pour décompresser un package dans le dossier courant :
 dpkg-deb -x pack.deb ./

Pour connaitre l'ensemble des packages installés sur un ordinateur :
 dpkg --get-selections

Utilisation du bash

La commande set permet de définir ou de détruire des variables du bash

Utiliser toute seule, elle affiche toutes les variables définies dans le bash :
 set
Supposons un fichier contenant la ligne :
 ipAddress=10.78.90.137;10.78.90.149

Voici comment séparer les IP de cette ligne par des espaces :
 =`grep -i ipaddress /opt/ipfile | cut -d'=' -f2 | tr ';' ' ')`
Voici une comande pur supprimer toutes les lignes vides ou les lignes commentées commençant par le caractère # :
 cat main.cf | grep -vE '^( *#|^ *$|^$)' > a.txt
La commande nohup permet de lancer une commande qui restera active même lorsque l'utilisateur ferme sa session.
Voici un exemple d'utilisation :
 nohup foo.sh [...] >& a.log &

Remarquez l'esperluète (&) en fin d'instruction qui permet de reprendre la main sur la ligne de commande avant la fin d'exécution de l'instruction.
Les tubes (ou pipe) permettent de passer le résultat d'une commande comme argument à une autre fonction :
  • Recherche tous les fichiers contenant la séquence "abc" de caractères :
     ls | grep "abc"
  • Affiche le chemin du dossier personnel de l'utilisateur root :
     cat /etc/passwd | grep root | awk -F":" '{print $6}'
Redirection des flux de sorties
  • Redirige la sortie standart (stdout) vers un fichier en écrasant son contenu:
     ls > a.txt

    Redirige la sortie standart (stdout) vers la fin d'un fichier:
     ls >> a.txt
  • Redirige la sortie standard d'erreurs (stderr) vers un fichier
     ls 2> a.txt
  • Redirige la sortie standard (stdin) vers un fichier et la sortie d'erreurs (stderr) vers un autre fichier
     ls > a.txt 2> b.txt
  • Redirige les deux sorties vers un même fichier
    • Pour bash : ls >& a.txt
    • Pour sh (et cron) : ls > a.txt 2>&1
La commande grep permet de chercher des occurences d'une chaine de caractères à l'intérieur de fichiers.

Voici quelques exemples d'utilisation de cette commande :
  • Affiche toutes les lignes comprenant l'occurence "root" :
     grep root /etc/passwd
  • Affiche toutes les lignes comprenant l'occurence "root" sans être sensible à la casse :
     grep -i RoOt /etc/passwd
  • Affiche toutes les lignes ne comprenant pas l'occurence "root" :
     grep -v root /etc/passwd
  • Affiche les numéros de lignes des résultats
     grep -i root /etc/passwd
  • Utilisation des expressions régulières pour chercher dans un fichier :
    • cherche "root" en début de fichier : grep -e "^root" /etc/passwd
    • cherche "root" en fin de fichier : grep -e "root$" /etc/passwd
Efface tous les retours à la ligne dans le fichier a.txt et écrit le résultat dans b.txt
 tr -d "\string\n" < a.txt > b.txt
Récupère la seule ligne du fichier /etc/passwd contenant le mot root :
 sed /root/\!d /etc/passwd

Récupère le contenu du fichier a.txt, rajoute une virgule à la fin de chaque ligne et écrit le résultat dans le fichier b.txt :
 sed 's/\$/,/g' < a.txt > b.txt

Bureautique : image

Bureautique : audio

Bureautique : video

Les commandes ffmepg (obsolète) et avconv permettent le traitement de fichier vidéo en ligne de commande.

Voici quelques utilisations de ces commandes :
  • Extraire la bande son d'une vidéo
     ffmpeg -i "$entree" -acodec libmp3lame "${sortie}.mp3"
    ou
    a=`ls *.mp4`
    for i in ${a[@]}; do
    ffmpeg -i ${i} -codec:a libmp3lame -qscale:a 2 ${i}.mp3
    done
  • Pour prendre la vidéo d'un fichier et l'audio d'un autre pour créer un unique fichier :
    ffmpeg -i youtube_raspberry.mp4 -i raspberry.mp3 -map 0:v -map 1:a -c:v copy -c:a aac viaeduc3-raspberry.mp4
  • Voici deux commandes pour créer des vidéos "optimisées" en taille pour l'inclusion dans une page web :
    /root/bin/ffmpeg -i ${entree} -vcodec libx264 -profile:v baseline -level 3.0 -r ${fps} -crf 30 -vf scale=-1:360 -pix_fmt yuv420p -acodec aac -ab 96k -movflags faststart -y ${sortie}.mp4

    /root/bin/ffmpeg -i ${entree} -c:v libvpx-vp9 -qmax 40 -qmin 30 -b:v 1M -r ${fps} -pix_fmt yuv420p -g 10 -c:a libvorbis -q:a 4 -f webm -vf scale=-1:360 -movflags +faststart -y ${sortie}.webm

Tex et Metapost

?
Pour modifier le nombre de lignes dans l'affichage de Putty / ssh / terminal
export TERM=xterm
stty rows 36 cols 150
Connaitre le nombre de connexion ouverte sur le serveur
netstat -tulpn
netstat -ntu
?
Chercher pour hack https://www.exploit-db.com/ et kali linux
?
$entete=preg_replace('/(?entete());
TEXMFLOCAL = /home/_data/myLocaltexmf
TEXMFVAR = /home/_data/myLocaltexmf
openout_any=p
openin_any=p
shell_escape=f
?
Mise à jour de l'heure
apt-get install ntp
ntpd -qp fr.pool.ntp.org
?
ubuntu core
Pour utiliser apt-get
>> snap install classic --devmode --edge
>> classic
?
OrangePi zero / connexion serial

* Connexion serial
Sur l'orangepi/zero, brancher le usb/serial et lancé "PUTTY" en sérial avec
/dev/ttyUSB0 et 115200

* Pour la prise de controle à distance :
x11vnc -auth /var/lib/xdm/authdir/authfiles/A\:0... -display :0
Le fichier est pour la prise de controle du gestionnaire d'authentification
et sur le client lancé
xvncviewer
From php.net

function remove_accent($str)
{
$a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'Ā', 'ā', 'Ă', 'ă', 'Ą', 'ą', 'Ć', 'ć', 'Ĉ', 'ĉ', 'Ċ', 'ċ', 'Č', 'č', 'Ď', 'ď', 'Đ', 'đ', 'Ē', 'ē', 'Ĕ', 'ĕ', 'Ė', 'ė', 'Ę', 'ę', 'Ě', 'ě', 'Ĝ', 'ĝ', 'Ğ', 'ğ', 'Ġ', 'ġ', 'Ģ', 'ģ', 'Ĥ', 'ĥ', 'Ħ', 'ħ', 'Ĩ', 'ĩ', 'Ī', 'ī', 'Ĭ', 'ĭ', 'Į', 'į', 'İ', 'ı', 'IJ', 'ij', 'Ĵ', 'ĵ', 'Ķ', 'ķ', 'Ĺ', 'ĺ', 'Ļ', 'ļ', 'Ľ', 'ľ', 'Ŀ', 'ŀ', 'Ł', 'ł', 'Ń', 'ń', 'Ņ', 'ņ', 'Ň', 'ň', 'ʼn', 'Ō', 'ō', 'Ŏ', 'ŏ', 'Ő', 'ő', 'Œ', 'œ', 'Ŕ', 'ŕ', 'Ŗ', 'ŗ', 'Ř', 'ř', 'Ś', 'ś', 'Ŝ', 'ŝ', 'Ş', 'ş', 'Š', 'š', 'Ţ', 'ţ', 'Ť', 'ť', 'Ŧ', 'ŧ', 'Ũ', 'ũ', 'Ū', 'ū', 'Ŭ', 'ŭ', 'Ů', 'ů', 'Ű', 'ű', 'Ų', 'ų', 'Ŵ', 'ŵ', 'Ŷ', 'ŷ', 'Ÿ', 'Ź', 'ź', 'Ż', 'ż', 'Ž', 'ž', 'ſ', 'ƒ', 'Ơ', 'ơ', 'Ư', 'ư', 'Ǎ', 'ǎ', 'Ǐ', 'ǐ', 'Ǒ', 'ǒ', 'Ǔ', 'ǔ', 'Ǖ', 'ǖ', 'Ǘ', 'ǘ', 'Ǚ', 'ǚ', 'Ǜ', 'ǜ', 'Ǻ', 'ǻ', 'Ǽ', 'ǽ', 'Ǿ', 'ǿ');
$b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
return str_replace($a, $b, $str);
}

function post_slug($str)
{
return strtolower(preg_replace(array('/[^a-zA-Z0-9 -]/', '/[ -]+/', '/^-|-$/'),
array('', '-', ''), remove_accent($str)));
}
?>
La commande pdftk permet de gérer certains aspects des fichiers ".pdf"
  • Par défaut un fichier pdf est compressé, pour mieux explorer sa structure, il faut au préalable le décompresser :
    • Décompresser le fichier : pdftk a.pdf output b.pdf uncompress
    • Lire le fichier : vi b.pdf
Voici pour modifier une image bitmap (bmp, png, jpeg) et la transformer en fichier metapost.
Voici la procédure :
  • On vectorialise le fichier avec le logiciel Inkscape et on enregistre le fichier au format ".eps"
  • On convertit l'image en un fichier metapost :
     pstoedit -f mpost a.eps a.mp
Pour déplacer le TEXMFLOCAL :
  • On crée le fichier /etc/texmf/texmf.d/90_perso.cnf :
    TEXMFLOCAL = /home/_data/myLocaltexmf
    TEXMFVAR = /home/_data/myLocaltexmf
  • Puis on lance les deux commandes
    update-texmf
    mktexlsr
    La dernière commande à créer des fichiers. On ajuste les droits des fichiers "ls-R" :
     chmod 755 /home/_data/myLocaltexmf/ls-R
  • Sur Ubuntu, pour qu'il prenne en charge mon dossier de fonts, j'ai été obligé de faire
    updmap-sys --enable Map=psfonts.map
    updmap-sys
Sous Linux, le package gérant LaTeX est texlive. Mais son installation complète prend un peu plus de 3Go.
Si vous savez rajouter manuellement les packages LaTeX à la main, vous pouvez optez pour l'installation minimale de LaTeX :
apt-get --no-install-recommends install texlive-{base,generic-recommended,,latex-base,latex-recommended}
ou alors
apt-get --no-install-recommends install texlive-{base,bibtex-extra,generic-recommended,fonts-recommended,font-utils,latex-base,latex-recommended,pictures} texlive-lang-french

Réseau

La commande host permet d'avoir des informations sur un nom de domaine :
  • Avoir quelques informations :
     host yahoo.fr
  • Avoir plus d'informations sur l'enregistrement DNS du nom de domaine :
     host -a yahoo.fr
La commande nslookup permet de demander une résolution de noms :
  • Pour connaitre l'adresse ip du site yahoo.fr, on lance la commande :
     nslookup yahoo.fr
  • Pour effectuer la résolution de nom en utilisant un serveur DNS particulier (ici 8.8.8.8) :
     nslookup yahoo.fr 8.8.8.8
La commande wget est un outil de téléchargement. Voici quelques exemples simples d'utilisation :
  • Télécharge le fichier a.iso
     wget http://monsite.fr/a.iso
    Reprend un téléchargement qui a été interrompu :
     wget -c http://monsite.fr/a.iso
  • Limite la vitesse de téléchargement :
     wget --limit-rate=10k http://monsite.fr/a.iso
  • Impose le nombre de reconnexion avant d'abandonner le téléchargement :
     wget --read-timeout=50 --tries=5000 http://monsite.fr/a.iso
  • Va chercher les URL dans chaque ligne d'un fichier pour les télécharger un à un :
     wget -i liste.url
  • Lors du téléchargement depuis un site https, pour ne pas vérifier l'authenticité du certificat :
     wget --no-check-certificate http://chingatome/index.php
  • Lorsque les paramètres passés dans une url ont des caractères spéciaux, il faut entourer la chaine de caractères de guillemets :
      wget "http://chingatome.net/index.php?p=t%0AC"
Voici quelques combinaisons d'options pour aspirer des sites :
  • Télécharge le fichier index.html et suit tous les liens de ce fichiers :
     wget -r http://monsite.fr/index.html
  • Télécharge le fichier index.html et suivra seulement les liens sous l'adresse http://monsite.fr/doc
     wget -np -r http://monsite.fr/doc/index.html
  • Télécharge le fichier index.html et téléchargera seulement les liens présent dans ce fichier mais pas les suivants : on parlera de récursivité de niveau 1
     wget -r -l 1 http://monsite.fr/index.html
  • Pour un site demandant une authentification, il faut d'abord s'authentifier sur le site et récupérer les cookies de celui-ci. L'instruction '-R "*logout*"' evite de télécharger la page de déconnexion :
     wget -k -r -E -l2 -R "*logout*" --load-cookies=./cookies.txt "http://monsite.fr/doc"
La commande iwevent permet de visualiser les actions de connection, déconnexion, recherche de réseau effectuées par les cartes réseaux du système.
La commande iwlist fait partie du package iw. Elle permet d'afficher des informations sur le réseau wifi :
  • Pour scanner les réseaux disponibles autour de la carte réseau et avoir des informations sur eux :
     iwlist wlan0 scanning
  • Affiche les modes d'authentifications disponibles pour l'interface wlan0 :
     iwlist wlan0 auth
  • Affiche les fréquences disponibles pour l'interface wlan0 :
     iwlist wlan0 channel
La commande iwconfig fait partie du package iw. Un appel sans argument à cette commande affiche des informations sur la carte.
Voici un exemple d'affichage :
wlan0 IEEE 802.11g ESSID:"ADM"
Mode:Managed Frequency:2.462 GHz Access Point: 00:C0:CA:19:79:77
Bit Rate=1 Mb/s Tx-Powe27 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:1111-1111-111-111-1111-1111-11
Power Management:off
Link Quality=70/70 Signal level=-32 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
On remarquera les informations suivantes :
  • ESSID : nom du point d'accès auquel on est connecté
  • Bit Rate=1 Mb/s Tx-Powe27 dBm : vitesse de connexion et puissance du signal
  • Mode Managed : une carte wifi peut être initialisée dans les différents états :
    • Managed : l'interface est alors un client se connectant à des points d'accès.
    • Ad-Hoc : ce mode permet à deux interfaces à se connecter entre elles directement sans l'intervention d'un point d'accès.
    • Master : l'interface joue le rôle d'un point d'accès.
    • Secondary : l'interface joue le rôle d'un autre point d'acc\'es assujeti à un premier.
    • Repeater : l'interface r\'ep\`ete les signaux pour améliorer la portée du signal.
    • Monitor : l'interface ne peut que recevoir les paquets {\it(utilis\'e poru l'analyse d'un r\'eseau)}.
    On modifie le mode de la carte wifi par la commande suivante :
     iwconfig wlan0 mode Managed
La commande ifconfig permet de configurer les interfaces réseaux de l'ordinateur mais ce n'est pas une commande de bas-niveau. La commande correspondante est ip.

Voici quelques utilisations générale de cette commande :
  • Affiche seulement les interfaces activées :
     ifconfig
  • Affiche toutes les interfaces du système :
     ifconfig -a
  • Affiche les informtions relatives seulement à l'interface eth0
     ifconfig eth0
Voici les utilisations de cette commande pour configurer une interface :
  • On démonte et remonte une interface dans le système en utilisant respectivement les commandes :
     ifconfig eth0 down et ifconfig eth0 up
  • Pour changer l'adresse ip de l'interface eth0 et lui affecter un masque de réseau :
     ifconfig eth0 192.168.50.1 netmask 255.255.255.0
  • Pour modifier l'adresse mac de l'interface eth0 :
     ifconfig eth0 hw ether 00:79:48:BA:AD:31
  • La métrique d'une carte permet de choisir une interface lorsqu'un paquet peut être routé de plusieurs manières et le mtu (Maximum Transfert Unit) est la taille d'une trame :
     ifconfig eth0 metric 20 mtu 1500
  • Pour mettre l'interface en mode "promiscuous" : la carte écoutera alors tous les paquets même ceux qui ne lui sont pas destinés :
     ifconfig eth0 promisc
    et pour désactiver : ifconfig eth0 promisc

Réseau avancé

Problème de déconnection Wifi :
 wlx0aabbccddeeff: aborting authentication with .. by local choice (Reason: 3=DEAUTH_LEAVING)
lorsque systemd choisit un nom de carte réseau trop long par exemple wlan0aabbccddeeff.
Pour inhiber ce principe faire :
 ln -s /dev/null /etc/systemd/network/99-default.link
Pour offrir un environnement sécuriser à un utilisateur via ssh, j'utilise la procédure suivante :
  • Les lignes suivantes, placées à la fin du fichier /etc/ssh/sshd_config permettent de "chrooté" tout log d'utilisateur du groupe "groupUtilisateurs"
    Match Group groupUtilisateurs
    ChrootDirectory /home/utilisateurs
    X11Forwarding no
    AllowTcpForwarding no
  • le package "jailkit" qui offre des outils pour créer des chroot dir et des "shell bridé.


    Ici, je ne me sers que des outils que ce package offre pour créer un "chroot dir" sur mesure.

    Voici la procédure d'installation :
    • Télécharger la source sur le site https://olivier.sessink.nl/jailkit/
    • Compiler la source et créer un fichier ".deb" en lançant la commande :
       ./debian/rules binary
      Puis, on installe le package Debian
    • Puis, on finit de peupler la racine de notre chroot à l'aide de la commande suivante :
       jk-init -v -j /home/utilisateurs limitedshell basicshell rsync scp
      Seront placées seulement les commandes minimales d'un bash et la possibilité de travailler avec rsync

      Remarque: dans le fichier "/etc/jailkit/jk_init.ini", j'ai rajouté la device "/dev/null" afin que la commande scp marche
La commande de bas niveau pour contrôler les cartes réseaux sous Linux est la commande ip.
  • Voici les commandes utilisées pour configurer à minima une carte réseau :
    • on definit une adresse loopback :
       ip route add 127.0.0.0/8 dev lo scope link
    • Monte la carte reseau
       ip link set eth0 up
    • Affecter une adresse ip et un masque sous reseau
       ip addr add 192.168.0.100/24 dev eth0
    • Ajoute une route pour le reseau local
       ip route add 192.168.0.0/24 dev eth0
    • Ajoute une route vers la passerelle
       ip route add default via 192.168.0.254
    Puis définir manuellement le fichier /etc/resolv.conf avec le contenu :
     nameserver 8.8.8.8
  • Voici une commande pour vider la table arp du système :
     ip -s -s neigh flush all
Pour connaitre les personnes connectés sur le port 80 :
netstat -pant | grep :80 | awk '{ print $5}' | cut -d: -f1 | \
sort | uniq -c | sort -n
Voici quelques commmandes de la table de routage :
  • Pour effacer une entrée dans la table de routage :
     route del -net 0.0.0.0 gw 192.168.178.1 netmask 0.0.0.0 dev eth0
Le logiciel wireshark permet de capturer des trames ip du noyau.

Voici quelques configurations de capture :
  • Filtrage par : maceth.addr==18:a6:f7:a6:17:14
En cas de réseau avec répétiteur, voila comment connnaitre l'adresse mac du point d'accès auquel on est connecté
iw wlan0 link
un script pyton pour tester tous les hotes d'un réseau
#!/usr/bin/env python

import os
import subprocess
import re
import threading

regex = re.compile(r"(?P\d+) received")

class Ping(threading.Thread):

def __init__(self, hostname):
threading.Thread.__init__(self)
self.hostname = hostname

def run(self):
p = subprocess.Popen(["ping", "-c1", "-w100", self.hostname], stdout=subprocess.PIPE).stdout.read()
r = regex.search(p.decode())
try:
if(r.group("received") == "1"):
print("L'adresse %s existe!" % self.hostname)
except:
pass

for i in range(254):
hostname = "192.168.0.%i" % (i+1)
background = Ping(hostname)
background.start()
Sous Windows XP, pour vider le cache DNS :
 ipconfig flushdns
Pour effacer le cache du squid :
  • squid -k shutdown : éteint le serveur
  • rm -rf /home/squid : efface le contenu du dossier du cache
  • squid -z : relance la création du cache
Pour controler l'état de squid :
  • squid -k parse
  • squid -k check
  • Pour suivre l'accès au serveur squid :
     tail -f /var/log/squid/access.log | awk '{print $3 " " $4 " " $7}'
La commande lsof permet de connaitre tous les fichiers utilisés ou ouvert dans le système :
  • Sans oublier que même les sockets ouverts dans un système se fait via des fichiers (/proc/fd), l'option -i4 permet de ne sélectionner que les connexion ouverte en ipv4 :
     lsof +M -i4
La commande nmap est un scanner de port. IL permet de tester l'ouverture ou la fermeture d'un port sur une machine.

Voici quelques exemples d'utilisation de cette commadne :
  • nmap -sP 192.168.51.0/24 : teste la présence de machine allumé dans le réseau 192.168.51.0/24.
  • nmap -sS 192.168.51.1 : teste tous les ports TCP sur la machine 192.168.51.1.
  • nmap -sU 192.168.51.1 : teste tous les ports TCP?UDP sur la machine 192.168.51.1.
  • nmap -p 1-5000 192.168.51.1 : teste les ports de $1$ \`a $5000$ sur la machine 192.168.51.1
  • nmap -T Aggressive -A -v 127.0.0.1 -p 1-5000 : methode de scan agressive pour tester l'ouverture de port et le programme à l'écoute.
  • Pour tester si un serveur ntp peut être attaqué par une attaque NTP par amplification.
     ntpdc -n -c monlist 95.142.161.42 or ntpq -c rv 10.8.0.1
  • Pour mettre à jour manuellement un client :
     ntpdate -s 10.0.0.4
Lorsqu'on utilise un proxy, la table de NAT (Netword Address Translation) est maintenu pour que le suivi des packets entre le LAN et le WAN. Le contenue de cette table est disponible via l'instruction :
 cat /proc/net/nf_conntrack

Voici l'exemple d'une de ses lignes :
ipv4 2 tcp 6 4316 ESTABLISHED src=10.0.2.115 dst=193.194.74.19 sport=40318 dport=61661 packets=8 bytes=420 src=193.194.74.19 dst=192.168.0.253 sport=61661 dport=40318 packets=1 bytes=40 [ASSURED] mark=0 zone=0 use=2
Chaque ligne de cette table est composée de 22 champs ; Voici quelques éléments important :
  • tcp 6 4316 ESTABLISHED : c'est une connexion tcp qui a le statut "établie", elle restera active 4316 secondes. A la moindre activité de cette connexion, le temps restant sera réinitialisé à la valeur par défaut.
  • src=10.0.2.115 dst=193.194.74.19 sport=40318 dport=80 packets=8 bytes=420 : la connexion a été initialisé par 10.0.2.115 par son port 40318 à destination de 193.194.74.19 sur son port 80.
    La connexion sortante a utilisé 420 octets
  • src=193.194.74.19 dst=192.168.0.253 sport=61661 dport=40318 packets=1 bytes=40 : la destination a répondu à la passerelle 192.168.0.253 sur son port 40318.
    La connexion entrante a utilisée 40 octets.
  • mark=0 : permet de savoir si la connexion est marquée.
Ainsi, pour le routage la passerelle retient la correspondance :
 (10.0.2.115,40318) <---> (192.168.0.253,40318)
qui lui permettra de faire suivre les packets à destination de 10.0.2.115

Le package conntrack offre l'utilitaire conntrack pour manipuler rapidement cette table :
  • conntrack -F : permet d'effacer la table de routage
  • conntrack -L -s 10.0.2.115 | wc -l : permet de connaitre le nombre de connexion initié par l'hote 10.0.2.115
La commande traceroute permet de connaitre le chemin effectuer par un paquet lors du passage de switch et de router. Son fonctionnement est basé sur le TTL des paquets ICMP dans le protocole IP.
 traceroute woezon.net

A noter également la commande tcptraceroute
Lorsqu'un fichier est présent sur plusieurs serveurs, on peut déterminer le serveur offrant une réponse (communication tcp/ip) la plus rapide à l'aide de la commande :
 netselect -vv ftp.debian.org ftp.fr.debian.org
La commande ethtool permet de paramétrer une carte éthernet.
Voici quelques exemples d'utilisations :
  • Active la lecture des magic-paquets pou un allumage wol (Wake-on-lan) :
     ethtool -s eth0 wol g
  • Pour connaitre les drivers de la carte réseau wlan0 :
     ethtool -i wlan0 | grep driver
La résolution de noms permet de changer un nom d'hote "chingatome.net" en adresse ip 95.142.161.42

Sous Debian, le système nsswitch détermine la manière où cette résolution de noms sera faite. Plus précisement, la ligne suivante du fichier /etc/nsswitch.conf :
 hosts: files dns
Ainsi, le système cherchera d'abord dans le fichier /etc/hosts avant de faire une recherche sur le serveur DNS

Le fichier /etc/hosts permet de définir des résolutions "locale" de noms. Chaque ligne est de la forme :
 adresseIp nomHote alias1 alias2
Voici la ligne donnant le nom "localhost" à la machine locale :
 127.0.0.1 localhost

Le fichier /etc/resolv.conf permet de définir les serveurs DNS utilisés dans le système. Voici un exemple de ce fichier :
nameserver 192.168.51.1
nameserver 41.207.177.17
search admin.lfl
Deux serveurs (192.168.51.1 et 41.207.177.17) sont utilisés et si un nom n'est pas résolu, on lui rajoutera le nom de domaine "admin.lfl" pour une nouvelle recherche.
La table de routage permet de diriger tout paquet émis par l'ordinateur.
La commande route permet d'afficher la table de routage du système. En voici un exemple :
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
default 192.168.50.1 0.0.0.0 UG 1024 0 0 wlan0
192.168.50.0 * 255.255.255.0 U 0 0 0 wlan0
Chaque ligne est composée de 8 champs

Lorsqu'un paquet est émis par l"ordinateur à destination de l'adresse xxx.yyy.zzz.ttt, la table de routage est parcourue du bas vers le haut pour déterminer la "route" utilisée par ce paquet. Dès qu'une ligne est "vérifiée", l'adresse mac de la passerelle sera utilisée pour router le paquet.

Voyons quand une ligne est vérifiée : le masque Genmask (champ 3) est appliqué à l'adresse de destination xxx.yyy.zzz.ttt, si celle-ci est maintenant égale à l'adresse de Destination (champ 1).

Voici quelques autres astuces sur la table de routage :
  • Pour afficher la table route sans résolutions de noms (plus rapide) :
     route -n
  • Pour effacer la table de routage :
     ip route flush table main
  • Pour connaitre le chemin mis en cache vers un hote
     ip route get 8.8.8.8

Iptables

  • Pour afficher les régles iptables avec un numero permettant de les identifier :
     iptables -L --line-numbers
    Pour effacer une regle :
     iptables INPUT -D 3
  • Les modifications effectuées sur iptables s'effacent à cnaque redémarrage. Pour sauvegarder la configuration :
    • Pour enregistrer : iptables-save > a
    • Pour restaurer la configuration venant d'un fichier : iptables-restore < a

Samba

Voici quelques astuces sur la base de registre de Windows lors de l'utilisation de profils:
  • La liste des utilisateurs d'un ordinateur se trouve dans la clé :
    \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
  • Voici des modificiations faites sur l'utilisateur par défaut d'un système Windows afin qu'elle se propage à la création de tout nouveau utilisateur.
    Elles permettent de bloquer pas mal d'action d'un utilisateur :
    • Ouvrir une session d'administrateur
    • Affichez les fichiers cachés et fichiers système en allant dans le panneau de configuration et dans "Options des dossiers"
    • Lancez l'utilitaire regedit
    • Sélectionnez la clé "HKEY_USERS" et actionnez la commande "Fichier -> charger la ruche" et sélectionner le fichier c:\Utilisateurs\nomUtilisateur\NTUSER.DAT
      Saissisez le nom "xxx" pour monter cette ruche
    • Puis lancez la commande "Fichier -> Importer ..." en sélectionnant le fichier code.reg
    • Dans regedit, sélectionnez la clé "HKEY_USERS\xxx" et actionnez la commande "Fichier -> décharger la ruche"
Voici le contenu du fichier code.reg
Windows REgistry Editor Version 5.00

[HKEY_USERS\xxx\Software\Policies\Microsoft\Internet Explorer\Restrictions]
"NoSelectDownloadDir" = dword:00000001
"NoFindFiles" = dword:00000001
"NoBrowserContextMenu" = dword:00000001
"NoBrowserClose" = dword:00000001
"NoNavButtons" = dword:00000001
"NoFileNew" = dword:00000001
"NoFileOpen" = dword:00000001
"NoBrowserSaveAs" = dword:00000001
"NoPrinting" = dword:00000001
"DisableImportExportFavorites" = dword:00000001
"NoViewSource" = dword:00000001
"NoTheaterMode" = dword:00000001
"NoFavorites" = dword:00000001
"RestGoMenu" = dword:00000001
"NoBrowserOptions" = dword:00000001
"NoOpeninNewWnd" = dword:00000001

[HKEY_USERS\xxx\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"DisableLocalMachineRun" = dword:00000001
"DisableLocalMachineRunOnce" = dword:00000001
"DisablePersonalDirChange" = dword:00000001
"DisallowCpl" = dword:00000001
"NoComputersNearMe" = dword:00000001
"NoControlPanel" = dword:00000001
"NoDriveAutoRun" = dword:000000ff
"NoDriveTypeAutorun" = dword:000000ff
"NoHardwareTab" = dword:00000001
"NoPropertiesRecycleBin" = dword:00000001
"NoRunasInstallPrompt" = dword:00000001
"NoSimpleStartMenu" = dword:00000001
"NoSetTaskbar" = dword:00000001
"NoWindowsUpdate" = dword:00000001
"RestrictCpl" = dword:00000001
"StartMenuLogOff"

[HKEY_USERS\xxx\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"Hidden" = dword:00000000
"HideFileExt" = dword:00000001
"HideIcons" = dword:00000000
"SuperHidden" = dword:00000000
"IconsOnly" = dword:00000000
"ShowsSuperHidden" = dword:00000000

[HKEY_USERS\xxx\Software\Microsoft\Windows\CurrentVersion\Policies\Network]
"NoEntireNetwork" = dword:00000001

[HKEY_USERS\xxx\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"Disable Change Password" = dword:00000001
"DisableRegistryTools" = dword:00000001
"DisableTaskMgr" = dword:00000001
"HideLegacyLogonScripts" = -
"HideLogoffScripts" = -
"HideLogonScripts" = -
"Shell" = -

[HKEY_USERS\xxx\Software\Microsoft\Windows NT\CurrentVersion\Winlogon]
"RunLogonScriptSync" = dword:00000000

[HKEY_USERS\xxx\Software\Policies\Microsoft\Windows\Installer]
"AlwaysInstallElevated" = dword:00000001
La commande pdbedit permet de gérer la base de données tdbsam
  • pdbedit -L : affiche tous les utilisateurs Samba
  • pdbedit -v thomas : affiche des informations sur l'utilisateur thomas
  • pdbedt -a newuser : ajoute un nouvel utilisateurSamba.
  • pdbedt -a -m newcomputer : ajoute un nouvel ordinateurSamba.
  • On peut activer, désactiver un compte via cette commande :
    • Pour activer : pdbedit -r -u th.castanet -c "[D]"
    • Pour activer : pdbedit -r -u th.castanet -c "[ ]"
Voici un exemple d'affichage de pdbedit -v guest :
Unix username: guest
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1188356786-600583981-140535690-1002
Primary Group SID: S-1-5-21-1188356786-600583981-140535690-513
Full Name:
Home Directory: \\serveuradmin\guest
HomeDir Drive:
Logon Script:
Profile Path: \\serveuradmin\guest\profile
Domain: SERVEURADMIN
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: lun., 07 juin 2010 22:37:10 CEST
Password can change: lun., 07 juin 2010 22:37:10 CEST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Voici une explication de la ligne Account Flags :
  • "[U]" : le compte est celui d'un utilisateur normal ;
  • "[W]" : le compte est celui d'une machine pour se connecter au domaine ;
  • "[N]" : le mot de passe n'est pas obligatoire ;
  • "[D]" : le compte est d\'esactiv\'e ;
  • "[H]" : un dossier personnel est obligatoire ;
  • "[L]" : le compte se bloque automatiquement (apr\`es expiration du mot de passe) ;
  • "[X]" : le mot de passe n'expire pas ;
Voici quelques commandes liées à Samba :
  • testparam : cet utilitaire permet de tester l'intégrité du fichier smb.conf
  • smbstatus : affiche les connexions actives au serveur
  • nmblookup
    Permet de résoudre des noms Netbios
    • Recherche de l'adresse ip : nmblookup pc-7
    • Recherche du nom Netbios : nmblookup -A 192.168.51.230
    • Pour connaitre le "master browser" : nmblookup -M -
  • findsmb intérroge le voisinage local pour avoir le nom Netbios et l'IP des ordinateurs connectés au groupe de travail.
  • smbtree : permet de lister les partages sur un serveur.
  • La commande net :
    • net SAM SET PWDMUSTCHANGENOW root yes : oblige l'utilisateur root à changer son mot de passe à la prochaine exécution
    • net user INFO c.wilson : pour connaitre les informations de l'utilisateur c.wilson
    • net getlocalsid : affiche le SID du domaine
    • net setlocalsid S-1-5-21-20043454-3907201459-4213964173 : change le SID du docmaine
  • La commande tdbbackup permet de faire la sauvegarde de la base de données tdbsam.
La commande smbclient s'installe sous Debian via la commande :
 apt-get install smbclient

Voici quelques exemples d'utilisation :
  • smbclient -L=//192.168.51.253
    Cette commande permet de lister tous les partages du serveur
  • smbclient -Uroot //192.168.51.2/admin
    Permet de connecter l'utilisateur root au partage admin du serveur.
Une fois loggué à un partage, voici quelques commandes utiles :
  • recursive : active/desactive le parcours de sous-répertoire par une commande
  • prompt : active/désactive la demande de confirmation de copie d'un fichier
  • mput * : copie l'intégralité d'un dossier local (d'où on s'est loggué sous smbclient) dans le dossier courant exploré par smbclient
Pour l'utilisation de Samba comme serveur de domaine :
  • Il faut relier les groupes administrateurs (gid 512), ... avec des groupes définis dans le système Linux. Pour cela, on utilise les commandes suivantes :
    groupadd adminsDomaine
    groupadd usersDomaine
    groupadd invitesDomaine
    groupadd machinesDomaine
    net groupmap add rid=512 ntgroup="Administrateurs du domaine" unixgroup=adminsDomaine
    net groupmap add rid=513 ntgroup="Utilisateurs du domaine" unixgroup=usersDomaine
    net groupmap add rid=514 ntgroup="Invites du domaine" unixgroup=nogroup #desactive ce compte
    net groupmap add rid=515 ntgroup="Machines du domaine" unixgroup=machinesDomaine
    • Pour connaitre les groupes existants, il faut lancer la commande : net groupmap list
  • Pour qu'une machine ait son approbation du domaine, il faut créer un compte machine. On crée d'abord un compte dans le système :
     useradd -d /var/lib/samba -s /bin/false cdi-0$
    Ajoute la machine dans le serveur Samba :
     pdbedit -m -a cdi-0
  • Il est possible de demander à Samba d'ajouter automatiquement des utilisateurs, des machines au compte Samba. Il se chargera de créer leur "homologue" sous Linux et d'en créer le lien.
    Cela s'effectue via les paramètres dans smb.conf :
     add machine script, add user script, add group script
    Et leur pendant pour effacer :
     delete machine script, delete user script, delete group script.
Les partages de Samba peuvent se ranger en deux catégories
  • les partages spéciaux
    Il y a trois partages spéciaux :
    • [global] : les paramètres de configurations définit ici, seront les valeurs par défaut utilisées par les autres partages
    • [homes] : définit les paramètres des dossiers personnels de chaque utilisateur Samba
    • [printers] : définit les paramètres pour le service de partage d'impression
  • les autres partages
    Sont définit à la demande.
Voici un exemple de partage :
[Lecteur Eleve]
 comment = Dossier de partage
 path = /home/lecteurs/eleve/%U
 valid users = @eleve
 force group = eleve
 browseable = yes
 read only = no
 writeable = yes
 wide links = yes
 create mask = 0700
 force create mode = 0700
 inherit owner = yes
 hide dot files = yes
 hide files = /RECYCLER/$RECYCLE.BIN/
Ce lecteur réseau sera accessible via l'adresse \\nomServeur\Lecteur Eleve
Voici quelques uns des paramètres utilisés ci-dessus :
  • path = /home/lecteurs/eleve/%U : définit le dossier linux qui sera pointé par ce partage
  • valid users = @eleve : seul les utilisateurs appartenant au groupe eleve seront autorisés à accéder à ce dossier
  • force group = eleve : toute création de fichier se verra attribuer le groupe eleve
  • browseable = yes : permet à ce partage d'être listé dans l'ensemble des partages délivrés par le serveur Samba
  • read only = no : en lecture seule?
  • writeable = yes : accès en écriture ?
  • wide links = yes : les liens linux seront suivis au cours du parcours de ce partage
  • create mask = 0700 : masque sur les permissions des fichiers lors de leur création
  • force create mode = 0700 : ce paramètre est appliqué après l'application du paramètre create mask et attribue les bits de cette valeur octale dans les permissions du nouveau ficheir.
  • inherit owner = yes : les fichiers créés auront pour propriétaire l'utilisateur courant.
  • hide dot files = yes : cache les fichiers dont le nom commence par un point (fichiers cachés de linux)
  • hide files = /RECYCLER/$RECYCLE.BIN/ : ces fichiers ou dossiers ne seront pas affichés et accessible par les clients
Le fichier smb.conf

La documentation "man smb.conf" fait plus de 8000 lignes, il n'est pas question ici d'être exhaustif, voici quelques paramètres utilisées :
  • Serveur :
    • workgroup = liberte.peda : définit le nombre du groupe de travail ou du domaine utilisé
    • netbios name = serveurpeda : définit le nom netbios de la machine
    • server string = Serveur Liberte : nom de la machine affichée
  • Sécurité :
    • security = domain : avec cette valeur, votre serveur samba se transforme en un controleur de domaines et les machines utilisant le serveur doivent être inclus dans le domaine.
      Le mode user fait fonctionner Samba comme un serveur de fichiers, les machines ne sont pas obligées d'avoir joint le domaine
    • map to guest = Bad User : lorsque l'authentification Samba réussit mais lorsque le système Linux ne trouve pas l'utilisateur lié, le log peut être rejeter ou transférer vers le compte invité
    • guest ok = no : permet d'autoriser la connexion au serveur sans mot de passe. L'utilisateur se voit alors attribuer l'identité définit par le paramèetre "guest account = nobody"
    • encrypt passwords = true : code ou non les mots de passe en mémoire.
    • unix password sync = no : lorsqu'un utilisateur change son mot de passe (Samba), ce paramètre permet de définir si le système Linux essaye de changer ou non le mot de passe de l'utilisateur linux associé.
    • obey pam restrictions = no : demande de suivre la procédure d'authenficiation voulue par PAM (désactivé si encrypt passwords = true). A voir aussi l'incidence sur pam password change = no :
    • dont descend = /proc,/dev,/etc,/lib,/lost+found,/initrd : permet d'interdire le parcours de ces dossiers par les clients Samba. Ils seront montrés comme vide.
    • usershare allow guests = no : les partages des utilisateurs sont-ils accessibles par des clients sans authentification
  • Paramètres globaux :
    • unix extensions = no : pour les clients linux, si ce paramètre est activé sur le serveur et le client, le parcours des liens s'effectuera sans problème.
    • load printers = no : demande au serveur Samba ne pas acter comme serveur d'impression. D'autres options liées : printing = bsd, printcap name = /dev/null, show add printer wizard = no, disable spoolss = yes :
    • debug timestamp = yes : ajoute le timestamp sur chaque log
    • log file = /var/log/samba/log.%m : définit le fichier de log pour chaque utilisateur
    • max log size = 10000 : définit la taille maximale de chaque fichier de log
    • log level = 3 : définit le niveau de verbose des fichiers de log
    • syslog only = no : définit si les logs des serveurs smbd et nmbd se font ou non dans le fichier /var/log/syslog ou dans les fichiers correspondants du dossier /var/log/samba/.
    • syslog = 1 : niveau de verbose pour les messages des serveurs
    • name resolve order = wins host bcast : définit l'ordre par lequel Samba va traduire des noms d'hotes en adresse IP
    • time server = yes : autorise les clients a synchroniser leur horlog
  • Gestion des fichiers :
    • case sensitive = no : les clients window ne sont pas sensibles à la casse et autorisé la sensibilité à la casse peut les empêcher de voir tous les fichiers. Seul les clients linux peuvent avoir un intéret à ce paramètre.
    • preserve case = yes : si ce paramètre a la valeur no, alors le default case sera appliqué pour la création de nouveaux fichiers.
    • default case = lower : en lien avec preserver case
    • short preserve case = yes : cette option ne concerne que la casse des nouveaux fichiers créés dont le nom est de la forme 8.3
    • veto files = /lost+found/aquota.group/ : définit la liste de fichiers non-visible ou non-accessible par le serveur Samba
    • create mask = 0744 : définit le masque par défaut lors de la création de fichiers.
    • directory mask = 0750 : définit le masque par défaut lors de la création de dossier.
    • hide dot files = yes : cache les fichiers dont le nom commence par un point (fichier caché de Linux).
    • follow symlinks = yes : autorise ou interdit le suivi des liens symboliques de linux
    • wide links = no : ce paramètre permet à Samba de cacher ou d'afficher les liens définis sous Linux. Attention, aux failles de sécurité, les clients linux peuvent créer des liens symboliques.
  • Domaine
    • domain logons = yes : ce paramètre permet au serveur d'être utilisé comme serveur d'authentification pour les machines clientes. Le serveur Samba devient un controleur de domaine

      Avec l'option domain master = yes, cette commande permet à Samba de fonctionner comme un PDC (Samba Primary Domain Controller). Sinon il fonctionnera comme un BDC (Backup Domain Controller)
    • logon path = \\%L\profiles\%U : définit le chemin "windows" du dossier personnel de chaque utilisateur
    • logon drive = Q: : définit la lettre du lecteur réseau qui sera associé à chaque dossier personnel des utilisateurs
    • logon script = %U.bat : définit le script à lancer sur la machine cliente lors de la connexion de chaque utilisateur
  • Resolution de noms
    • local master = yes : demande au serveur de participer à l'élection "locale" de "master browser" référençant toutes les machines du groupe de travail.
    • domain master = yes : définit le serveur comme un serveur de domaine pour le groupe workgroup
    • wins support = yes : demande à nmbd de fonctionner comme un WINS serveur
    • os level = 65 : cette option permet de valoriser ou non le serveur Samba lors de l'élection du "master browser"
Autour de Samba :
  • Voici les trois packages essentiel pour samba :
    • samba qui installera le serveur
    • samba-clients qui permet de se connecter à des partages samba notamment par ligne de commande
    • cifs-clients qui permet de montrer des partages samba dans le système Linux

      Voici un exemple de ligne de commande montant un partage cifs :
      mount -t cifs //10.0.0.2/th.castanet /homePoint/th.castanet -o username=th.castanet,domain=liberte.peda,uid=th.castanet,gid=nogroup
  • Le serveur Samba réside en deux services
    • smbd qui est le noyau du serveur : il gère l'authentification des utilisateurs et la gestion des dossiers partégés.
    • nmbd qui s'occupe de la résolution des noms NETBIOS et joue le rôle du serveur WINS
    Pour savoir si les deux sont lancés dans le système, il faut lancer la commande :
     ps -A | grep mbd
  • A propos des utilisateurs

    Les différents utilisateurs de Samba sont stockés par défaut dans une base de données nommée "tdbsam" (Trivial DataBase for Samba) mais il est également possible d'utiliser d'autres bases de données comme mysql ou ldap

    Important : le serveur Samba est essentiellement un serveur d'authentification et de fichiers. Or, pour qu'un utilisateur accède à un fichier ou à un lecteur réseau via Samba, il faut avoir conscience des deux choses suivantes :
    • il faut que l'utilisateur soit identifié par Samba (via un utilisateur interne à Samba
    • il faut que l'utilisateur Linux lié à l'utilisateur Samba ait les droits sur le fichier ou le lecteur réseau demandé.
Quelques astuces pour Samba :
  • Pour le chargement par défaut du profil d'un utilisateur, dans le partage [netlogon], doit se trouver les deux dossiers :
     Default User ; Default User.V2
  • Pour avoir un profil obligatoire ou mandataire, on nomme le fichier :
     NTUser.DAT ; NTUser.MAN
  • Pour fermer toutes les connexions au serveur :
     smbcontrol smbd close-share hal
  • Pour annuler les profils itinérants, on met dans smb.conf :
     logon home = et logon path =
  • La commande getenv group permet d'avoir des informations sur les groupes
Sur la machine cliente :
  • Pour accepter les systèmes Windows 7 :
    HKLM\System\CurrentControlSet\Services\LanmanWorkstation\Parameters
    HKLM\System\CCS\Services\LanmanWorkstation\Parameters
    DWORD DomainCompatibilityMode = 1
    DWORD DNSNameResolutionRequired = 0
  • Pour les machines Windows XP :
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]
    "requiresignorseal"=dword:00000000
    "signsecurechannel"=dword:00000000
    ; Do not check for user ownership of Roaming Profile Folders
    [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System]
    "CompatibleRUPSecurity"=dword:00000001
  • Pour effacer les profils itinérants :
    HKEY_LOCAL_MACHINE\SYSTEM\Software\Microsoft\Windows NT\CurrentVersion\
    winlogon\"DeleteRoamingCache"=dword:0000000
  • Utiliser l'astuce suivante pour monter un lecteur réseau plus rapidement :
     if not exist H: net use H: \\LINUX\HOMES > nul
  • Pour qu'un compte n'expire jamais sous Windows, on lance :
     wmic UserAccount WHERE "NAME='thomas'" SET PassWordExpires="FALSE"
  • Pour connaitre comment est défini le répertoire personnel d'un utilisateur et pour connaitre les utilisateurs ayant un profile sur l'ordinateur, il faut voir la clé de la base de registre :
     HKLM\Software\Microsoft\Windows NT\Current Version\ProfileList

DHCP

Pour le serveur isc-server-dhcp, voici quelques paramètres du fichiers dhcpd.conf
  • Paramètres globaux
    • authoritative : permet au serveur d'envoyer des packets DHCPNAK indiquant au client que le serveur fait autorité sur le réseau
    • default-lease-time 10800 : le temps par défaut de validiter de l'attribution d'une adresse à un client
    • max-lease-time 36000 : temps maximal de validiter d'une adresse attribuer à un client
    • interfaces="eth0" : définit les interfaces sur lesquelles le serveur écoutera.
    • allow unknown-clients : permet d'accord les clients n'ayant pas de déclaration host de soumettre des requêtes DHCP.
      A l'opposé, on pourra utiliser deny unknown-clients;
  • Parametre pour le serveur TFTP
    • filename "pxelinux.0" : définit le fichier de démarrage nécessiare au client
    • next-server 10.0.0.2; : définit le serveur ayant le fichier de démarrage
    • server-name "10.0.0.2"; : informe le client sur le serveur de démarrage
    • allow booting; : authorise le serveur à répondre au demande de boot
    • allow bootp; : authorise le serveur à repondre aux requêtes bootp
  • Parametre pour DNS
    • ddns-update-style none
    • ddns-domainname "liberte.peda";: le suffixe ajouté aux noms des ordinateurs pour former un fully-qualified domain-name (FQDN).
    • ddns-updates off; : désactive la mise à jour du serveur DNS lorsqu'un nouveau client recoit un nouveau bail DHCP.
    • ignore client-updates; : n'autorise pas le client à demander la mise à jour de son propre enregistrement DNS
  • Voici la déclaration d'une zone DHCP :
    subnet 10.0.0.0 netmask 255.255.255.0 {
     option domain-name-servers 10.0.0.4;
     option routers 10.0.0.1;
     option subnet-mask 255.255.255.0;
     option ntp-servers 10.0.0.4;
     host user {hardware ethernet 00:04:75:D9:7A:CA; fixed-address 10.0.0.4; }
     range 10.0.0.100 10.0.0.200;
    }
    Voici quelques explications :
    • toutes les interfaces du serveur ayant une adresse vérifiant 10.0.0.0 avec le masque 255.255.255.0 utiliseront ces définitions dès qu'une requête DHCP leur sera soumise.
    • domain-name-servers : définit le serveur DNS utilisés par les clients
    • routers : définit la passerelle
    • subnet-mask : le masque sous-réseau utilisé par les clients
    • ntp-servers : définit le serveur temps utilisé par les clients
    • la ligne host attribuera une "ip fixe" à un ordinateur en fonction de son adresse mac

DNS

Les commandes named-checkconf et named-checkzone permettent de vérifier l'intégrité des fichiers de configuration de Bind.
Le serveur Bind est un serveur DNS. La configuration s'effectue actuellement sur le fichier principal named.conf dont le contenu est :
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
qui renvoie sur les trois fichiers de configurations. Voici la configuration de mon serveur :
  • /etc/bind/named.conf.local
    zone chingatome.net {
    type master;
    file "/etc/bind/chingatomeMaster";
    allow-query { any; };
    };
    Ici, mon serveur résoudra toutes les requêtes DNS liées au domaine chingatome.net. Les définitions nécessaires se trouvent dans le fichier /etc/bind/chingatomeMaster
  • /etc/bind/named.conf.options
    options {
    directory "/var/cache/bind";
    forwarders { 8.8.8.8; };
    dnssec-validation auto;
    auth-nxdomain no; # conform to RFC1035
    listen-on-v6 { any; };

    // PERSO
    recursion yes;
    allow-query { 10.8.0.0/24; };
    };
    L'instruction forwarders permet de transformer mon serveur en vrai serveur DNS, les requêtes demandant la résolution pour un nom de domaine différent de chingatome.net seront sous-traitées par le serveur 8.8.8.8 et renvoyé au client.
  • /etc/bind/named.conf.default-zones
    Le fichier définit par défaut des zones DNS tel que localhost
Voici l'exemple du fichier chingatomeMaster :
$ORIGIN chingatome.net.
$TTL 86400
@ IN SOA www.chingatome.net. root.chingatome.net. ( 205663 604800 86400 2419200 604800 )

@ IN NS www.chingatome.net.
www IN A 95.142.161.42
chingatome.net. IN A 95.142.161.42
dns.chingatome.net. IN A 95.142.161.42
smtp.chingatome.net. IN A 95.142.161.42
chingatome.net. MX 10 smtp.chingatome.net.
* IN CNAME www
Voici quelques commentaires :
  • Le nombre 205663 correspond à la version de ce fichier. Elle doit être incrémentée à chaque changement pour les autres serveurs DNS se mettent à jour. Les autres nombres définissent les temps de validité des enregistrements.
  • @ IN NS www.chingatome.net.
    indique le serveur qui va gérer cette zone.
  • www IN A 95.142.161.42
    définit un enregistrement. Le nom de www ne se terminant pas avec un point, elle sera étendu en www.chingatome.net (avec $ORIGIN).
  • chingatome.net. MX 10 smtp.chingatome.net.
    définit le serveur de mail
  • * IN CNAME www
    Cet enregistrement permet de faire pointer tous les autres demandes vers le serveur www.chingatome.net
La commande dig permet d'avoir des informations sur l'enregistrement DNS d'un nom de domaine :
  • Affiche des informations sur le serveur woezon.net :
     dig woezon.net
  • Affiche les enregistrements MX du serveur woezon.net :
     dig MX woezon.net
  • Affiche succintement les enregistrements MX du serveur woezon.net :
     dig MX woezon.net +short
  • Affiche les enregistrements NS du serveur woezon.net :
     dig NS woezon.net
  • Effectue la recherche DNS inverse de l'adresse IP 95.142.161.42 :
     dig -x 95.142.161.42 +short
  • Demande les champs TXT de chingatome.fr sur le serveur 8.8.8.8 :
     dig txt 95.142.161.42 @8.8.8.8

LDAP

La modification "à la main" d'un fichier de configuration du serveur LDAP n'est pas conseillé, mais voici quelques manipulations le permettant (à vos risques et péril)
  • Lorsqu'on modifie un fichier manuellement de config "/etc/ldap/slapd.d", le message d'erreurs suivant peu apparaitre :
     ldif_read_file: checksum error on "/etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif"
    Il faut alors modifier la somme de controle CRC32 du fichier pour valider son usage par le serveur.
    • On installe le package "libarchive-zip-perl" pour avoir la commande "crc32" et on recherche le crc32 du nouveau fichier en faisant :
      crc32 <(cat /etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif | tail -n +3)
    • Puis on remplace, dans la seconde ligne commenté du fichier en question, l'ancienne somme de controle par la nouvelle.
  • Voici les manipulations à accomplir pour changer le nom de domaine de la base
    • modifier à la main le fichier /etc/ldap/slapd.d/cn\=config/olcDatabase\=\{1\}mdb.ldif et mettre le CRC32 a jour
    • sauvegarder l'ensemble de la base par slapdcat dans un fichier, nommé ici a.ldif, et modifier les noms de l'ancien domaine
    • Effacer l'ancienne base /var/lib/ldap.
    • Tester la nouvelle config :
       slapadd -b "dc=my,dc=new,dc=ldap,dc=domain" -v -u -l a.ldif
      Puis on l'enregistre :
       slapadd -b "dc=my,dc=new,dc=ldap,dc=domain" -v -l a.ldif
Pour sauvegarder l'intégralité de la base LDAP dans un fichier, on utilise la commande :
 slapcat

Et avec postfix pour faire une recherche
postmap -q thomas@mail.chgm.eu ldap:/etc/postfix/ldap-accounts.cf
Pour que le système utilise le serveur LDAP pour l'authentification, il faut :
  • installer le package libnss-ldap
  • Ajouter au fichier /etc/nsswitch.conf le mot-clé ldap aux deux lignes passwd, shadow et group :
    passwd: compat ldap
    group: compat ldap
    shadow: compat ldap
A modifier également le fichier /etc/ldap.conf pour qu'il inclut les paramètres suivants :
base dc=liberte,dc=peda
host 127.0.0.1
#uri ldapi:///127.0.0.1
#uri ldap:///127.0.0.1
#uri ldaps:///127.0.0.1
rootbinddn cn=admin,dc=liberte,dc=peda
nss_base_passwd ou=utilisateurs,dc=liberte,dc=peda
nss_base_shadow ou=utilisateurs,dc=liberte,dc=peda
nss_base_group ou=groupes,dc=liberte,dc=peda
nss_map_attribute homeDirectory description
Apparement les 4 derniers paramètres semblent facultatifs, nsswitch doit rechercher de manière globale '(uid=*)' les utilisateurs.

Ne pas oublier :
  • de boucler le nom du serveur vers la machine locale à l'aide du fichier /etc/hosts :
     127.0.0.1 localhost serveur.liberte.ped
  • de mettre le mot de passe de l'utilisateur dans le fichier /etc/libnss-ldap.secret avec le mode 0600.
  • Peut etre configurer de même PAM avec les deux fichiers pam_ldap.conf et pam_ldap.secret
  • Le module nscd met en cache les informations sur les utilisateurs. Pour vider le cache, exécuter la commande :
     service nscd force-reload
    ou désactiver le cache pour les group :
    nscd --invalidate=group
    nscd --invalidate=hosts
    nscd --invalidate=passwd
    nscd --invalidate=netgroup
Quelques astuces pour LDAP :
  • Les erreurs de types "bdb_equality_candidate" dans le fichier /var/log/syslog peuvent être évitées en faisant
     olcDvIndex : objectClass,uid,memberUid,cn,sambaSID eq
  • Si on souhaite intégralement ré-installer le serveur LDAP :
    service slapd stop
    apt-get purge slapd
    rm -R /var/lib/ldap
    rm -R /var/lib/sldap
    apt-get install slapd
    dpkg-reconfigure slapd
  • Pour lancer le slapd en débug :
    /usr/bin/slapd -d 1
Pour modifier le mot de passe du super-utilisateur du serveur LDAP. Il se trouve à l'adresse /etc/ldap/slapd.d/cn=config/olcDatabase={0}config.ldif

Pour avoir le mot de passe hashé en MD5, on utilise la commande :
 slappaswd -h {MD5}

Puis, pour le modifier via la ligne de commande :
  • Saisir le texte dans le fichier motPasse.ldif
    dn: cn=config
    changetype: modify

    dn: olcDatabase={0}config,cn=config
    changetype: modify
    replace: olcRootPW
    olcRootPW: {MD5}nvlMotPasse

    dn: olcDatabase={0}config,cn=config
    changetype: modify
    delete: olcAccess
  • on effectue la modification :
     ldapmodify -Y EXTERNAL -H ldapi:/// -f rootpw_cnconfig.ldif
Pour observer l'annuaire config, faire :
 slapcat -n0
Avec le programme Apache Directory Studio, pour accéder à la racine de la configuration du serveur LDAP, il faut :
  • se connecter avec l'utilisateur cn=admin,cn=config
  • dans le navigateur, décochez la case "Récupérer..." et choisir la localisation "cn=config"
  • Localement, on peut tester la commande
     ldapsearch -xLLL -b cn=config -x -D cn=admin,cn=config -W

LDAP et Samba

Pour intégrer le schéma "samba" dans LDAP :
  • On installe les packages nécessaires :
     apt-get install samba slapd samba-doc ldapscripts libnss-ldapd
  • On installe le schéma pour Samba dans le fichier /etc/ldap/schema/samba.schema :
     zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
  • On crée le fichier /etc/slapd/samba.conf avec le contenu :
    include /etc/ldap/schema/core.schema
    include /etc/ldap/schema/cosine.schema
    include /etc/ldap/schema/nis.schema
    include /etc/ldap/schema/inetorgperson.schema
    include /etc/ldap/schema/samba.schema
  • On créé un fichier temporaire pour intégrer ces schémas dans une nouvelle arborescence pour LDAP et on l'intégre à notre serveur :
    mkdir tmpd.d
    slaptest -f samba.conf -F tmp.d/
    cp "tmp.d/cn=config/cn=schema/cn={4}samba.ldig" "/etc/ldap/slapd.d/cn=config/ch=schema"
    chmod openldap: "/etc/ldap/slapd.d/cn=config/ch=schema"
  • On vérifie l'intégration du schéma samba en lançant une des deux commandes :
     ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config "(objectClass=olcSchemaConfig)" dn
    ou
     ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=schema,cn=config \string| grep schema \string| grep samba
  • On demande à Samba d'utiliser l'annuaire de LDAP avec le paramètre suivant dans le fichier /etc/samba/smb.conf :
     passdb backend = ldapsam:ldap://serveurpeda.liberte.peda
    Ne pas oublier de boucler vers la machine serveur en déclarant l'hote comme "localhost. Dans le fichier /etc/hosts :
     127.0.0.1 localhost serveur.liberte.peda
Voici comment configurer Samba avec LDAP :
Quelques tips :
  • On vérifier que Samba supporte les bases LDAP en lançant la commande :
     smbd -b | grep LDAP
    Les lignes suivantes doivent apparaitrent :
    HAVE_LDAP_H
    HAVE_LDAP
    HAVE_LDAP_DOMAIN2HOSTLIST
    HAVE_LDAP_INIT
    HAVE_LDAP_INITIALIZE
    HAVE_LDAP_SET_REBIND_PROC
    HAVE_LIBLDAP
    LDAP_SET_REBIND_PROC_ARGS
Pour intégrer LDAP dans la configuration de Samba

Deux méthodes sont possibles
  • Sous Debian, le package smbldap-tools permet d'automatiser les tâches de population de la base LDAP, de l'ajout ou suppression d'utilisateurs et de la gestion des groupes d'utilisateurs :
    • On installe le package : apt-get install smbldap-tools
    • On copie le fichier de configuration :
       cp /usr/share/doc/smbldap-tools/examples/smbldap\_bind.conf /etc/smbldap-tools/
      Dans le dossier, on le décompresse :
       cp /etc/smbldap-tools/ ; gzip -d smbldap.conf.gz
    • On récupère le SSID de notre serveur Samba et on l'intègre :
       net getlocalsid >> smbldap.conf
      On modifie la dernière ligne pour qu'elle apparaisse :
       SID="xxxxxxxxxxxxxxxxxxxxxxxx
    • On modifie le fichier /etc/smbldap-tools/smbldap_bind.conf pour que les paramètres ci-dessous correspondent :
      ldapTLS="0"
      verify="none"
      sambaDomain="liberte.peda"
      slaveLDAP="ldap://127.0.0.1/"
      masterLDAP="ldap://127.0.0.1/"
      suffix="dc=liberte,dc=peda"
      usersdn="ou=utilisateurs,\${suffix}"
      groupsdn="ou=groupes,\${suffix}"
      computersdn="ou=machines,\${suffix
    • on lance la configuration de LDAP pour le serveur de domaine : smbldap-populate
  • De manière générale :
    ldap passwd sync = Yes :

    #LDAP
    passdb backend = ldapsam:ldap://serveurpeda.liberte.peda
    ldap admin dn = cn=admin,dc=liberte,dc=peda
    ldap suffix = dc=liberte,dc=peda
    ldap group suffix = ou=groupes
    ldap user suffix = ou=utilisateurs
    ldap machine suffix = ou=machines
    ldap debug level = 1 ### default
    #ldap debug level = 1
    #ldap debug threshold = 5
    ldap idmap suffix =
    ldap ssl = Off

Apache et PHP

?
Expression régulières :
* efface tous les tags dans un string html
str.replace(/<\/?[^>]+(>|$)/g, "");
Pour accéder à la commande apache2 en ligne de commande, on exécute le code ci-dessous :
cd /etc/apache2
source envvars
apache2 -M
Ci-dessus, on affiche les modules installées

Voici les modules installés par défaut sous Debian
  • access_compat : permet d'utiliser les mot clés Allow, Deny dans les fichiers de configuration
  • alias : permet d'utiliser le mot clé Alias dans les fichiers de configuration. Permet de passer par dessus l'instruction "DocumentRoot"
  • auth_basic, authn_core, authn_file, authz_core, authz_host, authz_user : permet l'authentification d'utilisateur via la méthode http et les fichiers textes utilisateur/mot de passe .htpasswd
  • autoindex : permet d'afficher le contenu d'un fichier sous la forme " ls -l"
  • deflate : permet la compression des données avant l'envoi à l'utilisateur
  • dir : permet notamment de définir le fichier index par défaut via la directive "DirectoryIndex" dans les fichiers de configuration
  • env : permet d'utiliser des variables entre les modules via la commande "SetEnv"
  • expires : permet de définir les temps renvoyés dans les "headers" via les commandes "ExpiresDefault" et "ExpiresByType"
  • filter : usage de filtre via la commande "FilterDeclare", "FilterProvider", "FilterChain"
  • headers : permet de modifier les headers des fichiers envoyés via la commande "Header"
  • mime : permet de gérer les mime suivant les extensions des fichiers comme par exemple la commande "AddType"
  • negotiation : permet de gérer les fichiers envoyés en fonction des capacités du navigateur du client. Utilisé avec l'option "MultiviewsMatch" et "AddHandler"
  • reqtimeout : permet de gérer les temps d'attente des demandes des clients via les commandes "RequestReadTimeout"
  • rewrite : permet de réécrire des URL demandés par le client via les comandes "RewriteBase", "RewriteRule" ...
  • setenvif : permet de définir des variables d'environnement à l'aide de la commande "SetEnvIfNoCase"
  • socache_shmcb : permet d'utiliser un cache des données. Commande "shmcb"?
  • ssl : permet d'utiliser les chiffrement SSL et TLS
  • status : utiliser pour connaitre le rendement du serveur apache
Pour remplacer certains caractères utf8 :
function modifCaractere($x){
$x=str_replace("\xc2\xa0",' ',$x);
$x=str_replace("\xc3\x8f",'i',$x);
$x=str_replace("\xc3\xa8",'e',$x);
$x=str_replace("\xc3\xa9",'e',$x);
$x=str_replace("\xc3\xaa",'e',$x);
$x=str_replace("\xc3\xab",'e',$x);
$x=str_replace("\xc3\x88",'e',$x);
$x=str_replace("\xc3\x89",'e',$x);
$x=str_replace("\xc3\x8a",'e',$x);
$x=str_replace("\xc3\x8b",'e',$x);
$x=str_replace("\xc3\x80",'a',$x);
$x=str_replace("\xc3\x81",'a',$x);
$x=str_replace("\xc3\x82",'a',$x);
$x=str_replace("\xc3\x83",'a',$x);
$x=str_replace("\xc3\x84",'a',$x);
$x=str_replace("\xc3\x85",'a',$x);
$x=str_replace("\xc3\x86",'a',$x);
$x=str_replace("\xc3\xa0",'a',$x);
$x=str_replace("\xc3\xa1",'a',$x);
$x=str_replace("\xc3\xa2",'a',$x);
$x=str_replace("\xc3\xa3",'a',$x);
$x=str_replace("\xc3\xa4",'a',$x);
$x=str_replace("\xc3\xa5",'a',$x);
$x=str_replace("\xc3\xa6",'a',$x);
$x=str_replace("\xc3\x99",'u',$x);
$x=str_replace("\xc3\x9a",'u',$x);
$x=str_replace("\xc3\x9b",'u',$x);
$x=str_replace("\xc3\x9c",'u',$x);
$x=str_replace("\xc3\xb9",'u',$x);
$x=str_replace("\xc3\xba",'u',$x);
$x=str_replace("\xc3\xbb",'u',$x);
$x=str_replace("\xc3\xbc",'u',$x);
$x=str_replace("\xc3\xbd",'u',$x);
$x=str_replace("\xc3\x92",'o',$x);
$x=str_replace("\xc3\x93",'o',$x);
$x=str_replace("\xc3\x94",'o',$x);
$x=str_replace("\xc3\x95",'o',$x);
$x=str_replace("\xc3\x96",'o',$x);
$x=str_replace("\xc3\xb2",'o',$x);
$x=str_replace("\xc3\xb3",'o',$x);
$x=str_replace("\xc3\xb4",'o',$x);
$x=str_replace("\xc3\xb5",'o',$x);
$x=str_replace("\xc3\xb6",'o',$x);
$x=str_replace("\xc3\xa7",'c',$x);
$x=str_replace("\xc3\x87",'c',$x);
return $x;
}
Voici un script permettant à un script de finir l'affichage pour le client mais de continuer à s'exécuter en fond de tache (du type de la commande nohup)
ob_end_clean();
ignore_user_abort(true);
ob_start();

/* Code à exécuter et qui sera renvoyé au client */

$size=ob_get_length();
session_write_close();
header("Content-Encoding: none");
header("Content-Length: $size");
header("Connection: close");
ob_end_flush();
flush();
sleep(2);
ob_start();

/* Code qui sera exécuté sans que le client ne le sache */
Dans les entètes HTML, il est possible de télécharger une partie d'un fichier. Pour cela, il faut que le serveur Apache retourne dans les entêtes (header) l'information : Accept-Ranges
  • Pour activer cette fonctionnalité :
    • activer le module header : a2enmod headers
    • Dans le fichier /etc/apache2/conf-available/security.conf, ajoutez la ligne :
       Header set Accept-Ranges: "bytes"
  • Pour tester si la fonctionnalité range bytes est autorisée sur un serveur, lancez en telnet les informations suivantes au serveur :
    GET /_fichier/sesamath/classeConnect.mp4 HTTP/1.1
    Host: chingatome.net
    Range:bytes=1000-1050
    Accept-Encoding: gzip
    Connection: close
  • Imaginons un fichier faisant 200 octets. Voici comment télécharger ce fichier en deux commandes et les rassembler :
    curl --header "Range: bytes=0-100" http://192.168.100.1/vide.img -o f.txt
    curl --header "Range: bytes=101-200" http://192.168.100.1/vide.img -o f.txt
    echo "" > f
    cat f1 f2 >> f
    C'est la méthode utilisée par les logiciels "gestionnaire de téléchargement"
Pour protéger un serveur apache, on installe le module mod_evasive de la manière suivante :
  • apt-get install libapache2-mod-evasive
  • On crée le dossier pour les logs :
     mkdir -p /var/log/apache2/evasive
     chown -R www-data:root /var/log/apache2/evasive
  • On modifie le fichier /etc/apache2/mods-available/mod-evasive.conf :
    DOSHashTableSize 3097
    DOSPageCount 2
    DOSSiteCount 50
    DOSPageInterval 5
    DOSSiteInterval 1
    DOSBlockingPeriod 10
    DOSLogDir "/var/log/apache2/evasive"
  • On relance le serveur : service apache2 restart
Dans le fichier /etc/php5/apache2/php.ini, voici mes modifications :
  • display_errors = On :
  • error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT :
  • error_log = /var/log/php_errors.log :
  • disable_functions : cette commande permet de désactiver des commandes globalement :

    Voici un exemple pour sécuriser un serveur Apache :
    disable_functions = chgrp, chmod, chown, disk_free_space, diskfreespace, disk_total_space, dl, escapeshellcmd, exec, get_current_user, getmypid, getmyuid, getrusage, highlight_file, ignore_user_abord, ini_alter, ini_restore, ini_set, leak, link, listen, login, passthru, php_uname, popen, posix_getpwuid, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, proc_get_status, proc_nice, proc_open, proc_terminate, set_time_limit, shell_exec, show_source, socket_bind, socket_listen, system, virtual
    Pour personnaliser la liste des commandes interdite par un vhost, on utilise la le patch suhosin : avec le paramètre suhosin.executor.func.blacklist dans le fichier .htaccess

MYSQL

Voici quelques commandes liées à l'usage d'un serveur MYSQL :
  • mysqlcheck -uroot -pxxx --all-databases : vérifie l'intégrité de l'ensemble des bases de données
  • mysqlrepair -uroot -pxxx --all-databases : réparer toutes les bases
  • mysqladmin -u root password 'nnn' : change le mot de passe de l'utilisateur root
La commande mysql permet de se logguer à un serveur MYSQL pour y exécuter des commandes. Voici la syntaxe pour se connecter au serveur MYSQL local :
 mysql -uroot -pmypassword
Pour se connecter à un serveur distant :
 mysql -h 192.168.51.200 -uroot -pmypassword

Voici quelques exemples de séquences d'instructions en ligne de commande :
  • Création d'une base de données et ajout d'un nouvel utilisateur :
    CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
    CREATE USER 'myuser'@'%' IDENTIFIED BY 'xys';
    SET PASSWORD FOR 'myuser'@'%' =PASSWORD("mon_mot_passe");
    GRANT ALL ON mydb.* TO 'myuser'@'%';
    GRANT ALL ON mydb TO 'myuser'@'%';
    GRANT CREATE ON mydb TO 'myuser'@'%';
    FLUSH PRIVILEGES;
    Le mot clé "%" permet à l'utilisateur de se connecter de partout. A l'inverse, si on remplace par "localhost", la connexion au serveur MYSQL par cet utilisateur ne pourra se faire que localement.
  • Pour modifier le mot de passe d'un utilisateur
    SET PASSWORD FOR 'utilisateur'@'%' = PASSWORD("sdfsdf");
  • Pour créer un super-utilisateur :
    GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  • Pour connaitre tous les utilisateurs du système
    SELECT User,Host FROM mysql.user;

    ou

    USE mysql;
    SELECT User,Host FROM user;
  • Pour effacer une base de données :
    DROP DATABASE mydb
  • Effacer un utilisateur :
    DROP USER myUser
  • Pour modifier l'auto-incrementation d'une clé dans une table :
    ALTER TABLE `exo_stats` AUTO_INCREMENT = 269
Pour importer un fichier d'instruction directement, on exécute la commande :
 mysql -e "source e.sql" -uroot

Parfois, il est intéressant de connaitre la ligne de commande de lancement d'un serveur pour le débugguer manuellement. Voici la commande sous Debian 8 :
/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

Autres services réseaux

?
msmtp : Logiciel en ligne de smtp
  • Fichier de configuration

    Voici le fichier de configuration à créer ~/.msmtprc :
    account castanetTLS
    host chingatome.fr
    protocol smtp
    port 465
    auth login
    tls on
    tls_certcheck on
    tls_starttls off
    tls_trust_file ~/chingatome.fr.crt
    from castanet@chingatome.fr
    user castanet
    password xxxxx

    account castanet
    host chingatome.fr
    protocol smtp
    port 587
    auth login
    tls on
    tls_certcheck on
    tls_starttls on
    tls_trust_file /home/user/chingatome.fr.crt
    from castanet@chingatome.fr
    user castanet
    password xxxxx
  • Lancer un email en ligne :
     echo "br, je viens d'un autre compte" | msmtp -va castanet th.castanet@gmail.com
  • Pour que PHP puisse envoyer des courriels via ce logiciel, dans le fichier de configuration /etc/php/7.2/apache2/php.ini, modifiez la ligne suivante
     sendmail_path = "/usr/bin/msmtp -a castanetTLS -t -C /home/user/.msmtprc"
  • Apparemment sur la derniere config de msmtp, il faut que les fichiers de configuration soit dans le home de l'utilisateur et ne supporte pas les liens symboliques (?)
  • Attention apparmor bloque l'usage de fichier hors d'un certain contexte : à desactiver
Voici une exemple pour envoyer un message en ligne de commande :
echo -e "Subject: test mail\nTo: student@chingatome.fr\n\n Bonjour\n\n" | msmtp -d th.castanet@gmail.com

Voici un exemple de configuration sans vérification du certificat :
account default
host chingatome.fr
port 465
tls on
auth on
tls_certcheck off
tls_starttls off
user student@chingatome.fr
from student@chingatome.fr
password aaaa
logfile /var/log/msmtp
Le service postfix est un serveur de mail : il permet d'envoyer des mails et attend pour recevoir des mails.
Le service dovecot permet à un client de parcourir sa boite mail.
  • Voici une configuration pour un serveur postfix utilisant seulement les comptes linux.

    Voici mon fichier configuration /etc/postfix/main.cfg:
    command_directory = /usr/sbin
    daemon_directory = /usr/lib/postfix
    data_directory = /var/lib/postfix
    myhostname = dns.chingatome.net
    mydomain = chingatome.net
    myorigin = $mydomain
    inet_interfaces = all
    mydestination = $myhostname localhost.$mydomain localhost $mydomain
    unknown_local_recipient_reject_code = 550
    mynetworks = 10.8.0.1, 95.142.161.42, 127.0.0.0/8, [::ffff:127.0.0.0]/104, [::1]/128
    relay_domains = $mydomain
    home_mailbox = Maildir/
    smtpd_banner = chingatome.net ESMTP postfix (Debian/GNU)
    debugger_command =
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    ddd $daemon_directory/$process_name $process_id & sleep 5
    setgid_group = postdrop
    inet_protocols = ipv4
    smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
    smtpd_tls_key_file=/etc/ssl/private/mail.key
    smtpd_use_tls=yes
    smtpd_tls_auth_only=yes
    smtpd_relay_restrictions = permit_sasl_authenticated, permit_mynetworks, defer_unauth_destination
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yesa
    smtpd_sasl_local_domain = $mydomain
    broken_sasl_auth_clients = yes
    smtp_destination_concurrency_limit = 2
    smtp_destination_rate_delay = 180s
    smtp_extra_recipient_limit = 10
    ~
    Voici la configuration du fichier /etc/postfix/master.cfg
    # ==========================================================================
    # service type private unpriv chroot wakeup maxproc command + args
    # (yes) (yes) (yes) (never) (100)
    # ==========================================================================
    smtp inet n - - - - smtpd
    -o smtpd_tls_security_level=encrypt
    -o smtpd_sasl_auth_enable=yes
  • Voici quelques tips sur l'installation de Dovecot :
    • apt-get install dovecot-core dovecot-imapd
    • Dans le fichier /etc/dovecot/conf.d/10-master.conf
      service auth {
      ...
      unix_listener /var/spool/postfix/private/auth {
      mode = 0666
      user = postfix
      group = postfix
      }
      ...
      }
    • Dans le fichier /etc/dovecot/conf.d/10-auth.conf (dans le cas d'une authentification non-ssl)
       disable_plaintext_auth = yes
       auth_mechanisms = plain login
       auth_username_format = %n
    • Dans le fichier /etc/dovecot/conf.d/10-mail.conf
       mail_location = maildir:~/Maildir/
       mail_privileged_group = mail
    • Dans le fichier /etc/dovecot/conf.d/10-ssl.conf
       ssl = required
       ssl_cert = </etc/ssl/certs/mail.crt
       ssl_key = </etc/ssl/private/mail.key
  • Voici quelques modifications pour l'utilisation d'une base ldap :
    • Dans le fichier /etc/postfix/main.cf, voici quelques lignes importantes
      virtual_mailbox_base = /home/maildir
      virtual_mailbox_domains = myisn.fr
      virtual_minimum_uid = 100
      virtual_gid_maps = static:5000
      virtual_uid_maps = static:5000
      virtual_mailbox_maps = ldap:/etc/postfix/ldap-accounts.cf

      smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
      myhostname = smtp.myisn.fr
      alias_maps = hash:/etc/aliases
      alias_database = hash:/etc/aliases
      myorigin = /etc/mailname
      mydestination = smtp.myisn.fr, localhost.ovh.net, localhost
      relayhost =
      mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
      mailbox_size_limit = 0
      recipient_delimiter = +
      inet_interfaces = all
    • Dans le fichier /etc/postfix/ldap-accounts.cf, voici le contenu du fichier :
      server_host = 127.0.0.1
      version = 3
      search_base = ou=user,dc=myisn,dc=fr
      query_filter = (&(objectClass=inetOrgPerson)(mail=%s))
      result_attribute = uid
      bind = yes
      bind_dn = cn=admin,dc=myisn,dc=fr
      bind_pw = aaaaa
    • Dans le fichier /etc/dovecot/dovecot-ldap.conf.ext, voici les modifications apportées :
      hosts = localhost
      dn = cn=admin,dc=myisn,dc=fr
      dnpass = aaaaa
      auth_bind = yes
      ldap_version = 3
      base = ou=user,dc=myisn,dc=fr
    • Dans le fichier /etc/dovecot/conf.d/10-auth.conf
      #!include auth-system.conf.ext
      #!include auth-sql.conf.ext
      !include auth-ldap.conf.ext
      #!include auth-passwdfile.conf.ext
      #!include auth-checkpassword.conf.ext
      #!include auth-vpopmail.conf.ext
      #!include auth-static.conf.ext
    • Dans le fichier /etc/dovecot/conf.d/10-ssl.conf
       ssl = yes
       ssl_cert = </etc/dovecot/dovecot.pem
       ssl_key = </etc/dovecot/private/dovecot.pem
    • Dans le fichier /etc/dovecot/conf.d/10-mail.conf
       mail_location = mbox:/home/maildir:INBOX=/home/maildir/%u:INDEX=/home/maildir/map/%u
       mail_uid = 5000
       mail_gid = 5000
    • Dans le fichier /etc/dovecot/conf.d/auth-ldap.conf.ext
      passdb {
      driver = ldap
      args = /etc/dovecot/dovecot-ldap.conf.ext
      }

      userdb {
      driver = ldap
      args = /etc/dovecot/dovecot-ldap.conf.ext
      }
Le protocole TFTP (Trivial File Transfert Protocole) est un protocole simple de transfert de fichiers.

Il est notamment utilisé dans le démarrage PXE des ordinateurs au travers du réseau.

Sous Debian, on utilisera les deux packages tftp-hpa (client) et tftpd-hpa (serveur).
Le debugage est assez dur. Pour vérifier que le serveur est lancé :
 ps aux | grep tftpd
  • Pour que le client se connecte au serveur :
    tftp
    tftp> connect 127.0.0.1
    tftp> status
    Voici quelques informations pour finir de monter le serveur PXE :
    • N'oubliez pas de lancer le serveur DHCP avec les instructions filename et next-server 10.0.0.2 où la dernière adresse est celle du serveur tftpd
    • Le fichier pxelinux.cfg/default permet de définir les choix lors du démarrage de l'ordinateur client. Voici un exemple de configuration :
      kbdmap pxelinux.cfg/fr.kbd
      default 0
      display pxelinux.cfg/aff.txt
      implicit 0
      prompt 1
      timeout 80

      label 0
      localboot 0

      label 1
      kernel ../Boot/startrom.0
      append ../bootmgr.exe

      label 2
      kernel ../iso/lubuntu-16-04/casper/vmlinuz
      append boot=casper netboot=nfs nfsroot=192.168.50.1:/home/tftpboot/iso/lubuntu-16-04 initrd=../iso/lubuntu-16-04/casper/initrd.lz console-setup/layoutcode=fr quiet splash nomodeset --
    • Voici quelques astuces pour que le serveur TFTP puisse lancer Windows PE.
      • Il faut que le fichier /etc/default/tftpd-hpa contienne les lignes suivantes
        # /etc/default/tftpd-hpa
        TFTP_USERNAME="tftp"
        TFTP_DIRECTORY="home/tftpd"
        TFTP_ADDRESS="0.0.0.0:69"
        TFTP_OPTIONS="--secure -m /home/tftpd/tftpd.remap"
        Le fichier tftp.remap contenant simplement la ligne suivante :
         gr \\ /
      • Installer Samba sur le serveur afin d'offrir un partage offrant les iso du système d'exploitation. Une fois le système Winwdows 7 lancé, monter le lecteur réseau à travers la ligne de commande :
          net use X: \\10.0.0.2
      • Les fichiers bootmgr.exe et bootmgt.txt doivent être placé à la racine du dossier partagé par le serveur TFTP
    • Pour monter par PXE le système Ubuntu, ne pas oublier de créer le partage NFS défini dans le fichier pxelinux.cfg/default. Ne pas oublier de mettre la liste des partages par la commande :
       exportfs -rv

programmation bash

Copie tous les fichiers ayant une meme extension dans le répertoire courant. Les renomme avec un compteur qui s'incrémente pour éviter l'écrasement
i=1;
while IFS= read -r -d $'\0' a; do
f=`echo "$a" | awk -F"/" '{print $6}'`
cp "$a" "${i}-${f}"
i=$((${i}+1))
done < <(find /home/_math/_ressource -iname "*.ggb" -print0)
Pour afficher l'exécution ligne par ligne d'un script :
 sh -x script.sh
Lister le contenu d'un répertoire en prenant en compte les espaces dans les noms de fichiers :
#!/bin/bash
OLDIFS="$IFS" # save it
IFS="" # don't split on any white space
for file in `ls . `
do
echo "$file"
done
IFS=$OLDIFS # restore IFS
Changer l'extension de fichier
liste=`ls *.htm`;
for a in ${liste[@]}; do
mv $a --outfile "$(basename "${a}" .htm).html";
done

Android

android.app.action.ACTION_PASSWORD_CHANGED
android.app.action.ACTION_PASSWORD_EXPIRING
android.app.action.ACTION_PASSWORD_FAILED
android.app.action.ACTION_PASSWORD_SUCCEEDED
android.app.action.DEVICE_ADMIN_DISABLED
android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED
android.app.action.DEVICE_ADMIN_ENABLED
android.app.action.LOCK_TASK_ENTERING
android.app.action.LOCK_TASK_EXITING
android.app.action.NEXT_ALARM_CLOCK_CHANGED
android.app.action.PROFILE_PROVISIONING_COMPLETE
android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED
android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED
android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED
android.bluetooth.adapter.action.DISCOVERY_FINISHED
android.bluetooth.adapter.action.DISCOVERY_STARTED
android.bluetooth.adapter.action.LOCAL_NAME_CHANGED
android.bluetooth.adapter.action.SCAN_MODE_CHANGED
android.bluetooth.adapter.action.STATE_CHANGED
android.bluetooth.device.action.ACL_CONNECTED
android.bluetooth.device.action.ACL_DISCONNECTED
android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED
android.bluetooth.device.action.BOND_STATE_CHANGED
android.bluetooth.device.action.CLASS_CHANGED
android.bluetooth.device.action.FOUND
android.bluetooth.device.action.NAME_CHANGED
android.bluetooth.device.action.PAIRING_REQUEST
android.bluetooth.device.action.UUID
android.bluetooth.devicepicker.action.DEVICE_SELECTED
android.bluetooth.devicepicker.action.LAUNCH
android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT
android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED
android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED
android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED
android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED
android.hardware.action.NEW_PICTURE
android.hardware.action.NEW_VIDEO
android.hardware.hdmi.action.OSD_MESSAGE
android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS
android.intent.action.ACTION_POWER_CONNECTED
android.intent.action.ACTION_POWER_DISCONNECTED
android.intent.action.ACTION_SHUTDOWN
android.intent.action.AIRPLANE_MODE
android.intent.action.APPLICATION_RESTRICTIONS_CHANGED
android.intent.action.BATTERY_CHANGED
android.intent.action.BATTERY_LOW android.intent.action.BATTERY_OKAY
android.intent.action.BOOT_COMPLETED
android.intent.action.CAMERA_BUTTON
android.intent.action.CONFIGURATION_CHANGED
android.intent.action.CONTENT_CHANGED
android.intent.action.DATA_SMS_RECEIVED
android.intent.action.DATE_CHANGED
android.intent.action.DEVICE_STORAGE_LOW
android.intent.action.DEVICE_STORAGE_OK
android.intent.action.DOCK_EVENT
android.intent.action.DOWNLOAD_COMPLETE
android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED
android.intent.action.DREAMING_STARTED
android.intent.action.DREAMING_STOPPED
android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE
android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE
android.intent.action.FETCH_VOICEMAIL
android.intent.action.GTALK_CONNECTED
android.intent.action.GTALK_DISCONNECTED
android.intent.action.HEADSET_PLUG
android.intent.action.HEADSET_PLUG
android.intent.action.INPUT_METHOD_CHANGED
android.intent.action.LOCALE_CHANGED
android.intent.action.MANAGE_PACKAGE_STORAGE
android.intent.action.MEDIA_BAD_REMOVAL
android.intent.action.MEDIA_BUTTON
android.intent.action.MEDIA_CHECKING
android.intent.action.MEDIA_EJECT
android.intent.action.MEDIA_MOUNTED android.intent.action.MEDIA_NOFS
android.intent.action.MEDIA_REMOVED
android.intent.action.MEDIA_SCANNER_FINISHED
android.intent.action.MEDIA_SCANNER_SCAN_FILE
android.intent.action.MEDIA_SCANNER_STARTED
android.intent.action.MEDIA_SHARED
android.intent.action.MEDIA_UNMOUNTABLE
android.intent.action.MEDIA_UNMOUNTED
android.intent.action.MY_PACKAGE_REPLACED
android.intent.action.NEW_OUTGOING_CALL
android.intent.action.NEW_VOICEMAIL
android.intent.action.PACKAGE_ADDED
android.intent.action.PACKAGE_CHANGED
android.intent.action.PACKAGE_DATA_CLEARED
android.intent.action.PACKAGE_FIRST_LAUNCH
android.intent.action.PACKAGE_FULLY_REMOVED
android.intent.action.PACKAGE_INSTALL
android.intent.action.PACKAGE_NEEDS_VERIFICATION
android.intent.action.PACKAGE_REMOVED
android.intent.action.PACKAGE_REPLACED
android.intent.action.PACKAGE_RESTARTED
android.intent.action.PACKAGE_VERIFIED
android.intent.action.PHONE_STATE
android.intent.action.PROVIDER_CHANGED
android.intent.action.PROXY_CHANGE android.intent.action.REBOOT
android.intent.action.SCREEN_OFF android.intent.action.SCREEN_ON
android.intent.action.TIMEZONE_CHANGED
android.intent.action.TIME_SET android.intent.action.TIME_TICK
android.intent.action.UID_REMOVED android.intent.action.USER_PRESENT
android.intent.action.WALLPAPER_CHANGED
android.media.ACTION_SCO_AUDIO_STATE_UPDATED
android.media.AUDIO_BECOMING_NOISY android.media.RINGER_MODE_CHANGED
android.media.SCO_AUDIO_STATE_CHANGED
android.media.VIBRATE_SETTING_CHANGED
android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION
android.media.action.HDMI_AUDIO_PLUG
android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION
android.net.conn.BACKGROUND_DATA_SETTING_CHANGED
android.net.conn.CONNECTIVITY_CHANGE android.net.nsd.STATE_CHANGED
android.net.scoring.SCORER_CHANGED
android.net.scoring.SCORE_NETWORKS
android.net.wifi.NETWORK_IDS_CHANGED android.net.wifi.RSSI_CHANGED
android.net.wifi.SCAN_RESULTS android.net.wifi.STATE_CHANGE
android.net.wifi.WIFI_STATE_CHANGED
android.net.wifi.p2p.CONNECTION_STATE_CHANGE
android.net.wifi.p2p.DISCOVERY_STATE_CHANGE
android.net.wifi.p2p.PEERS_CHANGED
android.net.wifi.p2p.STATE_CHANGED
android.net.wifi.p2p.THIS_DEVICE_CHANGED
android.net.wifi.supplicant.CONNECTION_CHANGE
android.net.wifi.supplicant.STATE_CHANGE
android.nfc.action.ADAPTER_STATE_CHANGED
android.os.action.POWER_SAVE_MODE_CHANGED
android.provider.Telephony.SIM_FULL
android.provider.Telephony.SMS_CB_RECEIVED
android.provider.Telephony.SMS_DELIVER
android.provider.Telephony.SMS_EMERGENCY_CB_RECEIVED
android.provider.Telephony.SMS_RECEIVED
android.provider.Telephony.SMS_REJECTED
android.provider.Telephony.SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED
android.provider.Telephony.WAP_PUSH_DELIVER
android.provider.Telephony.WAP_PUSH_RECEIVED
android.speech.tts.TTS_QUEUE_PROCESSING_COMPLETED
android.speech.tts.engine.TTS_DATA_INSTALLED

Raspberry

Non-classé

convert -density 400 a.pdf -resize 2000x1128! a.png
Utilisation des couleurs et fontes dans le terminal Python

Général
reset = '\033[0m'
bold = '\033[01m'
disable = '\033[02m'
underline = '\033[04m'
reverse = '\033[07m'
strikethrough = '\033[09m'
invisible = '\033[08m'

Couleur fonte
black = '\033[30m'
red = '\033[31m'
green = '\033[32m'
orange = '\033[33m'
blue = '\033[34m'
purple = '\033[35m'
cyan = '\033[36m'
lightgrey = '\033[37m'
darkgrey = '\033[90m'
lightred = '\033[91m'
lightgreen = '\033[92m'
yellow = '\033[93m'
lightblue = '\033[94m'
pink = '\033[95m'
lightcyan = '\033[96m'

Couleur fond ecran
black = '\033[40m'
red = '\033[41m'
green = '\033[42m'
orange = '\033[43m'
blue = '\033[44m'
purple = '\033[45m'
cyan = '\033[46m'
lightgrey = '\033[47m'
Connaitre sa branche
github branch

connaitre tous les versions
git tag

connaitre sa version
git describe --tags
git name-rev --tags --name-only $(git rev-parse HEAD)

Ré-update un older commit
git checkout v4.4
git submodule update --init --recursive

Sécuriser un serveur pour qu'un utilisateur ayant un accès ssh :

* Activer la ligne suivante dans le fichier /etc/pam.d/su
auth required pam_wheel.so
Cela permet de ne lui pas autoriser la commande su seulement s'il fait partie du groupe wheel

* chmod 770 /bin/ssh

Connaitre toutes les applications exécutables par other
find -L /bin -type f -perm -o=x
Sur proxmox pour créer un disque
* créer localement une partition
* puis pvcreate /dev/sdb5
* puis vgcreate aefe-lvm /dev/sdb5

La config d'un des hosts sur le /etc/network/interface
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
#auto lo
#iface lo inet loopback

auto ens18
iface ens18 inet static
address 10.0.0.3
network 255.255.255.255
pointopoint 5.9.39.219
gateway 5.9.39.219

iface ens18 inet6 static
address 2001:db8::f003
netmask 64
gateway 2001:db8::3

Pour le dns, rajouter le fichier /etc/resolv.conf
nameserver 2001:4860:4860::8888

Dans /etc/apt/source.list
deb http://security.debian.org/debian-security bullseye-security main
deb-src http://security.debian.org/debian-security bullseye-security main
deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye-updates main contrib non-free
deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free
Voici ma partition pour proxmox après 1 an
Filesystem Size Used Avail Use% Mounted on
udev 16G 0 16G 0% /dev
tmpfs 3.2G 1.2M 3.2G 1% /run
/dev/sda6 15G 2.9G 12G 21% /
tmpfs 16G 43M 16G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 488M 173M 290M 38% /boot
/dev/sda3 4.9G 44K 4.6G 1% /tmp
/dev/sda5 3.9G 1.4G 2.3G 38% /var
/dev/sdc1 295G 20G 260G 7% /nfs
/dev/fuse 128M 20K 128M 1% /etc/pve
tmpfs 3.2G 0 3.2G 0% /run/user/0
echo "===== Envoi les tables des profs <10 en supprimant la clé primaire"
table=('new_newFeuille_tmp');
for tab in ${table[@]}; do
echo $tab;
### Efface la table
echo "DELETE FROM ${tab}_tmp WHERE prof<10;" >> /tmp/mysqlData-upload.sql
### Charge les données
mysqldump --no-create-db --no-create-info -uroot -proot --where="prof<10" vije ${tab} \
| sed -e 's/([0-9]*,/(NULL,/gi' \
| sed -E "s/(INSERT INTO|ALTER TABLE|LOCK TABLES) \`${tab}\` /\1 \`${tab}_tmp\` /gi" \
>> /tmp/mysqlData-upload.sql
Javascript pour element a click direct download // Crée le blob
Le module server-status permet d'avoir des informations sur le serveur courant.
Ouvrir plusieurs fois des ficheirs emacs et attendre

$x=array('12','12');
$y=array_unique($x);
sort($y);
$ch = "";
foreach($y as $c => $v){
echo "/home/_data/fichierConfig/ouvreFichier.sh /home/_info/_exercice/".$v."/enonce0.tex ; echo 'aaa ".$v."';read -r -n1 key;";
}
?>
ntpd -q
Affiche tous les messages
postqueue -p

Lire un message
postcat -vq XXXXXXX

Efface tous les messages
ecouter microphone dans headphone
pactl load-module module-loopback
pactl unload-module module-loopback
Vider le cache de la mémoire sous linux :
avant :
sync; echo 3 > /proc/sys/vm/drop_caches
mainteant :
sysctl -w vm.drop_caches=3
Code à mettre dans /.bashrc pour lancer chromium en kiosk

su -c "/sbin/wpa_supplicant -B -s -i wlan0 -c /etc/wpa_tclfsf.conf" &
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
/bin/startx /usr/bin/chromium --window-size=1920,1080 --disable-pinch --kiosk --disable-restore-session-state --noerrdialogs http://localhost
#/bin/startx -- :0
fi
Section "Device"
Identifier "Configured Video Device"
Option "Monitor-HDMI-1" "HDMI"
Option "Monitor-eDP-1" "eDP"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
HorizSync 30.0-62.0
VertRefresh 50.0-70.0
Modeline "1024x768" 65.00 1024 1048 1184 1344 768 771 777 806 -hsync -vsync
Option "PreferredMode" "1024x768"
EndSection

Section "Monitor"
Identifier "eDP"
HorizSync 30.0-62.0
VertRefresh 50.0-70.0
Modeline "640x400" 41.75 640 676 740 840 400 401 404 415 doublescan -hsync +vsync
Option "PreferredMode" "640x400"
EndSection

Section "Monitor"
Identifier "HDMI"
HorizSync 30.0-62.0
VertRefresh 50.0-70.0
Modeline "1024x768" 65.00 1024 1048 1184 1344 768 771 777 806 -hsync -vsync
Option "PreferredMode" "1024x768"
Option "Primary" "true"
EndSection

Section "Screen"
Identifier "Default Screen"
Device "Configured Video Device"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1366x768"
EndSubSection
EndSection
Pour palier à l'erreur :
perl: warning: Setting locale failed.

Lancer les commandes suivantes
export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales
Ajoutez ces deux lignes dans votre fichier ~/.bashrc :
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
Puis valider pour la session courante ces changement en lançant l'instruction :
source ~/.bashrc
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon

# Default SSL material locations
#ca-base /etc/ssl/certs
#crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# An alternative list with additional directives can be obtained from
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
#ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
#ssl-default-bind-options no-sslv3

defaults
log global
mode http
#option httplog
#option dontlognull
option forwardfor
maxconn 1000
#nbproc 2
retries 3
#timeout http-request 10s
#timeout queue 1m
timeout connect 4000
timeout client 60000
#timeout server 1m
#timeout http-keep-alive 10s
#timeout check 10s
timeout server 300000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

frontend http-in
mode http
bind *:80
option httplog
option forwardfor
use_backend http-chingmaster if { hdr_end(host) -i chinginfo.fr }
use_backend http-chingovh if { hdr(host) -i chg.ovh }
use_backend https-redirectA if { hdr(host) -i chingatome.fr }
use_backend https-redirectB if { hdr(host) -i www.chingatome.fr }
use_backend http-chingmaster if { hdr_end(host) -i .chingatome.fr }
use_backend http-chingweb if { hdr_end(host) -i .chingweb.fr }
use_backend http-chingweb if { hdr_end(host) -i chingweb.fr }
use_backend https-redirectA if { hdr(host) -i chingview.fr }
use_backend https-redirectC if { hdr(host) -i 188.165.226.214 }
backend http-chingovh
#mode http
#timeout http-keep-alive 3000
server web_a 10.0.0.1:80
backend http-chingmaster
#mode http
#timeout http-keep-alive 3000
server web_b 10.0.0.1:80
backend http-chingweb
mode http
timeout http-keep-alive 3000
server web_c 10.0.0.2:80 check
backend https-redirectA
mode http
#timeout http-keep-alive 3000
http-request redirect scheme https code 301 unless { ssl_fc }
#server web_c 10.0.0.1:80 check
backend https-redirectB
mode http
http-request redirect location http://chingatome.fr
backend https-redirectC
mode http
#timeout http-keep-alive 3000
#http-request redirect scheme https code 301 unless { ssl_fc }
server web_c 10.0.0.3:80 check

frontend https-chingview
mode http
bind *:443 ssl crt /etc/letsencrypt/live/chingview.fr/__la_totale__.pem crt /etc/letsencrypt/live/chingatome.fr/__la_totale__.pem crt /etc/letsencrypt/live/video.chingview.fr/__la_totale__.pem
http-request redirect scheme https code 301 unless { ssl_fc }
use_backend https-chingmaster-backend if { hdr(host) -i chingview.fr }
use_backend https-chingmaster-backend if { hdr(host) -i test.chingview.fr }
use_backend https-chingmaster-backend if { hdr(host) -i chingatome.fr }
use_backend https-chingmaster-redirect if { hdr(host) -i www.chingatome.fr }
use_backend https-chingvideo-backend if { hdr(host) -i video.chingview.fr }
backend https-chingmaster-backend
option forwardfor
server server_chingview 10.0.0.1:80 check
backend https-chingvideo-backend
option forwardfor
server server_chingview 10.0.0.3:80 check
backend https-chingmaster-redirect
mode http
http-request redirect location https://chingatome.fr

auto vmbr0
iface vmbr0 inet static
address 10.0.0.254/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o enp1s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/24' -o enp1s0 -j MASQUERADE
# ChingMaster - SSH - 10022 -> 22
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 10022 -j DNAT --to-destination 10.0.0.1:22
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 10022 -j DNAT --to-destination 10.0.0.1:22
# ChingMaster - MYSQL - 13306 -> 3306
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 13306 -j DNAT --to-destination 10.0.0.1:3306
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 13306 -j DNAT --to-destination 10.0.0.1:3306
# ChingMaster - postfix 25 - 25 -> 25
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 25 -j DNAT --to-destination 10.0.0.1:25
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 25 -j DNAT --to-destination 10.0.0.1:25
# ChingMaster - postfix 143 - 143 -> 143
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 143 -j DNAT --to-destination 10.0.0.1:143
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 143 -j DNAT --to-destination 10.0.0.1:143
# ChingMaster - postfix 465 - 465 -> 465
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 465 -j DNAT --to-destination 10.0.0.1:465
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 465 -j DNAT --to-destination 10.0.0.1:465
# ChingMaster - postfix 587 - 587 -> 587
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 587 -j DNAT --to-destination 10.0.0.1:587
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 587 -j DNAT --to-destination 10.0.0.1:587
# ChingMaster - postfix 995 - 995 -> 995
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 995 -j DNAT --to-destination 10.0.0.1:995
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 995 -j DNAT --to-destination 10.0.0.1:995
# ChingMaster - openvpn 8080 - 18080 -> 8080
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 18080 -j DNAT --to-destination 10.0.0.1:8080
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 18080 -j DNAT --to-destination 10.0.0.1:8080
# ChingWeb - SSH 22 - 20022 > 22
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 20022 -j DNAT --to-destination 10.0.0.2:22
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 20022 -j DNAT --to-destination 10.0.0.2:22
# ChingWeb - MYSQL 3306 - 23306 > 3306
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 23306 -j DNAT --to-destination 10.0.0.2:3306
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 23306 -j DNAT --to-destination 10.0.0.2:3306
# ChingWeb - openvpn 8080 - 28080 -> 8080
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 28080 -j DNAT --to-destination 10.0.0.2:8080
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 28080 -j DNAT --to-destination 10.0.0.2:8080
# ChingVideo - SSH 22 - 30022 > 22
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 30022 -j DNAT --to-destination 10.0.0.3:22
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 30022 -j DNAT --to-destination 10.0.0.3:22
# ChingVideo- MYSQL 3306 - 33306 > 3306
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 33306 -j DNAT --to-destination 10.0.0.3:3306
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 33306 -j DNAT --to-destination 10.0.0.3:3306
# ChingVideo - openvpn 8080 - 38080 -> 8080
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 38080 -j DNAT --to-destination 10.0.0.3:8080
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 38080 -j DNAT --to-destination 10.0.0.3:8080
# ChingVideo - tcp nfs 30111 - 30111 -> 30111
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 30111 -j DNAT --to-destination 10.0.0.3:30111
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 30111 -j DNAT --to-destination 10.0.0.3:30111
# ChingVideo - udp nfs 30111 - 30111 -> 30111
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 30111 -j DNAT --to-destination 10.0.0.3:30111
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 30111 -j DNAT --to-destination 10.0.0.3:30111
# ChingVideo - tcp nfs 30112 - 30112 -> 30112
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 30112 -j DNAT --to-destination 10.0.0.3:30112
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 30112 -j DNAT --to-destination 10.0.0.3:30112
# ChingVideo - udp nfs 30112 - 30112 -> 30112
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 30112 -j DNAT --to-destination 10.0.0.3:30112
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 30112 -j DNAT --to-destination 10.0.0.3:30112
# ChingVideo - tcp nfs 30113 - 30113 -> 30113
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 30113 -j DNAT --to-destination 10.0.0.3:30113
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 30113 -j DNAT --to-destination 10.0.0.3:30113
# ChingVideo - udp nfs 30113 - 30113 -> 30113
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 30113 -j DNAT --to-destination 10.0.0.3:30113
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 30113 -j DNAT --to-destination 10.0.0.3:30113
# ChingVideo - tcp nfs 30114 - 30114 -> 30114
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 30114 -j DNAT --to-destination 10.0.0.3:30114
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 30114 -j DNAT --to-destination 10.0.0.3:30114
# ChingVideo - udp nfs 30114 - 30114 -> 30114
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 30114 -j DNAT --to-destination 10.0.0.3:30114
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 30114 -j DNAT --to-destination 10.0.0.3:30114
# ChingVideo - tcp nfs 30115 - 30115 -> 30115
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 30115 -j DNAT --to-destination 10.0.0.3:30115
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 30115 -j DNAT --to-destination 10.0.0.3:30115
# ChingVideo - udp nfs 30115 - 30115 -> 30115
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 30115 -j DNAT --to-destination 10.0.0.3:30115
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 30115 -j DNAT --to-destination 10.0.0.3:30115
# ChingVideo - tcp nfs 30116 - 30116 -> 30116
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 30116 -j DNAT --to-destination 10.0.0.3:30116
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 30116 -j DNAT --to-destination 10.0.0.3:30116
# ChingVideo - udp nfs 30116 - 30116 -> 30116
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 30116 -j DNAT --to-destination 10.0.0.3:30116
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 30116 -j DNAT --to-destination 10.0.0.3:30116
# Dometo - SSH 22 - 40022 > 22
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 40022 -j DNAT --to-destination 10.0.0.4:22
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 40022 -j DNAT --to-destination 10.0.0.4:22
# Dometo- MYSQL 3306 - 43306 > 3306
post-up iptables -t nat -A PREROUTING -i enp1s0 -p tcp --dport 43306 -j DNAT --to-destination 10.0.0.4:3306
post-down iptables -t nat -D PREROUTING -i enp1s0 -p tcp --dport 43306 -j DNAT --to-destination 10.0.0.4:3306
# Dometo - openvpn 8080 - 48080 -> 8080
post-up iptables -t nat -A PREROUTING -i enp1s0 -p udp --dport 48080 -j DNAT --to-destination 10.0.0.4:8080
post-down iptables -t nat -D PREROUTING -i enp1s0 -p udp --dport 48080 -j DNAT --to-destination 10.0.0.4:8080
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
/var/log/php_errors.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/php_errors_cli.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/php_errors_chingatome_eval.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/php_errors_chingatome.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/php_errors_chingatome_qrcode.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/php_errors_chingatome_sousdomaine.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/php_errors_chinginfo.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
/var/log/php_errors_chingview.log
{
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
Pour modifier le higlightning de grep, on rajoute la ligne suivante dans le fichier ~/.bashrc :
export GREP_COLORS='ms=01;33:mc=01;31:sl=:cx=:fn=32:ln=32:bn=32:se=36'
?
Pour tester si une ip failover arrive bien sur mon serveur
ifconfig enp1s0f0:0 inet 51.158.47.4/32
ping -I 51.158.47.4 8.8.8.8

Pour installer proxmox sur scaleway dedibox
PATH="$PATH:/usr/sbin"
dpkg-reconfigure locales
ipv6

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/default/forwarding
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Utilisation de tableaux à 2 dimensions

tab=( 'elt=( "8752/_exoCorrec-0.pdf" "8752/correction0.tex")' 'elt=( "8753/_exoCorrec-0.pdf" "8753/correction0.tex")' 'elt=( "8755/_exoCorrec-0.pdf" "8755/correction0.tex")' )

for a in "${tab[@]}"; do
eval $a;
evince /home/_math/_exercice/${elt[0]} &
emacs /home/_math/_exercice/${elt[1]};
done
vimrc

"colorscheme morning
"highlight Comment ctermbg=Blue ctermfg=White
"highlight Comment ctermbg=DarkGray
"highlight Constant ctermbg=Blue
"highlight Normal ctermbg=Black
"highlight NonText ctermbg=Black
"highlight Special ctermbg=White
"highlight Cursor ctermbg=Green
Pour le dns
il fuaut pour openvpn installe resolvconf

et pour le reste du fichier

Le fichier utilise est
/run/resolvconf/interface/systemd-resolved

Pour actualiser
resolvconf -u

Tout voir
resolvectl status

Possible mais pas tester
/run/resolvconf/interface/systemd-resolved
git config --local -l

git remote -v

Pour connaitre ses voisins
for i in {1..254}; do ping -c1 192.168.43.$i & done
arp -a