Monter un serveur sur dreamplug

Sommaire

1 À propos

Ce document, en l'état actuel, est le "carnet de bord" d'un débutant en auto-hébergement. Il manque encore beaucoup de travail avant qu'il puisse prétendre être un véritable tutoriel.

Vous trouverez ici une version pdf générée depuis le fichier org source. Il me faut retravailler quelques éléments pour que l'affichage soit meilleure.

2 Installer Debian sur un disque externe

2.1 Préparer le disque externe

2.1.1 Formatage

Branchez votre disque externe sur votre machine de bureau.

Dans un premier temps il s'agit de préparer le disque selon le schéma suivant :

  • Une première partition en FAT16 de 100mo.
  • Une seconde en ext3 utilisant le reste de l'espace disque.

Utilisons fdisk et supposons que votre disque est /dev/sdd :

fdisk /dev/sdd

p : information sur votre disque

n : créer une nouvelle partition.

Appuyez sur n et entrez les informations suivantes (ce qui importe le plus c'est la dernière info : +100M) :

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-19452, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-19452, default 19452): +100M

On fait la même chose pour la deuxième partition, sauf que cette fois-ci on met toutes les valeurs par défaut afin de laisser tout le reste de l'espace disque de disponible.

Appuyez sur p pour vérifier :

Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sdd1            2048      206847      102400   83  Linux
/dev/sdd2 ... etc.

Et écrire tout cela avec w.

Ensuite nous allons formater la partition que vous venons de créer en fat16 :

mkfs.vfat -v -c -n 'dp-kernel' /dev/sdd1

Et on met le reste en ext3 :

mkfs.ext3 -L 'dp-fs' /dev/sdd2

2.1.2 Installation d'un système Debian bootable

Il faut tout d'abord télécharger le système de fichier debian dreamplug_debian_v0.2.zip1 et dreamplug_debian_v0.2.zip2 à l'adresse :

https://code.google.com/p/dreamplug/downloads/list

Et la uimage ici : https://dreamplug.googlecode.com/files/uImage

Dézippez dreamplugdebianv0.2.zip1, cela vous donnera une archive tar.gz de même nom.

Nous avions nommé la partition fat16 dp-kernel et la partition ext3 dp-fs. Ce qui suit prend en compte cette configuration à adapter selon la votre.

cp uImage /media/dp-kernel/
tar xzvf dreamplug_debian_v0.2.tar.gz -C /media/dp-fs/
cp uImage /media/dp-fs/home/
cp dreamplug_debian_v0.2.tar.gz /media/dp-fs/home/
sync

Démonter vos disques.

2.2 Branchements

Brancher le disque externe sur une alimentation (hub alimenté ou alimentation externe classique). Brancher le JTAG au pc et à la dreamplug éteinte.

2.3 Installation des logiciels de pilotage

apt-get install minicom

Le module ftdi_sio.ko est déjà inclus dans le noyau linux distribué par Ubuntu. Si ça n'est pas le cas pour votre distribution, regardez d'abord si un paquet le propose. Par exemple sur les systèmes utilisant apt vous pouvez utiliser l'outil apt-file :

apt-file update
apt-file search ftdi_sio.ko

2.4 Préparation de minicom

La doc de la dreamplug propose la configuration suivante (passer en root) :

minicom -s

Dans configuration du port série :

+-----------------------------------------------------------------------+
| A -                             Port série : /dev/ttyUSB0             |
| B - Emplacement du fichier de verrouillage : /var/lock                |
| C -            Programme d'appel intérieur :                          |
| D -            Programme d'appel extérieur :                          |
| E -                      Débit/Parité/Bits : 115200 8N1               |
| F -              Contrôle de flux matériel : Non                      |
| G -              Contrôle de flux logiciel : Non                      |
|                                                                       |
|    Changer quel réglage ?                                             |
+-----------------------------------------------------------------------+
        | Ecran et clavier                      |
        | Enregistrer config. sous dfl          |
        | Enregistrer la configuration sous...  |
        | Sortir                                |
        | Sortir de Minicom                     |
        +---------------------------------------+

Validez Enregistrer config. sous dfl puis sortir

Sortez de lla configuration de minicom

2.5 Connexion à la dreamplug

Après avoir sélectionné sortir votre logiciel est en attente de connexion. C'est alors qu'il vous faut allumer la dreamplug.

Si rien ne se passe cela peut simplement provenir de la configuration du port série de minicom.

Pour vérifier, tapez :

dmesg | grep tty

Vous verrez quelque chose de semblable :

[    0.000000] console [tty0] enabled
[    1.153314] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.335775] 00:0a: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 9518.467761] usb 8-1: FTDI USB Serial Device converter now attached to ttyUSB0

On voit bien qu'il faut ici configurer le port sur ttyUSB0.

Lors du boot il faut annuler l'auto-boot en appuyant sur une touche quelconque.

Vous voyez alors s'afficher le prompt Marvell>>.

2.6 Encore plus simple : screen

À la place de minicom vous pouvez utiliser screen. C'est encore plus simple1 :

aptitude install screen
screen /dev/ttyUSB0 115200

Lancer le dreamplug, et c'est bon !

2.7 Modification du boot

