Catégories
Uncategorized

SSH – Authentification par clés

image_pdfimage_print

Génération des clés

Les clés seront générées et sauvegardées automatiquement dans le répertoire $HOME/.ssh de l’utilisateur courant.

Une passphrase (un mot de passe) sera demandée pendant la procédure de génération : elle permet de protéger la clé privée au cas où un tiers s’en emparerait. La clé privée protégée ne pourra pas être utilisée sans la passphrase que vous avez renseignée.

Si vous ne souhaitez pas que la clé soit protégée, vous pouvez laisser le champ vide et valider.

ssh-keygen -t rsa

Notez qu’on peut ajouter un commentaire, dans le fichier de la clé publique, avec la commande ssh-keygen -t rsa -C "commentaire".

Vous obtenez donc 2 fichiers :

  • « id_rsa« , la clé privée
  • « id_rsa.pub« , la clé publique

Téléchargez la clé privée sur votre ordinateur local (le client), est sauvegardez-là en lieu sûr : elle ne doit en aucun cas être volée par un tiers, puisque c’est elle qui autorise les connexions.

Une fois téléchargée, vous devez supprimer la clé privée du serveur :

rm $HOME/.ssh/id_rsa

N.B. : ici nous avons généré les clés sur un serveur distant, il aurait été plus convenable de les générer sur le poste client (on évite ainsi le transfert de la clé privée).

Conversion de la clé privée au format PuTTY

Pour pouvoir vous connecter avec PuTTY ou WinSCP, la clé privée doit être au format PuTTY, voici donc la procédure à suivre :

  • téléchargez PuTTYgen (site officiel),
  • exécutez PuTTYgen et allez dans « Conversions » puis « Import key »,
  • ensuite sélectionnez la clé privée « id_rsa » pour la charger dans le programme,
  • cliquez sur le bouton « Save private key » et choisissez un fichier de destination pour sauvegarder la clé au format PuTTY « .ppk« .

Autoriser la clé publique

Nous devons autoriser les connexions par jeu de clés sur le serveur, pour cela il suffit d’ajouter la clé publique au fichier « authorized_keys » (ou « authorized_keys2 » mais ce nom de fichier est déprécié, même si les deux fonctionnent normalement) de l’utilisateur avec lequel on va se connecter.

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
rm $HOME/.ssh/id_rsa.pub

Veuillez noter que le serveur peut gérer plusieurs clés publiques : il suffit d’ajouter une clé par ligne dans le fichier « authorized_keys« .

Activer l’authentification par clés

Vous devez ajouter/modifier les directives suivantes dans le fichier de configuration d’OpenSSH (/etc/ssh/sshd_config) :

RSAAuthentication yes
PubkeyAuthentication yes

Rechargez la configuration du serveur OpenSSH :

service ssh reload

Testez la connexion en utilisant la clé privée avec PuTTY ou WinSCP.

Désactiver les mots de passe

Vous pouvez désactiver la connexion par mot de passe si le test a été concluant.

Vous devez ajouter/modifier les directives suivantes dans le fichier de configuration d’OpenSSH (/etc/ssh/sshd_config) :

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no

Rechargez la configuration du serveur OpenSSH :

service ssh reload

Limiter les connexions

Vous pouvez spécifier quels utilisateurs sont autorisés à se connecter via le serveur SSH, il suffit pour cela d’ajouter leur nom à la directive « AllowUsers » en les séparant par un espace, toujours dans le fichier de configuration d’OpenSSH (/etc/ssh/sshd_config) :

AllowUsers root

Rechargez la configuration du serveur OpenSSH :

service ssh reload

Connexion

Pour se connecter avec le client SSH dans un terminal :

ssh -i /path/to/id_rsa user@host -p 22

La spécification du port avec le paramètre p est facultative, par défaut le port 22 est utilisé.

On peut forcer l’utilisation d’une clé privée avec le paramètre i, on peut l’omettre si les clés sont bien présentes dans le dossier $HOME/.ssh (le client tentera alors la connexion avec chaque clé privée trouvée), ou dans le cas où un fichier de configuration $HOME/.ssh/config existe et est correctement renseigné.

A des fins de debugging, pour savoir quelles clés sont proposées au serveur, on peut lancer une connexion en mode verbeux et chercher les lignes commençant par « Offering… »

ssh -vvv user@host pwd 2> >(grep -i offer)

Configuration de connexion client

Le fichier $HOME/.ssh/config permet de s’affranchir du passage de plusieurs paramètres au client SSH. Voici le format utilisé :

host host_alias1
    user root
    hostname example.com
    port 22
    identityfile ~/.ssh/root_example_rsa

host host_alias2
    user git
    hostname git.example.com
    port 22
    identityfile ~/.ssh/git_example_rsa

On utilisera le client de la manière suivante :

ssh host_alias1

Notes

