CodeSnippetsPlus

Les hardcore snippets... Pas besoin d'expliquer, que ce soit magnifique ou dégueu, ça peut toujours servir ;-)

Ecrire des zero sur tous l'espace vide

One liner:
for i in $( mount | grep '^/' | awk '{ print $3 }' ); do echo "Doing $i/empty_file ... "; dd if=/dev/zero of=$i/empty_file bs=1M ; sync; rm $i/empty_file ; done

Import MySQL depuis backups de bases-tables

Importer dans mysql des backups sql:
for i in $(ls -1 . | sed 's/-.*//' | uniq  | grep -Ev 'proftpd|mysql|information_schema') ; do  bzcat $( ls ${i}-* ) |  mysql -uroot -p<pass> -h10.0.4.52 $i ; echo "=> $i done" ; done
Sortir la liste d'IP par ordre d'apparence:
grep 'phpmyadmin' access.log | awk '{print $1}' | sort -n  | uniq -c | sort -g

Dnsdiff en bash

Oui, parceque non, ca se fait bien en bash:
DOMAIN_LIST='file'; DNS1='New DNS IP'; DNS2='Old DNS IP'
for i in $(cat $DOMAIN_LIST); do echo -ne "Testing '$i' zone ... "; OUTPUT=$(diff <(dig +short @197.255.224.18 AXFR $i | sort) <( dig +short @197.255.224.19 AXFR $i | sort) ); RC=$?; [ $RC -ne 0 ] && echo -en "${Red}FAIL${Nil}\n\nDiff:${OUTPUT}\n\n"; [ $RC -eq 0 ] &&  echo -en "${Cyan}OK${Nil}\n" ; done

En décomposé:

DOMAIN_LIST='file'
DNS1='New DNS IP'
DNS2='Old DNS IP'
for i in $(cat $DOMAIN_LIST); do 
  echo -ne "Testing '$i' zone ... "; 
  OUTPUT=$(diff <(dig +short @197.255.224.18 AXFR $i | sort) <( dig +short @197.255.224.19 AXFR $i | sort) ); RC=$?;
  [ $RC -ne 0 ] && echo -en "${Red}FAIL${Nil}\n\nDiff:${OUTPUT}\n\n";
  [ $RC -eq 0 ] &&  echo -en "${Cyan}OK${Nil}\n" ; 
done

Trouver tous les binaires GTK ou QT

