Je ne comprends pas - PB de droits avec root

Tags: #<Tag:0x00007f63f15fd668>

1/ Après une nième installation (cette fois c’est la version 10), en console s/root je n’arrive pas à lancer fdisk (commande introuvable). Je suis obligé de passer en mode recovery pour pouvoir exécuter cette commande. Qu’est-ce que j’ai pas bien fait au cours de l’installation.

2/Comme je me lasse de réinstaller ce portable, je voudrai prendre une image du disque existant et la réinstaller sur un nouveau disque SSD neuf (sans avoir à tout réinstaller of course).

Merci d’avance

Bonjour Ric

On ne voit pas du tout comment tu fais pour essayer de passer sous le compte root
La prochaine fois, donne nous un copié/collé complet du prompt avec la ligne de commande et avec le retour de la commande et le prompt de retour.

C’est souvent en nous transmettant tous ces détails qui peuvent te sembler sans importance qu’on arrivera plus rapidement à trouver une solution.
Et c’est peut-être aussi parce que tu les trouves sans importance que tu as du mal à trouver une solution au problème que tu rencontre.
Mais je comprends qu’il n’est pas évident de savoir ce qui est important ou pas.


Le copié/collé aurait pu ressembler à ça :

ric@nommachine:~$ su
root@nommachine:/home/ric#

Rien qu’avec ça, le prompt de retour
nous aurait indiqué que tu étais bien sous le compte root
mais que tu n’étais pas dans le répertoire personnel du compte root

Et c’est parce que tu as oublié d’utiliser l’option login de la commande su
ce qui fait qu’il n’y a pas dans la variable PATH les chemins qui auraient permis
d’accéder aux commandes de maintenance prévues pour être utilisées depuis le compte root

Regarde l’option login dans la page man de la commande su

man su

Alors que si tu avais fait :

ric@nommachine:~$ su --login
root@nommachine:~#

Là, le prompt de retour est différent, il nous aurait montré que le répertoire courant est bien le répertoire personnel du compte utilisateur root

L’option login permet de faire en sorte qu’après avoir changé de compte utilisateur,
les variables d’environnement soient celles du compte utilisateur que l’on veux utiliser.

Dans les variables d’environnement, il y a la variable PATH
La variable PATH d’un compte utilisateur non privilégiée est :

ric@nommachine:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
ric@nommachine:~$ 

Il n’y a pas le chemin /usr/sbin dans cette variable d’environnement
ce qui fait que la commande /usr/sbin/fdisk est inaccessible
(ou alors il faudrait donner son chemin absolu pour pouvoir l’utiliser)

Mais celle utilisée dans l’environnement du compte root est :

root@nommachine:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
root@nommachine:~#

et donc, la commande fdisk est bien accessible au compte root
puisque le chemin /usr/bin est bien dans la liste des chemins de la variable PATH

Merci MicP pour ce point bien didactique.
Donc, après login en root, la réponse est :

richard@debian-10:~$ su
Mot de passe : 
root@debian-10:/home/richard# fdisk -l
bash: fdisk : commande introuvable
root@debian-10:/home/richard# 
root@debian-10:/home/richard# $PATH
bash: /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games: Aucun fichier ou dossier de ce type
root@debian-10:/home/richard# 
root@debian-10:/usr/bin# cd /usr/bin/fdisk
bash: cd: /usr/bin/fdisk: Aucun fichier ou dossier de ce type
root@debian-10:/usr/bin#

Merci, les copiés/collés (que tu nous donnes dans ton message)
des commandes et leur retour respectifs qui sont complet et bien séparés.
C’est parfait. :+1:


Si tu veux passer sous le compte root
et avoir l’environnement du compte root
pour pouvoir accéder aux commandes de maintenance,
entre la ligne de commande :

su --login

ou bien :

su -l

ou bien

su -

C’est ce qui est proposé dans la page man de la commande su

Et ça va donner sur ta machine :

richard@debian-10:~$ su -
Mot de passe : 
root@debian-10:~#

Et là, tu auras accès à la commande fdisk

2 J'aime

que donne
echo $PATH
autrement dit est-ce que
/sbin/fdisk
marche?

@dindoun

La commande fdisk est dans le répertoire /usr/sbin/ (qui est lié au répertoire /sbin)
et effectivement, on peut très bien la lancer depuis un compte utilisateur non privilégié,
mais un utilisateur non privilégié n’aura pas accès aux fichiers de périphériques disques :

