Por que um usuário com privilégios de root não está mais no ~?

20

Por curiosidade, gostaria de saber por que, ao fazer login como root, não estou mais em / home / user . Qual o motivo e o que o diretório / root faz exatamente?

Eu não sou um usuário avançado. Responda com palavras simples ou forneça um link que fornece explicações simples e claras. Eu uso o Ubuntu 16.04 e faço login como root por sudo -i. Como é explicado aqui , sudo -ipossui / root como lar. Eu quero saber qual é o motivo; existe alguma vantagem em estar lá? E não em ~ como o usuário sudo -s.

Codito ergo sum
fonte
11
raiz é também um usuário, então ele tem o seu pessoal homediretório, mas este é nomeadoroot
damadam
3
Você pode usar sudo -spara estar no mesmo diretório de usuário.
precisa saber é o seguinte
3
@ Pilot6 desculpe, eu acrescentou que, ao mesmo tempo em que eu vi o seu comentário: D Espero que você não se importa :)
Rinzwind
2
@Unbesiegbarkeit man sudoresponderá à pergunta. Ser simples user -ié usar as configurações do usuário raiz, mas sudo -sas configurações atuais do usuário.
precisa saber é o seguinte

Respostas:

28

Você não está registrando como root executando um sudocomando. Você está iniciando um shell com privilégios de root.

Se você deseja permanecer no diretório inicial do usuário atual, pode usar em sudo -svez do sudo -icomando.

cd ~o levará ao mesmo diretório como se você não estivesse em um shell com privilégios de root. Literalmente /home/$USER.

Quando você usa sudo -i, o sistema age como se você estivesse logado como rootusuário. Por causa disso

cd ~ 

leva você ao diretório inicial do usuário raiz /root.

/rootO diretório é um diretório inicial para o rootusuário.

A principal diferença é que arquivos de configurações do shell como .bashrcsão usados /rootno caso de sudo -ie de um usuário normal no caso de sudo -s.

Pilot6
fonte
3
Quais são as vantagens de ter / root em casa?
Codito ergo sum
2
Arquivos como .bashrcsão usados ​​a partir daí em um shell específico. Na maioria dos casos, não há muita diferença.
precisa saber é o seguinte
11
O @Unbesiegbarkeit / home pode não ser montado em determinadas circunstâncias, por exemplo, modo de usuário único, sem acesso à rede, etc., e o root ainda precisa fazer logon nessas circunstâncias.
doneal24
2
@ DougO'Neal Se /homenão estiver disponível, o problema não existe. Então você efetua login como root.
precisa saber é o seguinte
4
@ Pilot6: Existem diferenças, ou deveriam existir. Por exemplo, nas minhas máquinas, configurei o arquivo. * Shrc do root para tornar visualmente evidente que estou executando como root - por exemplo, prompt em um formato diferente e colorido em vermelho. Também são criados aliases para não fazer certas coisas que podem ser prejudiciais se feitas como raiz, etc.
jamesqf
29

A razão pela qual a casa do rootusuário é /roote não /home/rooté porque geralmente /homeé um ponto de montagem para uma partição / volume / disco separados ... (por vários motivos, como espaço em disco ou controle remoto, ...)

Se, por algum motivo, a montagem /homefalhar, você ainda poderá se conectar roote estar no /rootdiretório inicial para investigar e corrigir as coisas

Além disso, para manutenção, configuração inicial, redimensionamento, ... você estaria conectado roote poderá desmontar / remontar/home

alexf
fonte
7
+1, esta deve ser a resposta aceita. Você pode alterar o início do root para qualquer lugar, mas deixamos o / root para estar / e não em / home por motivos de recuperação.
ntg 11/06/18
16

Qual o motivo e o que o diretório / root faz exatamente?

root tem / root como sua casa e quando você muda para root, você acaba em sua casa. Essa é a natureza de sudo -i. sudo -sfaz o mesmo, mas não alterna diretórios. Manual para sudo :

-s [command]

A opção -s (shell) executa o shell especificado pela variável de ambiente SHELL se estiver definido ou o shell conforme especificado no banco de dados de senhas. Se um comando for especificado, ele será passado para o shell para execução através da opção -c do shell. Se nenhum comando for especificado, um shell interativo será executado.

-i [command]