Tout d'abord, faite une copie texte de la configuration de base de votre boot afin de pouvoir la restaurer en cas de pépin :

Marvell>> printenv

Ce qui donne quelque chose comme :

bootargs=console=ttyS0,115200 rw root=/dev/sda2 rootdelay=10
bootcmd=setenv ethact egiga0; ${x_bootcmd_ethernet}; setenv ethact egiga1; ${x_bootcmd_ethernet}; ${x_bootcmd_usb}; ${x_bootcmd_kernel}; bootm 0x6400000;
bootdelay=3
baudrate=115200
x_bootcmd_ethernet=ping 192.168.2.1
x_bootcmd_usb=usb start
ethact=egiga0
x_bootcmd_kernel=ext2load usb 0 0x6400000 uImage
ethaddr=F0:AD:4E:01:2F:7B
eth1addr=F0:AD:4E:01:2F:7C
stdin=serial
stdout=serial
stderr=serial

Environment size: 460/4092 bytes

Ensuite il nous faut modifier le boot afin de démarrer sur /dev/sdc2.

La configuration suivante démarre sur sdc2, ou sdb2 (si sdbc2 absent), ou sda2.

Soit, dans l'odre :

  • Disque usb
  • Mémoire SD externe
  • Mémoire SD interne
setenv soaddr   0x1600000
setenv loadaddr 0x6400000
setenv dev 1
setenv part 1
setenv kdev '/dev/sdb2'
setenv db_init    'setenv mainlineLinux yes; setenv arcNumber 2659; usb start'
setenv db_arg     'console=ttyS0,115200 rootwait panic=10'
setenv db_setarg  'setenv bootargs ${db_arg} root=${kdev}'
setenv db_load    'mw ${loadaddr} 0 1000; fatload usb ${dev}:${part} ${loadaddr} uImage'
setenv db_runs    'echo executing script; source ${soaddr}'
setenv db_loads   'mw ${soaddr} 0 1000; fatload usb ${dev}:${part} ${soaddr} boot.scr'
setenv db_loadext  'mw ${loadaddr} 0 1000; ext2load usb ${dev}:${part} ${loadaddr} uImage'
setenv db_loadsext 'mw ${soaddr} 0 1000; ext2load usb ${dev}:${part} ${soaddr} boot.scr'
setenv db_runas   'echo loading sda script; setenv dev 0; setenv kdev /dev/sda2; run db_loadsext db_runs'
setenv db_runbs   'echo loading sdb script; setenv dev 1; setenv kdev /dev/sdb2; run db_loads db_runs'
setenv db_runcs   'echo loading sdc script; setenv dev 2; setenv kdev /dev/sdc2; run db_loads db_runs'
setenv db_bootcmd 'run db_setarg db_load db_bootmem'
setenv db_bootcmdext 'run db_setarg db_loadext db_bootmem'
setenv db_bootmem 'bootm ${loadaddr}'
setenv bootcmd    'run db_init db_runcs; run db_bootcmd; run db_runbs; run db_bootcmd; run db_runas; run db_bootcmdext'

Quand tout semble bon :

Marvell>>saveenv
Marvell>>reset

2.8 Configurations élémentaires du système Debian

2.8.1 Corrections de bugs

chown -R man:root /var/cache/man
aptitude install locales
dpkg-reconfigure locales

2.8.2 Configuration essentielles

Il faut modifier le mot de passe root commun à toutes les dreamplug (trou de sécurité) :

passwd
dpkg-reconfigure openssh-server
dpkg-reconfigure tzdata

Si vous ne souhaitez pas que le wifi et bluetooth soit automatiquement activés au démarrage il vous faut commenter la ligne /root/init_setup.sh dans /etc/rc.local.

Si vous avez le JTAG, et si vous ne souhaiter pas utiliser votre dreamplug comme point d'accès wifi, vous gagnerez en sécurité et vous économiserez un peu d'électricité.

2.8.3 Mise à niveau vers squeeze

Remplacez votre /etc/apt/sources.list par :

#deb http://10.82.108.51/kedars/sheevaplug_wifi/builds/packages/ binary/

## squeeze
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free

# squeeze security
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

Puis mettez à niveau :

apt-get update
apt-get dist-upgrade
apt-get autoremove
apt-get autoclean

2.8.4 Paquets utiles

aptitude install less

2.8.5 Changer le hostname

echo monhostname.org > /etc/hostname
/etc/init.d/hostname start

2.9 Créer des utilisateurs

Rien de plus simple :

adduser user1

Pour l'ajouter à un groupe :

adduser user1 groupe

3 Configuration du réseau

3.1 Associer une ip fixe dans un réseau DHCP

Il faut passer par les "baux statiques" : renseigner l'adresse ip que l'on souhaite allouer ainsi que l'adresse MAC de la machine concernée.

3.2 Rediriger les ports

Il suffit ensuite de rediriger les ports externes vers l'adresse ip précédemment allouée. Par exemple : 80 => 192.168.0.65:80

3.3 Configurer les interfaces réseaux :

Installons d'abord ifplugd, si ça n'est pas déjà fait :

aptitude install ifplud

Il faut éditer /etc/network/interfaces. Voici un exemple :

#auto eth0 
iface eth0 inet static
        address 192.168.0.77
        netmask 255.255.255.0
        gateway 192.168.0.254