richard@debian-10:~$ /usr/sbin/fdisk -l
fdisk: impossible d'ouvrir /dev/sdb: Permission non accordée
fdisk: impossible d'ouvrir /dev/sda: Permission non accordée
richard@debian-10:~$ 

MicP,
Avec la commande su -l , ça marche bien. Je peux lancer fdisk normalement.
Super. Merci encore,
Richard

richard@debian-10:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
richard@debian-10:~$ 

lancé depuis un compte utilisateur lambda.
Depuis root,

richard@debian-10:~$ su -l
Mot de passe : 
root@debian-10:~# fdisk -l
Disque /dev/sda : 232,9 GiB, 250059350016 octets, 488397168 secteurs
Modèle de disque : TOSHIBA MK2556GS
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
Identifiant de disque : 0xeaedb0e7

Périphérique Amorçage    Début       Fin  Secteurs Taille Id Type
/dev/sda1    *            2048  58593279  58591232    28G 83 Linux
/dev/sda2             58595326 488396799 429801474   205G  5 Étendue
/dev/sda5             58595328  62556159   3960832   1,9G 82 partition d'échange
/dev/sda6             62558208 488396799 425838592 203,1G 83 Linux


root@debian-10:~# 

Merci à vous

Pas forcément. Le paquet fdisk l’installe dans /sbin. Mais sur une installation fraîche de buster ou une installation d’une version plus ancienne mise à jour sur laquelle le paquet usrmerge a été installé, /sbin est remplacé par un lien symbolique et son contenu est fusionné dans /usr/sbin. La commande fdisk est donc accessible indifféremment dans /sbin et /usr/sbin qui sont équivalents. Dans ce cas c’est peut-être la sortie de which fdisk ou type fdisk (ou équivalent) qui t’a induit en erreur : comme le shell, elles recherchent en suivant l’ordre des chemins définis dans $PATH, et /usr/sbin placé est avant /sbin.

Edit : cette fusion dans /usr peut avoir un effet de bord ennuyeux quand on recherche à quel paquet appartient un programme avec une commande du genre :

dpkg -S $(which fdisk)

which va retourner le chemin dans /usr puisque c’est la première correspondance, mais dpkg ne trouvera pas ce chemin dans sa base de données puisque le programme a été installé dans /sbin.

1 J'aime

Merci pour cette précision
qui m’évitera de me poser des questions pendant un bon moment, au cas où.

root@debT450:~# dpkg -S $(which fdisk)
dpkg-query: aucun chemin ne correspond à /usr/sbin/fdisk
root@debT450:~# 
root@debT450:~# ls -l /usr/sbin/fdisk
-rwxr-xr-x 1 root root 145536 janv. 10  2019 /usr/sbin/fdisk
root@debT450:~# 
root@debT450:~# ls -ld /sbin
lrwxrwxrwx 1 root root 8 juin   3 03:50 /sbin -> usr/sbin
root@debT450:~# 
root@debT450:~# ls -l /sbin/fdisk
-rwxr-xr-x 1 root root 145536 janv. 10  2019 /sbin/fdisk
root@debT450:~# 
root@debT450:~# dpkg -S /sbin/fdisk
fdisk: /sbin/fdisk
root@debT450:~# 
root@debT450:~# dpkg -L fdisk
/.
/sbin
/sbin/cfdisk
/sbin/fdisk
/sbin/sfdisk
/usr
/usr/share
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/cfdisk
/usr/share/bash-completion/completions/fdisk
/usr/share/bash-completion/completions/sfdisk
/usr/share/doc
/usr/share/doc/fdisk
/usr/share/doc/fdisk/changelog.Debian.gz
/usr/share/doc/fdisk/changelog.gz
/usr/share/doc/fdisk/copyright
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/cfdisk.8.gz
/usr/share/man/man8/fdisk.8.gz
/usr/share/man/man8/sfdisk.8.gz
root@debT450:~# 

Je viens de trouver un contournement : which -a affiche tous les chemins correspondants et pas seulement le premier.

Note : La commande readlink avec l’option -e, -f ou -m affiche le chemin canonique d’un fichier ou répertoire en remplaçant tous les liens symboliques du chemin.

1 J'aime

Impec :+1:
ça fonctionne très bien avec l’option a

root@debT450:~# dpkg -S $(which -a fdisk)
dpkg-query: aucun chemin ne correspond à /usr/sbin/fdisk
fdisk: /sbin/fdisk
root@debT450:~#