Notes et astuces sur les systèmes libres basés sur GNU/Linux

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

samedi, 19 octobre 2013

Quel service écoute sur tel port ?

Bonjour à tous,

Je ne sais pas vous mais moi, je suis obnubilé par les ports ouverts sur mon serveur.
L'angoisse d'avoir oublié un service peu sécurisé ou pire un hacker qui aurait déjà laissé une porte d'entrée.

Identifier les ports ouverts sur votre serveur :

Première vérification des services à l'écoute via la commande netstat :

netstat -l
tcp        0      0 localhost:domain        *:*                     LISTEN  
tcp        0      0 localhost:smtp          *:*                     LISTEN  
tcp        0      0 localhost:953           *:*                     LISTEN  

Le résultat affiché indique les services en écoute sur votre serveur que ce soit des sockets Internet ou Unix. Par défaut, netstat essaye de trouver lui même les correspondance entre :

  • les adresses et leur DNS
  • les numéros de ports et leur nom de services enregistrés

Pour éviter ce comportement, vous rajouter l'option numeric :

netstat -ln  
Connexions Internet actives (seulement serveurs)  
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat  
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN  

Connaitre le service écoutant sur le port x

Maintenant que vous connaissez les ports ouverts sur l'extérieur, il serait intéressant de savoir quel est le service qui écoute.
Exemple : Vous avez installé Apache2 et Nginx sur le même serveur et vous ne savez pas qui écoute sur le port 80.
Le paquet lsof et les droits seront nécessaires à l'utilisation de cette commande.

lsof -nP -i tcp:80 | grep LISTEN  
nginx   1363     root    6u  IPv4 329557      0t0  TCP *:80 (LISTEN)  

Le premier chiffre correspond au PID du process, vous pouvez-donc remonter plus précisément avec une commande de ce style :

ps faux | grep 1363  
root      1363  0.0  0.0  62268  1324 ?        Ss   09:18   0:00 nginx: master process /usr/sbin/nginx  

A noter que pour les services UDP, il n'y a pas d'état LISTEN. Il faudra donc enlever le grep :

lsof -nP -i UDP:53
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
named   1896 bind  512u  IPv4   4833      0t0  UDP 127.0.0.1:53

En espérant avoir aidé.

jeudi, 16 mai 2013

LXC, la solution de virtualisation légère

Si comme moi vous aimez bien tester différents outils ou services GNU/Linux sans encombrer votre machine réelle, la solution de virtualisation par container LXC pourrait grandement vous aider.poupée russe

Voici les quelques avantages de cet outil :

  • Optimisation de l'utilisation de votre machine en hébergeant plusieurs configurations systèmes
  • Sécurisation de vos process en les mettant à l'abris dans un "chroot amélioré".
  • Facilité d'installation car l'outil est intégré au noyau Linux.
  • Avoir sous la main un autre GNU/Linux sans manger toute vos ressources CPU


Cet article n'a pas d'autre prétention que de me servir de bloc-note lors d'une prochaine réinstallation et ajouter une ressource française sur le sujet.

Pour l'installer sous Debian :Logo debian

Si besoin ajouter le système de paramétrage CGROUP à votre liste de points de montage dans votre fichier etc/fstab (vérifiez si la ligne suivante est déjà présente):

cgroup          /sys/fs/cgroup  cgroup  defaults        0       0

Si l'on souhaite mettre nos machines virtuelles directement sur le réseau physique, nous avons besoin de créer un pont sur lequel viendra se brancher notre machine physique ainsi que nos machines virtuelles.

Le paquet bridge-utils va créer un pont/commutateur/switch entre vos machines virtuelles/physique et votre réseau local (LAN).

Schema reseau

aptitude install bridge-utils
Pour mettre en place cette configuration, vous allez devoir remplacer votre eth0 en DHCP par br0 dans /etc/network/interfaces :
auto br0
iface br0 inet dhcp
bridge-ports eth0