La ligne auto eth0 sert normalement à activer l'interface réseau au démarrage du système. Si vous n'utilisez pas ifplugd il faut activer cette option, sinon il faut laisser la ligne commentée.

  • address : l'adresse ip associée plus haut à votre machine via les baux dhcp.
  • gateway : il s'agit bien souvent de l'adresse ip du routeur de votre réseau.

Redémarrez votre réseau :

/etc/init.d/ifplugd restart

4 Configuration du pare-feu

4.1 Activation

Nous utiliserons ufw qui est simple d'utilisation. Je vous conseille de vous connecter avec votre JTAG, car vous perdrez votre connexion ssh lors de l'activation de ufw.

aptitude install ufw
ufw enable
ufw allow ssh

ufw est désormais actif, et vous pouvez vous connecter en ssh.

4.2 Petite documentation

L'article qui suit reprend en grande partie la page ufw du wiki Ubuntu-fr : http://doc.ubuntu-fr.org/ufw

Autoriser le trafic entrant suivant les règles par défaut :

ufw default allow incoming

Refuser le trafic entrant suivant les règles par défaut :

ufw default deny incoming

Autoriser le trafic sortant suivant les règles par défaut :

ufw default allow outgoing

Refuser le trafic sortant suivant les règles par défaut :

ufw default deny outgoing

Afficher les règles actives :

ufw status verbose

Activer la journalisation :

sudo ufw logging on

Désactiver la journalisation :

sudo ufw logging off

Autoriser :

sudo ufw allow [règle]

Refuser :

sudo ufw deny [règle]

Supprimer :

sudo ufw delete allow [règle]

Supprimer simplement une règle d'après son numéro

sudo ufw delete NUM

sudo ufw allow from 10.0.0.0/24 to any port 22

La syntaxe des règles Règles simples

Voici quelques exemples pour comprendre la syntaxe des règles de configuration.

Ouverture du port 53 en TCP et UDP :

sudo ufw allow 53

Ouverture du port 25 en TCP uniquement :

sudo ufw allow 25/tcp

Utilisation des services

UFW regarde dans sa liste de services connus pour appliquer les règles standards associées à ces services (apache2, smtp, imaps, etc..). Pour avoir la liste des services :

less /etc/services

Exemple : Autoriser le service SMTP :

sudo ufw allow smtp

2° exemple : Autoriser le port de Gnome-Dictionary (2628/tcp) :

sudo ufw allow out 2628/tcp

3° exemple : Autoriser le protocol pop3 sécurisé (réception du courrier de Gmail et autres messageries utilisant ce protocol sécurisé) :

sudo ufw allow out pop3s/tcp

5 Serveur web

5.1 Ouvrir les ports

Commencez par ouvrir les ports 80 (http) et 443 (https) :

ufw allow https
ufw allow www

5.2 Installation de de lighttpd, MySQL et PHP5

5.2.1 Installation et configuration élémentaire

aptitude install mysql-server mysql-client openssl php5-cgi php5-mysql lighttpd 

Il faut ensuite éditer /etc/php5/cgi/php.ini et "décommenter" la ligne cgi.fix_pathinfo=1 :

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://php.net/cgi.fix-pathinfo
cgi.fix_pathinfo=1

Ensuite il faut activer le module fastcgi-php :

lighttpd-enable-mod fastcgi
lighttpd-enable-mod fastcgi-php 

Il faut également s'assurer que lighttpd puisse écrire dans le fichier "socket" indiqué dans /etc/lighttpd/conf-enabled/15-fastcgi-php.conf. Le plus simple est de configurer ainsi :

"socket" => "/var/run/lighttpd/php-fastcgi.socket",

Puis de créer le fichier en question et lui donner les droits nécessaire :

touch /var/run/lighttpd/php-fastcgi.socket
chown www-data:www-data /var/run/lighttpd/php-fastcgi.socket

Quelques fichiers importants peuvent manquer des droits nécessaires :

chown www-data:www-data /var/log/lighttpd/error.log
chown root:www-data /var/lib/php/ -R
chmod g+rwx /var/lib/php5/

Relancez lighttpd :

/etc/init.d/lighttpd force-reload

5.2.2 Userdir

Vous pouvez au passage activer les répertoires web pour les utilisateurs :

lighttpd-enable-mod userdir

Par défaut le répertoire est $HOME/public_html

Relancez lighttpd :

/etc/init.d/lighttpd force-reload

5.3 Installation de Apache, MySQL et PHP5

aptitude install mysql-server mysql-client openssl php5 php5-mysql apache2 libapache2-mod-php5

Activer les répertoires utilisateurs :

a2enmod userdir
/etc/init.d/apache2 restart

Pour activer php dans ces répertoires, il faut commenter les lignes suivantes dans /etc/apache2/mods-enabled/php5.conf :

<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_value engine Off
    </Directory>
</IfModule>

Et si vous souhaitez permettre aux utilisateurs d'utiliser les .htaccess comme ils le souhaitent, il faut remplacer AllowOverride FileInfo AuthConfig Limit Indexes par AllowOverride All dans /etc/apache2/mods-enabled/userdir.conf.

5.4 Si vous avez des problèmes avec MySQL

