Ménage d'hiver partie 2

This commit is contained in:
Gabriel Detraz 2015-11-24 00:47:25 +01:00
parent b9bd5ab1fc
commit bb0bedf1fd
9 changed files with 204 additions and 205 deletions

47
archive/surveillance/debris Executable file
View file

@ -0,0 +1,47 @@
#!/bin/sh
#Script de verification des debris dans /home et /home/mail
TMPFILE=`mktemp`
( for i in $( ls -l /home | awk '$3 != $8 { print $8 }' )
do id $i 2> /dev/null > /dev/null || echo $i
done ) | grep -v -E "^(ca|cimetiere|ftp|club|lost\+found|sqlgrey|squid|tftpboot)$" > $TMPFILE
if [ -s $TMPFILE ]
then
echo "*** Homes a supprimer ***"
cat $TMPFILE
echo
fi
(for i in $( getent passwd | awk -F ":" '{ print $3 }' | sort | uniq -c | awk '$1 > 1 { print $2 }' )
do if [ $i -eq 120 ] #Respbats
then l=`getent passwd | awk -F ":" '$3 == "120"'`
if [ `echo "$l" | wc -l` -gt 2 ]
then echo "$l"
fi
else getent passwd | awk -F ":" '$3 == "'$i'"'
fi
done) > $TMPFILE
if [ -s $TMPFILE ]
then
echo "*** uid partages ***"
cat $TMPFILE
echo
fi
(ls -l /home /home/mail | awk '( substr($1,6,1) == "w" && $4 == "users" ) || substr($1,9,1) == "w"') > $TMPFILE
if [ -s $TMPFILE ]
then
echo "*** /home/mail ouverts a tous ***"
cat $TMPFILE
echo
fi
ls -l /home/ /home/mail/ | awk '$3 != $8' | grep -v -E " (ca|cimetiere|ftp|club|lost\+found|mail|sqlgrey|squid|tftpboot)$" > $TMPFILE
if [ -s $TMPFILE ]
then
echo "*** Erreurs de droits ***"
cat $TMPFILE
fi
rm -f $TMPFILE

View file

@ -0,0 +1,37 @@
# Makefile
# --------
# Copyright : (c) 2008, Jeremie Dimino <dimino@crans.org>
# Licence : BSD3
# Notes:
#
# Il faut créer un lien de ce fichier depuis le /usr/scripts vers le
# dossier contenant les paquets du crans (/puftp/custom) sur la
# machine avec le ftp (ftp.crans.org)
.PHONY: all Packages Sources clean
all: Release Release.gpg
Release: Packages Packages.gz Packages.bz2 Sources Sources.gz Sources.bz2
apt-ftparchive -o "APT::FTPArchive::Release::Suite=crans" release . > Release
Release.gpg: Release
rm -f Release.gpg
@echo "*** Pensez à exécuter la commande suivante sur une machine avec votre clef gpg ***"
gpg -asbo Release.gpg Release
Packages:
apt-ftparchive packages . > Packages
Sources:
apt-ftparchive sources . > Sources
%.gz: %
gzip -c $< > $@
%.bz2: %
bzip2 -c $< > $@
clean:
rm -f Packages Packages.gz Packages.bz2 Sources Sources.gz Sources.bz2 Release Release.gpg

89
archive/utils/corbeau Executable file
View file