Installez le paquet LXC contenant un ensemble de script et de templates :

aptitude install lxc

Si vous souhaitez installer une Debian dans un de vos conteneurs, vous aurez besoin d'installer debootstrap :

aptitude install debootstrap

Maintenant, pour créer votre premier container de type Debian sans limitation :

lxc-create -n le_nom_de_votre_container -t debian

Il faudra configurer votre container avant de le lancer en allant toucher le fichier de configuration dans /var/lib/le_nom_de_votre_container/config. Les lignes importantes à modifier sont :

lxc.network.type = veth
lxc.network.flags = up
#On s'appuie sur l'interface br0 physique
lxc.network.link = br0
#On nomme notre interface virtuel eth0
lxc.network.name = eth0

Par défaut sous Debian, lxc ne vous crée pas de terminal pour vous connecter à votre machine virtuelle.
Avouez que c'est dommage !
Nous allons y remédier en créant nous même le fichier spécial correspondant à un terminal virtuel avec mknod :

mknod -m 666 /var/lib/lxc/le_nom_de_votre_container/roots/dev/tty c 4 1

Si vous souhaitez lancer votre machine avec une console virtuel mais ATTENTION vous ne pourrez pas quitter la console sans éteindre votre container :
lxc-start -n le_nom_de_votre_container

Si vous voulez avoir en tâche de fond votre machine virtuelle ou tout simplement pouvoir quitter votre console quand vous le souhaitez (via Ctrl a +q) :

lxc-start -n le_nom_de_votre_container -d

Maintenant, vous pouvez accéder à votre console :

lxc-console -n le_nom_de_votre_container

Ma difficulté à l'installation venait surtout de la création de la console virtuelle sur une version Testing.

Pour l'installer sous ArchLinux :Logo archlinux

La seule difficulté que j'ai rencontré sous Archlinux est la configuration du bridge.
Je passe brièvement l'installation des paquets vus précédemment :

pacman -S lxc bridge-utils

Si besoin rebooter votre machine pour prendre en compte vos nouveaux modules :

lsmod | grep br
bridge                 85984  0
stp                     1621  1 bridge
llc                     3729  2 stp,bridge

Normalement, l'utilitaire netcfg doit créer votre pont automatiquement avec les paramètres que l'on va spécifier ci-dessous :

pacman -S netcfg
Modifier le fichier/etc/network.d/bridge :
INTERFACE="br0"
CONNECTION="bridge"
DESCRIPTION="Mon pont davignon"
BRIDGE_INTERFACES="enp4s0"
IP="dhcp"

Modifier le fichier /etc/conf.d/netcfg :

# Network profiles are found in /etc/network.d
NETWORKS=(bridge)

Ajouter l'unité à votre démarrage afin de monter le réseau à chaque démarrage :

systemctl enable netcfg@bridge.service

Pour créer manuellement votre pont si cela n'a pas été fait :

brctl addif br0 enp4s0

Modifier le fichier /usr/share/lxc/templates/lxc-debian (L.175)afin de faire fonctionner le template:

arch="amd64"


Au plaisir.

Ps : Pas de bol pour moi, une personne vient de publier un article sur LXC sous Debian à l'instant en Français. J'aurais été en début d'écriture, je n'aurai pas écrit ...

Edit : Ajout de la modification du template debian

mardi, 26 mars 2013

Méthode de génération rapide de paquet debian

Paquet. Bonjour à tous,

Aujourd'hui pour changer une petite note sur les systèmes Debian.

Y a pas de raisons que je parle toujours de ArchLinux alors que je travaille en permanence avec des serveurs sous Ubuntu/Debian.

Quand on gère un parc de machines conséquent, on souhaite automatiser un maximum de choses, dont des petits patchs, scripts...
Pour ce faire, j'ai pensé générer un paquet debian avec le système des dummy-packages.
Cela me permets de vous présenter une méthode de génération de paquet allégé, rapide à prendre en main.
En général, c'est utilisé pour résoudre des problèmes de dépendances, mais nous pouvons l'utiliser pour autre chose.