Si vous avez des problèmes avec tout ce qui touche à MySQL, cela peut provenir d'un problème de droits sur le répertoire /tmp/. Pour corriger cela :

# chown root:root /tmp
# chmod 1777 /tmp
# /etc/init.d/mysqld start

5.5 Gestion des domaines

5.5.1 Configurer vos DNS

La manière complexe consiste à monter son propre serveur de DNS. Nous ne traiterons pas de cela ici.

Nous nous contenterons de la manière simple ! Laisser faire le gestionnaire de nom de domaine chez qui nous louons nos noms de domaines.

Il faut vous rendre dans l'interface d'admin de votre "provider" et vous rendre sur un truc du genre "gestion des zones" ou "gestion des dns".

Sélectionnez votre nom de domaine et modifier les valeurs suivantes en renseignant votre adresse ip :

Premier exemple (gandi) :

*      A       xxx.xxx.xxx.xxx
@      A       xxx.xxx.xxx.xxx

Second exemple (nuxit) :

        A       xxx.xxx.xxx.xxx
www     A       xxx.xxx.xxx.xxx

5.5.2 Avec lighttpd

La gestion des domaines passe par les "virtual hosts". Avec lighttpd, la configuration est extrêmement simple.

Il suffit d'ajouter vos configuration dans le fichier /etc/lighttpd/lighttpd.conf.

5.5.3 Exemple 1 : site.com et tous ses sous-domaines

Nous voulons que site.com et ses sous-domaines pointent vers /home/www/site.com/ :

$HTTP["host"] =~ "(^|\.)site\.com$" {
    server.document-root = "/home/www/site.com/"
}

5.5.4 Exemple 2 : test.site.com

Nous voulons que test.site.com et ses sous-domaines pointent vers /home/www/site.com/test/ :

$HTTP["host"] =~ "^test\.site\.com$" {
    server.document-root = "/home/www/site.com/test/"
}

5.5.5 Exemple 3 : logs séparés

Il suffit d'ajouter à chaque virtualhost les lignes suivantes :

server.errorlog = "/var/log/lighttpd/site.com/error.log"
accesslog.filename = "/var/log/lighttpd/site.com/access.log"

6 Bloguer avec wordpress

6.1 Installer worpress

Debian fournit un paquet wordpress facilitant le "multi-site"

aptitude install wordpress db4.8-util libdb4.8

6.2 Créer un nouveau blog sur un domaine spécifique

cd /usr/share/doc/wordpress/examples/
bash ./setup-mysql -n userexample mon.domaine.com

Mettre en français :

vi /etc/wordpress/config-mon.domaine.com

Ajouter : define ('WPLANG', 'fr_FR');

Se rendre sur mon.domaine.com pour acherver l'installation.

Refaire la procédure pour un nouveau site.

6.3 Configurer un compte ftp avec vsftp pour la mise à jour des plugins

Source : Configurer vsftpd pour mettre à jour automatiquement WordPress

aptitude install vsftpd

Ensuite on édite /etc/pam.d/vsftpd en ajoutant (il faut supprimer le contenu déjà existant) :

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/login

Puis on créé un fichier login.txt dans lequel nous trouverons le mot de passe des utilisateurs en clair :

mkdir /etc/vsftpd/
vi /etc/vsftpd/login.txt

Exemple :

user1
monmotdepass111uyyyerdhudfefetropcool!
user2
.....

Puis on convertit ce fichier en base de donnée Berkeley :

db4.6_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
chmod 600 /etc/vsftpd/login.*

Ensuite on configure vsftpd :

mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
vi /etc/vsftpd.conf

Y entrer :

# Lancement de vsftpd en standalone
listen=YES
# vsftpd ne va accepter les connexion uniquement depuis le serveur lui même
listen_address=127.0.0.1
# activation des utilisateurs locaux (permet d'utiliser les utilisateurs virtuels)
local_enable=YES
# Afin de permettre la mise à jour, il *faut* permettre l'écriture
write_enable=YES
# activation explicite des utilisateurs virtuels
guest_enable=YES
# force les utilisateurs virtuels d'agir vis à vis du système comme l'utilisateur
guest_username=ftp
# force les utilisateurs à rester dans le ~ de l'utilisateur guest (spacifié juste au dessus soit '/home/ftp/')
chroot_local_user=YES
# active la configuration 'per user" permettant, de créer plusieurs utilisateurs virtuels si besoin par la suite, pour un autre WordPress par exemple
user_config_dir=/etc/vsftpd/users

Créons notre utilisateur user1 :

mkdir /etc/vsftpd/users/
vi /etc/vsftpd/users/user1
# l'utilisateur doit être enfermé dans un dossier contenu dans /home/ftp
# ce dossier sera un lien symbolique vers la racine (contenant le dossier wp-content)
# de votre installation de WordPress
local_root=/home/ftp/wordpress
# droit d'écriture
write_enable=YES
anon_upload_enable=YES
# droit créer des dossiers
anon_mkdir_write_enable=YES
# droit de renommer, supprimer...
anon_other_write_enable=YES
# signifie que l'utilisateur virtuel à les mêmes droits que l'utilisateur réel (ici ftp)
virtual_use_local_privs=YES
# définit l'umask pour les fichiers
local_umask=022