@ -0,0 +1,89 @@
#! /bin/bash
# Mettre cette variable à 1 si on veut que le corbeau soit actif.
ACTIF=0
TEMP="$(mktemp)"
trap "rm -f ${TEMP}" EXIT
# On désactive spamassassin car il semble y avoir des problèmes
# (de toute façon, c'est pas super utile vu l'autre vérification)
# spamassassin -e -p /etc/spamassassin/corbeau.conf > ${TEMP}
cat > ${TEMP}
# Est-ce que le corbeau est actif ?
if [[ $ACTIF == 1 ]]; then
# Est-ce du spam ?
if [[ $? == 0 ]]; then
# Est-ce que ça contient le mot de passe ?
if cat ${TEMP} | egrep -q "^Mot de passe : corbeau$"; then
# On loggue tout dans /var/log/corbeau
DIR="/var/log/corbeau"
FILE="corbeau_$(date +%Y_%m_%d_%H_%M_%S)";
# Création d'une clef AES aléatoire de 256 bits.
dd if=/dev/urandom bs=32 count=1 | sha256sum | head -c 32 >> ${DIR}/keys/${FILE}.key 2>> /var/log/corbeau/corbeau.err
# Chiffrement du mail venant vers corbeau@crans.org à l'aide de la clef
cat ${TEMP} | gpg --armour --symmetric --cipher-algo aes256 --passphrase $(cat ${DIR}/keys/${FILE}.key) >> ${DIR}/${FILE}.log 2>> /var/log/corbeau/corbeau.err
# Cf ssss, l'idée est de finir par splitter la clef AES à l'aide de ssss-split, et d'en distribuer un bout à chaque membre du C.A., il faudrait au minimum #ca/2 bouts de la clef pour la reconstruire, et débaguer le corbeau.
# Puis on envoit la version modifiée.
cat ${TEMP} | egrep -v "^Mot de passe : corbeau$" | \
formail -I "Received" \
-I "From" \
-I "Sender" \
-I "DKIM-Signature" \
-I "DomainKey-Signature" \
-I "X-Google-Sender-Auth" \
-I "X-Original-To" \
-I "X-Virus-Scanned" \
-I "X-Greylist" \
-I "Delivered-To" \
-I "To" \
-I "Message-ID" \
-I "User-Agent" \
-I "X-Newsreader" \
-I "Organization" \
-I "Return-Path" \
-A "Message-Id: $(date '+<corbeau.%s@crans.org>')" \
-A "From: corbeau@crans.org" \
-A "Newsgroups: crans.radio-ragots" \
-A "Path: Corbeau" | \
rnews 2>> /var/log/corbeau/corbeau.err
# Le mail ne contient pas le mot de passe, on répond à l'expéditeur
else
( cat ${TEMP} | formail -r -A "From: corbeau@crans.org" -A "Content-Type: text/plain; charset=UTF-8; format=flowed" ; cat << EOF
Bonjour,
Ton mail n'est pas valide car il manque la ligne suivante :
"Mot de passe : corbeau"
Pour plus d'informations :
http://wiki.crans.org/VieCrans/ForumNews/LeCorbeau
--
Le corbeau
EOF
) | /usr/sbin/sendmail -t
fi
fi
# Corbal inactif, on répond à l'expéditeur.
else
( cat ${TEMP} | formail -r -A "From: corbeau@crans.org" -A "Content-Type: text/plain; charset=UTF-8; format=flowed" ; cat << EOF
Bonjour,
Le corbeau est actuellement désactivé. Il est donc inutile d'essayer de t'en servir.
En te remerciant de ta compréhension,
--
Le corbeau, désactivé.
EOF
) | /usr/sbin/sendmail -t
fi

View file

@ -0,0 +1,83 @@
# -*- coding: utf-8 -*-
class PagePerso:
"""Classe représentant la page perso d'une personne"""
home = "/home"
www = "/www"
def __init__(self, login):
"""Instanciation avec le login' de la personne"""
self.login = login
self.home = "%s/%s" % (self.home, login)
_info = {}
self._load_informations()
def _filename( self ):
return "%s/.info" % self.home
def _load_informations(self):
try:
lignes = file( self._filename() )
except IOError:
lignes = []
# self._info est un dictionnaire qui reprend le contenu du .info
self._info = dict( map( lambda z: (unicode(z[0].lower(),"iso-8859-15"),
unicode(z[1],"iso-8859-15")),
filter(lambda w: len(w) == 2 and len(w[1]),
map(lambda x: map(lambda y: y.strip(),
x.split(":")),
lignes))))
def _save_informations( self ):
myfile = file(self._filename(), "w")
for aKey in self._info.keys():
myfile.write("%s:%s\n" % (aKey, self.
_info[aKey]) )
myfile.write("\n")
def save( self ):
self._save_informations()
def chemin(self):
"""Chemin vers le www"""
return u"%s%s" % (self.home, self.www)
def url(self):
"""URL vers la page perso"""
return u"http://perso.crans.org/%s/" % self.login
def nom( self ):
return self._info.get("nom", "")
def setNom( self, nom ):
self._info["nom"] = nom
def slogan( self ):
return self._info.get("slogan", "")
def setSlogan( self, slogan ):
self._info["slogan"] = slogan
def logo(self):
"""URL du logo s'il y en a un"""
logo = self._info.get("logo", None)
if logo:
# Le logo peut être en absolu ou en relatif
if logo.startswith(self.chemin()):
logo = logo.replace("%s/" % self.chemin(), "")
if os.path.isfile("%s/%s" % (self.chemin(), logo)):
return u"%s%s" % (self.url(), logo)
return u"http://perso.crans.org/pageperso.png"
def __str__(self):
"""Renvoie le code HTML correspondant au fichier .info"""
html = [ u'<div class="vignetteperso">',
u'<a href="%s">' % self.url(),
u'<img src="%s" alt="%s">' % (self.logo(), self.login),
u'</a><br>',
self.info("nom") and u'<b>%s</b><br>' % self.info("nom") or u'%s<br>' % self.login,
self.info("devise") and u'<i>%s</i>' % self.info("devise") or u'',
u'</div>' ]
return u'\n'.join(html)

