[Debian Wheezy] Surveille ta mailq!

Voici comment superviser simplement la mailq de votre serveur SMTP (Postix par exemple).

Installer le serveur snmp :

apt-get install snmpd

Rajouter dans /etc/snmp/snmpd.conf (w.x.y.z est l’IP du serveur de supervision) les 2 lignes suivantes :

rocommunity public w.x.y.z
extend mailqstats /etc/snmp/mailqstats.sh

Vous pouvez changer le community « public » pour un tout autre nom…

Créer le fichier /etc/snmp/mailqstats.sh affichant le nombre de courriel de la mailq :

#!/bin/bash
mailq | tail -n 1 | awk '{if (NF > 4) {print $5} else {print 0}}'

Permettre l’exécution du fichier :

chmod +x /etc/snmp/mailqstats.sh

Dans /etc/hosts.allow, rajouter une autorisation d’accès pour votre serveur de supervision :

snmpd: w.x.y.z

Depuis votre serveur de supervision, lancer un snmpget :

snmpget -v2c -c public gretchen 1.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.97.105.108.113.115.116.97.116.115.1
iso.3.6.1.4.1.8072.1.3.2.4.1.2.10.109.97.105.108.113.115.116.97.116.115.1 = STRING: "104"

On a 104 mail dans la mailq!

Utiliser centreon pour superviser et grapher automatiquement cette mailq avec le service générique check_centreon_snmp_value!

Génération clés SSH

Génération des clés privées et publiques

machine-locale:$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/login/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/login/.ssh/id_dsa.
Your public key has been saved in /home/login/.ssh/id_dsa.pub.
The key fingerprint is:
11:ee:bc:47:b0:c8:40:03:4f:a0:09:a4:71:39:93:93 login@machine-locale
The key's randomart image is:
+--[ DSA 1024]----+
|+.+*+   .        |
|o=E+ . . .       |
|+  +o   +        |
|     o + +       |
|      o o .      |
|         +       |
|        . .      |
|         .       |
|                 |
+-----------------+

Transfert du fichier contenant la clé publique sur la machine distante

machine-locale : cat ~/.ssh/id_dsa.pub | ssh login@machine-distante "cat - >> ~/.ssh/authorized_keys"

[debian] PDC Linux Samba pour 70 clients XP

[en cours de création]
à venir le fichier smb.conf détaillé puis les différentes stratégies et commandes…

On a 4 salles informatiques avec entre 15 et 20 postes clients Windows XP Pro SP2. L’idée est d’avoir un compte utilisateur unique pour tout le monde avec un profil obligatoire : non modifiable (les profils sont effacés du poste client lors de la déconnexion… donc il est re-téléchargé à l’ouverture de la session)

Sur le serveur :

aptitude install samba
groupadd machines

# comptes étudiants :
useradd --home "/dev/null" --shell "/bin/false" utilisateur
# comptes enseignants :
useradd --home "/dev/null" --shell "/bin/false" enseignant
# L'enseignant est dans le groupe utilisateur :
adduser enseignant utilisateur

mkdir /etc/samba/netlogon
mkdir /etc/samba/profile

Sur le client

Les postes clients seront clonés après avoir installé convenablement un poste qui nous servira de modèle.

– Installation de XP Pro
– Installation d’un antivirus
– Windows Update
– Installation des logiciels de base : OpenOffice, Archiveur…
– Base de registre :

Afin d’éviter que les profils restent enregistrés –>
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon
« DeleteRoamingCache »=dword:00000001

– Intégration du poste au domaine
– Mise en place d’un utilisateur du domaine comme administrateur local.

[debian] Comment éteindre des ordinateurs Windows XP depuis une debian

Voici le script qui permet d’éteindre automatiquement tous mes postes Windows XP depuis le contrôleur de domaine (PDC) Linux samba situé dans le même sous réseau (192.168.0.0/24) :


