Le TwiBlog

The one with Twidi

Aller au contenu | Aller au menu | Aller à la recherche

lundi 16 mai 2011

Dotcloud, django and auth_basic : exclude a file or a path from authentication

I'm currently developing a website in django (more precisely with satchmo) which is hosted on dotcloud for the development version.

To protect this site, i easily set a "basic authentication" by creating a nginx.conf (documented here and more specifically here) site with these lines :

   auth_basic "Dev version : restricted access";
   auth_basic_user_file /home/dotcloud/current/.htpasswd;

But later i encountered a problem with Paypal and it's "Instant payment notifications" system... because the site is protected and always returned a 401 http error to Paypal.

When i figured out this mess (not as quickly as i hoped...), i decided to remove the authentication for the "ipn" page in my site, while keeping it on the rest of the site.

So i laughed "ah ah easy to do !" and tried this :

   location / {
       auth_basic "Dev version : restricted access";
       auth_basic_user_file /home/dotcloud/current/.htpasswd;
   }
   
   location ^~ /shop/checkout/paypal {
       auth_basic off;
   }

But then, at the end of the "dotcloud push myapp.dev ." command, a little error message came to me

   Reloading nginx configuration: [emerg]: duplicate location "/" in /home/dotcloud/current/nginx.conf:1

So i checked the main nginx.conf file in my dotcloud serveur ("/etc/nginx/nginx.conf" and "/etc/nginx/sites-available/default", after a "dotcloud ssh myapp.dev") and, of course, i saw an existing "location /" block.

But... the dotcloud team gave us a chance to arrange this problem, by letting us having a uwsgi.conf in our project, which will be included into the existing "location /" block.

So, now i have two files :

nginx.conf :

   auth_basic_user_file /home/dotcloud/current/.htpasswd;
   
   location = /shop/checkout/paypal/ipn/ {
       auth_basic off;
   }

uwsgi.conf :

  auth_basic "Dev version : restricted access";

But this is not working. I now have a 404 http error on the "ipn" page. I don't know how nginx works but i think that it's because wsgi is not configured for this page. So, by duplicating the wsgi part of the "location /" block into mine, it seems ok (no need to touch uwsgi.conf, it's ok with only the auth_basic line):

nginx.conf:

   auth_basic_user_file /home/dotcloud/current/.htpasswd;
   
   location = /shop/checkout/paypal/ipn/ {
       auth_basic off;
       uwsgi_pass   unix:///var/dotcloud/uwsgi.sock;
       uwsgi_param SCRIPT_NAME /;
       uwsgi_param UWSGI_SCRIPT wsgi;
       include        uwsgi_params;
   }

And NOW, it works :)

I really found this to "hard" for a so simple thing... maybe i do not understand well how to do this. There is a way to avoid the duplicate configuration between the two location blocks ? If youi have the answer, and/or a better way to do this, comments are opened !

PS : Be reading the main nginx.conf i noticed that it's not just our own nginx.conf and uwsgi.conf which are included, but *nginx.conf and *uwsgi.conf.

PPS : thanks to django, satchmo and dotcloud teams. Great tools !

lundi 5 octobre 2009

Connexion linux/ubuntu avec passphrase ssh (pam-ssh), suite

Les nouvelles version de libpam-ssh (1.92.6 pour moi, sous Ubuntu 09-10 Karmic) ne fonctionnent plus de la même façon que celle décrite dans le précédent billet que j'avais écrit sur le sujet.

Maintenant, la ou les clés valides doivent être présentes dans le répertoire .ssh/login-keys.d :

ln -s  ~/.ssh/id_rsa ~/.ssh/login-keys.d/

Quant aux options dans le répertoire /etc/pam.d/, elles changent.

Tout d'abord, plus de fichier pam-ssh-* (ni ssh-* pour les versions intermédiaires).

Puis dans le fichier /etc/pam.d/common-auth, il faut mettre, avant la première ligne commençant par auth :

 auth sufficient pam_ssh.so try_first_pass

Et enfin dans le fichier /etc/pam.d/common-password, il faut mettre, avant la première ligne commençant par password :

session optional pam_ssh.so

Et voilà, cela fonctionne comme avant

jeudi 8 novembre 2007

