Cette page présente le modèle de serveur bureautique pour le déploiement du poste de travail AuF sous Ubuntu “Precise Pangolin” 12.04 LTS.
ATTENTION : Cette page est en cours de rédaction et ne doit pas être pris comme modèle pour le moment. |
Pré-requis matériels
au minimum un processeur multi-cœurs 64 bits (un Intel Xeon est un très bon choix)
au minimum 8 Gio de RAM (ne pas hésiter à monter à 16, 24 ou même 32 Gio)
au minimum 2 disques SATA de 500 Gio (tous les disques seront en double pour faire systématiquement du RAID-1)
Pré-requis système
aller dans le BIOS régler l'heure correcte, en UTC (dans le doute sur l'heure précise, il veut mieux être en retard qu'en avance)
installer une Debian Wheezy (ou adapter une Debian Squeeze existante si on n'a pas d'autre choix dans l'immédiat), en français (choix French)
organisation des disques (partitionnement manuel) : ces choix sont toujours discutables et doivent être adaptés à la situation locale ; ce qui suit est une recommandation minimale à suivre
faire, sur chaque disque, une partition(s) primaire(s) de type RAID auto occupant tout l'espace disponible
- aller dans le menu de configuration RAID pour :
joindre les partitions RAID auto 2-par-2 en des volumes RAID-1 de 2 disques et 0 de réserve (spare)
- terminer
de retour au menu principal, sélectionner les périphériques RAID-1 pour en faire des partitions de type Volume physique LVM
- aller dans le menu de configuration LVM pour :
- créer un groupe de volume regroupant les volumes physiques LVM
(il est fortement recommandé d'utiliser un nom de groupe de volumes unique entre tous les serveurs, par exemple vn1nfs0, afin d'éviter des conflits de noms le jour où on voudra déplacer ces disques dans un autre serveur)
- déclarer les volumes logiques suivants :
un volume de nom swap d'une taille de 10 Go (le swap ne devrait pas être utilisé en temps normal, c'est une marge de garantie en cas de problème imprévu)
un volume de nom root d'une taille de 2 Go
un volume de nom var d'une taille de 2 Go
un volume de nom log d'une taille de 2 Go
un volume de nom tmp d'une taille de 2 Go
un volume de nom home d'une taille de 100 Go (par exemple, à vous de voir)
- terminer
- de retour au menu principal, sélectionner chaque périphérique LVM un par un pour les affecter comme suit :
déclarer le volume logique swap de type swap
déclarer le volume logique root de type ext4 monté sur /
déclarer le volume logique var de type ext4 monté sur /var
déclarer le volume logique log de type ext4 monté sur /var/log
déclarer le volume logique tmp de type ext4 monté sur /tmp
déclarer le volume logique home de type ext4 monté sur /home
choisir pour nom de machine nfs (non obligatoire, mais suggéré, par contre un nom DNS nfs doit exister et pointer sur cette machine)
installer GRUB sur le MBR des deux disques en RAID, donc lancer ces commandes après redémarrage du serveur :
grub-install /dev/sda grub-install /dev/sdb
Base système
vérifier l'environnement linguistique :
dpkg-reconfigure locales
cocher au minimum fr_FR.UTF-8
choisir obligatoirement un environnement UTF-8 par défaut
installation de quelques paquets indispensables/utiles :
aptitude install --without-recommends less vim vim-tiny_ screen mtr-tiny dnsutils git
installation dès le départ de quelques services indispensables que l'on configurera plus tard :
aptitude install --without-recommends ntp bind9 openssh-server
Mettre le sysadmin à l'aise
Voici quelques ajustements que je fais systématiquement sur les serveurs :
éditer /etc/vim/vimrc.local pour y mettre les lignes suivantes :
syntax on
éditer /root/.bashrc pour y mettre les lignes suivantes :
export LS_OPTIONS='--color=auto' eval "`dircolors`" alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -l' alias la='ls $LS_OPTIONS -la' export GREP_OPTIONS='--color=auto'
éditer /etc/gitconfig pour y mettre les lignes suivantes :
[color] ui = auto
Base réseau
arrêter le réseau (pour stopper le client DHCP mis en place par défaut) :
service networking stop
configurer le réseau dans /etc/network/interfaces, par exemple :
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.0.2.10 netmask 255.255.255.0 network 192.0.2.0 broadcast 192.0.2.255 gateway 192.0.2.1
vérifier le nom de machine dans /etc/hostname, par exemple :
nfs
vérifier le nom de machine dans /etc/hosts, par exemple :
127.0.1.1 localhost # ne pas utiliser cette forme (a priori, toutes les conséquences ne sont pas encore connues) #127.0.1.1 nfs.precise nfs # utiliser la véritable adresse IP 192.0.2.10 nfs.precise nfs # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
démarrer le réseau :
service networking start
Remarque : en principe le serveur de bureautique n'est pas sensé jouer aussi le rôle de passerelle. On peut fusionner les deux au besoin mais cette documentation se concentre plutôt sur le modèle général où ces deux fonctions sont séparées.
Service SSH
Le premier service à installer est l'accès SSH qui permettra de continuer ensuite à distance -- et non pas en direct sur la console dans un local technique bruyant -- c'est une bonne habitude à prendre dès le départ :
aptitude install --without-recommends openssh-server
La suite supposera que vous êtes connecté via SSH !!! (et que vous pouvez donc utiliser le copier-coller)
ajouter sa clé SSH dans ~adminXXX/.ssh/authorized_keys
resserrer les accès SSH en ajoutant les lignes suivantes au /etc/ssh/sshd_config :
PermitRootLogin without-password AllowGroups ssh PermitEmptyPasswords no ChallengeResponseAuthentication no PasswordAuthentication no X11Forwarding no UsePAM yes UseDNS no
il faut alors s'ajouter au groupe ssh :
adduser adminXXX ssh
dans le cas où l'on voudrait donner un accès SFTP aux partages réseaux (par exemple pour les nomades), ajouter ceci tout à la fin (c'est important) du /etc/ssh/sshd_config :
AllowGroups ssh users Subsystem sftp internal-sftp Match Group users ChrootDirectory /nfsv4 X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
Le répertoire partages (ici /nfsv4) et ses parents doivent avoir root comme propriétaire et ne pas avoir de droit d'écriture pour le groupe ou les autres (typiquement du 0755), sinon vous obtiendrez une erreur fatal: bad ownership or modes for chroot directory dans /var/log/auth.
pour une gestion des fichiers par groupe d'utilisateurs, ajouter ces lignes à /etc/pam.d/sshd :
# Setting UMASK for all ssh based connections (ssh, sftp, scp) session optional pam_umask.so umask=0002
dans ce cas ajouter également un umask 0022 dans /root/.bashrc
Service NTP
installer le service d'heure et de maintenance de l'heure :
aptitude install --without-recommends ntp
ATTENTION : configuration (sur NTP local ou exemple de asia.pool.ntp.org) restant à préciser
Service DNS
installer le service DNS :
aptitude install --without-recommends bind9
configurer la résolution DNS dans /etc/resolv.conf, par exemple :
domain lucid.auf search lucid.auf nameserver 127.0.0.1
déclarer deux zones pour le réseau local dans /etc/bind/named.conf.local, par exemple :
zone "lucid.auf" IN { type master; file "/etc/bind/db.lucid.auf"; }; zone "50.168.192.in-addr.arpa" IN { type master; file "/etc/bind/db.50.168.192"; };
créer ensuite le contenu de la première zone dans /etc/bind/db.lucid.auf, par exemple :
$ORIGIN lucid.auf. $TTL 24H @ IN SOA ns1.lucid.auf. hostmaster.lucid.auf.org. ( 2011013000 ; Serial 8H ; Refresh 1H ; Retry 2W ; Expire 600 ) ; Negative Cache TTL ; @ IN NS ns1 ns1 IN A 192.168.50.10 ; network IN A 192.168.50.0 gw IN A 192.168.50.1 nfs IN A 192.168.50.10 $GENERATE 130-249 dynamic-$ IN A 192.168.50.$ broadcast IN A 192.168.50.255 ; ntp IN CNAME nfs nss IN CNAME nfs
créer ensuite le contenu de la seconde zone dans /etc/bind/db.50.168.192, par exemple :
$ORIGIN 50.168.192.in-addr.arpa. $TTL 24H @ IN SOA ns1.lucid.auf. hostmaster.lucid.auf.org. ( 2011013000 ; Serial 8H ; Refresh 1H ; Retry 2W ; Expire 600 ) ; Negative Cache TTL ; @ IN NS ns1.lucid.auf. ; 0 IN PTR network.lucid.auf. 1 IN PTR gw.lucid.auf. 10 IN PTR nfs.lucid.auf. $GENERATE 130-249 $ IN PTR dynamic-$.lucid.auf. 255 IN PTR broadcast.lucid.auf.
relancer le service DNS :
service bind9 restart
valider la configuration DNS avec quelques tests :
host nfs.lucid.auf host dynamic-130.lucid.auf host www.auf.org
Service DHCP
installer le service DHCP :
aptitude install isc-dhcp-server
spécifier dans /etc/default/isc-dhcp-server l'interface sur laquelle on fournit le service :
INTERFACES="eth0"
définir dans /etc/dhcp/dhcpd.conf le réseau que l'on sert :
authoritative; subnet 192.168.50.0 netmask 255.255.255.0 { deny unknown-clients; # recommandé sur un réseau dont toutes les machines sont connues range 192.168.50.130 192.168.50.249; option subnet-mask 255.255.255.0; option broadcast-address broadcast.lucid.auf; option routers gw.lucid.auf; option domain-name "lucid.auf"; option domain-name-servers ns1.lucid.auf; option ntp-servers ntp.lucid.auf; filename "pxelinux.0"; next-server nfs.lucid.auf; server-name "nfs.lucid.auf"; }
relancer le service DHCP :
service isc-dhcp-server restart
Service TFTP
installer le service TFTP : (garder le chemin /srv/tftp par défaut)
aptitude install tftpd-hpa
Pour Lenny, choisir de ne pas démarrer via inetd, mettre RUN_DAEMON="yes" et OPTIONS="-v -l -s /srv/tftp" dans /etc/default/tftpd-hpa et lancer /etc/init.d/tftpd-hpa restart ; ce n'est plus nécessaire avec Squeeze où le service TFTP est maintenant autonome.
mettre en place l'installation en réseau de Ubuntu Lucid, par exemple :
wget http://archive.ubuntu.com/ubuntu/dists/lucid/main/installer-i386/current/images/netboot/netboot.tar.gz -O- | tar -C /srv/tftp -xpzf - chown -hR root:nogroup /srv/tftp
ajouter à la fin de /srv/tftp/pxelinux.cfg/default une option d'installation au modèle AuF :
label lucid menu label Lucid sauce AUF kernel ubuntu-installer/i386/linux append vga=vesa initrd=ubuntu-installer/i386/initrd.gz locale=fr_FR.UTF-8 console-setup/ask_detect=false console-setup/layoutcode=fr netcfg/wireless_wep= netcfg/choose_interface= netcfg/get_hostname= url=http://nfs/config/lucid-preseed-auf-fixe -- label local menu label Disque local menu default localboot 0 append -
Cela ne fonctionnera pas tout de suite car il faut d'abord mettre en place le service web pour servir le fichier preseed.
Service web
Nécessaire au moins pour le preseed et pour auf-django-users.
installer le service web :
aptitude install apache2
configurer dans /etc/apache2/conf.d/security le niveau de détails techniques :
ServerTokens OS
configurer dans /etc/apache2/conf.d/charset le jeu de caractères par défaut :
AddDefaultCharset UTF-8
ajouter dans /etc/apache2/sites-available/default, avant la ligne ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/, les restrictions d'accès suivantes :
<Directory /var/www/config/> Options FollowSymLinks AllowOverride None Order allow,deny allow from 192.168.50.0/24 </Directory> <Files wpad.dat> AddType application/x-ns-proxy-autoconfig .dat </Files>
relancer le service web :
service apache2 restart
copier dans /var/www/config/lucid-preseed-auf-fixe le contenu de la page ../PreseedAuFFixe :
mkdir /var/www/config wget --header='User-Agent: Firefox' http://wiki.auf.org/wikiteki/Projet/Mod%C3%A8leLucid/PreseedAuFFixe?action=raw -O- | awk '/}}}/{ok=0} {if(ok)print} /{{{/{ok=1}' > /var/www/config/lucid-preseed-auf-fixe chmod 0644 /var/www/config/lucid-preseed-auf-fixe
copier dans /var/www/config/lucid-authorized_keys la clé publique qui servira à gérer les postes clients, par exemple :
cp -a /root/.ssh/authorized_keys /var/www/config/lucid-authorized_keys chmod 0644 /var/www/config/lucid-authorized_keys
copier dans /var/www/config/lucid-postpreseed le script suivant :
#!/bin/sh # désactivation des sources des logiciels par défaut sed -i '/^deb-src/s/^/#/' /etc/apt/sources.list # (re)configuration de l'environnement linguistique (bogue ?) dpkg-reconfigure locales # (re)configuration de l'imprimante PDF (nécessite que CUPS soit lancé) service cups start dpkg-reconfigure cups-pdf service cups stop # ajout du compte "auf" dans le groupe sudo (à faire le preseed, un jour...) adduser auf sudo # installation des clés SSH dans les comptes "root" et "auf" mkdir -m 0700 -p /root/.ssh wget http://nfs/config/lucid-authorized_keys -O /root/.ssh/authorized_keys chmod 0600 /root/.ssh/authorized_keys cp -a /root/.ssh ~auf/ chown -R auf:auf ~auf/.ssh # après le redémarrage, il faudra encore ajuster les 'username' et 'password' # dans /etc/libnss-mysql.cfg et /etc/libnss-mysql-root.cfg puis lancer : # service nscd restart ; nscd -i passwd ; nscd -i group ; service gdm restart # déplacement du "/home" actuel vers "/home.local" sed -i 's|:/home/|:/home.local/|' /etc/passwd mv /home /home.local ln -s /net/nfs/home /home # masque autorisant l'écriture pour le groupe par défaut # (à activer dans les réseaux où on travaille par groupes Unix) #sed -i 's/^umask .*$/umask 002/' /etc/profile exit 0
idée pour une amélioration possible pour le umask pour la gestion par groupes, faire ajouter plutôt quelque chose comme ça dans /etc/profile :
if [ "`id -u`" -lt 1000 ]; then umask 022 else umask 002 fi
Service NFS
Mettre en place le service NFS selon les indications sur la page NFSv4 (uniquement la partie serveur).
Respecter les exemples fournis sur cette page, à l'exception du paramétrage pour le partage des répertoires utilisateurs (/nfsv4/home) : nous sommes pour le moment toujours obligés de mettre un no_root_squash au lieu de root_squash, toujours à cause de cups-pdf (imprimante PDF virtuelle).
Gestion de l'espace disque
installer la gestion des quotas :
aptitude install --without-recommends quota quotatool
ATTENTION : configuration (usrquota dans /etc/fstab, journalisation) restant à préciser
Service auf-mkhomedir
installer le méta-serveur de services :
aptitude install inetutils-inetd update-inetd
mettre en place le service de création de répertoire utilisateur :
wget 'http://git.auf.org/?p=auf-poste-client.git;a=blob_plain;f=lucid/auf-client-fixe/auf-mkhomedir/inetd_auf-mkhomedir' -O /usr/local/sbin/inetd_auf-mkhomedir chown root:root /usr/local/sbin/inetd_auf-mkhomedir chmod 0700 /usr/local/sbin/inetd_auf-mkhomedir update-inetd --group AUF --add '10 stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/inetd_auf-mkhomedir' service inetutils-inetd reload
Il faut absolument vérifier dans /usr/local/sbin/inetd_auf-mkhomedir si le paramétrage des quotas correspond à votre politique locale de gestion de l'espace disque.
Base d'utilisateurs réseau
installer l'accès à la base des utilisateurs :
aptitude install libnss-mysql-bg nscd sed -i -e "s|,shell |,'/bin/false' |" -e '/ username=/s/=/= binary /' -e '/^host/s/^.*$/host nss/' /etc/libnss-mysql.cfg
éditer encore les fichiers /etc/libnss-mysql.cfg et /etc/libnss-mysql-root.cfg pour y configurer les username et password d'accès à la base dans MySQL
activer l'utilisation de cette base :
sed -i -e '/^\(passwd\|group\|shadow\):/s/:.*$/:\t\tfiles mysql/' /etc/nsswitch.conf service nscd restart nscd -i passwd nscd -i group
(autres détails à venir… en particulier l'installation de auf-django-users)