En premier lieu, il est nécessaire d'installer le paquet equivs.

aptitude update && aptitude install equivs

Suite à cela, nous avons deux outils complémentaires à notre disposition.
Le premier est equivs-control, il permet de générer un fichier control standard.

equivs-control nom_de_notre_futur_paquet

Dans mon exemple, un fichier de configuration nommé nom_de_notre_futur_paquet sera crée dans mon current directory.
Il s'agira de remplir/dé-commenter les champs qui nous intéressent.
Mais nous pouvons pousser la démarche plus loin en y ajoutant des fichiers supplémentaires ou des fichiers postinst,preinst,prerm,postrm.
Pour plus de détail, je vous invite à consulter le man de equivs-build Il est important de noter que le fichier de contrôle n'accepte pas les lignes vides, voici un exemple de fichier de control avec un script de postinst :


Section: misc
Priority: optional
Standards-Version: 3.6.2
Package: Choix-libres
Version: 1.4
Maintainer: Gamoth
Depends: Internet
File: postinst
 #!/bin/sh -e
 set -e
 echo "Installation réussie"
 exit 0
Description: Paquet installant un blog choix-libres

Une fois le fichier de configuration dument remplie, nous pouvons lancer la commande de génération du paquet.

equivs-build nom_de_notre_futur_paquet

Et paf !!! ça fait un paquet debian généré en moins de 10 minutes.

A tantôt tout le monde !

dimanche, 30 décembre 2012

Ttyecho : Lancer un editeur de texte CLI depuis une GUI

Echo

Bonjour,

Derrière ce titre un peu alambiqué se cache un petit plaisir personnel enfin assouvi.
Je m'explique, imaginons que vous utilisiez un explorateur de fichier de type GUI (eg. Nautilus, pcmanfm ...) parce que vous êtes un peu tordu, vous utilisez un éditeur de texte en ligne de commande (eg. vim, emacs ou nano).
Cette situation est embêtante car vous avez envie d’éditer un programme en C que vous voyez s'afficher dans votre explorateur mais vous ne pouvez double-cliquer directement dessus car cela ne va pas vous lancer votre éditeur favoris.

Alors, j'ai trouvé une solution que je vais vous détailler ci-dessous, cependant si vous avez d'autres idées je suis comme un bar dans une soirée étudiante, open !

Bon on commence par récupérer le code source magique de ttyecho :

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>

void print_help(char *prog_name) {
        printf("Usage: %s [-n] DEVNAME COMMAND\n", prog_name);
        printf("Usage: '-n' is an optional argument if you want to push a new line at the end of the text\n");
        printf("Usage: Will require 'sudo' to run if the executable is not setuid root\n");
        exit(1);
}

int main (int argc, char *argv[]) {
    char *cmd, *nl = "\n";
    int i, fd;
    int devno, commandno, newline;
    int mem_len;
    devno = 1; commandno = 2; newline = 0;
    if (argc < 3) {
        print_help(argv[0]);
    }
    if (argc > 3 && argv[1][0] == '-' && argv[1][1] == 'n') {
        devno = 2; commandno = 3; newline=1;
    } else if (argc > 3 && argv[1][0] == '-' && argv[1][1] != 'n') {
        printf("Invalid Option\n");
        print_help(argv[0]);
    }
    fd = open(argv[devno],O_RDWR);
    if(fd == -1) {
        perror("open DEVICE");
        exit(1);
    }
    mem_len = 0;
    for ( i = commandno; i < argc; i++ ) {
        mem_len += strlen(argv[i]) + 2;
        if ( i > commandno ) {
            cmd = (char *)realloc((void *)cmd, mem_len);
        } else { //i == commandno
            cmd = (char *)malloc(mem_len);
        }

        strcat(cmd, argv[i]);
        strcat(cmd, " ");
    }
  if (newline == 0)
        usleep(225000);
    for (i = 0; cmd[i]; i++)
        ioctl (fd, TIOCSTI, cmd+i);
    if (newline == 1)
        ioctl (fd, TIOCSTI, nl);
    close(fd);
    free((void *)cmd);
    exit (0);
}

