Pourquoi un utilisateur avec des privilèges root n'est-il plus dans ~?

20

Par curiosité, je voudrais savoir pourquoi, lorsque je me connecte en tant que root, je ne suis plus dans / home / user . Quelle est la raison et que fait exactement le répertoire / root ?

Je ne suis pas un utilisateur avancé. Veuillez répondre en termes simples ou donner un lien fournissant des explications claires et simples. J'utilise Ubuntu 16.04 et je me connecte en tant que root par sudo -i. Comme il est expliqué ici , sudo -ia / root comme home. Je veux savoir quelle est la raison; y a-t-il un avantage à être là? Et pas dans ~ comme l'utilisateur de sudo -s.

Codito ergo sum
la source
11
root est aussi un utilisateur, donc il a son homerépertoire personnel , mais celui-ci est nomméroot
damadam
3
Vous pouvez utiliser sudo -spour être dans le même répertoire utilisateur.
Pilot6
3
@ Pilot6 désolé, j'ai ajouté cela en même temps que j'ai vu votre commentaire: D J'espère que cela ne vous dérange pas :)
Rinzwind
2
@Unbesiegbarkeit man sudorépondra à la question. Pour être simple, vous user -iutilisez les paramètres utilisateur root, mais sudo -sles paramètres utilisateur actuels.
Pilot6

Réponses:

28

Vous ne vous connectez pas en tant que root en exécutant une sudocommande. Vous démarrez un shell avec des privilèges root.

Si vous souhaitez rester dans le répertoire de base de l'utilisateur actuel, vous pouvez utiliser à la sudo -splace de la sudo -icommande.

cd ~vous amènera dans le même répertoire que si vous n'êtes pas dans un shell avec des privilèges root. Littéralement /home/$USER.

Lorsque vous utilisez sudo -i, le système agit comme si vous étiez connecté en tant rootqu'utilisateur. À cause de ce

cd ~ 

vous amène au répertoire de base de l'utilisateur root qui est /root.

/rootrépertoire est un répertoire personnel pour l' rootutilisateur.

La principale différence est que les fichiers de paramètres shell comme .bashrcsont utilisés à partir de /rootdans le cas d'un sudo -i, et à partir d'un utilisateur normal dans le cas de sudo -s.

Pilot6
la source
3
Quels sont les avantages d'avoir / root comme domicile?
Codito ergo sum le
2
Des fichiers comme .bashrcsont utilisés à partir de là dans un shell spécifique. Dans la plupart des cas, il n'y a pas beaucoup de différence.
Pilot6
11
@Unbesiegbarkeit / home peut ne pas être monté dans certaines circonstances, par exemple en mode mono-utilisateur, sans accès au réseau, etc., et root doit toujours pouvoir se connecter dans ces circonstances.
doneal24
2
@ DougO'Neal Si /homen'est pas disponible, le problème n'existe pas. Ensuite, vous vous connectez vraiment en tant que root.
Pilot6
4
@ Pilot6: Il y a des différences, ou devrait l'être. Par exemple, sur mes machines, j'ai configuré le fichier. * Shrc de root pour qu'il soit visuellement évident que je fonctionne en tant que root - par exemple, invite dans un format différent et de couleur rouge. Les alias sont également configurés pour ne pas faire certaines choses qui pourraient être nuisibles si elles étaient effectuées en tant que root, etc.
jamesqf
29

La raison pour laquelle le domicile de l' rootutilisateur est /rootet n'est pas /home/rootparce qu'il s'agit généralement d' /homeun point de montage vers une partition / volume / disque séparé ... (pour diverses raisons, telles que l'espace disque ou à distance, ...)

Si, pour une raison quelconque, le montage /homeéchoue, vous pouvez toujours vous connecter en tant queroot et être dans votre /rootrépertoire personnel pour enquêter et corriger les choses.

De plus, pour la maintenance, la configuration initiale, le redimensionnement, ... vous seriez connecté comme rootet devriez pouvoir démonter / remonter/home

alexf
la source
7
+1, Cela devrait être la réponse acceptée. Vous pouvez changer le domicile de root pour qu'il soit n'importe où, mais nous laissons / root sur / et non à / home pour des raisons de récupération.
ntg
16

