apache2 + php5 + fcgid + suexec

Ceci est la configuration rapide de apache2, php5, fcgid et suexec sur une debian, ça peut marcher aussi pour ubuntu. J’ai utilisé ces logiciels pour mutualiser un serveur web qui utilise php5.

J’ai utilisé fcgid au lieu de fastcgi car c’est plus libre et il marche très bien avec suexec en plus son popcon ici est supérieur à fastcgi ici mais c’est juste un détail . Suexec sert à exécuter les scripts php par un utilisateur/groupe spécifique et limité donc ça augmente la sécurité du serveur, si vous voulez en savoir plus veuillez consulter la doc complète ici.

Installer les packages utilisés :

aptitude install apache2-mpm-worker libapache2-mod-fcgid apache2-suexec php5-cgi

Activer/Désactiver les modules et les virtualhosts :

a2dismod fastcgi

a2enmod suexec

a2enmod actions

a2enmod headers

a2enmod include

a2enmod deflate

a2enmod mem_cache

a2dissite default

J’ai désactivé le virtualhost default car il a accès directe sur /var/www alors qu’on l’utilisera comme racine de nos scripts, si vous voulez encore l’utiliser, il va falloir modifier la configuration dans /etc/apache2/sites-available/default. Par exemple créer un répertoire /var/www/default/ puis modifier la ligne en DocumentRoot /var/www/default .

Editer le fichier de configuration de fcgid /etc/apache2/mods-available/fcgid.conf :

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  FcgidConnectTimeout 20
  PHP_Fix_Pathinfo_Enable 1
</IfModule>

Redémarrer apache pour prendre en compte les modifs : /etc/init.d/apache2 restart

Créer un site avec l’utilisateur correspondant :

groupadd site1

useradd -s /bin/false -d /var/www/site1 -m -g site1 site1

mkdir -p /var/www/site1/{web,ini}

cp /etc/php5/cgi/php.ini /var/www/site1/ini/

chown site1:site1 /var/www/site1/{web,ini}

mkdir -p /var/www/php-fcgi/site1

Modifier le fichier /var/www/site1/ini/php.ini , il faut décommenter la ligne cgi.fix_pathinfo = 1

Créer le script cgi /var/www/php-fcgi/site1/fcgi :


#!/bin/sh

PHPRC="/var/www/site1/ini/"
export PHPRC
export PHP_FCGI_MAX_REQUESTS=10000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Changer les droits :

chmod 755 /var/www/php-fcgi/site1/fcgi

chown -R site1:site1 /var/www/php-fcgi/site1

Créer le fichier de configuration de notre site dans /etc/apache2/sites-available/site1 qui contient :

<VirtualHost *:80>
    ServerName site1.com
    DocumentRoot /var/www/site1/web
    ServerAdmin sysadmin@site1.com
    ErrorLog /var/log/apache2/site1.com_error.log
    CustomLog /var/log/apache2/site1.com_access.log combined
    <IfModule mod_fcgid.c>
     SuexecUserGroup site1 site1
       <Directory /var/www/site1/web/ >
        Options +ExecCGI
        AllowOverride All
        AddHandler fcgid-script .php
        FcgidWrapper /var/www/php-fcgi/site1/fcgi .php
        Order allow,deny
        Allow from all
	</Directory>
    </IfModule>
</VirtualHost>

Activer le site :

a2ensite site1

Redémarrer Apache :

/etc/init.d/apache2 restart

Il vous reste qu’à tester en mettant vos scripts dans le répertoire /var/www/site1/web …

Sécuriser ses connexions Internet avec un tunnel SSH et SQUID

Un des moyens de sécuriser ses trafics traversant un réseau public ou non sécurisé comme les réseaux sans fil (wifi), dans un cybercafé, … est le tunnel SSH vers un serveur proxy SQUID.

Effectivement il n’est pas difficile de sniffer les données sur ces réseaux publics et il est plus ‘secure’ d’utiliser un tunnel SSH pour ses données. On a besoin d’un serveur (unix/linux) disponible sur Internet qu’on peut utiliser. L’une des raisons que j’utilise aussi cette solution c’est que mon provider (Blueline/GulfSat) utilise un proxy transparent qui n’est pas très rapide je trouve, j’ai toujours des timeout ces derniers jours. Je veux contourner ce proxy de m… , même google.com fait un timeout avec !!


Lire la suite

Automatiser les accès FTP,SFTP,SSH, … avec python pexpect

Voici un des moyens d’automatiser le téléchargement avec FTP,SFTP ou le lancement d’une commande avec ssh ou telnet, dans l’exemple, j’utilise le module python pexpect qui se connecter sur un serveur SFTP puis telecharge des fichiers. Pour ssh on peut utiliser le système de clés mais pour FTP, telnet ce n’est pas possible et si vous n’etes pas aussi l’admin du serveur distant.

Voici de code, évidemment il faut installer les paquets openssh-client et python-pexpect si vous utilisez ubuntu ou debian

#!/usr/bin/env python
import pexpect
p=pexpect.spawn('sftp -C -R 128 thierry@113.231.167.XXX')
p.expect("thierry@113.231.167.XXX's password: ")
p.sendline('MyVerySecurePassword')
p.expect('sftp> ')
p.sendline('get foo.bar /home/thierry/')
p.expect('sftp> ',timeout=None)
p.sendline('bye')

Ceci est un simple exemple vous pouvez l’améliorer en ajoutant un expect s’il demande d’accepter la clé du serveur …