1. On stocke tout ça dans un fichier ttyecho.c par exemple.

2. On compile :

make ttyecho

3. On fait une petite copie vers un répertoire binaire contenu dans votre PATH :

sudo cp ttyecho /usr/local/bin/ttyecho

Pour vérifier que tout est en ordre, vous pouvez ouvrir deux terminaux.

#Terminal1
tty
> /dev/pts/0

sudo ttyecho -n /dev/pts/1 echo "toto"
#Terminal2
tty
> /dev/pts/1
>toto
  • Il est à noter que nous sommes obliger d'effectuer cette opération en tant que root.
  • L'option -n, permet d'effectuer un retour chariot dans le terminal distant.

Pour remédier au problème de droit, je vous propose cette manipulation qui comme d'habitude n'est pas très secure :

chmod +s /usr/local/bin/ttyecho

Avec le sticky bit, les utilisateurs qui lanceront cette commande auront les droits du propriétaire du fichier autrement dit "root".

Et maintenant le bouquet final : Application à notre problème

  • On ouvre notre explorateur de fichier, pour moi c'est pcmanfm.
  • On fait un joli clic-droit sur le fichier que nous souhaitons editer (ttyecho.c).
  • On choisit l'item "open with" et on remplit l'onglet "custom command line" comme suit :
ttyecho -n/dev/pts/0 nano %f

Il peut paraitre sot de rappeler qu'il faut que /dev/pts/0 soit déjà ouvert ...

Enjoy !

dimanche, 18 novembre 2012

Selector : un outil bash de gestion d'historique de commandes et de repertoires visités

Ceci est une revolutionBonjour,

Cela fait depuis quelques semaines que j'accumule les billets que j'aimerai partager.
J'aurai même le temps de vous les écrire mais je n'ai pas eu l'envie suffisante; à la place je ponds des compte rendu de réunion inutiles.



Mais aujourd'hui, j'ai pris ma plume pour vous présenter une révolution (Steve si tu me regardes)

Cet outil est vraiment mon coup de cœur du moment, je vais vous détailler en deux points les défauts qu'il corrige.

  • Qui n'a jamais pesté contre le Ctrl+R de bash, il suffit que l'on ait une commande que l'on ait exécuté plusieurs fois avec des paramètres différents pour s'en rendre compte. Ce maudit raccourci vous allez devoir le taper x fois jusqu'à temps de tomber sur la bonne commande. Je ne vous parle même pas de l'utilisation non ergonomique de la commande history ...
  • Qui ne s'est jamais dit, j'en ai marre de faire des 'cd' dans tous les sens, j'étais dans /usr/lib/cups/backend/noname puis je suis allé dans /var/log/apache2/, puis dans mon home et maintenant je voudrais retourner dans /usr/lib/cups/backend/noname. J'ai passé des heures à essayer divers bricoles comme autojump et autres pour gagner du temps.

Mes biens chères sœurs (y en a !), mes biens chers frères :

Ce temps est révolu grâce à l'outil Selector de François Fleuret.


Cet outil vous offre :

  • Une interface d'historique des commandes accessible en un raccourci clavier (Alt-r), recherche immédiate dès le premier caractère (à la google), compatible avec les expressions régulières ...
  • Une interface qui présente de la même manière vos pérégrinations sous votre OS.

Maintenant que vous piaffez d'impatience place à l'installation de cet outil révolutionnaire !

1. Premier étape, installation de git (et de ncurses-dev, make pour les autres distros)

yaourt -Sy git

Parce que git c'est trop à la mode, je vous conseille la lecture de ce tutoriel pour être hype.

