Lister et tuer les processus en cours sous Linux

Pour lister les processus de tous les utilisateurs du système : ps -faux
Pour lister uniquement vos processus : ps -fux

$ ps -fux
 USER  PID  %CPU %MEM VSZ   RSS TTY STAT START TIME COMMAND
 erwan 3377 0.0 0.1 600268  13212  ? Ssl 16:06 0:00 x-session-manager
 erwan 3418 0.0 0.0 10584   336    ? Ss  16:06 0:00 \_ /usr/bin/ssh-agent /usr/bin/dbus-launch --exit-with-session x-session-manager
 erwan 3442 0.0 0.2 816644  21384  ? Sl  16:06 0:00 \_ /usr/lib/gnome-settings-daemon/gnome-settings-daemon
 erwan 3520 1.7 2.5 1893352 202408 ? Sl  16:06 1:29 \_ /usr/bin/gnome-shell
 erwan 5067 3.9 3.8 1242492 302140 ? Sl  16:24 2:39 | \_ iceweasel
 erwan 6172 0.0 0.3 906316  25784  ? Sl  17:13 0:00 | \_ nautilus --new-window
 erwan 3572 0.0 0.1 551768  9596   ? SNl 16:06 0:00 \_ /usr/lib/tracker/tracker-miner-fs

C’est beaucoup plus pratique que la commande top car il n’y a pas de limitation de hauteur d’écran.

On y trouve des infos très utiles :

  • l’user qui a lancé le processus
  • la commande complète avec arguments qui a servie à lancer le processus
  • l’arborescence des commandes pour savoir quels sont les processus parents et enfants.
  • la date à laquelle le processus a été lancé et sa durée de vie
  • la charge du CPU
  • le PID, identifiant propre à chaque processus

Pour arrêter les processus qui vous intéressent, récupérez le PID correspondant (ex: 5067) et lancez :

$ kill 5067

.
Si le programme ne se ferme pas assez rapidement, vous pouvez le forcer à s’arrêter immédiatement :

$ kill -9 5067

Lister les connexions entrantes de votre ordinateur

La commande netstat -tape permet de lister les processus qui acceptent des connections entrantes sur votre ordinateur. Facile à se rappeler !
Pour plus d’information, man netstat.

# netstat -tape
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        User       Inode       PID/Program name
tcp        0      0 localhost:60061         *:*                     LISTEN      mysearch   7850        2813/python     
tcp        0      0 *:43173                 *:*                     LISTEN      statd      13393       1844/rpc.statd  
tcp        0      0 *:sunrpc                *:*                     LISTEN      root       13372       1816/rpcbind    
tcp        0      0 *:ssh                   *:*                     LISTEN      root       33422       6097/sshd       
tcp        0      0 *:gdomap                *:*                     LISTEN      root       6788        2253/gdomap     
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN      root       13375       1816/rpcbind    
tcp6       0      0 [::]:32947              [::]:*                  LISTEN      statd      13397       1844/rpc.statd  
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       33424       6097/sshd

Dossier partagé entre utilisateurs sous Linux

La problématique du jour est de faire un répertoire partagé entre les utilisateurs d’un même ordinateur sous linux.

Permissions Unix, la mauvaise solution

Les permissions Unix sont très performants pour restreindre les accès mais rendent la création d’un répertoire partagé impossible en pratique.

La solution classique serait de créer un groupe qui regroupe les utilisateurs et de faire en sorte que tous les fichiers partagés appartiennent à ce groupe. Ca fonctionne en théorie, mais dans la pratique, les utilisateurs créent/modifient/copient  des fichiers sans vouloir mettre à jour les permission groupes. Et seul le propriétaire du fichier peut modifier la permission de groupe du fichier, ce qui rend la chose ingérable.

Le SGID est également une fausse bonne idée pour propager les droits aux fichiers créés car il ne se propage pas aux fichiers copiés par l’utilisateur vers le dossier partagé.

ACL

La solution élégante et performante passe par les ACL ou Access Control List. Elle permet un contrôle bien plus fin et explicite.

Pour avoir accès aux droits ACL vous devez avoir ajouté l’option à votre /etc/fstab .
Ex :

/dev/hda6 /home ext3 options1,option2,option3,acl 0 0

Une fois fait, remontez le point de montage.

# mount -o remount,acl /home

Assignation des droits ACL

On crée un dossier en root /home/dossier_partage. Personne peut y accéder à part root. Jusqu’ici rien de spécial.

# cd /home
# mkdir dossier_partage
# chmod 770 dossier_partage

