Les enquêtes Debian-Facile : on a volé mes commandes root sous Buster

Depuis la publication de Buster , nous avons vu fleurir sur le forum pas mal de questions concernant l'impossibilité de passer certaines commandes nécessitant les droits root bien que connecté sur ce compte.
Ces commandes ont-elles disparu ? Que nenni, il s'agit juste d'une modification de la commande su permettant de passer root et en particulier de la gestion de la variable d'environnement PATH qui indique au système dans quels chemins rechercher les commandes.

Pour expliquer ce qu'est cette variable voici un court extrait du MOOC Maîtriser le Shell Bash publié sur la plateforme FunMooc par l'Université de La Réunion (sous licence CC-BY-NC-SA 4.0)

La variable PATH est une variable importante, elle donne l?accès aux commandes du système. Cette variable sert à retrouver les commandes dans l?arborescence sans qu?il ne soit nécessaire de fournir le chemin d?accès absolu. La variable PATH représente une règle de recherche pour le shell. C?est la liste des répertoires dans lesquels le shell doit rechercher une commande (en suivant l?ordre des répertoires
listés dans la variable).
Supposons que vous ayez deux commandes ls, l?une que vous avez créée et l?autre la commande classique. Celle que vous avez créée se trouve dans le répertoire /usr/local/bin et la commande classique se trouve dans /usr/bin. Pour utiliser la commande classique, vous devez saisir :

/usr/bin/ls


En revanche, si votre variable PATH contient le répertoire /usr/bin/ alors vous pouvez saisir :

ls


Si votre variable PATH contient /usr/local/bin:/usr/bin/ alors en saisissant la commande ls, la version utilisée sera celle que vous avez créée car l?ordre compte, dans la liste des répertoires de la variable PATH. Consulter le contenu d?une variable d?environnement s?effectue par une commande d?affichage echo et une substitution de variable comme le montre l?exemple avec la variable PATH.

echo $PATH


/usr/local/bin:/sbin:/bin:/usr/bin



Jusqu'à Stretch, c'est le paquet source Shadow qui fournissait la commande su. Depuis la publication de Buster, c'est util-linux qui fourni cette commande. su n'est pas absolument identique dans les deux paquets. En effet, avec l'implémentation de shadow, un simple su réinitialisait la variable PATH en y ajoutant le chemin /usr/sbin et /sbin, chemin contenant des commandes qu'on ne passe qu'avec les droits root. Comme ce n'est plus le cas avec l'implémentation issue de util-linux, le shell n'est donc pas capable de trouver ces commandes.

Voyez plutôt :

su


fdisk -l


bash: fdisk : commande introuvable


ls /sbin/fdisk


/sbin/fdisk


Le système ne trouve pas la commande, pourtant, elle est bien présente. Et voici le pourquoi du comment

echo $PATH


/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games


Pas de /sbin dans cette variable, donc, le shell ne sait pas où se trouve cette commande.

Il faut donc a présent pour ouvrir un shell root et voir la variable PATH initialisée avec ces deux répertoires taper

su -l #ou su --login
#ou
su - #oui, avec un tiret



On essaye à nouveau

su -


fdisk -l


Disque /dev/sda : 50 GiB, 53687091200 octets, 104857600 secteurs
Modèle de disque : QEMU HARDDISK  
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
...
 


Pas de problèmes ici, et le pourquoi du comment

echo $PATH


/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


Vous remarquerez l'apparition des répertoires /foo/sbin (et la disparition de /usr/games le compte root n'est pas fait pour jouer, nan mais oh, garnement tongue ).


Et voilà encore une enquête résolu par le célèbre détective Debian-Facile smile

Vus : 584
Publié par debian-facile.org : 16