2. Deuxième étape, on rapatrie le code source :

cd /opt
git clone http://fleuret.org/git/selector/ 
cd selector

3. On compile le code

make selector

4. On fait un petit lien ou on copie le binaire dans un repertoire qui est dans votre path :

ln -s /usr/local/bin/selector /opt/selector/selector

5. On met le joli script d'interception des commandes dans votre .bashrc

cd
nano .bashrc
+ source bash-selector.sh --hist --cd

6. On se ressource :

source .bashrc

Copie d'ecran de l'outil selector 7. On profite : En faisant pleins d'aller et venue dans tous les répertoires puis on fait un alt+r pour consulter l’historique des commandes ou un alt+c pour consulter l'historique des navigations.

Quelques notions très basiques :

  • Pour utiliser une commande surlignée, appuyer sur la touche enter.
  • Pour quitter l'outil, utiliser la touche echap ou ctrl+c.
  • Pour plus d'information :
selector --help

Qu'on se le dise, ceci est une révolution, cela devrait être intégré dans tous les OS Unix ! Et dire que j'ai même pas trouvé un paquet pour l'installer ...

Je trouve cet outil vraiment sympa et je ne l'ai pas beaucoup vu circuler sur le web, j'ai peut être un train de retard aussi !

A bientôt !

Source image : les guignols

Merci à Linus Torvalds pour le prêt de son doigt ! Je trouve ça magique !

mardi, 16 octobre 2012

Utilisation de TrueCrypt sous Archlinux

Bonjour,

Tout d'abord un bref rappel de la fonction de TrueCrypt.

Il s'agit tout simplement d'un logiciel multiplateforme open-source permettant le chiffrage/déchiffrage à la volée d'un fichier/dossier/partition ou d'un disque. C'est une application très puissante permettant de sécuriser de manière forte vos données. Pour plus d'informations, je vous renvoie vers le site officiel de Truecrypt.

J'utilise quotidiennement TrueCrypt pour chiffrer (attention chiffrer n'est pas crypter) ma clé USB.
Je me balade avec l'ensemble de mes documents personnels sur moi, aussi je dois être capable de faire tourner Truecrypt sous Windows ou Archlinux.

Ayant rencontré une petite difficulté pour le faire fonctionner, je me permets de la partager.

Installation :

Pour installer Truecrypt sous Archlinux, il suffit de taper la ligne de commande suivante :

pacman -Sy truecrypt

Cependant ce n'est pas suffisant, il faudra prendre soin de charger les modules fuse et loop.
Je vais donc créer les fichiers dans /etc/modules-load.d

cat /etc/modules-load.d/loop.conf
#Pour assurer le fonctionnement de Truecrypt
loop

cat /etc/modules-load.d/fuse.conf
#Pour assurer le fonctionnement de Truecrypt
fuse

Pour effectuer l'opération manuellement, vous pouvez effectuer la commande suivante :

# modprobe -v loop
# modprobe -v fuse

Utilisation :

Pour monter un container chiffré sur un point de montage, il faudra effectuer la commande suivante :

truecrypt /path_du_fichier_truecyrpt /path_point_de_montage

Il vous sera demandé soit une clé de déchiffrement soit un mot de passe, puis un mot de passe administrateur ou utilisateur si vous avez sudo de configurer. Après avoir entré vos passwords, vous aurez deux entrées de plus dans votre table de montage :

#mount
truecrypt on /tmp/.truecrypt_aux_mnt1 type fuse.truecrypt (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
/dev/mapper/truecrypt1 on /home/thomas/usb type vfat (rw,relatime,uid=1000,gid=100,fmask=0077,dmask=0077,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

Pour démonter l'ensemble de vos dossiers chiffrés :

truecrypt -d

Source:
Plus d'informations sur le chargement des modules avec systemd
Wiki Archlinux sur Truecrypt

- page 2 de 5 -