Site perso : Emmanuel Branlard

Subsections

12. SERVERS - PHP SQL APACHE SAMBA FTP SSH


12.1 VirtualBox

%%% SSH from guest to host
install openssh-server on host
Add a host-only network in VirtualBox General preferences
In the virtual machine option, add on top of the nat interface, another interface, host-only
In the guest machine configure the second interface eth1 the same way than eth0 in /etc/network/interfaces:
auto eth1
iface eth1 inet dhcp
By defaults the host ip will be 192.168.56.1 and the guest ip 192.168.56.101
You can add shortctus to these IP in /etc/hosts

%%% File sharing
Devices -> Install guests additions
aptitude install dkms linux-headers build-essentials
aptitude install xserver-xorg xserver-xorg-core
mount /dev/sr0 /media/cdrom
./VBoxLinux

12.2 SQL editor: sqlitebrowser


12.3 Free shell servers

USER@shellmix.com -p 22
USER@elitter.net     -> allows command to be runed even after logout and closing of the shell!

12.4 Debian Serveur

LAMP : Linux Apache Mysql Php

mail (SMTP avec Postfix et POP/IMAP avec Cyrus)
temp (NTP)
dns (bind9)
le DHCP (dhcpd)
partage de fichiers (NFS ou Samba)
impression (CUPS)

%%% SSH de base - open sshh server (et non client)
aptitude install openssh-server

%%% Pour plus de securité et utilisation plus commode utiliser des clefs(DSA)
# On cree le couple de clef publique/privee sur la machine cliente
$ ssh-keygen -t dsa
cree le fichier /home/clientuser/.ssh/id_dsa.pub
# il faut ensuite donner la clef publique au serveur pour quelle figure dans la liste des clef authorisee de l'utilisateur serveur
- soit en utilisant ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@IP
- soit en activant temporairement la connection par mot de passe (PAM et Password), et en faisant un scp ou un echo >> dans le fichier /home/serveruser/.ssh/authorized_keys de l'utilisateur server. Une fois le transfert effectué, on desactive la connection par mot de passe
- soit en la donnant par clef USB a l'administrateur du serveur!
# On redemarre le serveur ssh pour prendre en compte la clef publique du client, et possible modification du fichier sshd_config

%%% Exemple d'options pour le fichier sshd_config and public key
## Low security
#Port 12120
#PermitRootLogin no
#RSAAuthentication yes
#PubkeyAuthentication no
#AuthorizedKeysFile     %h/.ssh/authorized_keys
#UsePAM yes

## Higher security
Port 12120
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PasswordAuthentication no
UsePAM no
AllowUsers manu
DenyUsers test guest admin root snort apache nobody
MaxStartups 1

%%% Pour encore plus de securité avec des program qui banissent
aptitude install tiger fail2ban

%%% Notes
- il est preferable que le fichier authorized_keys ait les droits 600
- il faut que dans sshd_config, le home soit referré comme ~h/.ssh/authorized_keys
- utiliser ssh -v donne les details de debug

# sous windows, client de base : putty

SSH c'est du TCP port 22

# les bons tutos
http://technique.arscenic.org/connexion-distante-au-serveur-ssh/article/securisation-ssh-poussee
http://doc.ubuntu-fr.org/ssh
http://wiki.debian-facile.org/config:ssh
http://www.coagul.org/spip.php?article168

# scan des ports ouverts
http://www.frameip.com/scan/scan.php

%%% Connexion à un serveur SSH via un autre serveur SSH
Si vous avez deux serveurs SSH mais quiil est nécessaire de se connecter au premier pour pouvoir accéder au deuxième, cette commande permet de réaliser les deux connexions :
ssh root@serveur1 -t ssh root@serveur2

%%% Tunnel crypté en SSH
Il se peut que vous vouliez établir une connexion distante pour transiter des données de manière 100% transparente et sécurisée, nous allons donc établir un tunnel ssh.
      #  ssh -L 5901:localhost:5900 user@80.80.80.80
Cette technique est très utile pour relier en local un bon nombre d'utilisation, comme sur kde distant, un serveur smtp personnel, une boite mail ( pop ou imap ) personnelle, un bon nombre d'utilisations ont recours à cette technique.
Détail sur la ligne de commande SSH
      ssh : invoque le protocole
      -L invoque de la création d'un tunnel crypté
      5901 : port coté local
      localhost : indique que l'accès se fera en local de manière transparente
      5900 : port du service distant
      user@80.80.80.80 : indique avec quelle user et sur quelle ip on va établir la connection