SliTaz GNU/Linux : mini distribution linux (25mo) francophone type live CD (ou clé USB) incluant Firefox

Lu sur DLFP :

SliTaz GNU/Linux est une mini distribution francophone d'environ 25 Mo, distribuée sous forme de LiveCD, elle fonctionne entièrement en mémoire vive (RAM), ce qui permet d'avoir un système rapide avec des applications réactives ...

Plus d'infos sur le lien ci-dessus ou directement sur le site (en français) de SliTaz

dimanche 2 septembre 2007

Récupérer la liste des modules perls à installer

Réinstallant une machine, j'ai eu besoin de connaître tous les modules perl à réinstaller.

Quelques find, grep et sed suffisent :

find ./ \( -name '*.pm' -or -name '*.pl' -or -name '*.cgi' \) -exec grep -io '\(^\|\s\|;\)use\s\(\w\+::\)*\w\+' {} \; | grep -v 'use \(Exporter\|Carp\|constant\|lib\|vars\|base\|POSIX\|strict\)$' | sed "s/^[[:space:]]*use[[:space:]]*//i" | sort | uniq

De là vous faut retirer vos propres modules.

dimanche 8 juillet 2007

Marquer des mails comme lus avec procmail

(Attention ce billet ne concerne que les mails stockés dans des boîtes de type Maildir et non pas Mailbox)

A partir du moment où on a une règle de fitrage dans son fichier .procmailrc qui gère les spams, on peut vouloir que les mails déplacés par cette règle dans le dossier .Junk/ soient mraqués comme non lus.

Imaginons que votre règle soit actuellement :

:0
* ^X-Spam-Flag:.*yes
.Junk/

Le déplacement de mail se fait alors dans .Junk/new/

L'idée est de remplacer ce déplacement par un déplacement .Junk/cur/, mais celà n'est pas suffisant pour que le mail soit marqué comme lu. Il faut également rajouter le flag ":2,S" (:2 par défaut (voir explication sur Wikipedia et S pour "Seen").
Pour celà, on récupère le nom du fichier (en se basant sur $LASTFOLDER qui contient le chemin complet du mail en cours de traitement), et on effectue le déplacement/renommage en même temps.

Dans le cas où on veut effectuer ce marquage pour plusieurs règles, il peut être intéressant de factoriser.

On va donc mettre dans un fichier externe (par exemple ~/.procmailrc.moveandmarkasread) la règle "déplacer et marquer comme lu" :

:0c
$foldername

:0
* LASTFOLDER ?? /\/^/+$
{ tail=$MATCH }

TRAP="mv $LASTFOLDER $foldername/cur/$tail:2,S"

HOST

Pour plus de facilité, on va déclarer en haut de notre fichier .procmailrc une variable pour le chemin de ce fichier (on considère que $HOME est déjà défini)

MOVEANDMARKASREAD=$HOME/.procmailrc.moveandmarkasread

Comme on aura pu le voir dans le fichier en question, il faut définir une variable foldername qui contient votre dossier dans lequel le message devrait être déplacé. Dans notre exemple il s'agit de .Junk/ (ne pas oublier le / final !)

On va ensuite inclure ce fichier externe pour appliquer la règle, grâce à la commande INCLUDERC

Cela donne au final la règle suivante (qui remplace celle d'origine) :

:0
* ^X-Spam-Flag:.*yes
{
  foldername=.Junk/
  INCLUDERC=$MOVEANDMARKASREAD
}

lundi 2 juillet 2007

ssh sur un autre port : quelles options pour scp et rsync

Si jamais votre serveur ssh écoute sur un autre port que son classique port 22, il faudra l'indiquer aux autres programmes utilisant ssh, comme scp et rsync

Voici les options à utiliser :

ssh : -p PORT

scp : -P PORT (notez le P majuscule)

rsync : -e 'ssh -p PORT'

Comment reprendre une copie scp interrompue (comme un wget --continue) : rsync --partial

Imaginez que vous soyez en train de récupérer un fichier via scp

Typiquement:

scp user@host:/path/to/the/file .

Et là, à 95%, c'est le drame. Pour une raison inconnue le réseau tombe et la connexion ssh utilisée par scp se coupe.

Comme tout le monde, vous cherchez dans le man scp l'option qui, comme pour wget, permet de reprendre un téléchargement là ou il en était. Mais non, rien, pas de --continue ou autre option équivalente. A priori c'est reparti pour le téléchargement du fichier en entier.

Et non ! C'est là que rsync nous sauve la vie, grâce à son option --partial

Voici la commande :

rsync --partial user@host:/path/to/the/file .

(Commande à relancer plusieurs fois si nécessaire)

mercredi 6 juin 2007

Ubuntu / Kubuntu : problèmes d'extensions avec le firefox intégré : firebug et sylish

A chaque fois que je me remet à utiliser le firefox intégré à ubuntu (ou kubuntu dans mon cas), je me retrouve avec une ou deux extensions qui ne marchent pas.

Actuellement il s'agit de stylish et du très connu firebug.

Bref, n'ayant pas envie de chercher trois ans la solution, j'ai choisi simplement d'installer la version officielle de Mozilla Firefox.

1) Commencer par télécharger Firefox

2) Le décompresser dans un répertoire quelconque (par exemple /home/moi/bin, ce qui va créer un répertoire /home/moi/bin/firefox)

