hackez : Quelques hacks.

Il s'agit de petits hacks permettant de simplifier l'administration d'une machine domestique sur un Unix.
Je n'aime pas pas les termes 'truc' et 'astuce', il s'agit de hacks fondés sur la doc et le comportement d'outils standard, vous devriez quand même réfléchir à leur impact sur la sécurité de votre système avant de les installer.
Ils ont été testés sur Debian GNU/Linux mais devraient s'installer sur tout Unix-like moyennant peut-être des modifications. Hackez présente une version simple de ces hacks et ne propose pas de procédures d'installation, c'est à vous de les adapter à vos besoins.


1 Internet.

1.1 IP dynamique.

Si vous avez une machine reliée à l'Internet par un FAI (fournisseur d'accès internet) vous avez probablement une adresse IP dynamique, celle-ci peut changer selon les caprices de ce FAI, il change la mienne tous les jours, vous avez sans doute un moyen de faire repartir la connexion automatiquement, par exemple en utilisant un daemon PPP ou /etc/inittab et 'respawn', ce n'est pas l'objet de ce hack.

1.1.1 Le problème.

Vous pouvez vouloir que des amis puissent se connecter chez vous par ssh ou consulter vos sites webs dans leur dernière moûture, et se téléphoner à chaque fois que l'on change d'adresse IP n'est pas très satisfaisant.
Vous même, lorsque vous êtes retenu loin de chez vous (par des vacances j'éspère), pouvez vouloir vous connecter sur votre ordinateur pour consulter votre courrier que vous préférez centraliser sur cette machine ou pour d'autres raisons qui ne manquent pas.

Vous pouvez obtenir ce service par dyndns.com ou dynserv.net, mais un petit hack qui prend 10 minutes vous permettra de le réaliser vous-même.

1.1.2 Une solution.

Ce hack utilise une indirection pour se connecter au serveur http installé sur votre machine, vous pouvez l'améliorer pour qu'il serve aussi à se connecter par ssh ou sur n'importe quel port de votre machine.

L'idée est simplement de télécharger l'adresse IP dynamique sur un site ayant une adresse IP fixe lorsque votre adresse IP change.
Le hack marche avec Apache (et sans doute d'autre serveurs) s'il est configuré pour accepter des redirections à partir de fichier .htaccess, c'est sans doute le cas pour la plupart, c'est en tout cas le cas pour free.fr.

A la connexion PPP, il suffit d'activer un script pour charger l'adresse sur votre site remote.
Je la charge aussi sur mes sites locaux car il peut être intéressant d'avoir une véritable IP dans ses URLs et non l'adresse loop-back 127.0.0.1, localhost ou my-box selon ce que vous avez mis dans /etc/hosts. Cela m'est utile lorsque je clique sur l'icone du validator W3C 'http://validator.w3.org/check?uri=referer'.

Voici ce script.
Si votre site distant est http://monsite.isp.fr/, en se connectant à l'URL http://monsite.isp.fr/hackcess/, on se retrouve connecté à la racine du site web sur le port 80 de votre machine locale.

#!/bin/sh
# file /root/bin/hackez01-up, should be mode 700
IP=$1   # the local IP address
# save the IP somewhere in case we need it
echo $IP > /var/log/ip-local
#       make redirections to local site from the local site
sed -e "s/PPP_LOCAL/$IP/" /root/.hackez/.htaccess-l.tmpl \
        > /root/.hackez/.htaccess-l
#       put it in the local web site hackcess directory
cp  /root/.hackez/.htaccess-l /web/site1/hackcess/.htaccess
#       the same for the remote site
sed -e "s/PPP_LOCAL/$IP/" /root/.hackez/.htaccess-r.tmpl \
        > /root/.hackez/.htaccess-r
#       upload to site, please use something more secure
ftp -nv ftpperso.isp.fr >>/tmp/tmpi 2>&1 <<-EOF
    open ftpperso.isp.fr
    user cémoi benmoiquoi
    cd hackcess
    put /root/.hackez/.htaccess-r .htaccess
    bye
EOF 

Le script est placé sur /root/bin/, il aurait pu (du?) être placé sur /usr/local/sbin
Le script est trivial, il construit les fichiers .htaccess à partir de templates qui peuvent être celui-ci :

File /root/.hackez/.hackcess-l.tmpl
Redirect permanent /hackcess/index.php http://PPP_LOCAL/

sed change simplement 'PPP_LOCAL' par votre IP dynamique reçue en premier argument.
Voyez la doc d'Apache pour plus de précision ou cherchez 'htaccess' sur ce foutu web.

Reste à activer ce script à chaque connexion PPP.
On peut le faire facilement en l'appelant d'un script dans /etc/ppp/ip-up.d/.
J'ai mis ce script :

#!/bin/sh
# file /etc/ppp/ip-up.d/01hackez
/root/bin/hackez01-up $4 &

$4 est l'adresse IP locale.
Le & à la fin de la commande est assez important, il est préférable que le script tourne en background car la connexion ftp peut durer un moment surtout si le serveur ftp d'accès au site est down.

Il faut aussi faire l'opération inverse lors d'une déconnexion, c'est symétrique, il y a juste un problème, il est difficile de se connecter à un serveur distant lorsqu'on n'est pas connecté à l'internet...

1.1.3 Défauts.

Il y en a plusieurs et la solution peut être améliorée.

Le défaut le plus évident est qu'on ne peut pas remplacer le .htaccess sur le serveur distant par un fichier vide en cas de déconnexion.
Cela n'a pas grande importance, la dernière adresse IP du host local est soit non attribuée, soit attribuée à quelqu'un qui n'a personne qui écoute sur le port 80. Exceptionellement, vous pouvez tomber sur quelqu'un qui a un serveur, il y a peu de chance que vous confondiez son site avec le votre s'il parle de motos au lieu de pêche à la ligne.
Ce n'est donc pas réellement un vrai défaut pour quelqu'un qui a un usage artisanal de ce hack.

Plus important, le serveur FTP distant peut ête down au moment de la connexion, le client FTP va tomber en time-out et l'adresse IP locale va être perdue.
Ce n'est pas un gros problème, il y a des tas de moyens de faire des retry et la solution la plus simple est peut-être d'utiliser cron pour télécharger l'adresse, mettons toutes les heures.

On peut aussi avoir peur que cela donne une porte d'entrée aux misérables crackers.
Peur sans fondement, même le script kiddy affligé d'achée et autres problèmes hormonaux n'a pas besoin de ça. Sécuriser son serveur est la seule solution.
Demandez quand même une identification des utilisateurs (userid/password) si votre site propose des plans pour faire sauter la maison-blanche.
Bref, voir la doc d'Apache.

Plus grave, les informations ne circulent pas de manière sécurisées entre votre localhost et le remote, plus particulièrement votre userid et password FTP, utilisez plutôt http POST et un petit script server-side qui range l'adresse IP. Mais le principe est le même, je ne cherche pas à vous encombrer de détails.

S'il vous arrive d'éteindre votre ordinateur, prévoyez un petit script qui efface le fichier .htaccess remote, de cette manière on pourra voir votre page http://monsite.isp.fr/hackcess/index.php.
La mienne c'est :

Sorry, host is down.
... passera pas la validation W3C.
keywords : software, hackez , hack , hacks, GNU/Linux, GNU, linux , francais
1 Internet.
1.1 IP dynamique.