Sometimes, you need to pipe several commands with find -exec, you can do it using the sh command!
Example:
1 | find . -exec sh -c 'cat $0 | rot13 | grep -q toto' {} \; -print |
Sometimes, you need to pipe several commands with find -exec, you can do it using the sh command!
Example:
1 | find . -exec sh -c 'cat $0 | rot13 | grep -q toto' {} \; -print |
Chromium allows you to encrypt website password using the gnome-keyring, the feature isn’t in the manual.
1 | $ chromium-browser --password-store=gnome |
I will explain to you my ugly method to use skype with minbif.
Indeed, skype is a proprietary protocol, and we can only use the API of the Qt client for that hack. We must use it with a virtual X server, Xvfb.
On the remote server:
1 2 3 4 5 6 7 8 9 10 | # aptitude install xvfb x11vnc # dpkg -i skype-debian_2.1.0.81-1_i386.deb # apt-get -f install # aptitude install minbif # usermod -s /bin/bash minbif # sudo su minbif $ export DISPLAY=:25 $ Xvfb :25 -screen 0 1024x768x16 & $ skype & $ x11vnc -bg |
On your local computer:
1 | $ ssh server -L 5900:localhost:5900 |
Next on your local computer:
1 | $ xvncviewer localhost |
You must accept the license and enter your login/password, then activate the autologin. You can now use your graphical skype client over VNC.
On the remote server:
1 2 3 | $ killall x11vnc $ killall skype $ killall Xvfb |
You must edit the config.xml, after minbif can access to the skype API.
1 2 3 4 5 6 7 8 | $ vim /var/lib/minbif/.Skype/YOURACCOUNT/config.xml <UI> <API> <Authorizations>(null)</Authorizations> <BlockedPrograms></BlockedPrograms> </API> </UI> </config> |
1 | # usermod -s /bin/false minbif |
Now you must install skype4pidgin with Xvfb.
1 | # aptitude install pidgin-dev |
I use revision 579
1 2 3 | svn checkout -r 579 http://skype4pidgin.googlecode.com/svn/trunk/ skype4pidgin gcc -I/usr/include/libpurple `pkg-config --libs purple x11` -DPURPLE_PLUGINS -DENABLE_NLS -DUSE_XVFB_SERVER -Wall -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/lib64/glib-2.0/include -I/usr/include -I. -g -pipe libskype.c -o libskype.so -shared -fPIC -DPIC cp libskype.so /usr/lib/purple-2/ |
1 2 3 4 5 6 | $ ps aux | grep minbif minbif 6764 0.0 2.0 10248 5440 ? S 14:15 0:01 Xvfb :25 -ac -terminate -tst -xinerama -render -shmem -screen 0 320x240x16 minbif 6766 0.4 13.8 80096 36328 ? Sl 14:15 1:00 skype --pipelogin -display :25 minbif 10342 0.3 0.6 12368 1580 ? Ss 15:38 0:29 /usr/bin/minbif --pidfile /var/run/minbif/minbif.pid /etc/minbif/minbif.conf minbif 14203 9.5 4.8 86264 12616 ? Sl 17:31 1:05 /usr/bin/minbif --pidfile /var/run/minbif/minbif.pid /etc/minbif/minbif.conf minbif 14232 0.4 1.8 85680 4964 ? S 17:31 0:03 /usr/bin/minbif --pidfile /var/run/minbif/minbif.pid /etc/minbif/minbif.conf |
Vous savez surement que j’utilise minbif pour la messagerie instantanée. Mais il y a un protocole que j’utilise régulièrement pour la messagerie instantanée entre autre, et que je n’ai jamais pensé à intégré dans minbif, il s’agit de Skype.
Ce que je vous propose ici et une solution bien moche, en effet, skype est un protocole propriétaire, nous allons devoir utiliser le binaire skype, le lancer et passer par son API.
Cependant ce binaire ne propose pas de solution en console, il va falloir lancer skype en mode graphique, et le minbif étant sur un serveur, celà pose problème. La solution: utiliser Xvfb, un “fake” serveur X.
Voici la procédure que j’ai utilisé
Sur la machine distance :
1 2 3 4 5 6 7 8 9 10 | # aptitude install xvfb x11vnc # dpkg -i skype-debian_2.1.0.81-1_i386.deb # apt-get -f install # aptitude install minbif # usermod -s /bin/bash minbif # sudo su minbif $ export DISPLAY=:25 $ Xvfb :25 -screen 0 1024x768x16 & $ skype & $ x11vnc -bg |
Puis sur votre machine locale :
1 | $ ssh server -L 5900:localhost:5900 |
Et également en local :
1 | $ xvncviewer localhost |
Vous pouvez alors accepter les conditions d’utilisation, entrer votre login/password et activer l’autologin. Votre client skype devrait-être fonctionnel en graphique.
Sur la machine distante :
1 2 3 | $ killall x11vnc $ killall skype $ killall Xvfb |
On modifie le fichier config.xml pour donner l’accès de minbif à l’API skype, tout à la fin:
1 2 3 4 5 6 7 8 | $ vim /var/lib/minbif/.Skype/VOTRECOMPTE/config.xml <UI> <API> <Authorizations>(null)</Authorizations> <BlockedPrograms></BlockedPrograms> </API> </UI> </config> |
1 | # usermod -s /bin/false minbif |
Maintenant il faut compiler le plugin skype4pidgin avec le mode Xvfb :
1 | # aptitude install pidgin-dev |
j’utilise la révision 579
1 2 3 | svn checkout http://skype4pidgin.googlecode.com/svn/trunk/ skype4pidgin gcc -I/usr/include/libpurple `pkg-config --libs purple x11` -DPURPLE_PLUGINS -DENABLE_NLS -DUSE_XVFB_SERVER -Wall -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/lib64/glib-2.0/include -I/usr/include -I. -g -pipe libskype.c -o libskype.so -shared -fPIC -DPIC cp libskype.so /usr/lib/purple-2/ |
1 2 3 4 5 6 | $ ps aux | grep minbif minbif 6764 0.0 2.0 10248 5440 ? S 14:15 0:01 Xvfb :25 -ac -terminate -tst -xinerama -render -shmem -screen 0 320x240x16 minbif 6766 0.4 13.8 80096 36328 ? Sl 14:15 1:00 skype --pipelogin -display :25 minbif 10342 0.3 0.6 12368 1580 ? Ss 15:38 0:29 /usr/bin/minbif --pidfile /var/run/minbif/minbif.pid /etc/minbif/minbif.conf minbif 14203 9.5 4.8 86264 12616 ? Sl 17:31 1:05 /usr/bin/minbif --pidfile /var/run/minbif/minbif.pid /etc/minbif/minbif.conf minbif 14232 0.4 1.8 85680 4964 ? S 17:31 0:03 /usr/bin/minbif --pidfile /var/run/minbif/minbif.pid /etc/minbif/minbif.conf |
Ce week-end j’ai mis à jour netsoul-purple. Création de packages debian, corrections…
Et ce matin en me levant je me suis demandé : Mais combien de personnes utilisent netsoul-purple ? Est-il utilisé ?
J’ai donc décidé de faire un petit script en bash pour compter les utilisateurs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/bin/bash exec 9<>/dev/tcp/ns-server.epita.fr/4242 echo -e "list_users" >&9 numbers=0 while read line <&9 do ns=`echo $line | grep netsoul%2dpurple >&1` quit=`echo $line | grep "rep 002 -- cmd end" >&1` if [[ ! -z $ns ]] then echo $ns numbers=$(($numbers+1)) fi if [[ ! -z $quit ]] then break fi; done exec 9<&- exec 9>&- echo "Result: $numbers" |
Voilà un parfait exemple de comment initialiser une connexion TCP et la lire avec bash. Par la suite il serait intéressant de faire des graphs RRD avec le résultat.
Utilisant de nombreux protocoles différents, Jabber, AIM, MSN, pour ne citer qu’eux, j’ai toujours souhaité utiliser un client multi-protocole.
J’ai essayé de nombreuses solutions,
Tout d’abord il y eut GAIM, client multiprotocole en C/GTK+, on se plaindra surtout à l’époque de son manque de fonctionnalité pour chaque protocole.
Avec l’essort du protocol jabber, vit le jour des passerelles vers les autres protocoles, certaines efficaces, d’autre non, je retiendrais surtout avoir été victime de beaucoup de problèmes techniques au niveau du serveur pour quelque chose d’utilisable.
Un fork de gaim vit le jour, bitlbee, proposant quelque chose d’intéressant, une passerelle IRC vers les protocoles utilisé par GAIM. Cependant le projet ne mergera pas les sources de GAIM régulièrement, il restera assez pauvre au niveau des fonctionnalités, bien que pratique !
GAIM se renomma ensuite en pidgin, Pidgin est une interface graphique utilisant la libpurple pour se connecter aux différents IM.
Puis vint Minbif, reprenant la même idée que bitlbee, celui-ci utilise cependant la libpurple, permettant d’utiliser tous les plugins que nous souhaitons (notamment msn-pecan pour un meilleur support de MSN, et netsoul-purple pour notre protocole favoris à l’école). Minbif permet donc d’utiliser toute la libpurple au travers d’une passerelle IRC.
Bien que encore en développement, Minbif est désormais mon client de Messagerie Instantanée fêtiche ! N’hésitez pas à l’essayer et à faire des rapports de bugs !
Il est un protocole que tout Epitechiens connait, il s’agit de l’immonde^W^Wdu merveilleux protocole de messagerie instantanée de l’école, j’ai nommé Netsoul. Bien plus qu’un simple protocole de messagerie, celui-ci permet de vous identifier sur le PIE, de surveiller vos temps de log pour que vous travailliez bien… Bref le protocol Netsoul est indispensable à toute personne qui veut travailler à l’école.
Il existe un plugin netsoul pour pidgin nommé gaim-netsoul qui n’est plus maintenu.
Je vous propose donc ma version, j’ai nommé netsoul-purple, corrigeant segfaults et désagréments notoires !
Je vous invite bien entendu à créer des tickets pour tout bug (car il en reste plein) et toute demande de fonctionalité !
On a toujours besoin de tester ses configurations sur une machine qui n’est pas en prod, il y a encore peu, je testais tout sur du matériel de récupération que j’accumulais chez moi. Mais il arrive un moment dans la vie où il faut se débarasser de tout ce vieux matériel (une petite amie, un déménagement, ou je ne sais quoi
). Bref, des machines ça prend de la place, et j’essaie désormais d’en avoir le moins possible.
Pour notre plus grand bonheur, Intel et AMD ont implémenté dans les derniers processeurs des technologies de virtualisation ! On voit alors fleurir sur le net, de multiples applications opensource (ou pas) utilisant ces technologies, comme par exemple, KVM, Xen.
J’ai choisi d’utiliser KVM et non Xen, en effet, ce dernier n’est pas compatible avec les dernières versions du kernel linux, ce qui est un peu génant pour moi, en effet, ma carte mère n’est pas pleinement supportée avec un 2.6.18.
On commence d’abord par installer kvm et son module kernel, sous debian, pour les autres je vous laisse chercher :
1 2 3 4 | # apt-get install kvm # module-assistant # modprobe kvm # modprobe kvm-intel ( ou kvm-amd ) |
N’oubliez pas de vérifier que votre processeur est compatible avec la virtualisation, et que cette option est activée dans le BIOS
Il devient alors assez simple de créer une machine virtuelle. On créer tout d’abord le fichier qui va la contenir :
1 | $ kvm-img create file.qcow2 -f qcow2 5G |
Ceci créera une image de 5 gigas. Vous souhaitez alors installer une debian (par exemple) sur ce disque virtuel, il suffira de donner en paramètre l’image iso du CD de cette façon :
1 2 | $ kvm -m 512 -cdrom debian-40r3-i386-businesscard.iso \ -boot d -hda file.qcow2 |
Vous procédez alors à une installation classique d’une debian
Tout ça est bien joli, ou presque, mais vous ne pouvez pas accéder à votre machine virtuelle depuis le réseau, et inversement, ce qui n’est pas réellement pratique si vous souhaitez vous servir de votre machine virtuelle comme serveur.
En supposant qu’il y ait un serveur dhcp sur le réseau, nous allons configurer votre machine en tant que bridge, pour qu’elle puisse faire circuler le réseau vers les VMs.
1 | # apt-get install bridge-utils uml-utilities |
Il vous faut alors modifier votre configuration réseau dans /etc/network/interfaces:
1 2 | auto lo eth0 iface lo inet loopback |
commentez cette ligne:
1 2 3 4 5 6 7 8 9 10 11 12 | #iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_maxwait 5 </code ATTENTION: vos VMs vont communiquer sur le réseau physique avec une adresse MAC virtuelle ! Celà peut ne pas fonctionner si vos switchs restreignent les adresses MAC. On relance ensuite le réseau de cette façon : <code> /etc/init.d/networking restart |
Si plus rien ne marche, c’est que vous devez adapter le fichier interfaces en fonction de votre réseau
Nous allons ensuite configurer le script de démarrage de kvm, de façon à ce qu’il associe le tunnel que nous allons créer en le lançant, avec le bridge, pour celà il faut juste modifier le fichier /etc/kvm/kvm-ifup:
1 2 3 4 5 6 7 | #!/bin/sh switch=$(ip route ls | awk '/^default / { for(i=0;i<NF;i++) { if ($(i) == "dev") print $(i+1) }}') sudo /sbin/ifconfig $1 0.0.0.0 up sudo /usr/sbin/brctl addif ${switch} $1 exit 0 |
vous pouvez ensuite lancer votre VM de cette façon :
1 2 | kvm -m 512 -net nic,vlan=0 \ -net tap,vlan=0,ifname=`sudo tunctl -b -u $USER` file.qcow2 |
Lorsque vous l’aurez quitté, je vous conseille de supprimer les interfaces tap que tuncl a créé, à coup de :
1 | $ sudo tunectl -d tap0 |
J’ai acquis récemment un routeur wifi ASUS WL-500GP, tout geek que je suis, je me suis empressé de le passer sous OpenWRT. Voici donc la procédure que j’ai suivi ! Inspiré notamment de la documentation officielle d’OpenWRT.
1 2 3 4 5 6 7 | #tftp 192.168.1.1 binary rexmt 1 timeout 60 trace Packet tracing on. tftp> put openwrt-xxx-x.x-xxx.bin |
1 2 3 4 | nvram set sdram_init=0x0009 nvram set sdram_ncdl=0x208 nvram commit reboot |
1 2 3 4 5 6 7 8 9 10 11 12 | root@OpenWrt:~$ cat /proc/cpuinfo system type : Broadcom BCM947XX processor : 0 cpu model : BCM3302 V0.6 BogoMIPS : 263.78 wait instruction : no microsecond timers : yes tlb_entries : 32 extra interrupt vector : no hardware watchpoint : no VCED exceptions : not available VCEI exceptions : not available |
1 2 3 | root@OpenWrt:~$ cat /proc/meminfo total: used: free: shared: buffers: cached: Mem: 31248384 13135872 18112512 0 1323008 5079040 |
Le problème est le suivant, nous souhaitons héberger de nombreux domaines sur une machine que nous nommerons ici serveur.domaine.com, cette machine doit servir de serveur SMTP pour ces domaines, ainsi que de serveur IMAP, le tout administré à l’aide de PostfixAdmin. Cependant postfix doit être un minimum sécurisé : mots de passe md5 dans la bdd et chroot.
Nous allons d’abord installer les bases MySQL qui nous permettrons de stocker les comptes utilisateurs et les domaines ! Pour celà il suffit de suivre l’installation de postfixadmin, téléchargeons donc les sources de postfixadmin.
1 2 3 4 | cd /var/www/ tar -zxvf postfixadmin-2.1.0.tgz cd postfixadmin-2.1.0 mysql -u root -p < DATABASE_MYSQL.TXT |
Voilà à présent vous avez installé la base de donnée MySQL postfix, à savoir que l’utilisateur postfix aura comme mot de passe postfix, n’oubliez pas de le changer par la suite ! Vous pouvez également installer cette base sur un serveur MySQL distant ! Cependant pour des questions de sécurité, il sera judicieux d’utiliser un socket unix en local.
On édite alors le fichier de configuration de postfixadmin :
1 | mv config.inc.php.sample config.inc.php |
editor config.inc.phpOn modifie alors les variables pour le serveur local. Sans oublier :
1 2 3 | $CONF['encrypt'] = 'md5crypt'; $CONF['domain_path'] = 'YES'; $CONF['domain_in_mailbox'] = 'YES'; |
Se référer ensuite au fichier INSTALL.TXT !
On modifiera aussi le fichier /var/www/postfixadmin/admin/.htaccess
1 2 3 4 | AuthUserFile /var/www/postfixadmin/admin/.htpasswd AuthGroupFile /dev/null AuthName "Postfix Admin" AuthType Basic |
require valid-userPuis on redéfinit le mot de passe à l’aide de la commande
1 | # htpasswd -b /var/www/postfixadmin/admin/.htpasswd admin motdepasse |
Vérifiez que le fichier .htaccess est interprété ! Si ce n’est pas le cas, vérifiez la variable AllowOverride dans votre configuration apache !
On install postfix et son extension postfix-mysql à l’aide d’un
1 | #apt-get install postfix postfix-mysql |
On indiquera lors de la configuration automatique, une configuration “Site Internet”.
On crée d’abord le dossier où seront stocké les maildirs :
1 2 3 | # mkdir /var/mail/virtual # chown -R 1001:1001 /var/mail/virtual # chmod -R 771 /var/mail/virtual |
On modifie ensuite la configuration de postfix en ajoutant ceci au /etc/postfix/main.cf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf virtual_gid_maps = static:1001 virtual_mailbox_base = /var/mail/virtual virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf virtual_mailbox_limit = 51200000 virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 1001 virtual_transport = virtual virtual_uid_maps = static:1001 # Additional for quota support virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. virtual_overquota_bounce = yes |
On crée ensuite le dossier dans lequel sera stocké les maps :
1 2 | # mkdir /etc/postfix/mysql/ # cd /etc/postfix/mysql/ |
et on crée ensuite les fichiers :
1 | mysql_virtual_alias_maps.cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = alias select_field = goto where_field = address mysql_virtual_domains_maps.cf user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = domain select_field = domain where_field = domain #additional_conditions = and backupmx = '0' and active = '1' mysql_virtual_mailbox_maps.cf user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = mailbox select_field = maildir where_field = username #additional_conditions = and active = '1' mysql_virtual_mailbox_limit_maps.cf |
1 2 3 4 5 6 7 8 | user = postfix password = postfix hosts = 127.0.0.1 dbname = postfix table = mailbox select_field = quota where_field = username #additional_conditions = and active = '1' |
Les valeurs de l’hosts ont été mises à 127.0.0.1 et non pas à localhost pour contrer un problème dû au chroot !
Par ailleurs, il faut modifier les droits d’accés de l’utilisateur postfix pour ne pas avoir d’erreur !
1 2 | mysql -u root -p GRANT SELECT , INSERT , UPDATE , DELETE ON `postfix` . * TO 'postfix'@'%'; |
1 2 | # chmod -R 755 mysql/ # chown -R root:root mysql/ |
1 |
1 | # /etc/init.d/postfix restart |
On devrait à partir de là obtenir un postfix qui fonctionne !
Pour tester : On crée un utilisateur avec postfixadmin, puis on crée une boite mail. Si tout se passe bien, la boite est crée dans /var/mail/virtual … sinon on observe les logs dans /var/log/mail.log
A partir de là nous avons un postfix configuré pour recevoir les mails fonctionnel
1 | apt-get install courier-authmysql courier-imap courier-pop courier-authdaemon |
Nous allons maintenant configurer courier pour l’authentification avec la base MySQL de postfix !
On modifie pour celà le fichier /etc/courier/authdaemonrc
1 | authmodulelist="authmysql" |
Puis on édite la configuration de l’identification MySQL :
1 2 3 4 | vim /etc/courier/authmysqlrc MYSQL_SERVER 127.0.0.1 MYSQL_USERNAME postfix MYSQL_PASSWORD postfix |
1 2 3 4 5 6 7 8 9 | MYSQL_OPT 0 MYSQL_DATABASE postfix MYSQL_USER_TABLE mailbox MYSQL_CRYPT_PWFIELD password MYSQL_UID_FIELD '1001' MYSQL_GID_FIELD '1001' MYSQL_LOGIN_FIELD username |
1 2 3 | MYSQL_HOME_FIELD '/var/mail/virtual/' MYSQL_NAME_FIEL name MYSQL_MAILDIR_FIELD maildir |
Attention: N’utilisez que des tabulations, les espaces provoquent des erreurs d’identification ! cf /var/log/mail.log
on lance ensuite les services désirés :
1 2 3 | /etc/init.d/courier-authdaemon restart /etc/init.d/courier-imap restart /etc/init.d/courier-pop restart |
On teste ensuite la récupération des mails, en principe, ça marche.
Il existe plusieurs méthodes d’identification SASL avec postfix, mais notre problème est que nous voulons utiliser les mots de passe cryptés dans la base de donnée, et que nous ne voulons pas patché les packages par soucis de maintenance.
La meilleure solution que j’ai trouvé, est d’utiliser le daemon d’authentification de courier !
Pour celà on procéde d’abord à l’installation de SASL2
1 | #apt-get install postfix-tls sasl2-bin libsasl2 libsasl2-modules |
On doit ensuite permettre à postfix de voir le socket du daemon authdaemond, celui-ci étant dans un chroot, on va lier le socket dans le chroot
1 2 | # mkdir -p /var/spool/postfix/var/run/courier/authdaemon/ # ln /var/run/courier/authdaemon/socket /var/spool/postfix/var/run/courier/authdaemon/socket |
On crée ici un hard link du socket de authdaemon dans le chroot, cependant à chaque relance authdaemon il faudra refaire ce hard link, je vous recommande de modifier vos scripts d’init pour celà !
Maintenant on configure postfix pour l’authentification SASL, on crée d’abord un fichier /etc/postfix/sasl/smtpd.conf :
1 2 3 4 5 | pwcheck_method: authdaemond log_level: 3 mech_list: PLAIN LOGIN authdaemond_path:/var/run/courier/authdaemon/socket # ( en réalité /var/spool/postfix/var/run/courier/authdaemon/socket ) |
et on ajoute à /etc/postfix/main.cf :
1 2 3 4 | smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous |
1 | /etc/init.d/postfix restart |
Voilà, nous avons donc effectué une configuration rudimentaire, sachez que cette configuration n’est PAS SÉCURISÉE ! En effet, les mots de passes transitent en clair, et les restrictions laissent à désirer, dans un prochain article, je vous expliquerais comment améliorer tout ça !
N’oubliez pas de changer tous les mots de passe par défaut !