11déc.

Autoriser l'accès à un serveur sur demande

Quand on administre un serveur Linux, il est nécessaire de pouvoir s'y connecter, idéalement avec ssh. Le problème c'est que si on laisse un port ssh ouvert au monde entier, on se retrouve rapidement avec des série d'attaques "Brute Force" qui risquent d'exposer le serveur en plus de charger son cpu.

Afin de contourner le problème, on peut décider d'autoriser le ssh (ou d'autres protocoles), seulement à partir d'une adresse IP, par exemple celle d'un machine passerelle sur internet, ou celle d'un client à qui on donne ce genre d'accès. La commande iptables ressemblerait
à ceci:

iptables -A INPUT -s $IP_DE_CONFIANCE -p tcp --dport 22 -j ACCEPT

Ça nous limite toutefois à une adresse IP qu'on connaît à l'avance. J'ai donc imaginé une solution très simple qui permette d'ouvrir la porte à partir d'une page web...

Lire la suite

02déc.

Lister la commande complète avec 'ps'

Aller encore un petit truc ce matin. La plupart des utilisateurs de Linux connaissent la commande ps. Elle permet de voir la liste des processus qui roulent sur le système. Les options les plus utilisées sont -ef ou -aux.

La sortie de la commande ps est formatée selon la largeur de votre terminal. Par exemple si votre terminal peut afficher 80 caractères sur une ligne, vous ne connaîtrez pas les options d'une commande plus longue:

root      7035  7010  0 07:38 pts/1    00:00:00 /bin/bash /usr/bin/rbme hydre:/home /var
root 7036 7035 0 07:38 pts/1 00:00:00 tee -a /tmp/RBME.rbme.dEZHQGMqhjoeHT7024/output /tmp/RB
root 7060 7033 0 07:38 pts/1 00:00:01 /usr/bin/rsync --link-dest=/mnt/nas01-1500/rbme/hydre/2
root 7061 7060 0 07:38 pts/1 00:00:00 ssh -c blowfish-cbc hydre rsync --server --sender -lHog
root 7062 7060 0 07:40 pts/1 00:00:00 /usr/bin/rsync --link-dest=/mnt/nas01-1500/rbme/hydre/2
root 7065 1097 0 08:20 ? 00:00:00 sshd: root@pts/0

Si on veut avoir la liste des commandes complètes, il suffit de rediriger la sortie standard vers cat. Le terminal n'a donc plus d'impact:

root      7035  7010  0 07:38 pts/1    00:00:00 /bin/bash /usr/bin/rbme hydre:/home /var
root 7036 7035 0 07:38 pts/1 00:00:00 tee -a /tmp/RBME.rbme.dEZHQGMqhjoeHT7024/output /tmp/RB
ME.rbme.dEZHQGMqhjoeHT7024/hydre
root 7060 7033 0 07:38 pts/1 00:00:01 /usr/bin/rsync --link-dest=/mnt/nas01-1500/rbme/hydre/20
08-12-01/ --relative -aSH --ignore-errors -x --exclude-from=/dev/fd/63 --include-from=/dev/fd/62 hydre:/
home /var /mnt/nas01-1500/rbme/hydre/2008-12-02/
root 7061 7060 0 07:38 pts/1 00:00:00 ssh -c blowfish-cbc hydre rsync --server --sender -lHog
DtprRxS --ignore-errors . /home /var
root 7062 7060 0 07:40 pts/1 00:00:00 /usr/bin/rsync --link-dest=/mnt/nas01-1500/rbme/hydre/2
008-12-01/ --relative -aSH --ignore-errors -x --exclude-from=/dev/fd/63 --include-from=/dev/fd/62 hydre
:/home /var /mnt/nas01-1500/rbme/hydre/2008-12-02/
root 7065 1097 0 08:20 ? 00:00:00 sshd: root@pts/0

On voit ici tous les arguments de la commande rsync. Comme vous le voyez, je suis en train de travailler sur la solution de backup que je vais bientôt mettre en vente...

28nov.

Convertir des dates

C'est souvent utile, alors je partage avec vous deux petits trucs.

D'abord un petit rappel. Unix, et donc Linux, compte le temps en secondes depuis le 1er janvier 1970. Donc si vous voulez savoir combien de secondes se sont écoulées, vous faite la commande suivante (il est ven nov 28 11:12:53 EST 2008):