Vive ldd :) :
for i in $(file /usr/bin/* /bin/* | grep ELF | cut -d: -f 1 ); do if [[ ! -z $( ldd $i | grep -iE "gtk|qt"  ) ]]  ; then echo $i ; ldd  $i | grep -iE "gtk|qt" ; fi  ; done

Trouver les IPs libres

Pour trouver toutes les IPs disponibles dans 1 ou plusieurs ranges, trés utile pour vérifier les hotes non utilisé dans les static leases du DHCP:
for range in 192.168.48.1-39 192.168.50.1-44; do nmap -v -sn -n $range -oG - | awk '/Status: Down/{print $2}' ; done 

Configuration vhost de base

La conf d'un vhost pour un petit site-oueb:
<VirtualHost *:80>
        ServerName      www.jeznet.org
        ServerAlias     jeznet.org

        DocumentRoot    /var/www/jeznet.org/www/

        # Avoid duplicate content
        <IfModule mod_rewrite.c>
                RewriteEngine   on
                RewriteCond     %{HTTP_HOST} !^www.jeznet.org$
                RewriteRule     ^(.*) http://www.jeznet.org$1 [QSA,L,R=301]
        </IfModule>

        <Directory /var/www/jeznet.org/www/>
                Options         -Indexes
                AllowOverride   None
        </Directory>
</VirtualHost>
Cette config a plusieurs avantages:
  • On évite le duplicate content en servant à la fois www.jeznet.org et jeznet.org
  • On évite l'utilisation des fichier maudis .htaccess
  • On évite la faille de sécurité la plus simple qui consiste à lister les fichiers
  • On notera aussi que ce n'est pas/plus la conf de ce site. Flemme de taper www, quand tu nous tiens ...

Récupérer le contenu de less

Récupérer le contenu d'un fichier ouvert d'un un less pour le mettre dans un fichier:

  1. Dans less, taper: |
  2. Ensuite: $
  3. Puis la commande dans laquelle sortir le contenu: tee /tmp/my_precious_file

Correspondance Device Mapper et Partitions

Plusieurs méthodes:
ll /dev/mapper/
dmsetup ls
lvdisplay|awk  '/LV Name/{n=$3} /Block device/{d=$3; sub(".*:","dm-",d); print d,n;}'

Grub et MBR

Savoir sur quelle partition est installe Grub:
dd bs=512 count=1 if=/dev/sda 2>/dev/null | strings
Supprimer grub du MBR:
# Backup
dd if=/dev/sda of=/root/mbr.img bs=446 count=1

# Erase
if=/dev/zero of=/dev/sda bs=446 count=1

# Restore
dd if=/root/mbr.img of=/dev/sdx bs=446 count=1
Pour reconfigurer sous Debian, dont choisir la partition d'installation:
sudo dpkg-reconfigure grub-pc

Savoir qui tape le plus

Liste des connexion TCP en cours par ordre : netstat -laptune | awk '{print $5}' | cut -d":" -f1 | sort | uniq -c | sort -g | tail

Mass file editiging

Pour générer les commandes lors d'une migration massive, ici dans le cas d'apache:
for i in site1 site2 site3 ... ; do grep -rin  $i /etc/apache2/sites-enabled/  | grep -i servername | awk '{print "vim " $1}' | sed 's/:$//'  | sed -e  's/:/ +/g'  ; done

Mise en prod sélective d'un site

Fort pratique pour afficher un mini-site de maintenance pour un vhost donné, sauf pour une liste d'IPs:
# AWH: Redirections AWH
RewriteCond %{REMOTE_HOST} !5.49.182.99
RewriteCond %{REMOTE_HOST} !89.31.151.104


# Redirection vers la maintenance
RewriteRule ^(.*)$ /var/www/maintenance/$1 [C]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /var/www/maintenance/index.php [L]

Connection à MySQL sous Deiban et dérivés

Voila comment on se connecte à un mysql sans connaitre de mot de passe, et à condition d'etre sous Debian ou dérivé, et aussi d'être root:
mysql  --defaults-file=/etc/mysql/debian.cnf 

Télécharger un certificat SSL d'un serveur

Pour récupérer un fichier .crt et éventuellement le mettre dans les certificat reconnus:
openssl x509 -in <(openssl s_client -connect server:port -prexit 2>/dev/null)

Débugger avec telnet et TLS

Bin oui, parceque telnet, c'est bien pratique, mais sur la prod, en mode sécurisé, c'est plus compliqué. Alors voici la méthode

  • Clair: We (the client) would therefore enter the following at the command prompt:
    telnet remoteserver.com 25
  • TLS: If you wish to connect to a server using SSL, you can use openssl with the following command (note the default port is 465, not 25):
    openssl s_client -crlf -connect remoteserver.com:465
  • StartTLS: To connect to an SMTP server using TLS, use the following:
    openssl s_client -starttls smtp -crlf -connect remoteserver.com:25

Source

Faire une copie de certains fichiers en conservant leur structure

On fait un find pour faire notre filtre: find ./dir -name "*.mov" | xargs tar cif mov.tar Pour récupérer la selection: tar xvf /path/to/parent/directory/of"dir"/mov.tar

La taille des process apache La commande suivante va calculer la totalité de la mémoire utilisé par Apache ainsi que la taille des processus Apache. ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB):" x/1024; print "Average Proccess Size (MB)" x/((y-1)*1024)}' Traduit de http://notes.depad.fr/software/apache/calcule-la-memoire-consomme-par-apache.html

Envois de mail conditionel

Pour envoyer un mail que s'il y'a du contenu dans un fichier:
cat /dev/null > $LOG
[...]
if [[ -s "$LOG" ]] ; then
        cat $LOG | mail -s '[ERROR] Synchro bdd1 -> bdd2' user@mail.com
fi;

Mysql Processlist par temps d'exécution

Simple, et fonctionne depuis mysql 5.1:
mysql -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST order by Time ;' | less -S 

Recover rapide d'un fichier

Vous venez de supprimer le fichier de conf sur lequel vous avez passé 3 jours? Y'a moyen d'en récupérer tout ou une partie si vous n'avez pas fait trop d'écriture sur le disque:
grep -a -i -A 50 -B 200  'PATTERN' /dev/mapper/system-home  > recover_screen

Tester si une communication client/server fonctionne en TCP/UDP avec netcat/nc

Sur le serveur, on lance nc, en écoute sur un port UDP:
nc -luv -p 60004
Sur le client, on essaye de se connecter:
nc -vu mon_serveur.org 60004

Et si l'on écrit d'un coté, ça devrait afficher de l'autre ;-) Sinon, ça veut dire que ça ne marche pas.

Pour la partie TCP:

Envoyer un dossier via le presse-papier

Compression:
tar czf - myfiles/ | base64
Vous prenez l'output et vous pouvez le copy/paste. Pour decompresser, coller l'output dans un fichier data, et lancer la commande pour extraire directement:
base64 -d < data  | tar tvzf -

Faire un dump de la configuration de Postfix

Et me l'envoyer ... Sinan, vous le piper dans un autre truc:
{ echo -e "Conf: main.cf\n========\n" ; postconf -nf ; echo -e "\n\nConf: master.cf\n========\n"; postconf -Mf ;  } | paste.jeznet.org

Toujours plus de folies avec APT

Comment virer les packets impossible à virer:
dpkg --purge --force-all package
Ou alors (Non testé):
mv /var/lib/dpkg/info/PAQUET.* /tmp/
dpkg --remove --force-remove-reinstreq PAQUET

Redirection avancées de domaines

Note de contexte: Ici, tout le traffic web arrive sur le port 80, même le trafic HTTPS, qui est lui déchiffré en amont par Pound (Proxy HTTPS). Et on veut tous les domaines soient dispo en HTTP et HTTPS, sans qu'il y'a ai de pages/domaines morts.

On peut gérer assez simplement ce type de redirections très courantes avec le mod_macro d'Apache2. Pour ce faire, nous allons définir 3 macros dans un fichier /etc/apache2/con.d/macros.conf:
<IfModule mod_macro.c>

        # Redirect all request to HTTP or HTTPS vhost
        <Macro redirect %destination>

                RewriteEngine   On
                RewriteCond     %{HTTP:X-Forwarded-Proto}       https
                RewriteCond     %{HTTP_HOST}                    !^%destination$
                RewriteRule     (.*)    https://%destination$1  [R=301,L]

                RewriteCond     %{HTTP:X-Forwarded-Proto}       !https
                RewriteCond     %{HTTP_HOST}                    !^%destination$
                RewriteRule     (.*)    http://%destination$1   [R=301,L]

        </Macro>

        # Redirect all request to HTTP vhost
        <Macro redirect_http %destination>

                RewriteEngine   On
                RewriteCond     %{HTTP_HOST}                    !^%destination$ [or]
                RewriteCond     %{HTTP:X-Forwarded-Proto}       https
                RewriteRule     (.*)    http://%destination$1   [R=301,L]

        </Macro>

        # Redirect all request to HTTPS vhost
        <Macro redirect_https %destination>

                RewriteEngine   On
                RewriteCond     %{HTTP_HOST}                    !^%destination$ [or]
                RewriteCond     %{HTTP:X-Forwarded-Proto}       !https
                RewriteRule     (.*)    https://%destination$1  [R=301,L]

        </Macro>
</IfModule>
Maintenant, vous pouvez faire des confs du type:
# Redirige tout le trafic vers le HTTPS d'un autre domaine.
<VirtualHost *:80>
        ServerName     jeznet.org
        Use             redirect_https  www.jeznet.org
        DocumentRoot    /var/www/jeznet.org/roundcube
</VirtualHost>

# Redirige le trafic de http(s)://jeznet.org vers http(s)://www.jeznet.org, en gardant le protocole d'origine
<VirtualHost *:80>
        ServerName     jeznet.org
        Use             redirect  www.jeznet.org
        DocumentRoot    /var/www/jeznet.org/roundcube
</VirtualHost>
Bien sur, on n'oubliera pas de charger le module mod_macro et de relancer Apache. Et une autre gratuite, pour protéger un dossier rapidement:
        <Macro auth_basic %location %token>

                # Attention, ici on parle bien de "Location". Si vous n'êtes pas sure de vous, changez-la par "Directory", qui est plus facile/simple a utiliser. 
                <Location %location>
                        Deny from all
                        #Allow from (You may set IP here / to access without password)
                        AuthUserFile    /etc/apache2/users_%token
                        AuthName authorization
                        AuthType Basic
                        #Satisfy Any # (or all, if IPs specified and require IP + pass)
                                    # any means neither ip nor pass
                        require valid-user

                </Location>
        </Macro>


Page last modified on July 07, 2017, at 07:09 PM EST