sudo astuce devops

Ce document explique comment configurer un utilisateur sur un système Linux (Debian, Ubuntu, etc.) pour :

  • Utiliser la commande sudo -s pour obtenir un shell root sans saisir de mot de passe
  • Persister l’historique des commandes de ce shell root directement dans le fichier d’historique de l’utilisateur (~/.bash_history), et non celui de root
  • Créer des raccourcis pour accélérer l’accès root de manière sécurisée

Le problème : L’histoire de deux historiques

Par défaut, un système Linux maintient des environnements et historiques séparés pour chaque utilisateur :

  • L’utilisateur phil a son historique dans /home/phil/.bash_history
  • L’utilisateur root a son historique dans /root/.bash_history

Quand phil exécute sudo -s, il porte effectivement le chapeau de l’utilisateur root. Toutes les commandes qu’il saisit sont, par défaut, enregistrées dans l’historique de root. Notre objectif est de rediriger ce journal vers le fichier d’historique de phil.

La solution : Une harmonie en deux parties

La solution nécessite deux étapes obligatoires :

Partie A (Côté serveur) : Créer une règle sudoers spécifique pour permettre l’opération et préserver les variables d’environnement clés.

Partie B (Côté utilisateur) : Configurer l’environnement shell de l’utilisateur pour définir et exporter correctement ces variables.

Procédure d’installation

Partie A : Configuration côté serveur (sudoers)

La meilleure pratique consiste à ajouter un nouveau fichier de configuration dans le répertoire /etc/sudoers.d/ plutôt que d’éditer le fichier principal /etc/sudoers.

Instructions :

  1. Connectez-vous à votre serveur en tant que root
  2. Définissez le nom d’utilisateur cible dans une variable
  3. Copiez et collez ce script qui générera le fichier de configuration :
nano usrpwr.sh
# =================================================================
# PARTIE A : SCRIPT DE CONFIGURATION SUDO
# À exécuter avec les privilèges sudo.
# =================================================================

# 1. Définir l'utilisateur cible à configurer
TARGET_USER="phil"

# 2. Préparer le contenu du fichier de configuration
CONFIG_FILE="/etc/sudoers.d/98-${TARGET_USER}-nopasswd-shell-hist"

read -r -d '' SUDOERS_CONTENT << EOM
# Règle pour ${TARGET_USER} : autoriser sudo -s sans mot de passe
# et rediriger l'historique vers le fichier d'historique de l'utilisateur.

# Définit un alias pour les commandes shell
Cmnd_Alias ROOT_SHELL = /bin/bash, /bin/sh

# Options par défaut appliquées SEULEMENT à l'alias ROOT_SHELL :
# Force sudo à conserver les variables HOME et HISTFILE de l'utilisateur original.
Defaults!ROOT_SHELL env_keep += "HOME HISTFILE"

# Applique la règle NOPASSWD à l'utilisateur pour l'alias ROOT_SHELL
${TARGET_USER} ALL=(ALL) NOPASSWD: ROOT_SHELL
EOM

# 3. Créer le fichier, définir son propriétaire et appliquer les permissions sécurisées
echo "${SUDOERS_CONTENT}" | sudo tee "${CONFIG_FILE}" > /dev/null
sudo chmod 0440 "${CONFIG_FILE}"
sudo chown root:root "${CONFIG_FILE}"

echo "✅ Configuration sudo pour l'utilisateur '${TARGET_USER}' créée dans ${CONFIG_FILE}"
chmod u+x usrpwr.sh 
./usrpwr.sh

Partie B : Environnement utilisateur (.bashrc)

Cette étape doit être effectuée depuis le compte de l’utilisateur cible (phil dans notre exemple).

Instructions : Connectez-vous en tant qu’utilisateur cible (phil) et exécutez la commande suivante :

cat << 'EOF' >> ~/.bashrc

# --- Configuration pour un historique Bash robuste et partagé ---
export HISTCONTROL=ignoreboth:erasedups
export HISTFILE=~/.bash_history
shopt -s histappend
PROMPT_COMMAND="history -a; ${PROMPT_COMMAND}"
EOF

# Appliquer immédiatement les changements à la session courante
source ~/.bashrc

echo "✅ ~/.bashrc a été mis à jour et rechargé."

Validation

Pour vérifier que tout fonctionne comme attendu, suivez cette procédure de test :

  1. En tant qu’utilisateur cible (phil), effacez l’historique en mémoire : history -c && history -w
  2. Passez en root : sudo -s (l’invite doit changer en root@…)
  3. Exécutez une commande de test : echo "test redirection historique"
  4. Quittez le shell root : exit (l’invite doit revenir à phil@…)
  5. Vérifiez l’historique de phil : history | grep "redirection"

Si la commande de test apparaît dans la sortie, la configuration est réussie.

Annexe : Accès root rapide

L’alternative recommandée (et sensée) : L’alias

Pour un accès root quasi-instantané sans sacrifier la sécurité, la meilleure méthode est un alias shell.

  1. Ouvrez votre fichier ~/.bashrc : nano ~/.bashrc
  2. Ajoutez cette ligne :
# Alias pour un accès root rapide et sécurisé
alias r='sudo -s'
  1. Rechargez la configuration : source ~/.bashrc

Maintenant, vous n’avez qu’à taper r et appuyer sur Entrée pour devenir root. C’est rapide, tout en préservant l’acte délibéré et auditable d’escalade de privilèges.

La méthode directe (à vos risques et périls)

ATTENTION : Cette pratique viole les principes fondamentaux de sécurité Linux. Elle expose le serveur à un risque élevé si votre compte est compromis et augmente les chances d’erreurs de frappe destructrices.

Si vous comprenez et acceptez ces risques, voici la procédure :

cat << 'EOF' > ~/.bash_profile
# S'assurer que .bashrc est également chargé lors de la connexion
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# ================================================================
# SUDO -S AUTOMATIQUE LORS DE LA CONNEXION (NON RECOMMANDÉ)
# ================================================================
if [[ $- == *i* ]]; then
   echo "ATTENTION : Basculement automatique vers le shell root..."
   sudo -s
fi
EOF

Annulation des modifications

Pour revenir à la configuration par défaut :

  1. Supprimez le fichier de configuration sudo (en tant que root ou avec sudo) :
# Remplacez "phil" par le nom d'utilisateur pertinent
sudo rm /etc/sudoers.d/98-phil-nopasswd-shell-hist
  1. Nettoyez ~/.bashrc : Éditez le fichier ~/.bashrc et supprimez le bloc de configuration commençant par # --- Configuration pour un historique Bash robuste et partagé ---.
  2. Nettoyez ~/.bash_profile si vous avez implémenté la méthode non recommandée.

Conclusion

Cette configuration vous permet de bénéficier de la puissance d’un shell root persistant tout en maintenant un historique de commandes unifié et traçable. Fini les commandes perdues dans l’éther – votre historique devient un outil fiable pour le dépannage et la documentation de vos interventions système.

L’investissement de quelques minutes dans cette configuration vous fera économiser des heures de frustration et améliorera significativement votre productivité en tant qu’administrateur système.

Publications similaires