SÉCURITÉ Ajuster la manière de fonctionner de l'historique de Bash

Un article de Gentoo Linux Wiki.

Sommaire

[modifier] Résumé

Ce document présente quelques méthodes pour améliorer la sécurité d'un système, en ce qui concerne l'historique des commandes Bash. Les exemples de méthodes vont de la désactivation pure et simple de l'historique à la limitation de la taille de ce dernier, en passant par la sélection des commandes enregistrées.


[modifier] A propos de .bash_history

Le fichier .bash_history est utilisé dans le Bourne Again SHell (Bash) pour stocker l'historique des commandes tapées par un utilisateur. S'il est activé, les commandes précédentes peuvent être retrouvées en utilisant généralement la touche fléchée vers le haut, des commandes comme !; !num; !!; !string, ou en utilisant la commande history. En exportant diverses variables d'environnement, on affecte la manière dont history fonctionne. Bash sauvegarde le fichier historique quand ce dernier existe.

Consultez les pages de manuel de bash et de history pour plus d'informations.

[modifier] Pourquoi désactiver ce fichier ?

Pour des raisons de sécurité, vous ne devriez pas utiliser un .bash_history, ou du moins limiter ce qui est stocké à l'intérieur, parce que des secrets tels que des mots de passe, des clefs, ou autres données sensibles pourrait bien être écrits sur le disque. Et lorsque quelquechose a été écrit sur le disque, il est théoriquement toujours possible de le récupérer -- même après avoir effacé le fichier, écrasé les données sauvegardées un nombre arbitraire de de fois, et endommagé physiquement les plateaux. La seule manière connue de détruire complètement des données sauvegardées est d'oblitérer les plateaux eux-même ; par exemple, en les faisant fondre. La raison sous-jacente est complexe, et je ne la détaillerai pas ici. Donc, si vous devez protéger vos données, que la sécurité de vos données est critique, ou que vous vouliez tout simplement contrecarrer la fouille de vos données dans le cas où votre disque serait volé, alors des pratiques comme celles décrites ci-dessous (ainsi qu'un cryptage des disques) sont ce qu'il vous faut. On notera cependant que, dans la plupart des cas, il est probablement sans danger (et utile) de conserver un historique disponible dans la RAM (mémoire vive). Bien entendu, désactiver .bash_history signifie que se déconnecter ou fermer le terminal implique la perte de l'historique de la session.

[modifier] Mesures

Dans tous les scénarios suivants, vous devrez être loggués en tant que root. Il ne s'agit que d'exemples, vous pouvez librement les accomoder et/ou les cumuler.

[modifier] Désactiver complètement l'historique pour tous les utilisateurs

(non recommandé)

Ceci désactivera complètement l'historique de Bash pour tous les utilisateurs, l'historique des commandes tapées et le rappel ne seront plus disponibles.

Ajoutez les lignes suivantes à votre /etc/profile :

Fichier : /etc/profile
export HISTFILESIZE=0
export HISTSIZE=0
unset HISTFILE

Enfin, une mesure de protection supplémentaire est de créer un lien .bash_history vers /dev/null dans les répertoires de tous les utilisateurs, y compris root :

Fichier : /etc/profile
# ln -s /dev/null ~/.bash_history

[modifier] Désactiver l'historique Bash pour tous les utilisateurs

(recommandé)

Ceci désactivera l'historique Bash pour tous les utilisateurs, mais maintiendra l'historique des frappes ainsi que le rappel des commandes, tout en limitant l'historique à 100 lignes.

Ajoutez les lignes suivantes à votre /etc/profile :

Fichier : /etc/profile
export HISTFILESIZE=0
unset HISTFILE

# Changer cette valeur par un nombre raisonnable de lignes à sauver.
export HISTSIZE=100

[modifier] Désactiver l'historique Bash pour un utilisateur donné

La méthode suivante permet de désactiver l'historique Bash pour certains utilisateurs choisis, sans en affecter le fonctionnement pour les autres. Pour les utilisateurs choisis, l'historique est limité à 100 lignes comme ci-dessus, tout en supprimant les doublons contigus.

Ajoutez les lignes suivantes au fichier .bash_profile situé dans le répertoire de l'utilisateur :

Fichier : .bash_profile
export HISTFILESIZE=0
unset HISTFILE

# Changer cette valeur par un nombre raisonnable de lignes à sauver.
export HISTSIZE=100

# Ignorer les commandes dupliquées contigues
export HISTCONTROL=ignoredups

[modifier] Limiter l'historique de Bash sans le désactiver

Ceci limitera l'historique Bash pour des utilisateurs choisis, en retenant l'historique des frappes et le rappel des commandes, tout en se restreignant aux 100 dernières lignes. Les doublons contigus ne sont pas retenus, tout comme les lignes commençant par un espace. Cela est très utile car on peut choisir quelles lignes enregistrer dans l'historique et quelles lignes ne doivent pas être retenues. Vous devriez vous renseigner sur HISTIGNORE en consultant la page de manuel de bash, car elle indique comment faire ignorer par l'historique certains motifs tels que l'emploi de la commande su.

Ajoutez les lignes suivantes aux fichiers .bash_profile des utilisateurs choisis :

Fichier : .bash_profile

# Nombre maximal de lignes qui peuvent être contenues dans le fichier
export HISTFILESIZE=100

# Vous pouvez affecter ceci à n'importe quel nom de fichier, y compris /dev/null, 
# tant que les droits de l'utilisateur sont suffisant pour écrire dans ce fichier 
export HISTFILE=~/.bash_history

# Donner une valeur raisonnable de nombre de lignes à sauver
export HISTSIZE=500

# Ignore les lignes dupliquées contigues et ignorer les lignes commençant par un espace
# (ignoredups et ignorespace combinés)
export HISTCONTROL=ignoreboth

[modifier] Pour terminer

Pour activer ces réglages après les avoir établis, vous devrez ouvrir un nouveau terminal, vous déconnecter, ou utiliser source sur le fichier approprié ; le mieux étant de se déconnecter avant de se reconnecter. Si vous avez désactivé totalement .bash_history, rappelez-vous de l'effacer dans chaque répertoire utilisateur ainsi que dans le repertoire de root.

Autres langues