Quelle est la raison et que fait exactement le répertoire / root?

root a / root comme domicile et lorsque vous passez en root, vous vous retrouverez chez lui. Telle est la nature de sudo -i. sudo -sfait de même mais ne change pas de répertoire. Manuel pour sudo :

-s [command]

L'option -s (shell) exécute le shell spécifié par la variable d'environnement SHELL s'il est défini ou le shell comme spécifié dans la base de données de mots de passe. Si une commande est spécifiée, elle est transmise au shell pour exécution via l'option -c du shell. Si aucune commande n'est spécifiée, un shell interactif est exécuté.

-i [command]

L'option -i (simuler la connexion initiale) exécute le shell spécifié par l'entrée de la base de données de mots de passe de l'utilisateur cible en tant que shell de connexion . Cela signifie que les fichiers de ressources spécifiques à la connexion tels que .profile ou .login seront lus par le shell. Si une commande est spécifiée, elle est transmise au shell pour exécution via l'option -c du shell. Si aucune commande n'est spécifiée, un shell interactif est exécuté. sudo tente de passer au répertoire personnel de cet utilisateur avant d'exécuter le shell.La politique de sécurité doit initialiser l'environnement à un ensemble minimal de variables, semblable à ce qui est présent lorsqu'un utilisateur se connecte. La section Environnement de commande dans le manuel sudoers (5) documente comment l'option -i affecte l'environnement dans lequel une commande est exécuté lorsque la stratégie sudoers est en cours d'utilisation.

L'utilisateur root doit faire partie du système. Lorsque vous placez / home sur une autre partition et que root fait partie de / home, vous rencontrerez de graves problèmes si la partition ne se monte pas. Pour la même raison, nous avons également

/bin
/sbin 

et

/usr/bin
/usr/sbin

Lorsque vous mettez / usr sur une partition et / usr ne monte pas, vous avez toujours un système qui fonctionne.

Rinzwind
la source
2
Comment cela répond-il à la question? Est-ce un commentaire?
Pilot6
2
Le sudo -i ne faisait pas partie de la question quand j'ai répondu ;-)
Rinzwind
2
Avons-nous une Q&A sur sudo -ivs sudo -s?
Pilot6
2
Hmm nous pourrions. Je vais chercher. edit Je n'en ai pas trouvé mais je me souviens en avoir vu un mais c'était sur nos forums hollandais d'ubuntu: D
Rinzwind
2
Il semble que j'en ai vu un ici, mais je n'en ai pas trouvé non plus.
Pilot6
15

Le système de fichiers Linux est structuré de manière spécifique. Les binaires essentiels sont dans/bin/ , les fichiers du chargeur de démarrage sont dedans /boot/, la plupart des fichiers de périphériques sont dedans/dev/ dedans, les points de montage pour les supports amovibles sont /media/dedans, etc ...

Voir https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard .

Certains détails mineurs peuvent différer d'une distribution à l'autre (par exemple /usr/bin/ vs./usr/local/bin/ ), mais en général, presque toutes les distributions Linux suivent la même structure de répertoires.

Pour répondre à ta question:

Les répertoires personnels des utilisateurs sont dans /home/. En principe, Linux est un système d'exploitation multi-utilisateurs. Vous pouvez avoir un seul compte utilisateur sur votre ordinateur portable avec son répertoire personnel /home/<username>/, mais si vous regardez /home/sur un serveur Linux partagé, vous verrez de nombreux répertoires personnels: un pour chaque compte utilisateur. L'idée est que chaque utilisateur du système n'a des autorisations d'écriture que dans son propre répertoire personnel. Si votre nom d'utilisateur est, bobvous pouvez lire et écrire et supprimer des fichiers /home/bob/mais vous ne pouvez rien toucher dans/home/alice/ ou dans /var/log/.