A opção -i (simular login inicial) executa o shell especificado pela entrada do banco de dados de senha do usuário de destino como um shell de login . Isso significa que os arquivos de recursos específicos de login, como .profile ou .login, serão lidos pelo shell. Se um comando for especificado, ele será passado para o shell para execução através da opção -c do shell. Se nenhum comando for especificado, um shell interativo será executado. O sudo tenta mudar para o diretório inicial desse usuário antes de executar o shell. A política de segurança deve inicializar o ambiente com um conjunto mínimo de variáveis, semelhante ao que está presente quando um usuário efetua login. A seção Ambiente de Comando no manual sudoers (5) documenta como a opção -i afeta o ambiente em que um comando está executar quando a política de sudoers estiver em uso.

O usuário root precisa fazer parte do sistema. Quando você coloca o / home em uma partição diferente e o root faz parte do / home, você enfrenta sérios problemas se a partição não for montada. Pela mesma razão, também temos

/bin
/sbin 

e

/usr/bin
/usr/sbin

Quando você coloca / usr em uma partição e / usr não monta, você ainda tem um sistema em funcionamento.

Rinzwind
fonte
2
Como isso responde à pergunta? É um comentário?
precisa saber é o seguinte
2
O sudo -i não era parte da questão, quando eu respondi ;-)
Rinzwind
2
Temos perguntas e respostas sobre sudo -ivs sudo -s?
precisa saber é o seguinte
2
Hummm nós podemos. Eu vou fazer uma pesquisa. editar eu não encontrar um mas eu lembro de ter visto um, mas que estava em nossos fóruns ubuntu holandês: D
Rinzwind
2
Parece que eu vi um aqui, mas também não consegui encontrar.
precisa saber é o seguinte
15

O sistema de arquivos Linux está estruturado de uma maneira específica. Os binários essenciais estão /bin/, os arquivos do carregador de inicialização estão /boot/, a maioria dos arquivos do dispositivo /dev/, os pontos de montagem para mídia removível /media/, etc ...

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

Alguns detalhes menores podem diferir de distribuição para distribuição (por exemplo, /usr/bin/vs. /usr/local/bin/), mas em geral quase todas as distribuições Linux seguem a mesma estrutura de diretórios.

Para responder sua pergunta:

Os diretórios pessoais dos usuários estão /home/. Em princípio, o Linux é um sistema operacional multiusuário. Você pode ter apenas uma conta de usuário no laptop com o diretório inicial /home/<username>/, mas se você procurar /home/um servidor Linux compartilhado, verá muitos diretórios pessoais: um para cada conta de usuário. A idéia é que todo usuário do sistema tenha permissões de gravação apenas em seu próprio diretório inicial. Se seu nome de usuário é bobque você pode ler e arquivos de gravação e excluir em /home/bob/mas você não pode tocar em nada /home/alice/ou em /var/log/.

rooté diferente. rooté o usuário administrativo e possui privilégios de gravação em qualquer lugar do sistema (e pode atuar como qualquer usuário do sistema). Portanto, faz sentido que roottenha o diretório inicial especial /root/porque rootnão é um usuário comum. Fora isso, /root/é apenas um diretório comum, sem mágica especial, embora seja silencioso possível (até provável) que os utilitários do sistema confiem em /root/ser o lar do usuário root.

Quando você executa sudo -iem um terminal, passa de um usuário comum bobpara outro root. Observe que essa opção afeta apenas a janela do terminal em que você digitou sudo -i. Para o seu gerenciador de arquivos, você ainda está bobe se abrir outra janela do terminal, ainda estará boblá. Nesse contexto, o símbolo ~é uma abreviação para o diretório inicial do usuário atual. Por bob ~meios, /home/bob/mas por root ~meios /root/.

Espero que isso esclareça as coisas para você.