Assurons-nous que le répertoire /home/ftp/ existe avec les bonnes permissions, sinon :

mkdir /home/ftp/
chown ftp:ftp /home/ftp/

Puis créons le lien symbolique vers /usr/share/wordpress :

ln -s /usr/share/wordpress/ /home/ftp/wordpress

En nous assurant que wp-content est accessible à ftp et www-data :

chown -R ftp:www-data wp-content/

Il suffit, lors d'une mise à jour dans wordpress, d'entrer login, mot de passe et adresse ip (127.0.0.1) et sélectionner "FTP" comme mode d'accès, et tout devrait fonctionner.

6.4 Sécuriser la connexion ftp

Création du certificat :

openssl req -new -x509 -days 365 -nodes -out /etc/ssl/private/vsftpd.cert.pem -keyout /etc/ssl/private/vsftpd.key.pem

Sécurisation :

chown root:root /etc/ssl/private/vsftpd.cert.*

chmod 600 /etc/ssl/private/vsftpd.cert.*

Configurons: ajoutons à la fin de /etc/vsftpd.conf :

# Options for SSL
# encrypted connections.

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=YES
# require_ssl_reuse=NO # Certains clients FTP nécessitent cette ligne

ssl_tlsv1=YES
ssl_sslv2=YES
ssl_sslv3=YES

rsa_cert_file=/etc/ssl/private/vsftpd.cert.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key.pem

Penser à ouvrir les ports et les rediriger dans l'interface de configuration de votre routeur :

ufw allow ftp

ufw allow 40000:40100/tcp

6.5 Utiliser vsftpd avec inetd

Configurez inetd pour lancer vsftpd à la demande :

update-inetd --group FTP --add 'ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/vsftpd'

Si vous souhaitez désactiver cette configuration :

/usr/sbin/update-inetd --disable ftp

7 Documents à distance avec git

7.1 Initialisation côté serveur

La mise en place d'un serveur git est extrêmement simple. Il suffit de l'installer, de créer un répertoire spécifique dans son dossier personnel et de l'initialiser :

aptitude install git
git init --bare mondossier.git

C'est tout ! Le reste se passe côté client.

7.2 Initialisation côté client

Côté client, c'est encore plus simple, il suffit d'une petite ligne de commande à faire sur toutes les machines sur lesquelles vous souhaiter travailler :

git clone utilisateur@ipserveur:mondossier.git

Votre dépôt git est prêt !

Le premier "commit" se passe ainsi (on vous demandera le mot de passe de votre compte utilisateur sur le serveur) :

cd mondossier.git
touch un_fichier
git add un_fichier
git -a -m "Premier commit !"
git push origin master

Et ça se passe globalement comme ça pour tous vos futurs "commit".

7.3 Aide-mémoire git

7.4 Un dropbox-like avec SparkleShare

7.4.1 Côté client

Il faut commencer côté client car une clé ssh vous sera donnée qu'il faudra indiquer côté serveur.

Il faut installer le logiciel Sparkeshare (ainsi que git) et le lancer :

aptitude install sparkleshare git
sparkleshare start

Une clé ssh sera généré, vous la trouverez dans votre dossier SparkeShare sous la forme "Utilisateur's key.txt".

P.S. : pour les utilisateurs de MacOSX, git est dispo via MacPort ou gitosx-installer.

7.4.2 Puis côté serveur

Il suffit de créer un dépôt git dédié sur votre serveur, comme nous l'avons déjà vu :

git init --bare drop.git

Puis ajouter la clé ssh des utilisateurs :

mkdir .ssh
vi .ssh/authorized_keys # copier-coller les clés des utilisateurs autorisés
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

7.4.3 À nouveau côté client !

On termine en renseignant l'adresse de notre dépôt côté serveur à Sparkleshare :

Pour cela il faut cliquer sur l'icone de notification (parfois invisible sous GNOME 3, il faut alors glisser la souris sur la zone de notification pour la faire apparaître).

On sélectionne "ajouter un projet hébergé", puis "On my own computer". La configuration se fait comme ceci :

Adresse : ssh://utilisateur@adresse.serveur

Chemin : /home/utilisateur/partage.git/

Votre dossier "SparkleShare" est désormais synchronisé !

8 Écouter sa musique avec mpd

8.1 Activer le son sur son dreamplug

Si le système installé sur la flash interne est bien configuré, ça n'est pas le cas du système installé sur disque externe.

Pour activer le son sur le dreamplug il faut ajouter les lignes suivantes à la fin du fichier /etc/asound.conf :

defaults.pcm.!card default
defaults.ctl.!card default
defaults.pcm.!device 0
defaults.ctl.!device 0

Et "décommenter" la ligne suivante du fichier /etc/modprobe.d/alsa-base.conf :

options snd-usb-audio index=-2

8.2 Installer mpd

Tout d'abord, installons mpd :

aptitude install mpd

C'est plutôt simple !

8.3 Configurer mpd

Il nous faut ensuite le configurer. Tout se passe dans /etc/mpd.conf. Les éléments importants sont :

8.3.1 les dossiers fondamentaux sont :

music_directory                 "/var/lib/mpd/music"
playlist_directory              "/var/lib/mpd/playlists"
db_file                         "/var/lib/mpd/mpd.db" 