12.5 Video surveillance - Zone minder

http://www.csquad.org/cocoon/tags/public/zoneminder/zoneminder.php#N1004A
http://forum.debian-fr.org/viewtopic.php?f=1&t=17162&view=next

12.6 CUPS

Debugging commands: 
ping localhost  -> if doesn't work, add loopback lo in  network interfaces, ifup lo, ifconfig lo or restart
netstat -nl |grep 631
iptables -nvL
netstat -tunva
netstat -tapln | grep cups
vim /var/log/cups/error_log

cat /etc/network/interfaces
cat /etc/hosts
cat /etc/hosts.allow

12.7 Telnet

Pour faire du telnet a priori il faut lancer le daemon openbsd-inetd (je l'ai desactive au demarrage)

Http avec telnet
telnet www.google.fr 80

12.8 Creer une base de donnees sql pour amarok

installer mysql-server
lancer MySQL avant de faire ces manipulations :
sudo /etc/init.d/mysql start

pour acceder a mysql : tapper
mysql -u root -p

#creer un base de donnes pour amarok
http://mikesubuntu.blogspot.com/2007/09/how-to-set-up-mysql-database-in-amarok.php
$mysql -p -u root
    >CREATE DATABASE amarok;
    >USE mysql;
    >GRANT ALL ON amarok.* TO amarok@localhost IDENTIFIED BY 'amarok';
    >FLUSH PRIVILEGES;
    >quit

In Amarok use the following settings:
    Hostname: 127.0.0.1
    Database: amarok
    Port: 3306
    Username: amarok
    Password: Your Password

12.9 PHP mysql et apache sous ubuntu

http://giminik.developpez.com/articles/apache/debian/

# Les paquest necessaires
sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5
#Le mot de passe administrateur mySQL vous est demandé: Entrez-en un.

### Apache 
sudo /etc/init.d/apache2 reload
#Un ajustement de la politique des droits permet de mieux utiliser ce répertoire
sudo groupadd www-data
sudo addgroup manu www-data
sudo chown -R www-data:www-data /var/www  
sudo chmod -R u=rwX,g=rwXs,o=--- /var/www
#  permettra à apache de lire le répertoire pour produire les pages
#  permettra à tous les utilisateurs membres du groupe www-data de travailler sur les fichiers (en général, il faut créer ce groupe "www-data" et se mettre comme membre)
#  permettra à tous les fichiers et répertoires créés dans ce répertoire d'avoir les mêmes propriétés au travers du groupe (GIG activé par g=s)
# faire un lien vers son dossier site:
ln -s /home/manu/Sites /var/www/sites

Have a look at the file /etc/apache2/envvars
export APACHE_RUN_USER=manu
export APACHE_RUN_GROUP=www-data

### Test/Install PhP
# Creation d'un fichier test
echo "<? phpinfo(); ?>" > /var/www/test.php

Une fois l'installation terminé, ouvrez http://localhost dans votre navigateur
La racine de votre site web est située dans /var/www
et ouvrez http://localhost/test.php dans votre navigateur. 
lynx http://localhost/test.php

# Si ca ne marche pas editer /etc/apache2/apache2.conf :
AddType application/x-httpd-php .php 
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so 

##################################################
### SQL
##################################################
Si vous avez une erreur comme celle-là :
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

il suffit de lancer MySQL avant de faire ces manipulations :
sudo /etc/init.d/mysql start

pour acceder a mysql : tapper
mysql -u root -p
Pour changer le password root : 
update mysql.user set Password=PASSWORD("test") where User="root";

#To create a new mysql user 'guest' with 'all privileges' on the database 'demo':
mysql > create database demo
mysql >GRANT ALL PRIVILEGES ON demo.* TO 'guest'@'localhost' IDENTIFIED BY 'guest' WITH GRANT OPTION;
mysql> UPDATE user SET Password=PASSWORD('guest') WHERE user='guest';
That's it! MySQL is ready! Don't forget to remember the root password as we might be using it with phpmyadmin.

####################################################
### Php My Admin
####################################################
The phpmyadmin configuration file is located at: /etc/phpmyadmin folder.
Usually it is automatically setup with a sim-link in /etc/apache2/conf.d/phpmyadmin.conf 
Check it, if not present, either link it to /etc/phpmyadmin/apache.conf or add the following line in /etc/apache2/apache2.conf:
Include /etc/phpmyadmin/apache.conf 

restart apache

Goto http://localhost/phpmyadmin
If you have "You don't have permission to access /phpmyadmin/ on this server."
then edit the file /etc/phpmyadmin/apache.conf and allow access to the folder:

<Directory /usr/share/phpmyadmin>
        Options FollowSymLinks
        DirectoryIndex index.php
        Order deny,allow
        Allow from 127.0.0.1

# To be able to import sql files in phpmyadmin
edit php.ini: 

; http://php.net/post-max-size
post_max_size = 20M

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 200M

# Other info
http://mikesubuntu.blogspot.com/2007/09/how-to-set-up-mysql-database-in-amarok.php
http://www.cyberciti.biz/faq/mysql-command-to-show-list-of-databases-on-server/
http://www.howtoforge.com/quick-n-easy-lamp-server-centos-rhel

# Commands sql
show databases;

12.10 Apache - example of htaccess file

The module RewriteEngine is really nice, but not allowed on all servers.
One can use a workaround with the module Multiviews, and something like a file tag.php containing:

<?php
$url = $_SERVER['PATH_INFO'];
$get = explode("/", $url);
?>

so that /tag.php/a/b/c/d or /tag/a/b/c/d will be dealt the same by the script in tag.php.

Options Indexes Multiviews
IndexOptions FancyIndexing FoldersFirst
IndexOptions SuppressHTMLPreamble
IndexOptions SuppressDescription
IndexOptions IconsAreLinks
IndexOptions SuppressLastModified
#HTMLTABLE 
#XHTML SuppressRules SuppressLastModified SuppressSize
IndexOptions NameWidth=70
HeaderName /_includes/indexheader.php
ReadmeName /_includes/indexfooter.php
IndexIgnore .htaccess _includes _CONTENT.php 

AddIcon /images/mimetypes/folder.png ^^DIRECTORY^^
AddIconByType (SND,/images/mimetypes/audio-x-generic.png) audio/*
AddIconByType (IMG,/images/mimetypes/image-png.png) image/*
AddIconByType (TXT,/images/mimetypes/text-x-generic.png) text/*
AddIconByType (VID,/images/mimetypes/video-x-generic.png) video/*
AddIconByType (XOF,/images/mimetypes/x-office-document.png) x-office/*

AddIcon (ZIP,/images/mimetypes/package-x-generic-packed.png) .tar .gz .7z .zip .bz2
AddIcon (DOC,/images/mimetypes/x-office-document.png) .rtf .doc .docx .zip .bz2
AddIcon (PPT,/images/mimetypes/x-office-presentation.png) .ppt .odp
AddIcon (XLS,/images/mimetypes/x-office-spreadsheet.png) .xls .xlsx .ods
AddIcon (HML,/images/mimetypes/text-html.png) .php .php .css .htm
AddIcon (PDF,/images/mimetypes/application-pdf.png) .pdf .ps .dvi
AddIcon (TEX,/images/mimetypes/text-x-tex.png) .tex .bib

DefaultIcon /images/mimetypes/text-x-generic-template.png
AddIcon /images/mimetypes/go-up.png ..

#Options +FollowSymlinks
#RewriteEngine on
#RewriteRule ^articles/([^/]+)/([^/]+).zip hi.php?section=$1&file=$2 [NC]

12.11 Apache - probleme de liens symbolic

ce site-enabled marche
avec un lien symbolic de /var/www/sites/ dans /home/manu/Sites
es drois du repertoire sont ecriture pour utilisateur et groupe et ,manu:www-data

Faire bien attention a l'ordre Deny,Allow qui est par default, et donc pas de droit d'acces

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        
        # Disable access to the entire file system except for the directories that
        # are explicitly allowed later.
        <Directory />
               AllowOverride None
               Order Deny,Allow
               Deny from all
        </Directory>
        
        <Directory /var/www >
                Order allow,deny
                allow from all
                AllowOverride All
               Options Indexes FollowSymLinks
        </Directory>

      
</VirtualHost>
~

12.12 Aide server apache - les bases

Bien regarder le contenu de tous les fichiers /etc/apache2 :
Le locahost par default est dans sites-availables\
Les sites-enabled sont des liens vers les sites-available
ports.conf : les port sur lesquels le serveur ecoute
conf.d/ : config de php, securites
httpd.conf : le fichier de conf pour l'utilisateur. A mon avis : c'est pas plus mal d'en mettre un dans son home, et d'inclure ce fichier a la fin de apache2.conf

Attention a l'option : "AllowOverride None", les .htaccess n'ont aucun effet a cause de cela

Ce site a le merite d'etre simple (sauve dans config): 
http://blaireaulinux.free.fr/apache.php
http://www.nemako.net/dc2/?post/2006/01/13/77-personnaliser-apache-avec-htaccess

12.13 Aide server apache - l'autoindex et le probleme de php

Hierarchie :
/var/www/sites/site1/           #le site en question
/var/www/sites/site1/.htaccess  #definit les changement de regles pour l' option Indexes - autoindex
/var/www/sites/site1/_includes/.htaccess  #!!! tres important : autorise le php
/var/www/sites/site1/_includes/header.php   # le nouveau header
/var/www/_includes/ -> sites/sites1/_includes/header.php   #un lien symbolique a partir de la racine du site

Mon httpd.conf :
#pour activer le .htaccess dans ce dossier, et ainsi changer l'option indexes
<Directory "/var/www/sites/site1/">
	AllowOverride All
	Order allow,deny
	allow from all
</Directory>
#pour autoriser un header/footer en php, en le considerant comme du texte
<Directory "/var/www/_includes/">
	 AllowOverride All
	 Order allow,deny
	 allow from all
</Directory>

#.htaccess a la racine de site1 : on change la methode d'indexation
	Options Indexes
	IndexOptions FancyIndexing FoldersFirst
	IndexOptions SuppressHTMLPreamble
	IndexOptions SuppressDescription
	IndexOptions NameWidth=50
    HeaderName /_includes/header.php
    ReadmeName /_includes/footer.php
    IndexIgnore .htaccess

#.htaccess dans le dossier /_includes/ : considere le php comme du texte, uniquement dans ce dossier!
# on supprime le listage dans ce dossier par securite
   AddType text/html .php
   AddHandler application/x-httpd-php .php
   Options -Indexes

12.14 Aide server apache - protection par mot de passe

protéger des pages et répertoires

Dans ce chapitre, nous allons voir les différentes étapes pour protéger les pages contenues dans /var/www/test/ et ses sous-répertoires.

1. créer un fichier mot de passes (vide pour l'instant), par exemple /var/www/.htpasswd
2. éditer le fichier de la forme :
fred:gWK3udIcGH832
bob:BgG6vsQflVS66

Ce fichier doit contenir les mots de passe sous forme cryptée uniquement. Pour le créer, il faut d'abord mettre n'importe quoi à la place du mot de passe.

Exemple :
fred:blabla
bob:bob

Puis, pour les crypter, on va taper "htpasswd -b /var/www/.htpasswd bob mot-de-passe en clair". Maintenant, le mot de passe de bob sera crypté. Il faut faire pareil avec tous les comptes. Si on ne veut pas que le mot de passe apparaisse en clair sur la ligne de commande, il faut taper "htpasswd /var/www/.htpasswd bob" et il va demander de taper le mot de passe.

3. éditer le fichier /var/www/test/.htaccess et copier dedans :
AuthUserFile /var/www/.htpasswd        # fichier mot de passe
AuthGroupFile /dev/null        # idem pour le groupe
AuthName "Accés réservé"        # texte qui apparait dans la boite de dialogue
AuthType Basic        # pour lui dire d'utiliser AuthUserFile
<Limit GET POST>
Require valid-user        # autorise tous les utilisateurs qui sont dans .htpasswd. On pourait mettre "Require user fred" pour n'autoriser que fred
</Limit>

12.15 iptables

http://wiki.debian.org/iptables

#listing
iptables --list

#clearing them
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

12.16 Server FTP

aptitude install ftpd  (openbsd-inetd)
ou
aptitude install proftpd 

#
/etc/init.d/proftpd start
# Liste des exclus
/etc/ftpusers

# Security
-  installer fail2ban(!!!!) et le configurer dans /etc/fail2ban/jail.local  (!!! read below)
-  installer Lynis tiger chkroot qui aident a detecter les failles de securites
-  installer ufw

#fail2ban problem avec iptables
iptables ne peut pas recevoir trop de commandes a la suite
modifier /etc/fail2ban/actions.d/
iptables.conf
et
iptables-multiport

mettre
sleep 3.0
apres la premiere ligne de actionstart et actionstop

sur internet un mec propose quelquechose d'aleatoire:
actionstart = sleep ${RANDOM:0:1}.${RANDOM:0:1}
              iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-<name>

%%%Livebox : Les passives ports c'est tres important!!!
http://forum.ubuntu-fr.org/viewtopic.php?id=110641
plages de port ftp:
active: 20-21 20-21
passive: 6000-6100 6000-6100

#<IfModule mod_dynmasq.c>
# DynMasqRefresh 28800
#</IfModule>
#MasqueradeAddress %%%%%%.dyndns.org

#DisplayXXX il faut avoir les droits d'acces aux fichiers welcome, connect, quit, goaway...

#
/etc/init.d/fail2ban start
/etc/init.d/ufw start
/etc/init.d/proftpd start 
#

Run the Ufw firewall wizard.
Install a rate limiting rule to guard against DOS and brute forcers:

# General new connection rate limiting for DOS and Brute Force protection
iptables -I INPUT -p TCP -m state --state NEW -m limit \
--limit 30/minute --limit -burst 5 -j ACCEPT

12.17 DynDNS

- Creer un compte gratuit sur dyndns

- creer un host (avec IP address)

- Configurer la Livebox http://192.168.1.1
 Configuration / Avancee/ DNS Dynamique
 Nom du compte (login de DynDNS)
 Password login DynDNS
 HostNane: celui choisit sur DynDns (monserveurftp.dyndns.org)

- Configurer la livebox2 : redirection des ports
 Serveurs LAN,  Ajouter. 
Nom du serveur : "Serveur web".(HTTP ou FTP)
Protocole : TCP qui est le protocole généralement utilisé pour les serveurs web.
Du port 80 Au port 80.
Adresse IP locale : c'est l'adresse IP de la machine où est installé le serveur. Elle est de la forme 192.168.1.XXX

12.18 Voisimage reseau : pyNeighborhood

#pyNeighborhood est un tres bon logiciel pour voisinage reseau
aptitude install pyNeighborhood

#Changer les commandes de montage/demontage en mettant sudo devant

#Au lieu de umount.cifs, mettre umount !

12.19 Samba fusesmb pyNeighborhood

# pour le serveur installer samba
aptitude install samba
#et definir un nom de reseau, comme WORKGROUP

# pour le client installer smbclient

#samba
$nmblookup VJK 
querying VJK on 82.211.206.255
82.211.206.142 VJK<00>
82.211.206.92 VJK<00>
# <00> est le cas courant <20> est pour un serveur

#chercher pour le reseau BRANET OU pour les resaux SAMBA 
nmblookup BRANET __SAMBA__
#chercher pour le reseau BRANET ET pour les resaux SAMBA 
nmblookup -B BRANET __SAMBA__

# This time we are testing the ability of programs (such as nmbd ) to use broadcast. It's essentially a connectivity test, done via a broadcast to the default broadcast address. A number of NetBIOS/TCP-IP hosts on the network should respond with "got a positive name query response" messages. Samba may not catch all of the responses in the short time it listens, so you won't always see all the SMB clients on the network. However, you should see most of them:

manu@server$ nmblookup -d 2 '*' 

# le -N c'est pour etre anonyme, je pense que ca doit revenir au meme que -U% pour les serveur SAMBA mais pas pour windows
$smbclient -N -L 82.211.206.142
Domain=[KINGS-WIN] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
         Sharename       Type      Comment
         ---------       ----      -------
         SharedDocs      Disk

$smbclient  \\\\kings-win\\SharedDocs -U user passwd
$smbclient  '\\kings-win\SharedDocs' -U user passwd
$smbclient  '\\kings-win\SharedDocs' -N
smb: \> quit

$smbclient  '\\olympe\Public' -N

#fusesmb
cp /usr/share/doc/fusesmb/examples/fusesmb.conf.ex ~/.smb/fusesmb.conf
chmod 600 ~/.smb/fusesmb.conf

12.20 Communiquer avec les reseaux microsoft

#Installation de Samba,polices Microsoft et cabextract
sudo apt-get install samba msttcorefonts cabextract

#jout de l'utilisateur au groupe sambashare doivent etre automatique
sudo adduser $USER sambashare

12.21 Activation du voisinage réseau Windows dans Thunar

#Installation de fusesmb :
sudo apt-get install fusesmb
#Vérifier la présence du module fuse dans /etc/modules :
sudo vim /etc/modules
#modprobe fusemb
#Redémarrer le serveur X : Ctrl + Alt + bacs Space
#menu XFCE / Système / Users   : cocher pour les utilisateurs devant utiliser

12.22 fusemb

sudo modprobe fuse
#Il faut ensuite penser à rajouter le groupe fuse à votre utilisateur.
sudo  gpasswd -a $USER fuse
#
cd ~
mkdir -p Network
fusesmb Network
A partir de maintenant, vous pouvez voir le voisinage réseau de la forme « DOMAINES/MACHINES/PARTAGES ». Pour démonter le point de montage :
fusermount -u Network







Emmanuel Branlard