On ajoute des droits étendus pour que les utilisateurs alice et bob puisse tout faire dans ce dossier.

# setfacl -m u:alice:rwX dossier_partage
# setfacl -m u:bob:rwX dossier_partage

On ajoute des droits étendus pour que les fichiers/dossiers créés dans ce dossier aient par défaut les mêmes droits étendus.

# setfacl -m d:u:alice:rwX dossier_partage
# setfacl -m d:u:bob:rwX dossier_partage

On peut vérifier les droits finaux ainsi :

$ getfacl dossier_partage/

# file: dossier_partage/
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:rwx
group::rwx
mask::rwx
other::—
default:user::rwx
default:user:alice:rwx
default:user:bob:rwx
default:group::rwx
default:mask::rwx
default:other::—

Astuce sécurité

Par défaut, le /home/user des utilisateurs n’est pas privé sous Debian ! Si bien que Alice peut lire les fichier dans /home/bob .

Je vous recommande la lecture de ce document sur comment sécuriser Debian, surtout ces 2 points

  • 4.11.13.1 Limiter l’accès aux informations d’autres utilisateurs
  • 4.11.12 Positionner des umasks aux utilisateurs

Le plus important : Pour tous vos utilisateurs existants, assurez que le dossier home bloque bien l’accès aux autres utilisateurs :

# chmod 750 /home/bob

Ensuite, vous pouvez faire en sorte que soit créé automatiquement comme ça quand vous créez un utilisateur:

# dpkg-reconfigure adduser

et choississez Non

Vous pouvez également faire en sorte que les utilisateurs créént par défaut des fichiers que seuls eux peuvent voir :

# echo session optional pam_umask.so umask=027 >> /etc/pam.d/common-session

Dans /etc/login.defs, changez la valeur à UMASK 027

Pour vérifier les droits de l’utilisateur courant :

$ umask

Pulseaudio partagé sur le LAN

J’ai toute ma musique organisée et stockée sur mon ordinateur portable avec mon interface au poil. Et mes amis font de même. Du coup, quand on fait une soirée ou que je me faire plaisir j’aimerai diffuser ma musique sur mes enceintes HiFi  « over the air »sans prise de tête et que mes amis puissent faire de même. J’ai connecté un petit PC à enceintes et c’est là que Pulseaudio entre en scène.

Pour configurer Pulseaudio, lancez la commande $ paprefs:

Sur les 2 ordinateurs, j’ai coché cette option:

pulseaudio-config

Sur le PC relié aux enceintes seulement, j’ai coché ces options :pulseaudio-config2Vous remarquerez qu’il faut une autorisation pour se connecter. Le fichier ~/.config/pulse/cookie (si vous avez une version de Pulseaudio < 3, il s’agit du fichier ~/.pulse-cookie ) sert de clé partagée entre tous les ordinateurs qui veulent partager leur périphériques audio. Il faut donc faire en sorte que ce fichier soit identique entre toutes les machines.

Si vous voulez appliquez des changements à Pulseaudio, il faut parfois le redémarrer. La commande $ pulseaudio -k fait ça.

Normalement, vous devriez alors voir les sorties audio du PC relié aux enceintes apparaître sur votre PC portable !

pulseaudio-config3

C’est magique, on peut choisir la sortie audio en live, régler le niveau sonore, sortir le son sur les enceintes locales et distantes en simultané. Tout ça à distance sans se lever de son fauteuil. Je peux streamer Youtube, mon film sur VLC, Grooveshark, mes Flac, Ogg, mp3. Plus de risque que des amis bousillent les PC fixe ou augmentent le volume sonore plus que de raison. Que du bonheur.

Etat des lieux de la messagerie chiffrée

Tout d’abord, je vais ré-préciser quelque chose de fondamental. Une communication aussi sécurisée et chiffrée qu’elle soit est in fine déchiffrée sur l’OS de l’utilisateur pour être affichée à l’écran et stockée dans un historique de conversation. Donc quelque soit le système de protection de communication que vous utilisez, si votre OS est troué ou à la solde de votre espion, vos protections risquent d’être inutiles.

Donc chiffrer ses messages sur un téléphone Android où l’on a installé les GoogleApps et où Google peut lire l’intégralité de la mémoire de votre smartphone sans vous avertir, ça ne sert à rien pour se prémunir de la NSA. Même chose pour les appareils Apple.
Sous Windows, si vous croyez que votre OS n’a pas de porte dérobée, c’est bien. J’aurai des doutes à votre place. Quand aux failles de sécurité, il suffit de regarder l’histoire pour voir que les failles réseau du système sont courantes.