maria s
fonte
3
Esta é uma resposta perfeita!
precisa saber é o seguinte
5
Provavelmente vale a pena notar que o diretório inicial do Root era originalmente /. A localização padrão tem mudado por razões de segurança (todos tem que ser capaz de arquivos de lista em /, para que qualquer pessoa poderia ver o que dotfiles o usuário root tinha.
Austin Hemmelgarn
14

Vejo que todo mundo está respondendo o que acontece quando você faz logon como root (você recebe um ~ diretório que não está em / home), mas ninguém está dizendo o porquê. Aqui está o porquê:

Se toda a estrutura / home se tornar inutilizável e você precisar corrigi-la, ou se precisar realocar / home porque está ficando sem espaço, é necessário fazê-lo de alguma forma. Você não pode fazer logon como qualquer usuário que tenha ~ in / home, porque você trava assim que tenta fazer alguma coisa. Portanto, o usuário root contratou outro lugar.

Jennifer
fonte
3
Experimente e, dependendo das configurações de distribuição e segurança como usuário normal, você não efetuará login ou terminará com / como cwd e $ HOME inacessíveis. O ponto é que o root provavelmente desejará ter acesso ao diretório inicial quando outros não o fizerem, por exemplo, por causa de arquivos de necessidades especiais lá. Semelhante na maioria FSS você reservou espaço para root e contas do sistema tem dirs casa fora / home
PlasmaHH
2
As respostas de alexf e arp, postadas mais tarde, estão basicamente dizendo a mesma coisa. Ninguém lê as postagens existentes antes de adicionar sua própria resposta?
9308 Jennifer
@ Dan - eu recuperei suas alterações. Ou seja:
Jennifer
(1) Suponho que é uma melhoria colocar / home e ~ em caixas de seleção, mas não é tão importante assim, porque todo mundo sabe o que quero dizer. Você sabia o que eu quis dizer. (2) "você trava assim que tenta" é inconsistente no tempo. "você" é "você faria" e "faria" é o pretérito, portanto, deve ser "tentado", que é pretérito, em vez de "tentar", que é pretérito. (3) "hir" é um novo pronome inventado por Kate Bornstein; abrange "ele" e "ela" e é útil quando você não conhece o gênero. ( "Zé" covers "ele" e "ela".)
Jennifer
@ Jennifer Não se preocupe. Você aprende algo novo a cada dia. Eu pensei que hirera um erro de digitação. Obrigado por todas as informações! Eu recomendo manter a formatação do código difícil, mas isso é com você.
Dan
8

Você diz que não é um usuário avançado, então tentarei escrever uma resposta passo a passo.

Ao usar o Linux, você precisa se lembrar de algumas coisas importantes:

  • Linux é um sistema multiusuário. Foi concebido assim desde o início, seguindo a filosofia do Unix (observe a abordagem diferente adotada pelo Windows, que foi concebida como um sistema de usuário único)

  • Como um sistema multiusuário, o Linux tem a capacidade de separar os arquivos pertencentes a cada usuário no sistema. A maneira como o Linux realiza isso é atribuindo a cada usuário uma subpasta dentro do /home/diretório. Os arquivos de cada usuário pertencem a ele e somente ele pode abri-los, modificá-los ou permitir que outros usuários os usem. Por outro lado, cada arquivo no sistema de arquivos pertence a um usuário e esse usuário tem poder sobre quem pode ver ou usar esse arquivo. Como mencionado em outra resposta, originalmente os usuários podiam colocar seus arquivos em qualquer lugar do sistema, mas em algum momento ficou evidente que as coisas deveriam ser melhor organizadas e /home/("slash-home") se tornou o local onde os arquivos dos usuários deveriam estar.

  • No entanto, existem arquivos que o próprio sistema e / ou cada usuário do sistema precisa: binários, arquivos de dispositivos, arquivos de sistema, etc. (lembre-se: no Linux e em qualquer outro sistema semelhante ao unix, tudo é um arquivo) . Este globalmente necessários os arquivos são armazenados em vários lugares ao longo do sistema de arquivos, organizados em várias pastas dentro da raiz do sistema de arquivos : /. Além disso, esses arquivos necessários globalmente não pertencem a um usuário específico do sistema, mas ao próprio sistema ... mas isso pode ser confuso: quem é o proprietário dos binários? Quem concede permissões sobre esses arquivos globalmente necessários?

  • Como todo arquivo no sistema "precisa de um proprietário", deve haver um "usuário especial" que possa administrar os arquivos necessários globalmente. Além disso, esse "usuário especial" pode fazer coisas que nenhum outro usuário do sistema pode fazer: ele pode criar outros usuários para o sistema. Esse usuário é chamado de "superusuário" (para nós, os mortais) ou "raiz" (para o sistema).

  • Agora, esse superusuário é outro usuário do sistema, mas possui poderes (e responsabilidades) muito acima dos de outros usuários: manutenção, por exemplo. Portanto, é natural pensar que "root" precisa de um lugar para colocar as coisas dele, mas não deve ser confundido com as coisas pertencentes aos outros usuários. Portanto, em vez de ter uma subpasta abaixo /home/, "root" possui seu próprio espaço reservado no sistema de arquivos: /root/(chamado "slash-root"). Lembre-se: "root" é um usuário muito especial, portanto, ele precisa de um lugar especial e privilegiado para colocar suas coisas.

  • Agora, o Ubuntu não possui uma conta root ativada por padrão, portanto, um usuário "normal" precisa ter autoridade sobre o sistema como um todo. É aí que o sudocomando ("alternar usuário e fazer") entra em ação: permite que um usuário normal (anteriormente incluído na lista "sudoers") execute comandos como se fosse outro usuário, por exemplo "root".

  • Finalmente, essas -iopções significam "simular o login inicial". Isso significa que sudolerá os dados do "perfil do usuário de destino" antes de executar o comando fornecido. Se você não fornecer um comando, sudoiniciará uma instância do shell com o perfil (raiz) do usuário de destino ... e isso começará com a mudança para a pasta "home" do "usuário de destino". Então sudo -i, você será movido para a pasta inicial do root ( /root/).

Espero que isso ajude você a entender o que acontece sudo -i.


EDITAR

Acho que deixei algumas coisas não esclarecidas, então vou adicioná-las aqui:

  • Eu disse acima: "no Linux, tudo é um arquivo". E eu falo sério, literalmente! Seus documentos e imagens são arquivos, mas também terminais (aqueles que você pode acessar pressionando [CTRL] + [ALT] + [Fn]), unidades físicas e seu teclado, por exemplo. Um sistema semelhante ao unix funciona lendo ou gravando dados de / para arquivos e direcionando o fluxo de dados para / dos arquivos apropriados no sistema, que representam o arquivo com o qual você está trabalhando e a entrada das teclas que você está digitando, e a saída que você está vendo na tela. Alguns desses arquivos podem ser usados ​​diretamente pelos usuários, mas outros não; por exemplo, você não pode ler ou gravar diretamente em um disco rígido, mas deve permitir que o Linux vincule uma pasta normal e navegável ao arquivo do dispositivo (abaixo /dev/) que representa seu disco rígido.

  • Um sistema de arquivos Linux pode abranger várias unidades físicas . Um exemplo simples é quando você conecta uma unidade de caneta USB: o Linux pode montar essa unidade (montagem é o processo pelo qual o sistema conecta uma pasta padrão, na qual é possível ver arquivos em um shell ou navegador de arquivos, em um arquivo de dispositivo /dev/) e você pode trabalhar com ele e, quando terminar, solicita ao Linux que desmonte a unidade e remova-a da porta USB. O importante aqui é que esse ciclo "montar - desmontar" afeta * o mesmo sistema de arquivos "que você usa todos os dias: você não cria um novo sistema de arquivos toda vez que adiciona ou remove uma unidade física, mas adiciona essa unidade física ao sistema de arquivos ( novamente, compare essa filosofia com a abordagem do Wndows).

  • Como o sistema de arquivos pode abranger várias unidades físicas, torna-se evidente que arquivos diferentes do sistema podem ser gravados em diferentes unidades físicas. Uma unidade pode armazenar os binários do sistema ( /bin/) e outra pode armazenar os arquivos do usuário ( /home/e seus descendentes). Em uma configuração de várias unidades, é comum ter /home/gravado em uma unidade física diferente de /root/, portanto, se o sistema quebrar e os usuários não puderem efetuar login porque a unidade onde /home/para de funcionar, o root pode. (Isso é simplista ... muitas coisas precisam ser copiadas em cada unidade física para permitir que o root efetue login, se nenhum outro usuário puder, mas isso pode lhe dar uma idéia geral).

  • E esse ~caractere til ( ) ... indica o diretório inicial do usuário atual . Se você estiver logado como "bob", cd ~o levará para /home/bob/, mas se você estiver logado como "root", cd ~o levará para/root/

tl; dr Então agora eu acho que tudo foi dito:

  • "root" é um usuário especial, com poderes e responsabilidades muito acima de outros usuários

  • "/ root /" é o local onde o "root" pode armazenar suas coisas, sem o risco de ser confundido com outras coisas pertencentes a usuários normais. Esta pasta pode ser gravada em uma unidade física diferente da /home/.

  • sudo -iinicia um shell simulando o logon do root e isso implica mover para a pasta inicial do root. Como qualquer outro usuário, cd ~o levará ao seu diretório pessoal, mas, se você for root, será/root/

  • Se o sistema estiver instalado em diferentes unidades físicas, o root poderá efetuar login e tentar corrigir as coisas, mesmo que outra unidade no sistema falhe.

Barranka
fonte
11
Resposta perfeita!
Arch
7

O principal motivo para o diretório inicial do root ser tratado de maneira diferente:

Quando algo der errado, você poderá executar tarefas de recuperação do sistema assim que conseguir montar o sistema de arquivos /.

Dependendo da sua configuração, os diretórios pessoais do usuário podem estar em um sistema de arquivos diferente ou podem até ser montados na rede.

Para efetuar login como root (ou seja, digite o nome root e a senha root em um prompt de login) no console, você precisa apenas do sistema de arquivos montado.

(É também por isso que os principais utilitários estão em / bin e / sbin em vez de / usr / bin ou / usr / sbin - tudo em / usr é descartável.)

arp
fonte