Installation d'un serveur
GNU/Linux pour salle de cours
Par LoiselJP
Le 09/10/2010
(Révision 19/02/2011)
Ce document décrit le plus succinctement possible une manière, parmi d'autres, de créer un serveur Linux pour salle de cours.
Ce serveur devra répondre à plusieurs critères:
• Gérer des utilisateurs dans un domaine: le serveur sera donc un contrôleur de domaine,
• Des partages de différents niveaux devront être proposé,
• Plusieurs niveaux d'utilisateur doivent être proposés (Professeurs/administrateur, autre Encadrement, Elèves),
• Afin de pouvoir traiter des responsabilités de chacun, le serveur proposera un filtrage des connexion Internet.
Note: Une information préalable à l'utilisation des postes sera dispensée à chaque utilisateur qui se doit d'être averti qu'un filtrage et un suivi d'utilisation est mis en place.
Dans ce document il est question de créer un serveur particulier, quelques connaissances de base sont nécessaires ce qui permettra par la suite d'éviter de longues explications et se limiter aux différentes commandes et modifications de fichier de configuration.
Il n'est donc pas question ici de voir ou revoir toutes les bases de Linux. Pour appliquer cette opération, on suppose alors que sont acquis :
- L'installation de base d'un poste de travail linux,- La gestion des utilisateurs:
- Ajout/suppression d'utilisateur,
- Gestion des mots de passe,- Processus init:
- Le lancement des services et démons,
- Les runlevels, (dans le cas du choix d'uns distribution avec desktop), - Scripts de lancement des services, - L'installation de logiciel:
- Principe des paquets et leurs dépendances,
- Les "dépots" de paquets,
- Principe d'installation manuelle,
- Les principales commandes du shell,
- Utilisation du programme man et l'aide des commandes (si vous ne savez pas appliquer ce qui est demandé).
v cd - changer de répertoire,
v vi - éditeur système,
v df - afficher l'espace disponible,
v more - afficher un fichier page à page, (la touche x permet de passer une page), ? grep - filtrer la sortie,
v chmod - changer les droits d'accès à un fichier, (chmod +x rendre un fichier exécutable),
v cp - copier de fichiers,
v find - rechercher de fichiers,
v man - afficher l'aide sur une commande,
v mkdir - créer un dossier,
v mv - déplacer un fichier,
v passwd - changer le mot de passe,
v ps - lister des process,
v pwd - afficher le chemin du dossier en cours,
v rm - détruire un fichier,
v adduser - useradd (suivant la distribution et l'installation) ajouter un utilisateur,
v delluser - userdell (suivant la distribution et l'installation) supprimer un utilisateur, ? wget - permet de télécharger un fichier, elle est souvent utilisée pour les installations manuelles,
v at - exécute une action à une heure définie,
v chgrp - change un fichier de groupe,
v chown - changement de propriétaire d'un fichier,
v date - affiche/modifie la date,
v diff - affiche la différence entre 2 fichiers,
v du - indique l'espace disque utilisé,
v egrep - recherche dans un fichier,
v ftp - transfert de fichiers,
v grep - recherche dans un fichier,
v history - liste des dernières commandes utilisées,
v kill - arrêter un process,
v sh ou ksh ou rsh - appel d'un shell (interpréteur de commandes),
v ln - crée un lien sur un fichier,
v ls - liste des fichiers,
v rmdir - détruit un dossier,
v set - afficher les variables d'environnement,
v sh - appel du shell de base (Bourne shell sous Unix),
v sort - trie les ligne d'un fichier,
v tar - sauvegarde / compresse,
v w ou who ou whoami - liste les utilisateurs connectés au système, ? write - envoie un message à un utilisateur du système.
Le signe | (Pipe) permet de combiner les commandes ainsi par exemple:
v ls -l - liste les fichiers.
v grep .conf - filtre la sortie en ne laissant passer que le lignes contenant ".conf". ? combinées ls -l | grep .conf liste les fichiers contenant .conf.
v /etc - contient la plupart des fichiers de configuration du système Linux, ? /dev - contient les fichiers correspondant au matériel, par exemple:
- /dev/hda - correspond au premier disque IDE,
- /dev/hda1 - correspond à la partition 1 du premier disque IDE,
- /dev/hdb - correspond au second disque IDE,
- /dev/sda - correspond au premier disque série (Sérial ATA, USB ),
- .
v /proc - contient les fichiers de processus, avec pour les fichiers portant un numéro: leur ID,
v /var - contient la plupart des variables,
v /var/log - contient la plupart des fichiers de log générés par le système,
v init.d/ - contient les scripts de démarrage (/etc/init.d)
v mysql/ - contient les fichiers de configuration de mysql, (/etc/mysql)
v network/ - contient la configuration des couches réseau, (/etc/netword)
v ppp/ - contient la configuration de ppp (modems ),
v - contient les scripts de démarrage System V,
v rcx.d/ - contient les scripts de démarrage correspondant au niveau runlevel X (X peut être: 0 1 2 3 4 5 ou 6),
v skel/ - contient le squelette pour adduser,
v ssh/ - contient les fichiers de configuration pour SSH,
v snmp/ - contient les fichiers de configuration du démon SNMP, ? terminfo/ - contient la base de données sur les terminaux,
Les dossiers sont variables d'une distribution à l'autre:
v /var/cache/apt - n'existe que sur les distributions utilisant aptitude (apt-get) ,
v /var/www - contient les fichiers du serveur http sur la distribution suse ce dossier se trouve en /srv/www
v /etc/init.d - contient les scripts de démarrage, mais se trouve sur certaines distributions en rc.d/
? L'administrateur Linux doit faire preuve de largesse d'esprit avec les fichiers, dossiers et commandes. Bien que très proches dans la plupart des cas, on peut noter quelques différences d'une distribution à l'autre.
v inittab - contient la configuration des procédures de démarrage (runlevels),
v fstab - contient les points de montage permanents,
v /var/log/messages contient les messages système,
v - Contient les sources de paquets (uniquement pour une distribution avec aptitude),
v /etc/sudoers - contient la configuration du programme sudo qui autorisera le lancement d'applications nécessitant des droits root à un utilisateur,
Sous Linux la plupart des actions sont exécutées à partir de scripts, les principaux scripts se trouvent dans /etc.
/etc/init.d contient les scripts de démarrage et d'arrêt du serveur.
- La toute première ligne du fichier doit contenir le nom de l'interpréteur à utiliser. Cette ligne doit commencer par "#!" suivi de l'exécutable à utiliser. Pour un shell-script bash, on aura donc en début de fichier : "#!bash" ou "#!/bin/bash" alors que pour sh cela sera "#!sh",
- Une ligne commençant par "#" n'est pas exécutée. La ligne est donc en commentaire,
- Une variable est reconnaissable par sa première lettre "$",
- La variable $1 contient le 1er paramètre passé, la variable $2 le second .
- La variable $0 contient le nom du script, alors que la variable $* contient la ligne d'argument,- Le fichier devra être exécutable pour cela la commande chmod +x nom_du_script permet de placer en mode exécutable le script voulu.
? Il n'est pas nécessaire pour l'administrateur d'avoir une grande culture sur le contenu d'un script, mais il est indispensable d'en maîtriser le minimum, il est courrant de développer quelques lignes pour la création de sauvegarde, pour une action particulière définie dans le crontab
Chacun choisira la distribution de son choix, dans le cas présent toute l'installation est donnée pour une version à base de Debian.
Ici on effectuera une installation de base suivant ce modèle:
# Installation à partir d'un CDrom netinstall debian # Avec en sélection des paquets :
# pas d'interface graphique
# serveur web
# serveur de fichiers
# seveur sql
# serveur de dns
? On pourra choisir également une distribution Ubuntu, voir un serveur Ubuntu qui n'installera pas d'interface graphique.
Lancer les commandes suivantes, afin d'installer les paquets minimums nécessaires pour la suite des opérations:
apt-get update apt-get update --fix-missing apt-get install ssh apt-get install zip apt-get install samba |
A partir du fichier interfaces (/etc/network/interfaces) placer une IP fixe pour le serveur ce qui faciletera son utilisation et son accès. vi /etc/network/interfaces
Placer dans le fichier (à adapter)
# Interface reseau de bouclage auto lo iface lo inet loopback address 127.0.0.1 netmask 255.0.0.0 # carte reseau en ip statique (ou auto) allow-hotplug eth0 iface eth0 inet static # <- a adapter suivant le besoin address 192.168.1.10 broadcast 192.168.1.255 |
netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.1 auto eth0
Placer le host name au besoin
vi /etc/hostname
cours-svr
Idem pour les noms hosts
vi /etc/hosts
Redémarrer le réseau avec cette commande /etc/init.d/networking restart
Dès lors que l'adresse IP de votre serveur est fixée, vous pouvez désormais atteindre votre sevreur en passant par SSH.
Putty qui est un logiciel libre vous permet cela en toute simplicité:
Depuis un autre poste, par une fenêtre de commande, vous pourrez gérer votre serveur sans besoin de travailler directement dessus.
Le Copier/Coller sera de rigueur pour le reste des opérations
Pour cela lancer:
groupadd prof groupadd cadre groupadd eleve
Ensuite créer les dossier de travail correspondant aux différents compte et groupes:
mkdir /home/prof mkdir /home/cadre mkdir /home/eleve mkdir /home/profile mkdir /home/netlogon mkdir /home/partage mkdir /home/public mkdir /home/netlogon/prof mkdir /home/netlogon/cadre mkdir /home/netlogon/eleve |
Les scripts du dossier netlogon sont exécutés lors de la connexion de l'utilisateur. On pourra alors y inclure des choses simples comme la mise à l'heure du poste client, mais aussi le montage des dossiers partagés dans des disques réseau. Ce qui facile l'emploi de ces dossiers pour les utilisateurs.
Créer les différents fichier netlogon suivant les catégories (profs, cadres, élèves)
Fichier "prof"
vi
@echo off rem net use h: /home net use p: \\cours-svr\prof net use v: \\cours-svr\cadre net use o: \\cours-svr\eleve net use r: \\cours-svr\public net use y: \\cours-svr\echange cls echo ******************************** echo * Bienvenue sur SAMBA echo * Salle de cours echo ******************************** echo echo echo echo echo echo echo mise a l'heure du poste client net time \\cours-svr /set /yes |
Fichier "cadre"
vi
@echo off rem net use h: /home
net use o: \\cours-svr\eleve net use r: \\cours-svr\public net use y: \\cours-svr\echange regedit -s "\\cours-svr\public\Programmes et install\" cls echo ******************************** echo * Bienvenue sur SAMBA echo * Salle de cours echo ******************************** echo echo echo echo echo echo echo mise a l'heure du poste client net time \\cours-svr /set /yes |
Fichier élève
vi
@echo off rem net use h: /home net use r: \\cours-svr\public net use y: \\cours-svr\echange regedit -s "\\cours-svr\public\Programmes et install\" cls echo ******************************** echo * Bienvenue sur SAMBA echo * Salle de cours echo ******************************** echo echo echo echo echo echo echo mise a l'heure du poste client net time \\cours-svr /set /yes |
? Suivant le niveau chacun, il aura accès aux fichiers .de la catégorie précédente.
Le serveur Samba est le serveur qui va permettre de créer le contrôleur de domaine et les différents partages du réseau.
Le fichier se charge de la configuration du serveur.
Editer le fichier
vi
Contenu de
# par loisel-jp # netbios name = cours-svr # workgroup = cours.cours # # [global] netbios name = cours-svr workgroup = cours.cours server string = Serveur Samba %v log file = /var/log/samba/log.%U username map = /etc/smbusers security = user # time server = yes socket options = TCP_NODELAY name resolve order = bcast wins hosts # client code page = 850 encrypt passwords = yes smb passwd file = /etc/smbpasswd unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *New* %n\n *Re* %n\n *pa* os level = 255 domain master = yes local master = yes preferred master = yes domain logons = yes logon script = # logon home = \\cours-svr\%U logon path = \\cours-svr\profile\%U # domain admin group = @root,@prof # [netlogon] path = /home/netlogon/%g locking = no writeable = no public = no root preexec = echo - "%u connecte a %T sur %I\n" >> root postexec = echo - "%u deconnecte le %T" >> browseable = no write list = @prof,@root # [profile] path = /home/profile browseable = no writeable = yes profile acls = yes force directory mode = 777 force create mode = 777 create mode = 777 directory mode = 777 # |
valid users = @prof,@cadre,@eleve,@root write list = @prof,@cadre,@eleve,@root read list = @prof,@cadre,@eleve,@root # [public] comment = Repertoire Public guest ok = yes browseable = no path = /home/public valid users = @prof,@cadre,@eleve admin users = @prof write list = @prof read list = @prof,@cadre,@eleve # [homes] volume = Repertoire personnel Home browseable = no invalid users = invite comment = Repertoire de %U writeable = yes valid users = @prof,@cadre,@eleve write list = @prof,@cadre,@eleve read list = @prof,@cadre,@eleve admin users = @prof profile acls = yes nt acl support = yes # [prof] browseable = no valid users = @prof path = /home/prof admin users = @prof read list = @prof write list = @prof # [cadre] browseable = no valid users = @prof path = /home/cadre admin users = @prof read list = @prof write list = @prof # [eleve] browseable = no valid users = @prof,@cadre path = /home/eleve admin users = @prof read list = @prof,@cadre write list = @prof # [echange] browseable = no path = /tmp valid users = @prof,@cadre,@eleve |
write list = @prof,@cadre,@eleve admin users = @prof create mode = 777
read list = @prof,@cadre,@eleve
? En suivant les dernières lignes il est facile de comprendre comment créer d'autres partages ou les renommer.
Le fichier smbusers permet de rendre compatible certaines appellations d'utilisateur ainsi on pourra retrouver:
(pour ouvrir le fichier)
vi /etc/smbusers
Contenu du fichier
# Liste des equivalents linux/windows dans les noms d'utilisateur (notemment pour les nom de plus de 15 lettres) # Unix_name = SMB_name1 SMB_name2 root = administrateur nobody = guest pcguest smbguest visisteur loisel-jp = jean-paul.loisel |
Le serveur Samba est désormais configuré, il est désormais nécessaire de le relancer pour que les modifications soient prises en compte:
/etc/init.d/samba restart
Ajout de l'utilisateur prof ==> premier utilisateur
mkdir /home/prof/loisel-jp chmod -R 777 /home/prof/loisel-jp mkdir /home/profile/loisel-jp cp -rp /home/profile/profile_base/* /home/profile/loisel-jp chmod -R 777 /home/profile/loisel-jp useradd loisel-jp -g prof -d /home/prof/loisel-jp |
Ajouter le mot de passe! (obligatoire tant que le mot de passe n'est pas en place le compte n'est pas encore créé)
smbpasswd -a loisel-jp
Ajouter alors le mot de passe de l'administrateur "root"
smbpasswd -a root
Pour l'ajout de nouveaux utilisateurs un profile de base peut être créé ce qui permet de créer une configuration prédéfinie pour un utilisateur
mkdir /home/profile/profile_base
Les autres utilisateurs s'ajouteront sous cette forme:
Pour les profs
mkdir /home/prof/nom_utilisateur mkdir /home/profile/nom_utilisateur cp -rp /home/profile/profile_base/* /home/profile/nom_utilisateur chmod -R 777 /home/profile/nom_utilisateur useradd nom_utilisateur -g prof -d /home/prof/nom_utilisateur smbpasswd -a nom_utilisateur |
Pour les autres personnes d'encadrement
mkdir /home/cadre/nom_utilisateur chmod 777 /home/cadre/nom_utilisateur mkdir /home/profile/nom_utilisateur cp -rp /home/profile/profile_base/* /home/profile/nom_utilisateur chmod -R 777 /home/profile/nom_utilisateur useradd nom_utilisateur -g cadre -d /home/cadre/nom_utilisateur smbpasswd -a nom_utilisateur |
Pour les élèves
mkdir /home/eleve/nom_utilisateur chmod 777 /home/eleve/nom_utilisateur mkdir /home/profile/nom_utilisateur cp -rp /home/profile/profile_base/* /home/profile/nom_utilisateur chmod -R 777 /home/profile/nom_utilisateur useradd nom_utilisateur -g eleve -d /home/eleve/nom_utilisateur smbpasswd -a nom_utilisateur |
La suppression d'un utilisateur se fait en tapant ces commandes:
smbpasswd -x nom_utilisateur userdel nom_utilisateur rm -r /home/profile/nom_utilisateur
rm -r /home/prof/nom_utilisateur
# ou
rm -r /home/cadre/nom_utilisateur
# ou
rm -r /home/eleve/nom_utilisateur
? Un exemple de fichier au format Calc OpenOffice est disponible sur le site LJProgrammation pour faciliter la gestion des utilisateurs.
Ajout des machines dans le domaine
groupadd machine
Un poste de travail s'ajoute de la même manière qu'un utilisateur mais n'a pas de mot de passe:
useradd nom-machine$ -g machine -d /dev/null -s /dev/false smbpasswd -m -a nom-machine$
Pour supprimer des machines du domaine
smbpasswd -x nom-machine$ userdel nom-machine$
Exemple d'ajouts de postes
useradd cours-t1$ -g machine -d /dev/null -s /dev/false smbpasswd -m -a cours-t1$
useradd cours-t2$ -g machine -d /dev/null -s /dev/false smbpasswd -m -a cours-t2$
useradd cours-t3$ -g machine -d /dev/null -s /dev/false smbpasswd -m -a cours-t3$
.
ATTENTION seul "root" peut ajouter une machine au domaine alors au moment de rentrer une machine dans le domaine en nom de personne pouvant ajouter le poste au domaine
penser à mettre "root" avec le mot de passe placé par la commande "smbpasswd -a root".
Comme indiqué précédemment seul ROOT peut passer une machine dans le domaine, la commande suivante permet d'ajouter ce prilège à d'autres utilisateurs:
Créer l'utilisateur qui pourra ajouter un poste au domaine
net -U root rpc rights grant 'cours.cours\loisel-jp' SeMachineAccountPrivilege
ou (cette commande à le même résultat)
net rpc rights grant 'loisel-jp' SeMachineAccountPrivilege
Cette commande permet de lister les privilèges des utilisateurs:
net rpc rights list accounts
Droits d'un utilisateur
net rpc rights list nom_utilisateur
Supprimer un droit:
net rpc rights revoke 'cours.cours\loisel-jp' nom_du_prilege_a_supprimer
Exemple: donner tous les droits à un utilisateur
net rpc rights grant 'loisel-jp' SeMachineAccountPrivilege SeTakeOwnershipPrivilege SeBackupPrivilege SeRestorePrivilege SeRemoteShutdownPrivilege SePrintOperatorPrivilege SeAddUsersPrivilege SeDiskOperatorPrivilege
Webmin est un outil très pratique pour l'administration d'un serveur Linux, cette opération n'est pas indispensable mais peut faciliter les taches de l'administrateur en proposant une interface Web pour la gestion.
Pour installer Webmin suivre les opérations suivantes:
cd /tmp wget
Installation des paquets manquants pour le fonctionnement de Webmin
apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl libmd5-perl
Installation de webmin
dpkg -i
L'accès à webmin se fait alors par:
https://cours-svr:10000/
Passer dans "webmin" "Change Language and Theme" ==> french
? Webmin est un paquet développé pour une société particulière, les version évoluent à un rythme différent des distributions linux, il conviendra d'aller en faire la mise jour, ou consulter le site "" pour obtenir la dernière version en cours.
Pour effectuer le filtrage Internet, il peut être choisi Squid. C'est le serveur proxy le plus employé à l'heure actuelle.
? L'utilisation d'un serveur proxy peut nécessiter d'en informer l'utilisateur. Il en est donc de la repsonsabilité de chacun d'effectuer cette information.
Squid s'installer par cette commende
apt-get install squid
Configurer Squid
Le fichier est le fichier de configuration de Squid. Bien que cela ne soit pas compliqué en lui même il peut être alors préférable de commencer par faire une sauvegarde du fichier de base:
cp .default
Une modification des droits sur le fichier permettra une gestion plus simple:
chmod 777 /var/spool/squid
Configurer ensuite le serveur:
vi
Placer dans le fichier ceci:
##### par Loisel JP ##### http_port 3128 cache_mem 30 MB hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? cache deny QUERY acl apache rep_header Server ^Apache broken_vary_encoding allow apache access_log squid hosts_file /etc/hosts refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT acl LAN_SQUID src 192.168.0.0/16 http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge |
http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow LAN_SQUID http_access deny all http_reply_access allow all icp_access allow all cache_effective_group proxy coredump_dir /var/spool/squid 10000 16 256 cache_dir ufs /var/spool/squid 1024 256 256 cache_mgr visible_hostname cours redirect_program /usr/bin/squidGuard -c #### END #### |
On notera ci-dessus la ligne en rouge destinée au filtrage des URLs.
Si vous ne désirez pas installer le filtrage d'url, il suffit alors de mettre en remarque ou de supprimer cette ligne.
Avant toute utilisation il est nécessaire d'initialiser le serveur Squid en créant le cache ou en donnant les droits nécessaires à son utilisation:
/etc/init.d/squid stop
chmod 777 -R /var/spool/squid/
/usr/sbin/squid -z chown -R /var/spool/squid
Le fonctionnement du serveur Squid pourra alors dès à présent être vérifié (en commentant la redirection par squidGuard).
Pour installer squidGuard la commande "aptitude" (installer au besoin le programme par la commande "apt-get install aptitude") permettra de régler plus facilement les éventuels conflits:
aptitude install squidguard
Le filtrage de squid Guard utilise des listes de sites appelées listes noires.
Chaque administrateur peut utiliser ses propres listes ou utiliser des listes prédéfinies qu'il pourra modifier au besoin.
LJProgrammation propose une liste établie suivant un choix (souvent personnel). Les commandes suivantes permetent l'installation de ces listes (avec près de 2millions de sites bloqués):
cd /var/lib/squidguard/db
wget unzip mv blacklist_squid/* . rm -rf blacklist_squid rm -rf blacklist_squid.*
chmod 777 -R /var/lib/squidguard/db
? Ces listes sont une adaptation des listes trouvées sur le site de l'université de Toulouse (que je remercie personnellement).
Plusieurs centaines de sites y ont été ajoutés suivant l'utilisation qui est données généralement à une salle de classe, CDI ou autre lieux de formation, insertion, étude, sécurisé pour un jeune public sans se détourner du coté de l'utilisation pratique de l'Internet sans détournement du type "amusement".
Ce paragraphe donne une configuration de squidGuard suivant les blacklits précédemment installés. Dans le cas d'une configuration personnelle il faudra y noter les quelques dossiers renommés en comparaison de ceux de l'université de Toulouse (fichiers d'origine).
Editer le fichier de configuration
vi
Placer dans le fichier:
##### par Loisel JP ##### dbhome /var/lib/squidguard/db logdir /var/log/squid # ######################################################## # bkacklistes telechargees ######################################################## # # s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat time travail { weekly mtwhf 07:00-12:00 13:00-17:30 } # source LAN_SQUID { ip 192.168.0.0/16 } # # |
dest Dangereux {
urllist dangereux/urls
domainlist dangereux/domains
} #
dest Predefini {
urllist perso/urls
domainlist perso/domains
} #
dest Adultes {
urllist adultes/urls
domainlist adultes/domains
} #
dest Audio-video {
urllist audio-video/urls
domainlist audio-video/domains
} #
dest Blogs {
urllist blog/urls
domainlist blog/domains
} #
dest Personnalites {
urllist celebrity/urls
domainlist celebrity/domains
} #
dest Dating {
urllist dating/urls
domainlist dating/domains
} #
dest Forums {
urllist forums/urls
domainlist forums/domains
} #
dest Pari { urllist gambling/urls
domainlist gambling/domains
} # dest Jeux {
urllist games/urls
domainlist games/domains
} #
dest Adultes_divers {
urllist mixed_adult/urls
domainlist mixed_adult/domains
} #
dest Telephone {
urllist mobile-phone/urls
domainlist mobile-phone/domains
} #
dest Radio {
urllist radio/urls
domainlist radio/domains
} #
dest Sectes {
urllist sect/urls
domainlist sect/domains
} # dest Education_sexuelle {
urllist sexual_education/urls
domainlist sexual_education/domains
} #
dest Tricherie {
urllist tricheur/urls
domainlist tricheur/domains
} #
dest Piratage {
urllist warez/urls
domainlist warez/domains
} #
dest Chat {
urllist chat/urls
domainlist chat/domains
} # dest Publicite {
urllist publicite/urls domainlist publicite/domains
} # dest Manga {
urllist manga/urls domainlist manga/domains
} # dest Drogue {
urllist drogue/urls domainlist drogue/domains
} #
dest Astrologie {
urllist astrology/urls domainlist astrology/domains
} #
dest Agressivite {
urllist agressif/urls domainlist agressif/domains
}
#
### suivant le choix de bloquage . acl {
LAN_SQUID within travail {
# pass !Adultes !Adultes_divers
# pass !Dangereux !Adultes !Dating !Pari !Adultes_divers !Sectes !Education_sexuelle ! Tricherie !Piratage !Drogue !Agressivite pass !Dangereux !Predefini !Adultes !Audio-video !Blogs !Personnalites !Dating !Forums ! Pari !Jeux !Adultes_divers !Telephone !Radio !Sectes !Education_sexuelle !Tricherie !Piratage !Chat ! Publicite !Manga !Drogue !Astrologie !Agressivite
################## redirection suivant le choix
##################################################
# redirect ?clientaddr=%a&srcclass=%s&targetclass=
%t&url=%u
redirect ?clientaddr=%a&clientname=%n&clientident= %i&srcclass=%s&targetclass=%t&url=%u
}
LAN_SQUID outside travail {
# pass !Adultes !Adultes_divers pass !Dangereux !Adultes !Dating !Pari !Adultes_divers !Sectes !Education_sexuelle ! Tricherie !Piratage !Drogue !Agressivite
# pass !Dangereux !Predefini !Adultes !Audio-video !Blogs !Personnalites !Dating !Forums !
Pari !Jeux !Adultes_divers !Telephone !Radio !Sectes !Education_sexuelle !Tricherie !Piratage !Chat ! Publicite !Manga !Drogue !Astrologie !Agressivite ################## redirection suivant le choix ################################################## # redirect ?clientaddr=%a&srcclass=%s&targetclass= %t&url=%u redirect ?clientaddr=%a&clientname=%n&clientident= %i&srcclass=%s&targetclass=%t&url=%u } default { pass none ################## redirection suivant le choix ################################################## # redirect ?clientaddr=%a&srcclass=%s&targetclass= %t&url=%u redirect ?clientaddr=%a&clientname=%n&clientident= %i&srcclass=%s&targetclass=%t&url=%u } } |
Terminer la configuration en effectuant les commandes suivantes (modification de droits, ajout du message de blocage .
zcat > chown www-data chmod 700
Lors du démarrage il arrive parfois que le serveur ne se lance pas suite à un refus d'accès aux blacklits. Dans ce cas taper cette commande:
chmod 777 -R /var/lib/squidguard/db
Finaliser les blacklists (cette opération peut durer plusieurs minutes):
squidGuard -C all
Redémarrer Squid:
/etc/init.d/squid stop
/usr/sbin/squid -z
/etc/init.d/squid restart
La commande "ps x |grep squid" confirme le fonctionnement du serveur:
Lors du démarrage il arrive parfois que le serveur ne se lance pas suite à un refus d'accès aux blacklists (malgré la première commande identique!). Dans ce cas retaper au besoin cette commande:
chmod 777 -R /var/lib/squidguard/db
Modifier les blacklists
Les blacklists sont des fichiers texte contenant des listes de site. Ces listes sont modifiables par simple édition.
vi /var/lib/squidguard/db/perso/urls vi /var/lib/squidguard/db/perso/domains vi /var/lib/squidguard/db/danger/urls vi /var/lib/squidguard/db/danger/domains
Leslistes noires contiennent des milliers (voir millions) de ligne. Pour faciliter la recherche dedans SquidGuard utilise des base de données qu'il faut gérnéer.
Pour générer toutes les listes (lopération peut durer plusiseurs minutes):
squidGuard -C all
Pour générer individuellement un fichier
squidGuard -C /var/lib/squidguard/db/perso/domains squidGuard -C /var/lib/squidguard/db/perso/urls
Cette opération est obligatoire après chaque modification des blacklists la génération individuelle est plus rapide!
Après la génération il est nécessaire de redémarrer Squid:
/etc/init.d/squid restart
En tapant ces commandes il est possible de vérifier le bon fonctionnement de la configuration de squidGuard
echo " 10.0.0.1/ - - GET" | squidGuard -c -d echo " 10.0.0.1/ - - GET" | squidGuard -c -d
Après chargement des base, squidGuard nous confirme la possibilité de suivre la requête
Cette procédure donne le moyen d'installer une page de refus un peu plus élaborée que cette proposée par défaut.
La page affichée sera conditionné par ces lignes en fin de fichier de configuration de squidGaurd:
Ceci affiche une page personnelle (décrite ci-dessous)
# redirect ?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u redirect ?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
Ceci affiche la page par défaut
redirect ?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
# redirect ?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
apt-get install phpmyadmin mysql-server
Création de la base de données pour squid dans http://cours-svr/phpmyadmin
Sur le serveur depuis phpmyadmin, exécuter ces requêtes afin de créer la base de données de la page personnelle:
CREATE DATABASE `squid` ;
CREATE TABLE `client` (
`clientaddr` text NOT NULL,
`clientname` text NOT NULL,
`clientident` text NOT NULL,
`id` int(11) NOT NULL auto_increment, PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE `report` (
`client` int(11) NOT NULL,
`srcclass` text NOT NULL,
`targetclass` text NOT NULL,
ùrl` int(11) NOT NULL,
`date` timestamp NOT NULL default CURRENT_TIMESTAMP on update
CURRENT_TIMESTAMP,
`id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`id`),
KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE `site` (
`site` TEXT NOT NULL ,
`nombre` int(11) NOT NULL,
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ) ENGINE = MYISAM ;
Créer ensuite un utilisateur.
? Dans l'exemple fourni sur le site LJProgrammation, l'utilisateur créé est "squid" avec comme mot de passe "squid".
Créer le dossier de rapport squid
Par défaut sous debian, les fichiers du serveur Web se trouvent dans "/var/www" sur certaines distributions on pourra les trouver dans /var/www/html
Créer le dossier qui recevra la page de refus par défaut:
mkdir /var/www/squid/
Ajouter les fichiers exemples disponibles sur le site LJProgrammation
La gestion du dossier de serveur web pourra être faciltée par un lien vers le dossier "prof":
ln -s /var/www /home/prof/web_local
Ce qui donne ceci lors d'un blocage de navigation:
Avec accès à des statistiques:
Rotation des logs et installation de l'outil de rapport
Installer les paquets nécessaires à la création et au suivi de navigation au travers du proxy:
apt-get install sarg logrotate
Configurer cron de manière à générer les rapports, un rapport généré toutes les 10mn (au choix)
mkdir /etc/cron.minutely
Ajouter l'exécution à crontab:
vi /etc/crontab | ||
La ligne suivante: | ||
*/10 * * * * root | cd / | run-parts --report /etc/cron.minutrely |
Créer le script qui sera exécuté par cron:
vi /etc/cron.minutely/sarg
Contenu du script:
#!/bin/sh
/usr/sbin/sarg-reports today
Rendre le script exécutable puis relancer crontab
chmod +x /etc/cron.minutely/sarg /etc/init.d/cron restart
L'accès au squid report se fera par:
http://cours-svr/squid-reports
! le serveur est opérationnel !
Administration Unix /Linux Créer un serveur Samba de salle de cours page 33/39
LoiselJP ©2010
Contenu d'un fichier de registre pour désactiver le proxy:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ProxyEnable"=dword:00000000 "ProxyServer"=":"
Contenu d'un fichier de registre pour activer le proxy:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ProxyEnable"=dword:00000001
"ProxyServer"="cours-svr:3128"
Modifiez alors les fichiers netlogon comme suit
@echo off rem net use h: /home net use o: \\cours-svr\eleve net use r: \\cours-svr\public net use y: \\cours-svr\echange regedit -s "\\cours-svr\chemin_du_fichier_de_registre\" cls |
Pour facilté la gestion du serveur quelques facilités sont permises: ln -s /home/profile /home/prof
ln -s /var/log/samba /home/prof/logs_samba ln -s /var/lib/squidguard/db /home/prof/blacklist_squid
Il est encore également possible de créer un dossier "Programmes et install" destiné aux programmes à installer pour l'administrateur
mkdir "/home/public/Programmes et install"
Si vous disposez d'un routeur pour l'Internet, il est fort possible qu'il puisse gérer les entrées et sortie.
Par exemple sur les routeurs Netgear, il est possible de bloquer certains sites, en autorisant un poste particulier à passer au travers ces sites bloqués.
Voici la fenêtre affichée lorsque Netgear bloque un site.
Alors bloquer tous les mots
. / a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9
Et n'autoriser que votre serveur.
• L'ajout d'un poste dans le domaine ne peut se faire que par l'administrateur "root" ou un utilisateur ayant les droits,
• Le poste devra avoir été ajouté à la liste des postes reconnus (l'ajout se fait comme pour un utilisateur mais avec le signe $).
Création de l'utilisateur
adduser nom_utilisateur
Changer de groupe
usermod -g nom_du_groupe nom_utilisateur
Ajouter un groupe
usermod -G nom_du_groupe nom_utilisateur
Mettre à l'heure le serveur (MM:mois JJ:jour hh:heure mm:minutes)
date MMJJhhmm
Répertoire home de utilisateur
mkdir dossier_home usermod -d nom_utilisateur Liste des utilisateurs samba (équivalents)
vi /etc/smbusers
Liste des passwords samba
vi /etc/smbpasswd
Liste des utilisateurs
cut -f1 -d: /etc/passwd
Liste des groupes
cut -f1 -d: /etc/group
Vérification du fonctionnement du serveur samba
ps -eaf | grep smbd
Passer les droits d'administrateur de domaine à prof
net groupmap delete ntgroup="Domain Admins" net groupmap add ntgroup="Domain Admins" UNIXgroup=domadm
Créer l'utilisateur qui pourra ajouter un poste au domaine
net -U root rpc rights grant 'cours.cours\loisel-jp' SeMachineAccountPrivilege
Liste le groupmap
net groupmap list
Liste des processus en cours
ps x
Sauvegarde des profiles et configuration
rm -rf /home/prof/sauvegardes mkdir /home/prof/sauvegardes mkdir /home/prof/sauvegardes/logs mkdir /home/prof/sauvegardes/squid-reports zip -r /home/profile/* zip -r /home/cadre/* zip -r /home/eleve/* cp -rp /etc/smb* /home/prof/sauvegardes/ cp -rp /etc/samba/* /home/prof/sauvegardes/ cp -rp /var/log/samba/* /home/prof/sauvegardes/logs/ cp -rp /var/www/squid-reports/* /home/prof/sauvegardes/squid-reports/ |
Redémarrage de squid + nettoyage
rm -rf /var/cache/apt/archives/* mkdir /var/cache/apt/archives/partial rm -rf /tmp/* rm -rf /var/tmp/* rm -rf /var/log/*.0 rm -rf /var/log/*.1 rm -rf /var/log/*.2 rm -rf /var/log/*.3 rm -rf /var/log/*.4
rm -rf /var/log/*.gz rm -rf /var/log/*/*.0 rm -rf /var/log/*/*.1 rm -rf /var/log/*/*.2 rm -rf /var/log/*/*.3 rm -rf /var/log/*/*.4 rm -rf /var/log/*/*.gz rm -rf /var/www/squid-reports/* sarg # squid /etc/init.d/squid stop chmod 777 /var/spool/squid/ rm -rf /var/spool/squid/* /usr/sbin/squid -z /etc/init.d/squid restart |
Générer les fichiers DB avec suidguard
squidGuard -C all
Générer individuellement un fichier
squidGuard -C /var/lib/squidguard/db/perso/domains squidGuard -C /var/lib/squidguard/db/perso/urls
/etc/init.d/squid restart
Lire la navigation à la volée
tail -n 1 -f
Voir si Squid est en cours
ps x | grep squid
Eventuellement voir en cas de souci
vi
Penser faire un chmod sur les blacklists en cas de non démarrage du serveur
chmod 777 -R /var/lib/squidguard/db
Avant la création de ce tutorial, j'ai cherché de nombreuses heures de quoi créer mon serveur, certes, il existes d'autres méthodes, d'autres moyens, d'autres façon de créer un serveur.
Probablement qu'il existe également d'autre méthodes pour rendre ce serveur sécurisé, d'autres méthodes pour contrôler l'utilisation des postes.
Bien sur la méthode appliquée ici est destinée à une salle de classe, oui, les données de l'utilisateur sont mise au grand jour mais il ne faut pas oublier que c'est effectué dans le cadre de salle de formation et non dans le cadre de travail en production. Pour transformer ce serveur dans le cadre du travail, peu de choses sont à faire mais il n'en demeure pas indispensable de les réaliser: éviter les raccourcis qui donnent accès aux données des utilisateurs, sécuriser les dossiers utilisateurs .
Mais quoi que l'on pourra en dire cette méthode présente un avantage: elle a fait ses preuves. Dès lors que le serveur SSH est installé, il est possible de se connecter sur le serveur depuis Windows, donc de disposer des données de ce document directement depuis le presse papier.
Il est alors possible de rendre ce serveur opérationnel en moins d'une demi journée. Ceci est un gros avantage pour les administrateurs toujours à la recherche de progresser.
___________________________
_______________________
# init 0
Installation d'un serveur GNU/Linux pour salle de cours.
Jean Paul Loisel
56 Rue Philippe de Girard 59160 Lomme
? ? 06 99 15 99 00
Ce document est distribué en "Public Documentation License".
The contents of this Documentation are subject to the Public Documentation License. You may only use this Documentation if you comply with the terms of this License.
A copy of the License is available at this mail .
The Original Documentation is " Installation d'un serveur GNU/Linux pour salle de cours".
The Initial Writer of the Original Documentation is Jean Paul LOISEL © 2010. All Rights Reserved.
Contributor(s): ______________________________________.
Portions created by ______ are Copyright ©_________[Insert year(s)]. All Rights Reserved. (Contributor contact(s):________________[Insert hyperlink/alias]).
? The text of this chapter may differ slightly from the text of the notices in the files of the Original Documentation.
You should use the text of this chapter rather than the text found in the Original Documentation for Your Modifications.