Bref, les prérequis me semblent un smartphone sous Android (sans logiciels propriétaires en root  == sans GoogleApps) et une distribution Gnu (Debian, etc…) sans logiciels propriétaires.

Le postulat est donc que seul votre terminal est sûr, le reste du réseau (serveurs tiers, FAI, internet et même réseau local) pouvant être mis sur écoute. Détrompez vous, il n’y a pas forcément besoin d’une faille technique pour mettre le réseau sur écoute, la contrainte légale sur les sociétés par les états de livrer les informations personnelles de leurs utilisateurs fonctionne généralement assez bien.

E-mails

Les e-mails sont par défaut envoyés en clair. Ils passent par votre réseau local, internet et les serveurs de courrier de chaque correspondant. Autant dire que l’on part de loin.

On peut communiquer en SSL avec son serveur mais si ca protège une partie de la communication, le serveur peut encore lire vos messages et vous n’avez aucune garantie sur la suite du chemin (votre correspondant n’a pas l’obligation d’utiliser une communication chiffrée avec son serveur et tous vos messages passeront alors en clair sur le réseau). Mais SSL protège le mot de passe de votre compte, c’est déjà ça !

La solution souvent conseillée est d’utiliser GnuPG pour chiffrer le contenu des messages. Le problème de cette solution c’est que le champ « sujet » des mails reste toujours en clair. On pourrait mettre des sujets bidons mais je n’imagine pas la galère pour classer ses emails !Donc pour un usage courant, c’est horrible à utiliser. Pour échanger un document confidentiel de temps en temps, ça devrait bien fonctionner.

Messagerie instantanée

XMPP semble être devenu le standard de la messagerie instantanée. Il utilise un modèle client/serveur décentralisé comme les e-mails. C’est vrai que c’est le meilleur modèle que l’on ait actuellement pour fonctionner avec les samrtphones (restrictions de volume de données, consommation énergétique à préserver, pas d’adresse IP publique).

Même constant qu’avec les serveurs e-mails, On peut communiquer en SSL avec son serveur mais si ca protège une partie de la communication, le serveur peut encore lire vos messages et vous n’avez aucune garantie sur la suite du chemin (votre correspondant n’a pas l’obligation d’utiliser une communication chiffrée avec son serveur et tous vos messages passeront alors en clair sur le réseau). Mais SSL protège le mot de passe de votre compte, c’est déjà ça !

GnuPG serait ici plus pratique car il n’y a pas le problème du « sujet » en clair. Mais je n’ai pas trouvé de client XMPP pour Android qui le gère.

OTR est un nouvel modèle de chiffrement pour les échanges de messages synchrones. L’idée est d’utiliser des clés de chiffrement temporaires à conversation. Avantage par rapport à GnuPG : Si un espion a enregistré au préalable vos conversations chiffrées et qu’il tombe un jour sur votre clé privée, il ne pourra pas déchiffrer vos conversations du passé (vu que des clés temporaires qui ont été utilisées pour les chiffrer ont été jetées). C’est une belle idée mais dans la réalité :

  • votre historique est conservé en clair sur le même terminal qui contient votre clé privée. Donc un espion trouverait les deux ensemble.
  • si l’espion récupère votre clé privée et celle de votre correspondant, il peut alors déchiffrer vos conversations du passé.
  • mais surtout  : il est impossible d’envoyer des messages à un correspondant hors ligne (car il faut négocier une clé partagée temporaire avant toute nouvelle conversation). Ce qui rend ce modèle inutilisable en pratique à mon avis si on n’est pas connecté 24/24 à sa messagerie instantanée.

Conclusion

Rien de marche pour l’utilisateur lambda qui n’a rien à cacher. Les emails chiffrés sont impossibles à classer. Les messages instantanés hors ligne sont illisibles.

Enregistrer une vidéo du bureau sous Gnome 3

J’ai découvert que le raccourci clavier Ctrl-Shift-Alt-R déclenchait l’enregistrement d’une vidéo du bureau au format libre WebM dans votre dossier $HOME/Videos.

Pour arrêter l’enregistrer, refaites le même raccourci clavier.

Bon à savoir aussi:

  • Impr. (« Impression Ecran ») fait une capture complète de l’écran dans votre dossier $HOME/Images
  • Alt-Impr. capture uniquement la fenêtre en cours
  • Shift-Impr. vous permet de sélection une zone de capture sur l’écran.