3) Dire au système d'utiliser cette version :

sudo mv /usr/bin/firefox /usr/bin/firefox.orig
sudo ln -s /home/moi/bin/firefox/firefox /usr/bin/firefox

(Notez bien le firefox/firefox, qui est donc l'exécutable firefox dans le répertoire du même nom)

4) Empêcher les mises à jour automatiques d'écraser ce nouveau lien symbolique... on va simplement interdire de mettre à jour le firefox intégré à ubuntu (le notre se mettra à jour tout seul). Pour cela on va utiliser la technique que j'ai décrit dans mon article debian / ubuntu / apt / dpkg : Comment empêcher la mise à jour d'un paquet :

sudo echo "firefox hold" | dpkg --set-selections

Et voilà, firefox est pleinement fonctionnel !

samedi 26 mai 2007

Utiliser "ssh-copy-id" vers une machine où ssh tourne ailleurs que sur le port 22

ssh-copy-id est un script qui permet de copier sa clé publique sur une machine distante, et ainsi pouvoir se connecter à cette machine en ssh avec sa clé et non le mot de passe (et ainsi ne plus avoir besoin de s'identifier à chaque fois, grâce à ssh-add ou pam-ssh)

En tant que script, il permet d'éviter la copie à la main du fichier nécessaire.

Mais en tant que script, il n'est pas prévu énormément d'option, et notamment pas la possibilité de spécifier le port sur lequel tourne ssh sur la machine distante.

En jetant un oeil au script j'ai néanmoins trouver comment faire :

ssh-copy-id -i CLE_PUBLIQUE "-p PORT SERVEUR"

Remplacer

  • CLE_publique par le fichier de votre clé publique, par exemple ~/.ssh/id_rsa.pub
  • PORT par le port sur lequel ssh tourne sur la machine distante
  • SERVEUR l'ip ou le nom de la machine distante

Dans l'idéal on n'aurait pas à saisir l'option -i (fichier de la clé publique) mais c'est impératif si on veut pouvoir utiliser la bidouille "-p PORT SERVEUR"

Connexion linux/ubuntu avec passphrase ssh (pam-ssh)

Un petit billet pour expliquer comment se logguer dans sa session ubuntu avec sa passphrase ssh au lieu de son mot de passe classique.

L'avantage principal est notamment de valier votre passphrase ssh et ainsi pouvoir vous logguer sur tout compte ssh autorisé sans saisir votre passphrase à nouveau, ni lancer un ssh-add.

Dans le meilleur des cas vous économisez une saisie de mot de passe : on le fait au début une fois pour toute.

Voici les étapes à suivre :

1) Installer pam-ssh :

sudo aptitude install libpam-ssh

2) Créer une clé ssh si vous n'en avez pas déjà une (je pense que si vous lisez ce topic, vous l'avez déjà)

ssh-keygen

3) Modifier la séquence de validation du login.

Ci-dessous, remplacez $EDITOR par votre éditeur texte favori, ou faîtes un

export EDITOR=votre_editeur_favori