rootest différent cependant. rootest l'utilisateur administratif et dispose de privilèges d'écriture partout sur le système (et peut agir comme n'importe quel utilisateur du système). Il est donc logique que roota le répertoire spécial /root/car rootn'est pas un utilisateur régulier. En dehors de cela, il /root/s'agit simplement d'un répertoire ordinaire sans magie particulière, bien qu'il soit possible (même probable) que les utilitaires système reposent sur /root/le domicile de l'utilisateur root.

Lorsque vous exécutez sudo -idans un terminal, vous passez d'être par exemple l'utilisateur régulier bobà l'être root. Notez que ce commutateur affecte uniquement la fenêtre du terminal où vous avez tapé sudo -i. Pour votre gestionnaire de fichiers, vous êtes toujours bobet si vous ouvrez une autre fenêtre de terminal, vous y êtes toujours bob. Dans ce contexte, le symbole ~est un raccourci pour le répertoire personnel de l'utilisateur actuel. Pour des bob ~moyens /home/bob/mais pour des root ~moyens/root/ .

J'espère que cela clarifie les choses pour vous.

maria s
la source
3
Ceci est une réponse parfaite!
Pilot6
5
Il est probablement intéressant de noter que le répertoire personnel de Root était à l'origine /. L'emplacement standard a été changé pour des raisons de sécurité (tout le monde doit pouvoir répertorier les fichiers /, afin que tout le monde puisse voir quels fichiers dot l'utilisateur root avait.
Austin Hemmelgarn
14

Je vois que tout le monde répond à ce qui se passe lorsque vous vous connectez en tant que root (vous obtenez un répertoire ~ qui n'est pas dans / home) mais personne ne dit pourquoi. Voici pourquoi:

Si toute la structure / home devient inutilisable et que vous devez la réparer, ou si vous devez réaffecter / home parce qu'elle manque d'espace, vous devez le faire d'une manière ou d'une autre. Vous ne pouvez pas vous connecter en tant qu'utilisateur ayant ~ in / home, car vous vous planteriez dès que vous tentiez de faire quoi que ce soit. L'utilisateur root a donc embauché ~ ailleurs.

Jennifer
la source
3
Essayez-le, et selon les paramètres de distribution et de sécurité en tant qu'utilisateur normal, vous ne vous connecterez pas, ou vous retrouverez avec / en tant que cwd et $ HOME tout simplement inaccessibles. Le fait est que root voudra probablement avoir accès à son répertoire personnel alors que d'autres ne le font pas, par exemple en raison de fichiers ayant des besoins spéciaux. Similaire sur la plupart des fss, vous avez réservé un espace pour root, et les comptes système ont des répertoires personnels à l'extérieur / à la maison
PlasmaHH
2
Les réponses d'Alexf et d'Arp, postées plus tard, disent essentiellement la même chose. Est-ce que personne n'a lu les articles existants avant d'ajouter sa propre réponse?
Jennifer
@Dan - J'ai annulé vos modifications. À savoir:
Jennifer
(1) Je suppose que c'est une amélioration de mettre / home et ~ dans les cases à cocher, mais ce n'est pas si important que ça, car tout le monde sait de quoi je parle de toute façon. Tu savais ce que je voulais dire. (2) «vous vous planteriez dès que vous essayez» est incohérent au temps. "vous feriez" est "vous feriez" et "feriez" est au passé, donc il doit aller avec "essayé" qui est passé plutôt que "essayer" qui est présent. (3) "hir" est un nouveau pronom inventé par Kate Bornstein; il couvre "lui" et "elle" et est utile lorsque vous ne connaissez pas le sexe. ("Ze" couvre "il" et "elle".)
Jennifer
@Jennifer Pas de soucis. Vous apprenez quelque chose de nouveau chaque jour. Je pensais que hirc'était une faute de frappe. Merci pour toutes ces informations! Je recommande de garder le formatage du code difficile, mais c'est à vous.
Dan
8

Vous dites que vous n'êtes pas un utilisateur avancé, je vais donc essayer d'écrire une réponse étape par étape.

Lorsque vous utilisez Linux, vous devez vous souvenir de certaines choses importantes:

  • Linux est un système multi-utilisateurs. Il a été conçu comme ça depuis le début, suivant la philosophie Unix (notez l'approche différente adoptée par Windows, qui a été conçu comme un système mono-utilisateur)

  • En tant que système multi-utilisateurs, Linux a la possibilité de séparer les fichiers appartenant à chaque utilisateur du système. Linux y parvient en attribuant à chaque utilisateur un sous-dossier dans le /home/répertoire. Chaque fichier utilisateur lui appartient et seul (s) il peut les ouvrir, les modifier ou permettre à d'autres utilisateurs de les utiliser. Inversement, chaque fichier du système de fichiers appartient à un utilisateur et cet utilisateur a le pouvoir de voir ou d'utiliser ce fichier. Comme mentionné dans une autre réponse, à l'origine, les utilisateurs pouvaient placer leurs fichiers n'importe où dans le système, mais à un moment donné, il est devenu évident que les choses devraient être mieux organisées et /home/("slash-home") est devenu l'endroit où les fichiers des utilisateurs devraient être.

  • Il existe cependant des fichiers dont le système lui-même et / ou chaque utilisateur du système a besoin: binaires, fichiers de périphérique, fichiers système, etc. (rappelez-vous: sous Linux et dans tout autre système de type Unix, tout est un fichier) . Ces fichiers nécessaires à l' échelle mondiale sont stockés dans différents endroits le long du système de fichiers, organisés dans différents dossiers dans la racine du système de fichiers : /. De plus, ces fichiers nécessaires à l'échelle mondiale n'appartiennent pas à un utilisateur particulier du système, mais au système lui-même ... mais cela peut être déroutant: à qui appartiennent les binaires? Qui accorde des autorisations sur ces fichiers nécessaires à l'échelle mondiale?

  • Étant donné que chaque fichier du système "a besoin d'un propriétaire", il doit y avoir un "utilisateur spécial" qui peut administrer les fichiers nécessaires à l'échelle mondiale. De plus, cet "utilisateur spécial" peut faire des choses qu'aucun autre utilisateur du système ne peut faire: il peut créer d'autres utilisateurs pour le système. Cet utilisateur est appelé "super utilisateur" (pour nous les mortels) ou "root" (pour le système).

  • Maintenant, ce superutilisateur est un autre utilisateur du système, mais a des pouvoirs (et des responsabilités) bien supérieurs à ceux des autres utilisateurs: la maintenance, par exemple. Il est donc naturel de penser que "root" a besoin d'un endroit pour y mettre ses trucs, mais il ne faut pas le confondre avec les trucs des autres utilisateurs. Ainsi, au lieu d'avoir un sous-dossier ci-dessous /home/, "root" a son propre espace réservé dans le système de fichiers: /root/(appelé "slash-root"). Rappelez-vous: "root" est un utilisateur très spécial, il a donc besoin d'un endroit spécial et privilégié pour y mettre ses trucs.

  • Maintenant, Ubuntu n'a pas de compte root activé par défaut, donc un utilisateur "normal" doit avoir l'autorité sur le système dans son ensemble. C'est là que la commande sudo("changer d'utilisateur et faire") intervient: elle permet à un utilisateur normal (précédemment inclus dans la liste des "sudoers") d'exécuter des commandes comme s'il était un autre utilisateur, par exemple "root".

  • Enfin, ces -ioptions signifient «simuler la connexion initiale». Cela signifie que sudova lire les données du "profil de l'utilisateur cible" avant d'exécuter la commande donnée. Si vous ne fournissez pas de commande, alors sudova démarrer une instance de shell avec le profil (racine) de l'utilisateur cible ... et cela commence par le déplacement vers le dossier "home" de "l'utilisateur cible". Alors sudo -ivous incitera à faire le dossier home de root ( /root/).

J'espère que cela vous aide à comprendre ce qui se passe sudo -i.


MODIFIER

Je pense que j'ai laissé des choses non clarifiées, je vais donc les ajouter ici:

  • J'ai dit plus haut: "sous Linux, tout est un fichier". Et je le pense, littéralement! Vos documents et images sont des fichiers, mais aussi des terminaux (ceux auxquels vous pouvez accéder en appuyant sur [CTRL] + [ALT] + [Fn]), et les disques physiques, et votre clavier, par exemple. Un système de type Unix fonctionne en lisant ou en écrivant des données depuis / vers des fichiers et en dirigeant le flux de données vers / depuis les fichiers appropriés du système, qui représentent le fichier avec lequel vous travaillez et l'entrée des clés que vous tapez, et la sortie que vous voyez à l'écran. Certains de ces fichiers peuvent être utilisés directement par les utilisateurs, mais d'autres non; par exemple, vous ne pouvez pas lire ou écrire directement sur un disque dur, mais vous devez laisser Linux lier un dossier normal et navigable au fichier de périphérique (sous /dev/) représentant votre disque dur.

  • Un système de fichiers Linux peut s'étendre sur plusieurs disques physiques . Un exemple simple est lorsque vous branchez une clé USB: Linux peut monter ce lecteur (le montage est le processus par lequel le système connecte un dossier standard, où vous pouvez voir des fichiers dans un shell ou un navigateur de fichiers, vers un fichier de périphérique dans /dev/) et vous pouvez travailler avec, et lorsque vous avez terminé, vous demandez à Linux de démonter le lecteur puis de le retirer du port USB. L'important ici est que ce cycle de "montage - démontage" affecte * le même système de fichiers "que vous utilisez tous les jours: vous ne créez pas de nouveau système de fichiers chaque fois que vous ajoutez ou supprimez un lecteur physique, mais vous ajoutez ce lecteur physique au système de fichiers ( encore une fois, comparer cette philosophie avec l'approche de Wndows).

  • Étant donné que le système de fichiers peut s'étendre sur plusieurs disques physiques, il devient évident que différents fichiers du système peuvent être écrits sur différents disques physiques. Un lecteur peut stocker les fichiers binaires du système ( /bin/) et un autre peut stocker les fichiers de l'utilisateur ( /home/et ses descendants). Dans une configuration à plusieurs lecteurs, il est courant d'avoir /home/écrit sur un lecteur physique différent de celui /root/, donc, si le système tombe en panne et que les utilisateurs ne peuvent pas se connecter parce que le lecteur où /home/cesse de fonctionner, root le peut. (C'est simpliste ... beaucoup de choses doivent être copiées dans chaque lecteur physique pour permettre à root de se connecter si aucun autre utilisateur ne le peut, mais cela peut vous donner une idée générale).

  • Et ce caractère tilde ( ~) ... il désigne le répertoire personnel de l' utilisateur actuel . Si vous êtes connecté en tant que "bob", vous serez redirigé cd ~vers /home/bob/, mais si vous êtes connecté en tant que "root", cd ~vous serez redirigé vers/root/

tl; dr Alors maintenant, je pense que tout est dit:

  • "root" est un utilisateur spécial, avec des pouvoirs et des responsabilités bien supérieurs aux autres utilisateurs

  • "/ root /" est l'endroit où "root" peut stocker ses fichiers, sans risquer de les confondre avec d'autres contenus appartenant à des utilisateurs normaux. Ce dossier peut être écrit sur un lecteur physique différent de celui /home/.

  • sudo -idémarre un shell simulant la connexion de root, ce qui implique de passer au dossier de base de root. Comme avec tout autre utilisateur, vous cd ~amènera à votre répertoire personnel, mais, si vous êtes root, il sera/root/

  • Si le système est installé sur différents lecteurs physiques, root peut se connecter et essayer de résoudre les problèmes même si un autre lecteur du système tombe en panne.

Barranka
la source
1
Réponse parfaite!
Arch
7

La raison principale pour laquelle le répertoire personnel de root doit être traité différemment:

Lorsque les choses tournent mal, vous devez pouvoir effectuer des tâches de récupération du système dès que vous parvenez à monter le système de fichiers /.

Selon votre configuration, les répertoires personnels des utilisateurs peuvent se trouver sur un système de fichiers différent ou même être montés sur le réseau.

Pour vous connecter en tant que root (c'est-à-dire entrer le nom root et le mot de passe root à une invite de connexion) à partir de la console, vous n'avez besoin que du seul système de fichiers monté.

(C'est aussi pourquoi les utilitaires principaux sont dans / bin et / sbin au lieu de / usr / bin ou / usr / sbin - tout dans / usr est extensible.)

arp
la source