Catégorie : linux

Linux : des droits spécifiques ftp ?

Comment donner des droits spécifiques ftp afin de renforcer (un peu) la sécurité de votre (vos) site(s) ?
Imaginons que l’on souhaite avoir plusieurs personnes qui travaillent sur le même site, qui veulent accéder aux sources via ftp, qui veulent pouvoir écrire dedans.
Imaginons aussi que l’on donne que le droit de lecture au processus apache, afin que si un pirate réussit à s’introduire dans le système via apache, il n’ait le droit que de lire les fichiers.
Configurons Linux de telle sorte que le processus apache soit lancé en tant qu’utilisateur apache.
Disons que nous avons besoin de travailler avec deux personnes :

  • Laurent (utilisateur = laurent)
  • Frédéric (utilisateur = frederic)

Il faut donc que :

  • l’utilisateur = laurent ait les droits en lecture et écriture dans un répertoire et sur des fichiers donnés ;
  • l’utilisateur = frederic ait les droits en lecture et écriture dans le même répertoire et sur les mêmes fichiers ;
  • l’utilisateur = apache ait les droits en lecture uniquement dans le même répertoire et sur les mêmes fichiers.

C’est simple.
Il faut créer un groupe pour les utilisateurs à qui on souhaite donner les droits de lecture et d’écriture. Appelons ce groupe happyfews. Il faut éditer le fichier /etc/groups et y ajouter :
happyfews:x:5000:laurent,frederic, etc,
avec tous les utilisateurs à qui l’on veut donner la possibilité de lire et d’écrire.
Puis sur le(s) répertoire(s) de travail, il faut appliquer les droits suivants :

  • chown apache <repertoire>
  • chgrp happyfews <repertoire>
  • chmod 570 <repertoire>

Ce qui signifie respectivement :

  • Le répertoire appartient à apache ;
  • Le répertoire appartient au groupe « happyfews » ;
  • Le groupe « happyfews » possède les droits de lecture + écriture, mais le propriétaire du répertoire lui-même n’a que le droit de lecture ;
  • Tout utilisateur autre que le propriétaire ou un membre du groupe n’a aucun accès.

Pour mémoire :
5=user:read+execute, 7=group:read+write+execute, 0=other:no access
Il ne restera ensuite qu’à ajouter/supprimer les utilisateurs qui font partie de ce groupe pour autoriser/refuser l’accès en écriture au(x) répertoire(s) concerné(s).

Prog C : les paramètres de scanf

Mémoire pour les paramètres de scanf
Comme je n’arrive jamais à me souvenir des options de conversion, et qu’elles sont en Anglais donc c’est plus long pour moi à décoder, les voici les voilà :
Paramètres scanf :

  1. %u est à déclarer comme
    unsigned int
  2. %hu est à déclarer comme
    unsigned short int
  3. %lu est à déclarer comme
    unsigned long int
  4. %d est à déclarer comme
    int
  5. %hd est à déclarer comme
    short int
  6. %ld est à déclarer comme
    long int

Exemple sscanf :
Déclaration de variables :
unsigned int u;
unsigned short int hu;
unsigned long int lu;
int d;
short int hd;
long int ld;

Exécution :
sscanf(ma_chaine_en_entree, "%u %hu %lu %d %hd %ld",
&u, &hu, &lu, &d, &hd, &ld);

Linux : le gestionnaire par défaut : kdm ou gdm ?

Comment choisir son gestionnaire par défaut : kdm ou gdm ?
Il faut être sûr(e) que les deux paquets sont installés :

  1. gdm
  2. kdm

Ensuite il suffit de faire :

  1. Pour forcer à démarrer en gdm (=Gnome Desktop Manager)
    sudo dpkg-reconfigure gdm
  2. Pour forcer à démarrer en kdm (=Kde Desktop Manager)
    sudo dpkg-reconfigure kdm

Linux : ajouter quelqu'un dans les règles du firewall

Aller dans /etc/fw/iptables.sh et ajouter une règle iptables.
Par exemple :
Pour autoriser une nouvelle IP à se connecter en
SSH (donc sur le port 22/tcp) :
iptables -A INPUT -p tcp -i eth0 -s <ma_nouvelle_ip> --dport 22 -j ACCEPT
Puis relancer le firewall :
/etc/fw/iptables.sh
(le script flushe les règles et repart de zéro).
Attention : la moindre erreur dans ce script et le firewall se met en défaut, c’est à dire qu’il bloque tout.

Linux : SFTP : explication + utilisation

SFTP est un sous-système du serveur SSH.
Les comptes des utilisateurs locaux servent de comptes SFTP.
Depuis n’importe où, il suffit de taper :
sftp user@www.nomdusite.fr et l’utilisateur "user" peut download/uploader des fichiers et créer des répertoires dans son home directory.
Pour créer un utilisateur :
useradd -n oussama
passwd oussama
Puis éditer le fichier /etc/ssh/sshd_config et aller à la dernière ligne.
Dans la directive AllowUsers, ajouter "oussama", sauver et quitter, puis redémarrer le serveur SSH : service sshd restart.

Zeemoz : mémo Apache

  1. Tuer les sémaphores d’Apache
    /opt/httpd/erase_semaphores.sh
  2. Fuites mémoires Apache
    Pour vérifier si Apache a des fuites mémoire, il suffit juste de le faire tourner comme n’importe quel éxécutable, via valgrind :
    valgrind --leak-check=full --log-file=./valgrind.log /opt/httpd/bin/httpd

Zeemoz : plantage Apache

Apache a créé des milliers de sémaphores en mémoire puis a planté. Ces sémaphores sont des descripteurs de ressources écrites dans un système de fichiers virtuel (/dev/shm pour shared memory), autrement dit un ramdisk.

En plantant, les processus httpd n’ont pas pu nettoyer leurs sémaphores, laissant le ramdisk saturé. C’est pourquoi au redémarrage, httpd ne peut créer sa ressource et conclut à un « no space left« .

On voit les sémaphores avec la commande suivante :
ipcs -s | grep www-data

Il y a une astuce avec awk ou perl pour les effacer, ensuite un apachectl start et ça repart.

Linux php : ajout de json

Json est une extension pour JavaScript et php.
Ajout de l’extension Json : il faut aller la récupérer sur le site du créateur (http://aurore.net/), la compiler (make), l’installer (make install), et ensuite, ce qui n’est pas précisé (sauf ici), aller voir dans le fichier php.ini qui est très souvent dans /etc, où se situe le répertoire des extensions extension_dir, c’est sûrement, ici aussi, extension_dir = "/usr/lib".
Il suffit alors de copier le fichier json.so généré dans le répertoire des extensions, ici /usr/lib.
Rien de plus simple !
Résumé très rapide (il faut faire quelques manips en plus, mais le plus important est là) :

  1. wget http://aurore.net/projects/php-json/php-json-ext-1.2.1.tar.bz2
  2. tar -xvf php-json-ext-1.2.1.tar.bz2
  3. cd php-json-ext-1.2.1/
  4. ./configure ; make ; make install
  5. cp /usr/local/lib/php/extensions/no-debug-non-zts-20050922/json.so /usr/lib