Tag - shell

22/ 07/2010

Transformer des sources en paquets

Le gros problème lorsqu'on installe une application sous linux depuis les sources, donc qui n'est pas sous la forme de paquets gérables simplement, c'est qu'il est très difficile de la désinstaller complètement.

Heureusement, un utilitaire permet de créer un paquet (rpm, slackware, debian) qui permettra de dé/ré-installer facilement votre application, il s'agit de checkinstall.

L'utilisation est très simple: il faut bien sûr avoir installé checkinstall, qui est disponible sur la plupart des sources linux, et prendre les bonnes habitudes lors de l'installation. Voici ce que cela donnerait avec le logiciel dummy:

# Example sous debian
~$ tar xvfz dummy.tgz
~$ cd dummy
~$ ./configure
~$ make
~$ checkinstall make install
~$ dpkg -i dummy.deb
 
# Suppression
~$ dpkg -r dummy

Comme indiqué dans le manpage, vous pouvez forcer le type de paquet à utiliser ainsi que d'autres options.

21/ 03/2010

Script de sauvegarde automatique

Ce petit script permet de générer des archives horodatées de répertoires sur une machine unix. Il suffit que tar et gunzip soient installés et de configurer les 4 variables, puis d'ajouter une entrée pour ce script dans crontab.

Dans cet exemple, le but est de sauvegarder le répertoire /home/g33kzone/public_html/ (le site) et /var/lib/mysql/g33kzone/ (la base MySQL du site) dans le répertoire /home/backups/. Les fichiers de sauvegarde seront nommés archive_YYYYMMDD.tgz, c'est à dire archive_20100321.tgz pour l'archive du 21 mars 2010.

L'option "VERBOSE" permet d'avoir un affichage des fichiers archivés, elle est à utiliser pour le debug ou si vous voulez enregistrer l'activité d'archivage dans un fichier de log.

#!/bin/bash
 
###############################################
#  Configuration
###############################################
# Destination
BACKUP_DIR="/home/backups/"
# Directories to save
FILESYSTEMS="/home/g33kzone/public_html /var/lib/mysql/g33kzone/"
 
# basename of the archive file
BASE_NAME="archive_"
 
# Would you like to get detailed information from tar and gzip? 0=false,
# 1=true
VERBOSE=0
 
# DO NOT EDIT BELOW THIS LINE
#--------------------------------------------------------
###############################################
#     Application Variables - DO NOT EDIT #
###############################################
# Day of the week;
NOW=`date +"%Y%m%d"`
# Script name
SCRIPTNAME="Backup Script"
# Version
VERSION=0.01
######## Do some error checking #########
# Does backup dir exist?
if [ ! -d $BACKUP_DIR ]
  then
    echo "The specified backup directory $BACKUP_DIR does not exist. Operation canceled."
    exit 1
fi
######## Run Backup #########
LEVEL=0
if [ $VERBOSE -eq 1 ]
  then
    tar cvfz $BACKUP_DIR/$BASE_NAME.$NOW."tgz" $FILESYSTEMS
  else
    tar cfz $BACKUP_DIR/$BASE_NAME.$NOW."tgz" $FILESYSTEMS
fi
 
exit 0

Créer et modifier des compte unix avec un script

Il arrive parfois que l'on ait besoin d'un script pour créer ou modifier des utilisateurs unix de manière automatique.

Je me suis penché sur ce problème pour des raisons de sécurité: une interface web devait permettre de créer des comptes sur le serveur, mais en aucun cas je ne voulais que les pages, potentiellement accessibles à tout le monde, n'aient la possibilité d'exécuter des commandes systèmes, surtout pas en tant que root.

Lire la suite...

14/ 12/2009

Find pour supprimer les vieux fichiers

Nous avions évoqué sur ce billet l'utilisation de find pour faire des opérations sur une arborescence.

Une autre utilisation pratique des filtres de find est de pouvoir faire une recherche en se basant sur la date de modification des fichiers, ce qui permet par exemple de supprimer les fichiers périmés.