Les noms parlent d'eux-mêmes : le premier indique le répertoire où se situe la musique ; le second le lieu où sont enregistrés les playlists ; et enfin la base de donnée en tant que telle.

8.3.2 Droits et utilisateurs :

mpd créé un utilisateur "mpd" associé au groupe "audio". Vous pouvez changer l'utilisateur associé à mpd à la ligne user du /etc/mpd.conf, associé des utilisateurs au groupe audio etc.

8.3.3 Réseau

Si vous souhaitez que mpd soit accessible depuis votre réseau local, ou depuis internet, c'est ici que cela se passe. Généralement on laisse en "localhost" et on choisit un port :

bind_to_address      "localhost"
port                 "6600" 

Pensez à ouvrir le port sur votre pare-feu

8.4 Droits et base de donnée

Corriger les droits :

chown mpd:audio /var/log/mpd/mpd.log
chmod g+w /var/log/mpd/mpd.log

Il faut enfin créer la base de donnée musicale :

mpd --create-db

8.5 Du mutisme aux grésillements : encore la carte son !

Ça n'est finit, la configuration standard ne reconnaît pas la carte du dreamplug.

Pour régler cela, listons tout d'abord les cartes présentent sur la machine :

arecord -l

Ce qui donne, dans mon cas :

card 1: default [C-Media USB Headphone Set  ], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Notez : card 1, device 0, ce qui nous donnera hw:1,0.

Pour faire fonctionner notre carte rendons-nous dans /etc/mpd.conf, et modifions la sortie alsa ainsi :

audio_output {
        type            "alsa"
        name            "My ALSA Device"
        #device         "hw:0,0"        # optional
        #format         "44100:16:2"    # optional
        #mixer_type     "software"      # optional
        #mixer_device   "default"       # optional
        #mixer_control  "PCM"           # optional
        #mixer_index    "0"             # optional
}

Un petit /etc/init.d/mpd restart, et c'est partit ! Le son fonctionne, malheureusement il grésille et mpd mange entre 20% et 30% de mon cpu en continue !

Notre configuration fait passer le son par dmix. Ce dernier à la bonne idée de "resampler" à 48Khz la sortie de notre carte qui est en 44.1Khz. La conversion de 44.1Khz à 48Khz ne fait rien gagner en qualité, et mange du cpu. Il faut donc demander à dmix de resampler à 44.1Khz.

Pour cela éditer votre /etc/asound.conf et entrer ce qui suit :

pcm.!default {
        type plug
        slave.pcm {
                type dmix
                ipc_key 1024
                slave {
                        pcm "hw:1,0"
                        rate 44100
                }
        }
}

Notez la ligne pcm "hw:1,0"=, elle correspond à notre sortie de =arecord -l.

Un petit /etc/init.d/mpd restart et nous retrouvons un son propre et une utilisation du cpu autour de 4%. Ouf !

8.6 Faire de son serveur une chaîne hifi avec un client mpd

C'est le fonctionnement classique de mpd.

8.7 Écouter sa musique à distance avec Ampache + mpd

Installons Ampache :

aptitude install ampache

Ensuite il faut vous rendre sur http://votreip/ampache pour configurer le logiciel.

ATTENTION ! il vous sera demander de créer un utilisateur mysql ou d'utiliser un existant, faite bien attention au mot de passe, si celui-ci contient des caractères complexes il ne sera pas nécessairement bien reconnu par Ampache.

Il est donc préférable de créer un utilisateur avec des droits restreints et un mot de passe à base de lettres simples et de chiffres.A

Une fois l'installation faite il faut vous connecter en tant qu'admin. De là vous pouvez ajouter de nouveaux utilisateurs, gérer les playlists, et plein d'autres choses. Mais surtout, c'est là que vous ajouterez des catalogues musicaux. Vous pouvez alors ajouter le répertoire commun à mpd.

Si vous avez des problèmes de permissions lors de l'ajout de catalogues :

chmod -R u+rwX,go+rX /chemin/vers/catalogue/

8.8 Passer à pulseaudio

En réalité tous les problèmes que nous avons rencontrés se résolvent assez facilement si on installe pulseaudio. Pour cela il faut tout d'abord commenter les lignes suivantes dans votre /etc/asound/ :

#defaults.pcm.!card default
#defaults.ctl.!card default
#defaults.pcm.!device 0
#defaults.ctl.!device 0

#pcm.!default {
#       type plug
#       slave.pcm {
#               type dmix
#               ipc_key 1024
#               slave {
#                       pcm "hw:0,0"
#                       rate 44100
#               }
#       }
#}

Désactiver la sortie "ALSA" dans /etc/mpd.conf :

#audio_output {
#       type            "alsa"
#       name            "My ALSA Device"
        #device         "hw:0,0"        # optional
        #format         "44100:16:2"    # optional
        #mixer_type     "software"      # optional
        #mixer_device   "default"       # optional
        #mixer_control  "PCM"           # optional
        #mixer_index    "0"             # optional
#}

Puis configurer la sortie "pulse" :

audio_output {
        type            "pulse"
        name            "My Pulse Output"
#       server          "remote_server"         # optional
#       sink            "remote_server_sink"    # optional
}
aptitude install pulseaudio pulseaudio-utils