Pratique !

Installer Steam sur Debian Testing (Jessie)

Voici les commandes nécessaires pour installer Steam sur Debian Testing en utilisant le binaire officiel de Valve.

Les commandes sont à lancer en root.

# dpkg –add-architecture i386

# apt-get update

# apt-get install libc6:i386 libgl1-mesa-glx:i386

# wget http://media.steampowered.com/client/installer/steam.deb

# dpkg -i steam.deb

On peut ensuite lancer steam depuis le compte de son user:

$ steam

J’ai testé Dota2 avec ma carte graphique intégrée Intel HD4600 et c’est injouable en basse qualité alors que j’ai de bonne performances avec son concurrent HoN.

Pulseaudio equalizer

J’ai découvert l’équalizer bien pratique de Pulseaudio. Bien pratique car il s’applique sur la sortie audio du système donc pour toutes les applications et qu’il est de bonne qualité (meilleur que celui de VLC) et configurable à souhait.

Sur Debian testing, lancer la commande suivante pour créer une nouvelle sortie pulseaudio avec l’équalizer actf :

$ pactl load-module module-equalizer-sink

Vous verrez ainsi une nouvelle sortie dans le panneau de gestion du son sous Gnome par exemple.

Vous pouvez aussi accéder à cette liste par :

$ pacmd list-sinks|grep ‘name:’

Pour configurer l’équalizer facilement, il faut utiliser le script python qpaeq.py. Il nécessite le paquet module python-qt4-dbus pour fonctionner.

pulseaudio-equalizer-qpaeq-large

Si vous élargissez la largeur de la fenêtre de configuration, vous verrez que les bandes de l’équalizer vont se raffiner :)

Pour supprimer la sortie de l’équalizer :

$ pactl unload-module module-equalizer-sink

Si vous avez un problème, voici la doc complère

Configurer le TRIM pour SSD sur Linux

Je viens de passer d’un disque classique au SSD et la différence de vitesse est fulgurante.

SSD :

  • 550Mo/s constant en lecture
  • 530Mo/s en écriture
  • 0.1ms de temps d’accès

Disque dur 7200rpm:

  • 70 à 35 Mo/s en lecture suivant l’emplacement des données (meilleur débit si les données sont en périphérie du plateau)
  • 15-20ms de temps d’accès

La différence de technologie impose cependant de mettre en place l’utilisation de TRIM pour ne pas perdre en performance d’écriture lorsque votre disque se remplit.

Je trouve dommage que l’OS ne se débrouille pas tout seul pour mettre ça en place. Mais bon, voyons comment faire cela manuellement :

1. Vérifier que votre SSD supporte la commande TRIM

Lancez la commande : # hdparm -I /dev/sda | grep « TRIM supported » en remplaçant sda par votre disque

Vous devriez voir quelque chose comme :

 *    Data Set Management TRIM supported (limit 8 blocks)

2. Si vous avez un disque chiffré, activer TRIM pour dm-crypt

Insérer l’option discard dans /etc/crypttab

# <target name>    <source device>    <key file>       <options>
sda2_crypt         /dev/sda2          none             luks,discard

3. Si vous utilisez LVM, activer TRIM pour LVM

Insérer issue_discards dans le fichier /etc/lvm/lvm.conf

# [...]
devices {
   # [...]
   issue_discards = 1
   # [...]
}
# [...]

4. Appliquer la configuration

Si vous êtes passés par l’étape 2 ou 3, il est nécessaire de lancer l’une des 2 commandes suivantes pour valider les changements :

Debian : # update-initramfs -u

RedHat : # dracut -f

Redémarrer l’ordinateur.

5. Tester le TRIM

Vous pouvez tester que le TRIM fonctionne en lançant la commande fstrim sur votre point de montage: # fstrim /

6. Activer TRIM pour le système de fichier

Plutôt que de laisser le système envoyer une commande TRIM à chaque effacement de donnée, on va informer le disque des blocs libres uniquement une fois par jour. Cela permet au disque d’opérer sa réorganisation des blocs libres à un moment où le besoin de performance n’est pas critique et donc d’éviter sur certains SSD de perdre énormément de performance lors des opérations d’effacement de données.

Pour cela, on va rajouter une entrée dans le crontab de root. Editer le crontrab par la commande : # crontab -e

Ajouter la ligne suivante : @daily fstrim /

Si vous avez une partition différente pour / et /home, vous pouvez plutôt chaîner les commandes comme ceci: @daily fstrim /; fstrim /home