Les utilisateurs créés avec la commande « useradd » doivent avoir un mot de passe valide, dans le cas contraire, les utilisateurs seront bloqués et ne pourront pas se connecter. On peut vérifier la présence d’un mot de passe dans le fichier « /etc/shadow » : celui-ci contient un « ! » après le nom d’un utilisateur bloqué.

Voir aussi : https://wiki.debian.org/fr/SSH.

Catégories
Installation

Installation de Memcached (à partir des sources)

image_pdfimage_print

Installation de Libevent

Voir : Installation de Libevent.

Compilation de Memcached

cd /usr/src
wget http://danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6
./configure
make && make install

On teste

memcached -u www-data -vv

Si ça marche on a quelque chose de ce goût là en sortie

slab class   1: chunk size     80 perslab 13107
slab class   2: chunk size    100 perslab 10485
... snip ...
slab class  38: chunk size 323000 perslab     3
slab class  39: chunk size 403752 perslab     2
slab class  40: chunk size 504692 perslab     2
<3 server listening

On arrête

Ctrl+c

On vérifie qu’un ou plusieurs serveurs sont démarrés

ps -A | grep memcached

Tuer les processus Memcached, si on les a démarré en tant que démon

killall memcached

Voir aussi : Installation de Memcached.

Catégories
Installation

Installation de Libevent

image_pdfimage_print

Préliminaire

Vérifier si Libevent est déjà installé

updatedb
locate libevent

On enlève l’ancienne version de Libevent le cas échéant (et Memcached)

aptitude remove --purge memcached
aptitude remove --purge libevent1

On vérifie la version installée

updatedb
locate libevent

Compilation

cd /usr/src
wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
tar zxvf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure
make && make install

On rafraichit le cache des chemins vers les librairies partagées

ldconfig
Catégories
Installation

Installation de Nginx, PHP 5.3 et PHP-FPM

image_pdfimage_print

Nginx

aptitude install nginx
service nginx start

Configuration de Nginx

server {
    listen   80;
    server_name  localhost;
    access_log  /var/log/nginx/localhost.access.log;

## Default location
    location / {
        root   /var/www;
        index  index.php;
    }

## Images and static content is treated different
    location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
      access_log        off;
      expires           30d;
      root /var/www;
    }

## Parse all .php file in the /var/www directory
    location ~ .php$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass   backend;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param  QUERY_STRING     $query_string;
        fastcgi_param  REQUEST_METHOD   $request_method;
        fastcgi_param  CONTENT_TYPE     $content_type;
        fastcgi_param  CONTENT_LENGTH   $content_length;
        fastcgi_intercept_errors        on;
        fastcgi_ignore_client_abort     off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
    }

## Disable viewing .htaccess & .htpassword
    location ~ /\.ht {
        deny  all;
    }
}
upstream backend {
    server 127.0.0.1:9000;
}

Il est possible que « fastcgi_split_path_info » ne soit pas supporté, car cette variable de configuration n’est disponible que dans les versions récentes de Nginx.

PHP, PHP-FPM et ses modules

On utilise le dépôt DotDeb

echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
aptitude update
aptitude safe-upgrade

Et on installe PHP

aptitude install php5-cli php5-common php5-suhosin
aptitude install php5-fpm php5-cgi
aptitude install php5-mysql php5-curl php5-gd php5-imagick php5-mcrypt php5-memcache php5-apc

Initialisation

service nginx restart
service php5-fpm restart
Catégories
Uncategorized

Mémo MySQL

image_pdfimage_print

Connexions persistantes

Les connexions persistantes permettent de ré-utiliser une connexion déjà ouverte par PHP. Elles ne se terminent pas à la fin de l’exécution d’un script. L’intérêt est de limiter le temps de latence dû à l’ouverture de la connexion, ce qui peut-être utile lorsque le serveur de base de données et HTTP ne se situent pas sur le même serveur physique.

Dans le cas d’Apache, une connexion par processus fils est ouverte, il faut donc en tenir compte lorsqu’on fixe la valeur « max_connections » du serveur MySQL. En effet, deux requêtes consécutives peuvent être gérées par des processus Apache différents, ce qui engendre l’ouverture d’une connexion persistante pour chaque processus ! La charge de la machine, en terme de mémoire utilisée notamment, va augmenter de façon proportionnelle aux nombres de connexions simultanées.

Attention, une transaction qui n’est pas terminée, restera active entre les requêtes Apache ! De même, quand vous bloquez (lock) une table, normalement elle est débloquée lorsque la connexion est fermée, mais comme les connexions persistantes ne se ferment pas (sic), les tables que vous avez quittées en état bloquées resteront bloquées, et la seule façon de les déloquer sera d’attendre que la connexion atteigne le timeout (« wait_timeout ») ou de tuer le processus MySQL. Pour finir, les options de connexions restent actives entre les appels, par exemple :

mysql_query("SET SESSION character_set_results = 'UTF8'");

Dans MySQL, les tables temporaires sont visibles uniquement par la connexion courante, mais si vous avez une connexion persistante, la table temporaire sera visible par tous les scripts qui partagent la même connexion persistante.