Vérifiez que l'option autospawn est activée dans /etc/pulse/client.conf. De cette manière pulseaudio sera lancé automatiquement lorsqu'une application le demandera.

; autospawn = yes

Normalement, à ce stade, pulseaudio n'est pas lancé (vérifiez avec un ps -A | grep pulse.). Il vous faut relancer mpd qui s'en chargera :

/etc/init.d/mpd restart

9 Partage de fichiers avec webdav

9.1 Configurer webdav pour lighttpd

Source : How To Set Up WebDAV With Lighttpd On Debian Etch

Installer et activer webdav pour lighttpd :

aptitude install lighttpd-webdav apache2-utils
lighttpd-enable-mod auth
lighttpd-enable-mod webdav
/etc/init.d/lighttpd restart

Nous aurons besoin de apach2-utils pour la génération des mots de passe.

9.2 Créer un utilisateur webdav

Nous allons créer un mot de passe pour l'utilisateur "user" qui sera stocké dans le fichier /var/www/webd/passwd-user.dav.

htpasswd -c /var/www/webd/passwd-user.dav user

Un mot de passe vous sera demandé.

ATTENTION ! l'option -c n'est à utiliser qu'à la création du fichier /var/www/webd/passwd-user.dav. Si vous ajouter un utilisateur à ce fichier avec cette option, vous supprimerez le contenu précédent.

Pour ajouter un utilisateur et conserver les autres, il suffit de ne pas utiliser cette option :

htpasswd /var/www/webd/passwd-user.dav user2

Il faut ensuite modifier les permissions sur le fichier :

chown root:www-data /var/www/webd/passwd-user.dav
chmod 640 /var/www/webd/passwd-user.dav

9.3 Configurer les virtual host en conséquence

Éditez votre /etc/lighttpd/lighttpd.conf. Voici un exemple de vhost configuré pour webdav :

$HTTP["host"] == "partage.example.com" {
  server.document-root = "/home/user/partage/"
  webdav.activate = "enable"
  webdav.is-readonly = "disable"
  webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db"
  auth.backend = "htpasswd"
  auth.backend.htpasswd.userfile = "/var/www/webd/passwd-user.dav"
  auth.require = ( "" => ( "method" => "basic",
                           "realm" => "webdav",
                           "require" => "valid-user" ) )
}

Avec cet exemple vous avez un accès en lecture et écriture au dossier /home/user/partage/ pour tous les utilisateurs enregistrés dans passwd-user.dav via l'adresse partage.example.com.

Deuxième exemple :

$HTTP["host"] =~ "^musique\.exemple\.org$" {
    server.document-root = "/usr/share/ampache/www/"
    alias.url = ( "/webdav" => "/home/user/musique/" )
    $HTTP["url"] =~ "^/webdav($|/)" {
        webdav.activate = "enable"
        webdav.is-readonly = "disable"
        webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db"
        auth.backend = "htpasswd"
        auth.backend.htpasswd.userfile = "/var/www/webd/passwd-user.dav"
        auth.require = ( "" => ( "method" => "basic",
                             "realm" => "webdav",
                             "require" => "valid-user" ) )
  }
}

Cet exemple vous permet d'accéder à ampache depuis l'adresse musique.exemple.com, et au dossier contenant vos musiques depuis musique.exemple.com/webdav à partir des utilisateurs enregistrés dans passwd-user.dav.

10 Mise en place d'un proxy

10.1 Installer et configurer squid

Sources :

Un contrôle parental efficace : Projet Cohorte de Cédric Pellerin in GNU/Linux Magazine France HS n°48.

Installation de Squid et SquidGuard sur une Debian ETCH

Installons squidguard :

aptitude install squid

Le fichier de configuration contient une quantité phénoménale d'informations sous forme de commentaires, commençons pas sauvegarder le fichier original et en créer une copie sans commentaires :

cd /etc/squid/
mv squid.conf squid.conf.bak
cat squid.conf.bak | grep -v ^# | grep -v ^$ > squid.conf

Ajoutons la ligne suivante dans la section des acl :

acl votre-domaine.com src 192.168.0.0/255.255.255.0

Juste avant la ligne http_access deny all ajoutez la permission concernant l'acl de votre réseau :

http_access allow votre-domaine.org

Ajoutez la ligne suivante afin que le hostname présenté par squid ne soit pas celui de votre réseau :

visible_hostname Proxy

La ligne suivante configure squid de manière à ce que le format des fichiers journaux soient compatibles "clf". C'est utile pour éviter des erreurs avec webalizer.

emulate_httpd_log on

Et ouvrez le port de votre pare-feu :

ufw allow from 192.168.0.0/30 to any port 3128

10.2 Installer et configurer squidguard

aptitude install squidguard

Récupérons d'abord une archive contenant une liste de sites sensibles:

cd /var/lib/squidguard/db/
wget http://squidguard.mesd.k12.or.us/blacklists.tgz
tar zxvf blacklists.tar.gz

Passons à la configuration de squidguard /etc/squid/squidGuard.conf ;

cd /etc/squid/
mv squidGuard.conf squidGuard.conf.bak
vi squidGuard.conf

Et ajoutons un début de configuration au fichier :

