Je considère ici que vous avez installé et configuré FetchYahoo ainsi que SpamAssassin.
Pour interfacer FetchYahoo et SpamAssassin, on va créer un script qui va prendre les courriels en entrée, les passer par Spamc (le client qui fonctionne avec Spamd, la version démonisée de SpamAssassin). Voilà le contenu de ce script, que l'on va placer dans le répertoire /usr/local/bin, et appeller sendmail_spamc, mais vous pouvez bien sûr lui donner le nom que vous désirez.
#!/bin/sh cat=`which cat` spamc=`which spamc` sendmail=`which sendmail` $cat /dev/stdin | $spamc | $sendmail $1 exit 0
L'étape suivante consiste à indiquer à FetchYahoo comment délivrer correctement les courriels au serveur, en les passant par le filtre en passant. On va ajouter les trois lignes suivantes ay fichier de configuration de FetchYaoo, et commenter ces variables ailleurs dans le même fichier, si elles étaient déjà existantes.
use-spool = 1 spool = /usr/local/bin/sendmail_spamc votreadressemail@domaine.tld spool-mode = pipe
Bien sûr, il faut remplacer 'votreadressemail@domaine.tld' par l'adresse mail destinataire des courriels arrivant dans votre boîte Yahoo™.
Je considère ici que vous avez installé et configuré GetMail ainsi que SpamAssassin.
Pour interfacer GetMail et SpamAssassin, on va créer un script qui va prendre les courriels en entrée, les passer par Spamc (le client qui fonctionne avec Spamd, la version démonisée de SpamAssassin). Voilà le contenu de ce script, que l'on va placer dans le répertoire /usr/local/bin, et appeller sendmail_spamc, mais vous pouvez bien sûr lui donner le nom que vous désirez.
#!/bin/sh cat=`which cat` spamc=`which spamc` sendmail=`which sendmail` $cat /dev/stdin | $spamc | $sendmail $1 exit 0
On va ensuite indiquer dans le fichier de configuration de Getmail, placé dans '$HOME/.getmail/getmailrc', qu'il faut passer les mails récupérés à ce script. La ligne à insérer, et ce pour chaque compte configuré. On va donner à la variable "postmaster" en paramètre le script que l'on vient de créer, à travers un pipe, et on va rediriger les éventuelles erreurs vers /dev/null pour qu'elles ne perturbent pas GetMail. L'adresse mail est bien sûr à remplacer par votre adresse mail.
# On passe les mails à l'antispam, et on les délivre avec sendmail postmaster = '| /usr/local/bin/sendmail_spamc votreadressemail@domaine.tld 2> /dev/null'
A noter que GetMail ne doit pas être exécuter par le super-utilisateur (root), sinon il refusera d'appeller le script externe.
Certains clients mails, une commande POP décrite dans les RFCs permet de voir les protocoles supportés par le serveur (authentification APOP par exemple). Le serveur POP de Qmail ne supporte pas cette commande. Pour ajouter la commande CAPA permettant de récupérer les capacités de POPd fourni avec Qmail, il suffit d'appliquer deux petits patchs (un pour pouvoir appeller cette fonction avant et après l'authentification. Voilà ces deux patchs.
--- qmail-pop3d.c.orig Mon Jun 15 03:53:16 1998
+++ qmail-pop3d.c Thu Nov 14 16:54:03 2002
@@ -273,8 +273,21 @@
close(fd);
}
+void pop3_capa(arg) char *arg;
+{
+ puts("+OK Capability list follows\r\n"
+ "TOP\r\n"
+ "UIDL\r\n"
+ "LAST\r\n"
+ "USER\r\n"
+ "APOP\r\n"
+ ".\r\n");
+ flush();
+}
+
struct commands pop3commands[] = {
{ "quit", pop3_quit, 0 }
+, { "capa", pop3_capa, 0 }
, { "stat", pop3_stat, 0 }
, { "list", pop3_list, 0 }
, { "uidl", pop3_uidl, 0 }
--- qmail-popup.c.orig Mon Jun 15 03:53:16 1998
+++ qmail-popup.c Thu Nov 14 16:38:41 2002
@@ -155,11 +155,23 @@
*space++ = 0;
doanddie(arg,space - arg,space);
}
+void pop3_capa(arg) char *arg;
+{
+ puts("+OK Capability list follows\r\n"
+ "TOP\r\n"
+ "UIDL\r\n"
+ "LAST\r\n"
+ "USER\r\n"
+ "APOP\r\n"
+ ".\r\n");
+ flush();
+}
struct commands pop3commands[] = {
{ "user", pop3_user, 0 }
, { "pass", pop3_pass, 0 }
, { "apop", pop3_apop, 0 }
+, { "capa", pop3_capa, 0 }
, { "quit", pop3_quit, 0 }
, { "noop", okay, 0 }
, { 0, err_authoriz, 0 }
On copie-colle ces deux patchs dans deux fichiers dans le répertoire source de Qmail (add_capa-1.patch et add_capa-2.patch par exemple). Puis on applique ces patchs :
# patch < add_capa-1.patch # patch < add_capa-2.patch
On recompile Qmail, on réinstalle, et c'est bon. Vous pouvez tester le résultat en vous connectant avec telnet sur le port 110 et en entrant la commande 'CAPA'. Vous verrez alors la liste des capacités de votre serveur POP.
Le fichier badmailfrom de Qmail, contenu dans le sous répertoire control, qui contient les fichiers de configuration, permet de définir des expéditeurs dont on rejette tous les mails. Le problème est que l'on ne peut, dans la version 1.03 de Qmail, spécifier de wildcard (on ne peut pas dire tous les sous-domaines de example.com, on doit les déclarer un par un, et odnc obligatoirement faire une liste incomplète du coup). Un patch existe pour pouvoir le faire, il est ci-dessous (copiez-collez les lignes ci-dessous dans un fichier 'qmail-badmailfrom-wildcard.patch', à la racine du répertoire contenant les sources de Qmail):
If badmailfrom contains "*.example.com" then reject mail from
"anything@any.thing.example.com"
http://tomclegg.net/qmail/qmail-badmailfrom-wildcard.patch
--- qmail-smtpd.c~ Thu Apr 17 16:08:41 2003
+++ qmail-smtpd.c Thu Apr 17 20:04:16 2003
@@ -212,11 +212,18 @@
int bmfcheck()
{
int j;
+ int bad;
+ char c;
if (!bmfok) return 0;
if (constmap(&mapbmf,addr.s,addr.len - 1)) return 1;
j = byte_rchr(addr.s,addr.len,'@');
- if (j < addr.len)
+ if (j < addr.len) {
if (constmap(&mapbmf,addr.s + j,addr.len - j - 1)) return 1;
+ for (j++; j < addr.len; j++)
+ if (addr.s[j] == '.') {
+ if(constmap(&mapbmf,addr.s + j,addr.len - j - 1)) return 1;
+ }
+ }
return 0;
}
Puis, patchez les sources de Qmail avec la commande :
# patch < qmail-badmailfrom-wildcard.patch
Si vous n'avez pas d'insultes, c'est bon. Compilez les sources de Qmail, installez les, et c'est bon. Vous pouvez maintenant utiliser des wildcards dans votre fichier badmailfrom, en utilisant un point suivi de la fin du domaine. Par exemple, pour rejeter les mails venant de *@*.toto.ca (possible seulement avec le patch) et ceux venant de *@toto.com (possible de base, pour vous rappeller la syntaxe), rajoutez les lignes suivantes dans votre fichier badmailfrom :
.toto.ca @toto.com
Vous voulez améliorer quelque peu le comportement de votre Qmail? Vous vous sentez dévalorisés par rapport aux utilisateurs de PostFix qui ont le plaisir de recompiler leur MTA régulièrement? Et bien oui, c'est vrai, ou en trouver? Bah ici par exemple : http://d-srv.com/sw/patches/.
QmailScanner est un très bon content scanner, que je vous conseille d'interfacer avec SpamAssassin et ClamAV. Vous pouvez rajouter des fonctionnalités intéressantes avec ce patch : http://d-srv.com/sw/patches/qmail-scanner-1.20st/.
Pas de panique! La solution est dans l'aide ou le manuel du démon MySQLD (si vous arrivez ici suite à une recherche sur un moteur, sachez qu'un simple "mysqld --help" vous aurait fait économiser du temps et de la bande passante).
Une option très utile du démon MySql permet de le lancer sans qu'il utilise le système de privilège, donnant accès totalement libre à n'importe qui : --skip-grant-tables. Après avoir lancé mysqld avec cette option, il suffit de se connecter à la base 'mysql', et de changer le mot de passe du super utilisateur, puis de terminer le démon, et de le relancer en mode normal. Aller, une petite démonstration.
23:06 root@iguzki ~# /etc/init.d/mysql stop
Stopping MySQL database server: mysqld.
23:07 root@iguzki ~# /usr/sbin/mysqld --skip-grant-tables &
[1] 22479
/usr/sbin/mysqld: ready for connections.
Version: '4.0.18-log' socket: '/var/run/mysqld/mysqld.sock' port: 0
23:07 root@iguzki ~# mysql mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.0.18-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> update user set password=PASSWORD("monnouveaumotdepasse") where user='root';
Query OK, 0 rows affected (0.04 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> quit
Bye
23:08 root@iguzki ~# killall mysqld
040313 2:08:21 /usr/sbin/mysqld: Normal shutdown
040313 2:08:21 /usr/sbin/mysqld: Shutdown Complete
[1] + done /usr/sbin/mysqld --skip-grant-tables
23:08 root@iguzki ~# etc/init.d/mysql start
Starting MySQL database server: mysqld.
23:09 root@iguzki ~#
Utiliser un autre port que le port par défaut du protocole SMTP, soit le port TCP 25? Mais pourquoi donc me demanderez vous avec une moue exprimant l'incompréhension? Et bien cela peut être, comme dans mon cas, pour utiliser le port 25 pour un serveur SMTP distant, en tunnelant les connexions par SSH. Enfin bref, si vous avez besoin de le faire, nous allons commencer par créer un service SMTP2 dans votre fichier de service (dans l'exemple, je vais utiliser le port 2525, mais n'hésitez pas à faire jouer votre imagination, et à utiliser n'importe quel port non utilisé sur votre babasse), en rajoutant la ligne suivante dans votre fichier de configuration des services (/etc/services):
smtp2 2525/tcp
Quand nous faisons référence au service SMTP2, désormais votre système comprend qu'il doit utiliser le port 2525. Nous allons donc dire à PostFix d'écouter sur ce port, en modifiant la ligne contenant le type de service inet et le démon smtpd (si vous ne voyez pas ce que je veux dire c'est la même ligne que ci dessous mais avec au début "smtp" à la place de "smtp2") :
smtp2 inet n - - - - smtpd
Une petite prise en compte de la nouvelle configuration :
20:16 root@iguzki ~#postfix reload
Et voilà, vous disposez désormais comme moi de deux services SMTP différents en écoute sur votre machine, celui forwardé depuis une autre machine sur le port 25, et le local sur le port 2525 :
20:21 root@iguzki ~# telnet localhost 25 Trying 127.0.0.1... Connected to iguzki. Escape character is '^]'. 220 kartxila.xarli.net ESMTP quit 221 kartxila.xarli.net Connection closed by foreign host. 20:22 root@iguzki ~# telnet 127.0.0.1 2525 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 iguzki ESMTP Postfix (Debian/GNU) quit 221 Bye Connection closed by foreign host. 20:22 root@iguzki ~#
Comment installer Java pour vos navigateurs sous Debian SID? L'extension Java de FireFox marche mal (chez moi en tout cas). C'est facile, d'abord vérifiez avec quelle version de GCC votre navigateur a été compilé, en rentrant about:buildconfig dans votre barre d'URL. Puis, sur cette page [EN], téléchargez la version du JRE BlackDown correspondant au compilateur qui a été utilisé pour compiler votre fureteur (si c'est GCC 3.3, la version de BlackDown Java pour GCC 3.2 fonctionne très bien). Installez là, créez un lien vers le répertoire de plugins comme cela (vous pouvez répéter l'opération pour vos différents navigateurs, en changeant de répertoire de création du lien symbolique):
ln -s /usr/local/j2re1.4.2/plugin/i386/mozilla/libjavaplugin_oji.so /usr/lib/mozilla/plugins/
C'est bon, vous pouvez profiter du plugin Java pour aller (par exemple), visionner les vagues sur vos spots favoris sur ViewSurf [FR].
Si vous utilisez le CPAN pour installer vos modules Perl, et que vous avez répondu "non" à la question de savoir si vous vouliez procéder à la configuration manuelle du module, vous êtes bien embêtés maintenant. En effet, votre liste de miroirs CPAN est vide, ce qui vous empêche d'installer de nouveaux modules. Et bien voilà la syntaxe de configuration de votre liste de miroir, avec enregistrement de celle-ci de manière à ne pas avoir à recommencer à chaque nouvelle installation.
23:46 root@iguzki ~# perl -MCPAN -e shell
cpan> o conf urllist pop
cpan> o conf urllist push ftp://mir1.ovh.net/ftp.cpan.org/
cpan> o conf urllist push http://www.enstimac.fr/Perl/CPAN/
cpan> o conf urllist push ftp://ftp.pasteur.fr/pub/computing/CPAN/
cpan> o conf commit
cpan> reload cpan
cpan> o conf urllist
urllist
ftp://ftp.pasteur.fr/pub/computing/CPAN/
http://www.enstimac.fr/Perl/CPAN/
ftp://mir1.ovh.net/ftp.cpan.org/
Type 'o conf' to view configuration edit options
cpan> quit
Lockfile removed.
23:46 root@iguzki ~#
Petites explications :
"o conf urllist pop" sert à effacer les miroirs déjà présents.
"o conf urllist <mon-url>" sert à ajouter un miroir (on peut appeller cette commande plusieurs fois pour rajouter plusieurs miroirs).
"o conf commit" sert à enregistrer la nouvelle configuration.
"reload cpan" sert à recharger le module CPAN.
"o conf urllist" sert à afficher le contenu de la variable urllist, et donc à voir ce que venez de rentrer.
Dans les environnment hétérogènes, un des moyens les plus simples de partager des données est le système de fichier CIFS (plus connu sous les noms de NetBios ou SmbFS). Pour partager de *Nix vers Windows, il y a Samba, projets désormais très fiable, solide et performant. L'opération inverse peut se faire en ayant un noyau compilé pour cela, et en montant les partages réseaux. On a alors le choix d'utiliser la commande mount, ou bien de rajouter une entrée dans le fichier /etc/fstab. Voilà les syntaxes correspondant à ces deux méthodes :
Montage en ligne de commande :
#!/bin/sh mount -t smbfs //machine_windows/data /mnt/data -o username=toto,password=tutu,workgroup=EUSKADI
Montage via /etc/fstab (remplacer "user" par "users" pour autoriser n'importe quel utilisateur à le monter/démonter, noauto permet de ne pas monter automatiquement cette partition au démarrage) :
//172.16.69.2/data /mnt/win/data smbfs rw,user,noauto,passwd=tutu,username=toto 0 0
Puis, pour le monter, on fait en ligne de commande (remplacez "/mnt/win/data" par votre point de montage):
20:50 root@iguzki ~# mount /mnt/win/data
Une méthode beaucoup plus propre et sécurisée (à savoir que plutot de mettre le login/pass dans le fstab), on peut mettre tout ca dans /etc/samba/credentials sous la forme :
username=toto password=tutu
Et mettre dans le fstab :
//172.16.69.2/data /mnt/win/data smbfs rw,user,noauto,credentials=/etc/samba/credentials 0 0
Pensez bien à restreindre les droits sur /etc/samba/credentials !
Merci à Romain Joly [FR] et Mathieu Lesniak [FR]
Il est possible d'utiliser la commande lsof [EN], mais c'est loin d'être évident, le nombre de descripteurs ouverts sur un système est très important, voyons la sortie juste pour voir les fichiers liés à l'exécution de cette commande elle même (lsof crée une sortie vers STDERR donc pour pouvoir greper la sortie sur STDOUT, il faut rediriger la sortie d'erreur, soit 2, vers la sortie standard, soit 1) :
0:08 root@iguzki ~# lsof 2>&1 | grep lsof lsof 20119 root cwd DIR 3,13 3784 3 /home/xarli lsof 20119 root rtd DIR 3,6 664 2 / lsof 20119 root txt REG 3,9 115192 160173 /usr/bin/lsof lsof 20119 root mem REG 3,9 2259040 1670 /usr/lib/locale/locale-archive lsof 20119 root mem REG 3,6 91000 9135 /lib/ld-2.3.2.so lsof 20119 root mem REG 3,6 1273980 9158 /lib/tls/i686/cmov/libc-2.3.2.so lsof 20119 root 0u CHR 136,12 270 /dev/pts/268 lsof 20119 root 1w FIFO 0,7 28337995 pipe lsof 20119 root 2w FIFO 0,7 28337995 pipe lsof 20119 root 3r DIR 0,3 0 1 /proc lsof 20119 root 4r DIR 0,3 0 1318518793 /proc/20119/fd lsof 20119 root 5w FIFO 0,7 28338001 pipe lsof 20119 root 6r FIFO 0,7 28338002 pipe lsof 20120 root cwd DIR 3,13 3784 3 /home/xarli lsof 20120 root rtd DIR 3,6 664 2 / lsof 20120 root txt REG 3,9 115192 160173 /usr/bin/lsof lsof 20120 root mem REG 3,9 2259040 1670 /usr/lib/locale/locale-archive lsof 20120 root mem REG 3,6 91000 9135 /lib/ld-2.3.2.so lsof 20120 root mem REG 3,6 1273980 9158 /lib/tls/i686/cmov/libc-2.3.2.so lsof 20120 root 4r FIFO 0,7 28338001 pipe lsof 20120 root 7w FIFO 0,7 28338002 pipe 0:08 root@iguzki ~#
C'est vraiment loin d'être pratique, mais heureusement j'ai une autre commande beaucoup plus adaptée à vous proposer. La commande fuser [EN] vous permet de savoir quel processus et donc quel utilisateur utilise une ressource à un moment donné. Cette ressource peut être un socket, un fichier, un point de montage, bref à peu près tout. C'est très utile, lorsqu'on n'arrive pas à démonter un point de montage, quand on ne peut pas effacer un répertoire, et dans beaucoup d'autres cas où une situation bloquante peut arriver.
Par exemple, déterminons qui utilise la console 13 et ce qu'il y fait :
0:12 root@iguzki ~# fuser -v /dev/pts/13
USER PID ACCESS COMMAND
/dev/pts/13 root 2592 f.... zsh
root 2600 f.... fuser
0:12 root@iguzki ~#
Et maintenant qui utilise le port TCP 22 :
0:15 root@iguzki ~# fuser -v -n tcp 22
here: 22
USER PID ACCESS COMMAND
22/tcp root 958 f.... sshd
0:15 root@iguzki ~#
On voit que c'est SSH, lancé par root, avec le PID 958.
Bref, une commande très utile et trop méconnue.
Pour permettre à un public de suivre ce que vous faîtes en shell, on peut utiliser la comande tee, qui crée une flux vers le fichier spécifié et laisse malgré tout les sorties standard. On va donc invoquer un shell interactif (option "-i" pour bash), en mode verbeux (option bash "-v"), rediriger le flux d'erreur vers le flux standard (sortie STDERR, soit 2, vers la sortie STDOUT, soit 1).
Donc le démonstrateur fera :
23:11 xarli@iguzki ~% bash -iv 2>&1 | tee /tmp/session_shell xarli@iguzki:~$
Et l'auditoire devra afficher en continue ce fichier, qui contiendra les entrées et les sorties du fichier /tmp/session_shell :
23:12 operator@iguzki ~% tail -f /tmp/session_shell
Chaque personne de l'auditoire verra alors en temps réel tout ce que tape le démonstrateur, ainsi que toutes les sorties d'erreur comme normales.
Vous pouvez aussi systématiser cette écoute, en remplaçant les shell de vos utilisateurs par cette commande, en dirigeant le tee dans un fichier un $USER$$, de manière à avoir un fichier par utilisateur et par session.
On va encore outrepasser les droits, en faisant en sorte que la base n'effectue aucune authentification des utilisateurs. On va pour cela éditer fichier de configuration das listes d'accès : pg_hba.conf. On va rajouter la ligne suivante (ou modifier une ligne déjà existante pour "local") :
# On autorise l'accès à n'importe quel utilisateur sur n'importe quelle base via les sockets Unix, sans mot de passe local all trust
/!\ ATTENTION : n'importe qui avec un accès local va pouvoir prendre possession de vos bases de données, et faire n'importe quoi avec, je vous conseille d'arrêter vos services Web, de faire se déconnecter tous les utilisateurs locaux, et d'empêcher ces derniers de se reconnecter le temps de faire vos manipulations.
On fait prendre en compte la modification effectuée, en envoyant un signal HUP au démon PostGreSQL. (killall -HUP pgsql). Dès lors, il est parfaitement possible de se connecter à la base avec le super utilisateur de celle-ci (postgres) sans qu'aucun mot de passe ne vous soit demandé, et de changer son propre mot de passe :
00:02 xarli@iguzki % psql -U postgres template1 Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query You are currently connected to the database: template1 template1=> ALTER USER postgres WITH PASSWORD 'mon_nouveau_mot_de_passe_que_je_vais_bien_noter';
Remplacez bien sûr mon_nouveau_mot_de_passe_que_je_vais_bien_noter par le mot de passe que vous désirez affecter à votre super-utilisateur, et que vous allez bien retenir cette fois ci. ;)
Il ne vous reste alors plus qu'à remettre votre fichier de configuration des autorisations d'accès comme il était à l'origine, et de renvoyer un signal HUP à votre démon PostGreSQL.
Je travaille régulièrement sous Red Hat GNU/Linux, ce qui m'amène à utiliser les paquets RPM (ce que je déplore, mais bon). Et quand on supprime un paquet, il peut être utile de se garder un moyen d'annuler cette suppression. C'est possible, grâce à l'option "--repackage" de l'outil RPM. Cela va vous recréer un paquet à partir des fichiers supprimés du système de fichiers. Par contre, il ne va pas reprendre les éventuelsscripts d'installation, donc ne pensez surtout pas à cette commande pour déployer un paquet, mieux vaut vous procurer le paquet initial. Par contre son intérêt vient de son utilisation pour avoir une copie de sauvegarde d'un logiciel sur une machine déjà installée en recréant un paquet de manière partielle mais suffisante pour assurer la bonne cohésion du logiciel, qui pourra être redéployé sur cette même machine, pour revenir d'une désinstallation qui s'est mal passée ou avec des effets de bord facheux.
Bref, une fonctionnalité intéressante pour tout administrateur système subissant le système RPM.
Son utilité est discutée ici [EN].
Il peut être utile de recréer un paquet installé sur une machine Debian GNU/Linux [AUTO], quand on ne l'a plus. Par exemple, lors de l'upgrade d'un paquet sensible, il peut être utile de se laisser une porte de sortie pour réinstaller la version précédente en cas de problème avec la nouvelle version du logiciel. Attention toutefois, les fichiers de configuration mis dans le paquet sont ceux en production, donc ils peuvent contenir des mots de passe, et autres information particulières, donc il ne faut pas les traiter comme des paquets d'origine, redistribuables à n'importe qui. La commande pour réaliser un re-packaging est :
23:45 root@iguzki ~# fakeroot -u dpkg-repack paquet
Par la suite, il est simple de réinstaller le paquetage avec la commande dpkg.
Il peut être utile de vérifier l'état d'une base MySQL, après un crash complet de la machine par exemple, sans arrêt propre du service ou même synchronisation des systèmes de fichiers par flush des journaux. Une commande fournie avec les clients MySQL sert justement à réparer, optimiser, et surtout détecter une incohérence ou un problème au niveau d'une des tables de la base de données. Ainsi, la commande suivante va chercher des incohérence sur toutes les tables, et automatiquement tenter de réparer les éventuelles erreurs :
22:03 root@iguzki ~# mysqlcheck --all-databases --auto-repair --verbose -p
Attention, il faut bien entendu rentrer son mot de passe.
Il est aussi possible d'intégrer cette commande au script de démarrage du démon MySQL, ce qui permet de vérifier automatiquement à chaque lancement l'intégrité de la base de données.
Encore une astuce indispensable pour ceux qui utilisent VIM, cette fois ci honteusement repompée des astuces de DLFP [FR].
Quand on édite un fichier, combien de fois en réouvrant le même fichier ne s'est-on pas dit qu'il serait fort pratique de retomber sur la ligne à laquelle on se trouvait lors de la dernière fermeture, pour éviter d'avoir à rechercher (même en notant ou en mémorisant le numéro de la ligne, ce n'est pas forcément évident). Et bien, le simple fait de rajouter ces quelques lignes à votre vimrc vous permettront de réaliser cette opération fort simple (la première ligne est un commentaire, donc à zapper si vous le voulez):
" Pour retomber sur la même ligne que lors de la dernière fermeture d'un fichier
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
Vous pouvez soit les rajouter dans votre fichier vimrc personnel, soit demander à l'administrateur système de votre babasse de le rajouter au fichier global (dans /etc ou dans /etc/vim sous Debian [FR] par exemple).
Sous Debian [AUTO], Woody ou posttérieure, l'installeur vous pose une question à propos d'OpenSSH [EN], qui est de savoir si vous désirez seulement la version 2 du protocole SSH. Si vous répondez par l'afirmative, alors le fichier de configuration forcera la version 2 du protocole, et aucune clé SSHv1 ne sera générée. Si, pour une raison quelconque vous avez par la suite besoin d'activer la prise en charge de la vieille version du protocole, alors rajouter la version 1 dans le fichier de configuration (/etc/ssh/sshd_config) n'est pas suffisant, car il manque la clé correspondante.
Attention, cette manipulation n'est pas recommandée, et ne devrait etre réalisée qu'en cas de réelle nécessité (par exemple si des outils ne maitrisant pas la nouvelle version du protocole doivent se connecter, comme des outils de monitoring hors d'age par exemple).
Pour pouvoir le faire, il faut alors tout d'abord générer une clé :
2:31 xarli@tiki ~% sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key_v1 -N '' -t rsa1
Puis, on rajoute la définition de cette clé dans le fichier de configuration du démon SSH :
HostKey /etc/ssh/ssh_host_rsa_key_v1
On modifie la ligne suivante, qui défini quels protocoles doivent etre gérés, et dans quel ordre :
Protocol 2
On va rajouter le protocole 1, si le protocole v2 n'est pas géré par le client, pour obtenir la ligne suivante :
Protocol 2,1
Et enfin, on relance le démon SSH, qui sera dès lors disposé à utiliser le vieux protocole :
2:31 xarli@tiki ~% sudo /etc/init.d/ssh restart
Et voilà, c'est tout bon. Cette astuce devrait aussi marcher sous d'autres distributions, d'expérience au moins RedHat [EN], ne soyons pas sectaires.
Si comme moi vous utilisez le formidable Awstats [EN] et vous trouvez confrontés aux problèmes très polluant des référants à la con (referers en anglais), alors vous pourrez tirer bénéfice d'un système de nettoyage de ceux-ci à la génération des statistiques. Ce patch est disponible sur GroovyMother.com [EN]. Très simple, il se contente de comparer vos référants avec une liste noire que vous pourrez maintenir à jour vous meme ou bien en automatiser la récupération sur ce site [EN]. Attention, il ne corrigera pas les statistiques déjà digérées par Awstats [EN]. Il est adapté aux versions 6.2, 6.3 (stable), et 6.4 (développement, version du 2005-02-10).
Attention, le temps de génération est logiquement démultiplié par cette modification.
Voilà un petit mode d'emploi :
patch < lenomdevotrepatch
1 * * * * www-data cd /tmp && rm -f /tmp/blacklist.txt && /usr/bin/wget --quiet http://www.jayallen.org/comment_spam/blacklist.txt
RefererBlacklist="/tmp/blacklist.txt"