[scarrillo@vercors ~]# date +%s
1227888773

Si vous avez une application qui fait des logs avec des dates marquées en seconde, comme par exemple squid (je devrais bientôt faire un article à ce sujet), et que vous voulez savoir à quelle heure a été fait l'accès, voici comment faire:

Lire la suite

24oct.

Changer le fuseau horaire avec CentOS

Ce matin, je me configure une machine virtuelle chez Gandi pour surveiller mes serveurs avec Munin. Et comme les machines virtuelles de Gandi sont configurées sur le fuseau horaire de Paris, j'ai du chercher comment changer l'heure.

Voici la solution:

[root@gandi etc]# date
Fri Oct 24 16:54:34 CEST 2008
[root@gandi etc]# cat /usr/share/zoneinfo/America/Montreal > /etc/localtime
[root@gandi etc]# date
Fri Oct 24 10:54:55 EDT 2008

19oct.

Dépasser la limite de 2Gb avec tar

Saviez-vous que la commande tar ne peut pas générer des fichiers d'une taille supérieure à 2Gb? En effet, si vous voulez faire des archives d'une taille supérieure, vous devez utiliser les options "multi-volume" afin de créer plusieurs fichiers. Voici un exemple:

tar   -c \
-v \
--tape-length 1900000 \
--multi-volume \
-f /backup/`hostname`-home.vol1.`date "+%Y%m%d"`.tar \
-f /backup/`hostname`-home.vol2.`date "+%Y%m%d"`.tar \
-f /backup/`hostname`-home.vol3.`date "+%Y%m%d"`.tar \
-f /backup/`hostname`-home.vol4.`date "+%Y%m%d"`.tar \
--preserve \
--same-order \
--one-file-system \
/home >> /backup/`hostname`-home.`date "+%Y%m%d"`.log 2>&1

Vous devez ensuite, si vous le voulez, zipper les fichiers individuellement avec une petite boucle.

C'est fastidieux et si le /home dépasse 8Gb, on aura pas assez de volumes...

Afin de contourner le problème, on peut utiliser les redirections d'entrée-sortie afin de créer une archive tar d'une taille supérieure à 2Gb:

tar -cv --preserve \
--same-order \
--one-file-system \
/home > /backup/`hostname`-home.vol4.`date "+%Y%m%d"`.tar

Comme c'est le shell et plus tar qui crée le fichier, plus de problème de taille.

et si on veut zipper à la volée:

tar -cv --preserve \
--same-order \
--one-file-system \
/home | bzip2 > /backup/`hostname`-home.vol4.`date "+%Y%m%d"`.tar.bz2

fera le travail. ;)

04sept.

Howto - Encrypter un fichier sous Linux avec gpg

Si vous voulez laisser vos fichiers personnels sur un serveur et que vous ne voulez pas qu'ils puissent tomber dans de mauvaises mains, voici une façon très simple de chiffrer un fichier:

scarrillo@estemaira:~/Bureau$ gpg -c fichierperso.ods
Entrez la phrase de passe:
Répétez la phrase de passe:
scarrillo@estemaira:~/Bureau$ ls -l
-rw-r--r-- 1 scarrillo scarrillo 979 2008-09-04 18:07 fichierperso.ods
-rw-r--r-- 1 scarrillo scarrillo 690 2008-09-04 18:07 fichierperso.gpg

Il faut bien sûr effacer votre fichier original.

Pour décrypter maintenant:

scarrillo@estemaira:~/Bureau$ gpg -d fichierperso.gpg > fichierperso.ods
gpg: données chiffrées avec CAST5
gpg: chiffré avec 1 phrase de passe
scarrillo@estemaira:~/Bureau$ ls -l fichierperso*
-rw-r--r-- 1 scarrillo scarrillo 979 2008-09-04 18:10 fichierperso.ods
-rw-r--r-- 1 scarrillo scarrillo 690 2008-09-04 18:07 fichierperso.gpg
Votre fichier original est maintenant restauré. ;)

Il existe bien-sûr plein d'autres façons de crypter un fichier, dont beaucoup sont plus fiables. Cette méthode à l'avantage d'être simple et de ne pas nécessiter la visualisation du manuel à chaque fois! Elle suffit pour la plupart des utilisations.