dbhome /var/lib/squidguard/db/blacklists/
logdir /var/log/squid

dest ads {
       domainlist      ads/domains
       urllist         ads/urls
}
dest aggressive {
       domainlist      aggressive/domains
       urllist         aggressive/urls
}
dest audio-video {
       domainlist      audio-video/domains
       urllist         audio-video/urls
}
dest drugs {
       domainlist      drugs/domains
       urllist         drugs/urls
}
dest gambling {
       domainlist      gambling/domains
       urllist         gambling/urls
}
dest hacking {
       domainlist      hacking/domains
       urllist         hacking/urls
}
dest mail {
       domainlist      mail/domains
       urllist         mail/urls
}
dest porn {
       domainlist      porn/domains
       urllist         porn/urls
}
dest proxy {
       domainlist      proxy/domains
       urllist         proxy/urls
}
dest redirector {
       domainlist      redirector/domains
       urllist         redirector/urls
}
dest spyware {
       domainlist      spyware/domains
       urllist         spyware/urls
}
dest suspect {
       domainlist      suspect/domains
       urllist         suspect/urls
}
dest violence {
       domainlist      violence/domains
       urllist         violence/urls
}
dest warez {
       domainlist      warez/domains
       urllist         warez/urls
}

acl {
       default {
               pass  !ads !aggressive !audio-video !drugs !gambling !hacking !mail !porn !proxy !redirector !spyware !suspect !violence !warez
               redirect http://192.168.0.77/block.html
       }
}

Compilons les règles que nous avons installés (ça peut être long !) :

/usr/bin/squidGuard -C all

Modifions les droits sur les listes noires :

chown -R proxy:proxy /var/lib/squidguard/db/

Lions ensembles squid et squiGuard dans /etc/squid/squid.conf ajoutons :

redirect_program /usr/bin/squidGuard

Ne reste plus qu'à redémarrer squid :

squid -k reconfigure

Et à configurer votre client. Typique entrer l'adresse locale de votre machine faisant proxy et indiquer qu'il tourne sur le port 3128 (ou autre en fonction de votre configuration).

11 Sécurité

11.1 Sécuriser ssh

Il vous éditer le fichier ssh_config :

vim /etc/ssh/sshd_config
  • Désactiver l'accès ssh en root

PermitRootLogin no

  • Changer le port par défaut (22)

Port xxx

Il faut penser à vérifier dans /etc/services si le port choisi n'est pas associé à un autre service.

Et configurer votre pare-feu en conséquence :

ufw delete allow 22
ufw allow xxx
  • Interdire les mots de passe vides

PermitEmptyPasswords no

  • Limiter l'accès en ssh à certains utilisateurs

AllowUsers user1 user2 ...

  • Désactiver l'usage de la version 1 du protocole ssh

Protocole 2

  • Vérifier que votre configuration ne contient pas d'erreurs

Il serait dommage que vous ne puissiez plus vous connecter à votre machine !

/usr/sbin/sshd -t

Si rien ne s'affiche, c'est que c'est bon !

  • Configurer vos applis

Le plus simple est de renseigner la configuration ssh globale de votre utilisateur.

echo "Host votreip" >> ~/.ssh/config
echo "    Port xxx" >> ~/.ssh/config

Ainsi, pas besoin de toucher à la configuration de git, à vos alias etc.

11.2 Scanner les ports ouverts avec nmap

Lister les machines de votre réseau :

nmap -sP 192.168.0.0-200

Détecter les ports ouverts sur une machine particulière :

nmap 192.168.xxx.xxx

12 Gestion des journaux

12.1 Webalizer

aptitude install webalizer

Supprimons le fichier de configuration standard et créons les fichiers de configuration pour l'analyse des journaux de squid et de lighttpd :

cd /etc/webalizer
rm webalizer.conf
cp webalizer.conf.sample squid.conf
cp webalizer.conf.sample lighttpd.conf

Configurons webalizer pour squid afin que la sortie pointe sur /var/www/squidalizer (rappelons que nous utilisons le format clf pour les fichiers journaux de squid, et non le format spécifique) :

LogFile  /var/log/squid/access.log

OutputDir /var/www/squidalizer

Incremental   yes

Configurons webalizer pour lighttpd afin que la sortie pointe sur /var/www/httpdalizer

LogFile  /var/log/lighttpd/access.log

OutputDir /var/www/httpdalizer

Incremental   yes

HostName    www.mydomain.com

Générons la sortie avec le script suivant :

for i in /etc/webalizer/*.conf; do /usr/bin/webalizer -c $i; done

Nous n'avons plus qu'à en faire une tâche périodique :

echo "for i in /etc/webalizer/*.conf; do /usr/bin/webalizer -Q -c $i; done" > /etc/webalizer/webalizer.cron
chmod +x /etc/webalizer/webalizer.cron
crontab -e

Le script webalizer.cron sera lancé tous les jours à 1h00 du matin :

0 1 * * * /etc/webalizer/webalizer.cron

13 Ressources

Licence Creative Commons
Cette oeuvre de Jean-Baptiste Bourgoin est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 non transposé .

Flux d'information de Jean-Baptiste Bourgoin

Ce site est conçu avec le mode org d'Emacs.