Par exemple, pour supprimer les fichiers de plus de 60 jours:

find /home/vous/logs -type f -ctime +60 -exec rm -rf {} \;

01/ 12/2009

Comment changer un mot de passe Mysql oublié

Copie du billet Comment changer un mot de passe Mysql oublié de Johann Denoyer

Ca peut arriver d'oublier le mot de passe root de mysql, ou reprendre en main un serveur d'un ancien administrateur ayant quitté l'entreprise un peut rapidement. Donc je vous présente ici comment changer le mot de passe root d'un serveur mysql.

Lire la suite...

26/ 06/2009

Limitation de l'accès SSH

Parfois, lors d'une mise à jours d'un serveur par exemple, il peut être intéressans de limiter l'accès SSH au seul utilisateur root. Pour faire cela, c'est très simple: il suffit de mettre la raison dans un fichier /etc/nologin et les autres utilisateurs se verront refuser l'accès, avec comme raison le contenu du fichier.

Pour ré-autoriser l'accès, supprimez le fichier.

Bloquer les attaques "brute force" avec iptables

Iptables est l'interface en ligne de commande permettant de configurer Netfilter, qui est un module du noyau Linux qui offre la possibilité de contrôler, modifier et filtrer les paquets IP, et de suivre les connexions. Il fournit ainsi les fonctions de pare-feu, de partage de connexions internet et d'autorisation du trafic réseau.

Il est possible de configurer iptables pour automatiquement bloquer les adresses IP qui feraient trop de tentatives d'accès à votre serveur, un peu à la manière de fail2ban mais sans installer de module complémentaire.

Lire la suite...

12/ 03/2009

Apache avec de multiples utilisateurs

Lorsqu'on installe apache sur un serveur, celui-ci fonctionne sous l'utilisateur www-data ou apache. Cela permet de limiter ses droits d'accès, ce qui est une sécurité pour le serveur, mais cela pose un problème pour les fichiers créés par le site ou envoyés par formulaire, car ils n'appartiennent pas au propriétaire du site.

Ceci fait que si l'on ne modifie pas les droits d'accès de l'utilisateur (par exemple en le mettant dans le même groupe qu'apache) ou les permissions par défaut des fichiers, le webmaster ne pourra pas détruire un fichier de son site si ce n'est pas lui qui l'a mis en ligne.

Heureusement, une solution existe, c'est de faire fonctionner chaque sous-processus d'apache en tant que propriétaire du site.

Pour ce faire, il suffit de déclarer dans les définitions des sites sous quel propriétaire et sous quel groupe le site doit s'éxecuter:

<VirtualHost *>
   ServerName server1
   AssignUserID user1 group1
</VirtualHost>
 
<VirtualHost *>
   ServerName server2
   AssignUserID user2 groips
</VirtualHost>

17/ 02/2009

Internationalisation

Rendre un script multi-langue est souvent un casse-tête qui oblige à passer par des tableaux de variables et qui peut rendre le système très lourd. Heureusement, il y a des astuces qui peuvent aider si la configuration du serveur est adéquate.
J'ai rencontré cette problématique avec une classe de traitements de dates que j'ai faite, et voici ce que ça peut donner.

Lire la suite...

12/ 02/2009

find - Gestion récursive des droits

Il arrive souvent que l'on veuille modifier récursivement les droits des répertoires, mais pas ceux des fichiers. Dans ce cas là, la commande:

chmod -R 755 repertoire/

ne sera pas utilisable.

Heureusement, la commande find permet de filtrer par type de fichier (un répertoire n'est en fait qu'un fichier particulier).
Pour ce faire:

# passer les répertoires en 755
find ./ -type d -exec chmod 755 '{}' \;
# passer les fichiers en 644
find ./ -type f -exec chmod 644 '{}' \;

N'hésitez pas à lire le manuel de find, cet utilitaire est très puissant et je l'ai vu fonctionner pour juste lister un répertoire là où ls échouait.