Monter un serveur sur dreamplug
Sommaire
- 1 À propos
- 2 Installer Debian sur un disque externe
- 3 Configuration du réseau
- 4 Configuration du pare-feu
- 5 Serveur web
- 6 Bloguer avec wordpress
- 7 Documents à distance avec git
- 8 Écouter sa musique avec mpd
- 9 Partage de fichiers avec webdav
- 10 Mise en place d'un proxy
- 11 Sécurité
- 12 Gestion des journaux
- 13 Ressources
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é
Sources : Securing Debian How-To
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
Spinifex : une mine