Il faut donc modifier deux fichiers lié à pam :

sudo $EDITOR /etc/pam.d/common-auth

Avant la première ligne commençant par "auth", ajouter

@include pam-ssh-auth

Puis :

sudo $EDITOR /etc/pam.d/common-password

Avant la première ligne commençant par "password", ajouter

@include pam-ssh-session

Vous pourrez toujours vous logguer avec votre mot de passe, dans quel cas il vous faudra saisir ultérieurement votre passphrase ssh en cas de besoin.

Note : si vous vérouillez votre session, pour revenir, tapez également votre clé ssh.

lundi 21 mai 2007

Passage (temporaire ou non) de Kubuntu à Ubuntu (les deux en Feisty)

Et bien oui des fois des envies prennent sans qu'on s'y attende...

J'ai donc décidé de retester Gnome via Ubuntu, après l'avoir quitté il y a quelques temps déjà pour Kde via Kubuntu.

En vrac :

D'abord les "moins" :

1) nautilus à pas de système d'onglet, ca craint (et je parle pas de la possibilité de konqueror de partager la fenetre)

2) pour les notifications evolution (mail) et gaim (messagerie instantanée), faut se battre :

  • il faut le paquet "mail-notification-evolution" pour evolution (et le configurer dossier par dossier dont on veut etre notifié)
  • il faut le paquet "gaim-libnotify" pour gaim, et le configurer

bon avec ça on a des notifications sympathiques, toutes sur le meme thème. pas évidant

3) le orange, c'est MOCHE, personnellement j'ai mis le theme "glider". Mais quoi qu'il en soit, la personnalisation est extrèmement moins poussée que pour KDE

4) pas possibile dans la "tray barre" (appelée "zone de notification" dans gnome") de choisir de masquer tel ou tel icone

5) il manque un "centre de configuration" à la kde... toujours passer par le menu, c'est lourd (oui je sais il y a gnome-control-center, mais il n'est pas proposé dans le menu ubuntu)

6) les bureaux :

  • il faut installer brightside pour passer d'un bureau à l'autre en amenant la souris au bord de l'écran
  • avec ctrl-alt-droite/gauche, quand on est "au bout", on revient pas au premier.. j'hallucine...

7) un petit manque de personnalisation d'evolution par rapport à kontact (je garde le tout-intégré-gnome pour utiliser beagle plus tard)

8) contrairement au gestionnaire de session de kde, celui de gnome ne considère par firefox comme une appli qu'il peut relancer... dommage, il faut le spécifier à la main

Ensuite les "plus" :

1) la "deskbar", c'est top, une sorte de katapult en mieux/différent (j'ai encore le malheureux reflexe du alt-space)