#!/bin/sh
if [ $# = 0 ]; then
        echo "Usage : $0 nombre-de-secondes-avant-arret"
        exit 1
fi
echo "Ce programme eteind toutes les machines comprises entre 192.168.0.2 et 192.168.0.150.
echo "Vous avez 10 secondes pour faire CTRL-C."
sleep 10
for IP in $(nmap -sP 192.168.0.2-150 | grep "appears to be up" | cut
-d" " -f2);do
/usr/bin/net rpc SHUTDOWN -f -I $IP -U utilisateur_du_domaine%mot_de_passe -t $1
done

PS: Les postes Windows XP Pro (sp2) ont leur firewall Windows d’activé, et, l’exception « Partage de fichiers et d’imprimante » est cochée. De plus, dans les stratégies de sécurité locale des postes XP, j’autorise l’utilisateur « RESEAU » à « Forcer l’arrêt à partir d’un système distant ».

Les utilisateurs des postes XP sont de simples utilisateurs (groupe « utilisateurs »), ils n’ont donc pas la possibilité d’exécuter la commande shutdown de Windows afin d’éteindre un ordinateur distant (ils ont un message d’erreur…).

Ncftp pour échanger des fichiers entre 2 serveurs

Pour transférer des fichiers d’un serveur A vers un serveur B, je n’ai, parfois, pas d’autre alternative que d’utiliser ftp.
Voici un exemple de scripts shell (un sur A et l’autre sur B) permettant simplement le transfert automatisé de fichiers.

/usr/local/scripts/envoi-fichiers.sh sur le serveur A :


#!/bin/sh
#  toutes les nuits on va envoyer des fichiers via ncftp sur ftp anonymous
cd /home/moi/mesfichiers
tar cvf monarchive.tar *
/usr/bin/ncftp monftp.mondomaine.fr << EOF
cd echange
bin
put -f monarchive.tar
quit
EOF

Dans le cron du serveur A :

######## On envoie les fichiers a 6h0 ################
0 6 * * * /usr/local/scripts/envoi-fichiers.sh > /dev/null 2>&1

/usr/local/scripts/recup-fichiers.sh sur le serveur B :


#!/bin/sh
#  toutes les nuits on recupere via ncftp sur ftp anonymous
cd  /home/moi/mesfichiers
/usr/bin/ncftp monftp.mondomaine.fr << EOF
cd echange
bin
get  monarchive.tar
quit
EOF
tar xvf  monarchive.tar

Dans le cron du serveur B :


######## On recupere les fichiers a 6h15 ################
15 6 * * * /usr/local/scripts/recup-fichiers.sh > /dev/null 2>&1

Comment détecter la distribution Linux sur laquelle on est…

Voici le script suivant (adapté d’après ce site) :


#!/bin/sh
# Detects which OS and if it is Linux then it will detect which Linux Distribution.

OS=`uname -s`
REV=`uname -r`
MACH=`uname -m`

GetVersionFromFile()
{
        VERSION=`cat $1 | tr "n" ' ' | sed s/.*VERSION.*= // `
}

if [ "${OS}" = "SunOS" ] ; then
        OS=Solaris
        ARCH=`uname -p`
        OSSTR="${OS} ${REV}(${ARCH} `uname -v`)"
elif [ "${OS}" = "AIX" ] ; then
        OSSTR="${OS} `oslevel` (`oslevel -r`)"
elif [ "${OS}" = "Linux" ] ; then
        KERNEL=`uname -r`
        if [ -f /etc/fedora-release ] ; then
                DIST='Fedora'
                PSUEDONAME=`cat /etc/fedora-release | sed s/.*(// | sed s/)//`
                REV=`cat /etc/fedora-release | sed s/.*release // | sed s/ .*//`
        elif [ -f /etc/redhat-release ] ; then
                DIST='RedHat'
                PSUEDONAME=`cat /etc/redhat-release | sed s/.*(// | sed s/)//`
                REV=`cat /etc/redhat-release | sed s/.*release // | sed s/ .*//`
        elif [ -f /etc/SuSE-release ] ; then
                DIST=`cat /etc/SuSE-release | tr "n" ' '| sed s/VERSION.*//`
                REV=`cat /etc/SuSE-release | tr "n" ' ' | sed s/.*= //`
        elif [ -f /etc/mandrake-release ] ; then
                DIST='Mandrake'
                PSUEDONAME=`cat /etc/mandrake-release | sed s/.*(// | sed s/)//`
                REV=`cat /etc/mandrake-release | sed s/.*release // | sed s/ .*//`
        elif [ -f /etc/debian_version ] ; then
                DIST="Debian `cat /etc/debian_version`"
                REV=""

        fi
        if [ -f /etc/UnitedLinux-release ] ; then
                DIST="${DIST}[`cat /etc/UnitedLinux-release | tr "n" ' ' | sed s/VERSION.*//`]"
        fi

        OSSTR="${OS} ${DIST} ${REV} (${PSUEDONAME} ${KERNEL} ${MACH})"

fi

Exemple d’utilisation :


[root@menthe lenorcy]# sh detect_distro.sh
Linux Fedora 3 (Heidelberg 2.6.12-1.1381_FC3smp i686)

Remplacer un retour chariot par un espace

Après des essais avec sed et awks, je me suis aperçu que tr le faisait également très bien!

L’exemple suivant montre le remplacement d’un retour à la ligne par une virgule suivie d’un espace :


perceval:~# cat monfichier.txt
1
2
3
perceval:~# cat monfichier.txt | tr -s "n" ", "
1, 2, 3,