View file

@ -0,0 +1,49 @@
#!/bin/bash
# run-bcfg2.sh
# ------------
# Copyright : (c) 2008, Jeremie Dimino <jeremie@dimino.org>
# Licence : BSD3
# Script pour lancer bcfg2 -v -I sur tous les serveurs.
#
# Pour l'utiliser vous devez le copier sur votre ordi, et le lancer
# avec en argument une liste de serveurs:
#
# $ ./run-bcfg2.sh rouge zamok
#
# Sans aucun serveur il récupère la liste de tous les serveurs depuis
# la conf de bcfg2.
# Pour que ça marche il faut que vous puissiez vous connecter aux
# serveurs sans mot de passe et que vous aiyez déjà accepté la clef
# pour chaque serveur
# Liste des machines à contacter
if [ $# = 0 ]; then
echo "Récupération de la liste des machines depuis la conf de bcfg2..."
HOSTS=$(ssh vert.adm.crans.org grep -o "'name=\"[^\"]*\"'" /var/lib/bcfg2/Metadata/clients.xml | cut -d'"' -f2)
else
HOSTS="$@"
fi
echo "Veuillez taper votre mot de passe du crans:"
read -s -p "password: " password
echo
echo "Obtention des tokens pour sudo..."
pids=""
for host in $HOSTS; do
echo $password | ssh $host sudo -S true & pids="$pids $!"
done
# On attend que tous les sudo soient terminés
for pid in $pids; do
wait $pid
done
echo "Lancement de bcfg2 sur tous les serveurs"
for host in $HOSTS; do
echo " $host"
x-terminal-emulator -title $host -e ssh -t $host sudo bcfg2 -v -I &
done

49
archive/utils/wol.py Executable file
View file

@ -0,0 +1,49 @@
#! /usr/bin/env python
import os, sys
sys.path.append('/usr/scripts/gestion')
from ldap_crans_test import crans_ldap
if len(sys.argv) > 1 : #Affichage de la syntaxe
if (sys.argv[1] == '-h' or sys.argv[1] == '--help'):
print 'Syntaxe:'
print ' wol nom_de_la_machine'
sys.exit(0)
login = os.getlogin()
db = crans_ldap()
try:
aid = db.search('login=%s' % login)['adherent'][0]
except IndexError:
print 'Adherent introuvable !'
sys.exit(0)
if len(sys.argv) > 1 : #on a un nom de machine a reveiller
nom = sys.argv[1]
print 'Recherche de la machine %s' % nom
try:
mid = db.search('host=%s' % nom)['machine'][0]
except IndexError:
print 'Machine non trouvee!' #l'user est un manche et tente de reveiller les morts
sys.exit(0)
else:
print 'Machine trouvee!' #on a maintenant une machine a reveiller
if (mid not in aid.machines()) : #c'est sa machine ? Si oui, tout va bien, sinon...
if 'Nounou' not in aid.droits() : #c'est une nounou? Si oui, tout va bien, sinon au revoir.
print 'Vous n\'avez pas le droit de reveiller %s, ce n\'est pas votre machine' % nom
sys.exit(0)
#On a une machine, et l'user a le droit de la reveiller, donc on lance le paquet magique
etherwake = os.popen("/usr/bin/sudo /usr/sbin/etherwake -i crans %s" % mid.mac())
print 'Paquet magique envoye a %s' % nom
else: #On n'a pas de nom de machine, on propose les machines de l'adherent
print 'Quelle machine voulez vous reveiller ?'
for machines in aid.machines() :
print ' - %s' % machines.nom()
print 'Syntaxe:'
print ' wol nom_de_la_machine'