2) beryl ca marche tout seul (inutile et désagréable à l'utilisation, mais beau et simple à faire marcher, faut par contre installer des paquets en plus pour la configuration)

3) le majhong est plus beau que celui de kde (bon ok, c'est un peu inutile comme remarque)

Bon, on verra à l'utilisation, je n'ai pas viré mon kubuntu, je suis juste sur une partition séparée (celle sur laquelle trainait le windows installé avec mon portable, utilisé trois ou quatre fois depuis l'achat il y a 14 mois). Il est possible que je reste sous ubuntu un certain temps, meme si je sais qu'au final il me manquera toujours la possibilité qu'a KDE de tout personnaliser au maximum.

lundi 23 avril 2007

Kubuntu : problème lors du passage de Edgy à Feisty (le "Kubuntu upgrade tool" ne s'ouvre pas)

En utilisant la procédure recommandée pour passer mon Kubuntu de Edgy au tout nouveau Feisty, j'ai eu un problème, que j'évoque ici afin de donner la solution.

Il est donc recommandé d'utiliser Adept Manager, de faire un "Fetch update", et que de là, un assistant va s'ouvrir. Jusque là tout va bien.

Cet assistant se termine par un clic sur un bouton "finish" à partir duquel est normalement censé s'ouvrir le "Kubuntu upgrade tool". Sauf que celui ne s'ouvrait pas.

Pour que cet outil de mise à jour s'ouvre, il faut deux conditions :

- TOUS les paquets doivent être à jour (j'avais un problème ave mon opera qui demandait une version de libc que je n'avais pas, solution : apt-get remove opera)

- TOUS les dépôts contenus dans /etc/apt/sources.list doivent être bon (ils doivent répondre et ne pas avoir de problème de clé), si un ne répond pas, il suffit de le commenter (en rajoutant un # devant)

Une fois ces petits problèmes résolus, l'upgrade se passe bien (téléchargement de 1004Mo en cours pour moi)

Mysql 5 (5.036, 5.038 et suivant) : l'installation échoue en cas de noyau 2.4

Lors du passage de mysql-server-5.032 à mysql-server-5.038-1, la procédure d'installation (en fait un apt-get upgrade) s'est bloquée à ce niveau :

Setting up mysql-server-5.0 (5.0.38-1) ...
Stopping MySQL database server: mysqld.

Après moulte recherche, il s'avère que c'était un problème de version de noyau. En effet, depuis la version 5.036, le serveur mysql a besoin d'un noyau 2.6, or j'étais en 2.4 depuis des lustres.

MySQL Bugs: #27714: mysql_install_db fails with kernel 2.4

samedi 28 octobre 2006

Firefox 2 : touches acceskeys, restauration des sessions et touche backspace

Je ne vais pas faire un billet sur Firefox 2 récemment sorti, tout le monde l'a fait.

Non, je vais faire un billet un peu plus pratique comportant 3 points qui me posaient problème mais que j'ai résolu (grâce à un certain google).

Ces trois points nécessitent des modifications via about:config, et le redémarrage du navigateur pour que les changements prennent effet.

Touches acceskeys

En HTML il est possible d'attribuer un raccourci clavier à un bouton, champ de saisie... Ce raccourci était d'fini par une lettre, associée à la touche ALT.

Avec Firefox 2, ce n'est plus la touche ALT seule, mais ALT et SHIFT, qu'il faut presser en même temps que la lettre pour obtenir le même effet !

Il est cependant possible de rétablir le comportement original :

  1. allez à l'adresse about:config
  2. tapez ui.key.contentAccess dans le filtre
  3. double-cliquez sur la ligne
  4. remplacez 5 par 4

Restauration des sessions

Edit : Il suffit de choisir, "Afficher les derniers onglets et fenêtres utilisés" pour "Au démarrage de Firefox" dans l'onglet "Général" des options

Pour ceux que ça intéresse quand même, je disais :

Une des nouvelles fonctionnalités de Firefox 2 est d'implémenter un système de restauration des sessions, utile notament en cas de crash.

Je n'ai trouvé aucune option à ce sujet, et cette fonctionnalité est désactivée par défaut. Voici comment la mettre en place, pour se passer de l'ancienne extension "sessionsaver" (ou autre)

# allez à l'adresse about:config # taper sessionstore dans le filtre # entrez (ou modifiez si elles existent) les valeurs suivantes :

* browser.sessionstore.enabled, de type booléen, à "true" * browser.sessionstore.resume_from_crash, de type booléen, à "true"

Et si vous souhaitez que la session soit restaurée même en cas de fermeture volontaire vu navigateur : * modifiez browser.startup.page en remplaçant 1 par 3

Touche backspace

Sous linux, la touche backspace fonctionnait auparavant comme sous windows : retour à la page précédente. Cela a été modifié (sous linux uniquement) pour une histoire d'homogénéité. Comme pour les accesskeys, cela ne me convient pas, et voici donc comment retrouver le fonctionnement de la version 1.x :

  1. allez à l'adresse about:config
  2. tapez browser.backspace_action dans le filtre
  3. changez la valeur de 1 à 0

jeudi 3 août 2006

Vim 7 pour Ubuntu (Dapper)

Utilisateur intensif de vim depuis que je l'ai découvert il y a plusieurs mois, j'ai entendu parlé à de nombreuses reprises de la version 7.

Vim7 n'étant pas actuellement disponible sous Ubuntu Dapper que j'utilise (en fait Kubuntu), j'ai cherché et... trouvé !

Il suffit d'inclure la ligne suivante dans son fichier /etc/apt/sources.list :

deb http://www.freshnet.org/debian/dapper /

Le tout suivi d'un petit sudo apt-get update && sudo apt-get upgrade

Liens :