¿Por qué un usuario con privilegios de root ya no está en ~?

20

Solo por curiosidad, me gustaría saber por qué, cuando inicio sesión como root, ya no estoy en / home / user . ¿Cuál es la razón y qué hace exactamente el directorio / root ?

No soy un usuario avanzado. Responda con palabras simples o proporcione un enlace que proporcione explicaciones claras y simples. Uso Ubuntu 16.04 e inicio sesión como root por sudo -i. Como se explica aquí , sudo -itiene / root como inicio. Quiero saber cuál es la razón; ¿Hay alguna ventaja de estar allí? Y no en ~ como el usuario de sudo -s.

Codito ergo sum
fuente
11
root también es un usuario, por lo que tiene su homedirectorio personal , pero este se llamaroot
damadam
3
Puede usar sudo -sestar en el mismo directorio de usuarios.
Piloto6
3
@ Pilot6 lo siento, agregué eso al mismo tiempo que vi tu comentario: D Espero que no te
importe
2
@Unbesiegbarkeit man sudoresponderá la pregunta. Para ser simple user -ies usar la configuración de usuario root, pero sudo -sla configuración de usuario actual.
Piloto6

Respuestas:

28

No está iniciando sesión como root ejecutando un sudocomando. Estás iniciando un shell con privilegios de root.

Si desea permanecer en el directorio de inicio del usuario actual, puede usarlo en sudo -slugar del sudo -icomando.

cd ~lo llevará al mismo directorio que si no estuviera en un shell con privilegios de root. Literalmente /home/$USER.

Cuando lo usa sudo -i, el sistema actúa como si hubiera iniciado sesión como rootusuario. Debido a esto

cd ~ 

lo lleva al directorio de inicio del usuario raíz que es /root.

/rootdirectorio es un directorio de inicio para el rootusuario.

La principal diferencia es que los archivos de configuración de shell como .bashrcse usan /rooten caso de sudo -i, y de un usuario normal en caso de sudo -s.

Piloto6
fuente
3
¿Qué ventajas tiene tener / root como hogar?
Codito ergo sum
2
Los archivos como .bashrcse usan desde allí en un shell específico. En la mayoría de los casos no hay mucha diferencia.
Pilot6
11
Es posible que @Unbesiegbarkeit / home no se monte bajo ciertas circunstancias, por ejemplo, modo de usuario único, sin acceso a la red, etc., y la raíz aún debe poder iniciar sesión en esas circunstancias.
doneal24
2
@ DougO'Neal Si /homeno está disponible, el problema no existe. Entonces realmente inicias sesión como root.
Pilot6
44
@ Pilot6: Hay diferencias, o debería ser. Por ejemplo, en mis máquinas, configuré el archivo shrc. * Root para que sea visualmente evidente que estoy ejecutando como root, por ejemplo, prompt en un formato diferente y de color rojo. También los alias están configurados para no hacer ciertas cosas que podrían ser dañinas si se hacen como root, & c.
jamesqf
29

La razón por la cual el hogar del rootusuario es /rooty no /home/rootes porque generalmente /homees un punto de montaje en una partición / volumen / disco separado ... (por varias razones, como espacio en disco o remoto, ...)

Si por alguna razón /homefallara el montaje , aún podría conectarse como rooty estar en su /rootdirectorio de inicio para investigar y arreglar cosas

Además, para mantenimiento, configuración inicial, cambio de tamaño, ... estaría conectado como rooty debería poder desmontar / volver a montar/home

alexf
fuente
77
+1, esta debería ser la respuesta aceptada. Puede cambiar el inicio de root para que esté en cualquier lugar, pero dejamos que / root esté en / y no en / home por razones de recuperación.
ntg
16

¿Cuál es la razón y qué hace exactamente el directorio / root?

root tiene / root como su hogar y cuando cambie a root tendrá que terminar en su hogar. Esa es la naturaleza de sudo -i. sudo -shace lo mismo pero no cambia de directorio. Manual para sudo :

-s [command]

La opción -s (shell) ejecuta el shell especificado por la variable de entorno SHELL si está configurado o el shell como se especifica en la base de datos de contraseñas. Si se especifica un comando, se pasa al shell para su ejecución a través de la opción -c del shell. Si no se especifica ningún comando, se ejecuta un shell interactivo.

-i [command]

La opción -i (simular inicio de sesión inicial) ejecuta el shell especificado por la entrada de la base de datos de contraseñas del usuario objetivo como un shell de inicio de sesión . Esto significa que el shell leerá los archivos de recursos específicos de inicio de sesión como .profile o .login. Si se especifica un comando, se pasa al shell para su ejecución a través de la opción -c del shell. Si no se especifica ningún comando, se ejecuta un shell interactivo. sudo intenta cambiar al directorio de inicio de ese usuario antes de ejecutar el shell. La política de seguridad inicializará el entorno a un conjunto mínimo de variables, similar a lo que está presente cuando un usuario inicia sesión. La sección Entorno del comando en el manual de sudoers (5) documenta cómo la opción -i afecta el entorno en el que se encuentra un comando ejecutar cuando la política sudoers está en uso.

El usuario root debe ser parte del sistema. Cuando coloca / home en una partición diferente y la raíz era parte de / home, se encontraría con serios problemas si la partición no se montara. Por la misma razón también tenemos

/bin
/sbin 

y

/usr/bin
/usr/sbin

Cuando coloca / usr en una partición y / usr no se monta, todavía tiene un sistema en funcionamiento.

Rinzwind
fuente
2
¿Cómo responde esto a la pregunta? ¿Es un comentario?
Piloto6
2
El sudo -i no era parte de la pregunta cuando respondí ;-)
Rinzwind
2
¿Tenemos preguntas y respuestas sobre sudo -ivs sudo -s?
Piloto6
2
Hmm podríamos. Haré una búsqueda. editar No encontré uno, pero recordaba haber visto uno, pero eso estaba en nuestros foros holandeses de ubuntu: D
Rinzwind
2
Parece que vi uno aquí, pero tampoco pude encontrarlo.
Piloto6
15

El sistema de archivos de Linux está estructurado de una manera específica. Se encuentran los archivos binarios esenciales /bin/, los archivos del cargador de arranque /boot/, la mayoría de los archivos del dispositivo /dev/, los puntos de montaje para medios extraíbles /media/, etc.

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

Algunos detalles menores pueden diferir de una distribución a otra (por ejemplo, /usr/bin/vs. /usr/local/bin/), pero en general casi todas las distribuciones de Linux siguen la misma estructura de directorios.

Para responder tu pregunta:

Los directorios principales de los usuarios están en /home/. En principio, Linux es un sistema operativo multiusuario. Es posible que solo tenga una cuenta de usuario en su computadora portátil con su directorio de inicio /home/<username>/, pero si busca en /home/un servidor Linux compartido, verá muchos directorios de inicio: uno para cada cuenta de usuario. La idea es que cada usuario del sistema tenga permisos de escritura solo en su propio directorio de inicio. Si su nombre de usuario es bob, puede leer y escribir y eliminar archivos, /home/bob/pero no puede tocar nada dentro /home/alice/o dentro /var/log/.

rootaunque es diferente. rootes el usuario administrativo y tiene privilegios de escritura en todo el sistema (y puede actuar como cualquier usuario del sistema). Por lo tanto, tiene sentido que roottenga el directorio de inicio especial /root/porque rootno es un usuario normal. Aparte de eso, /root/es solo un directorio regular sin magia especial, aunque es silencioso posible (incluso probable) que las utilidades del sistema dependan de /root/ser el hogar del usuario root.

Cuando ejecuta sudo -ien una terminal, cambia de ser, por ejemplo, el usuario normal boba ser root. Tenga en cuenta que este interruptor afecta solo a la ventana de terminal donde escribió sudo -i. Para su administrador de archivos, todavía está boby, si abre otra ventana de terminal, todavía está boballí. En este contexto, el símbolo ~es una abreviatura del directorio de inicio del usuario actual. Por bob ~medios /home/bob/pero por root ~medios /root/.

Espero que eso te aclare las cosas.

de Maria
fuente
3
Esta es una respuesta perfecta!
Piloto6
55
Probablemente vale la pena señalar que el directorio de inicio de Root era originalmente /. La ubicación estándar se modificó por razones de seguridad (todos deben poder enumerar los archivos /para que cualquiera pueda ver qué archivos de puntos tenía el usuario raíz.
Austin Hemmelgarn
14

Veo que todos responden lo que sucede cuando inicias sesión como root (obtienes un directorio ~ que no está en / home) pero nadie dice por qué. Este es el por qué:

Si toda la estructura / home se vuelve inutilizable y tiene que arreglarlo, o si necesita reasignar / home porque se está quedando sin espacio, debe hacerlo de alguna manera. No puede iniciar sesión como cualquier usuario que tenga ~ in / home, porque se bloqueará tan pronto como intente hacer algo. Entonces el usuario root tiene hir ~ en otra parte.

Jennifer
fuente
3
Pruébelo, y dependiendo de la configuración de distribución y seguridad como usuario normal, no iniciará sesión, o terminará con / como cwd y $ HOME simplemente inaccesibles. El punto es que la raíz probablemente querrá tener acceso a su directorio de inicio cuando otros no, por ejemplo, debido a los archivos de necesidades especiales allí. Similar en la mayoría de los fss, tiene espacio reservado para la raíz, y las cuentas del sistema tienen
directorios de
2
Las respuestas de alexf y arp, publicadas más tarde, básicamente dicen lo mismo. ¿Nadie lee las publicaciones existentes antes de agregar su propia respuesta?
Jennifer
@Dan - He revertido tus cambios. A saber:
Jennifer
(1) Supongo que es una mejora poner / home y ~ en las casillas de verificación, pero no es tan importante hacerlo, porque todos saben lo que quiero decir de todos modos. Sabías a lo que me refería. (2) "te estrellarías tan pronto como lo intentes" es inconsistente en tiempo. "would" es "you would" y "would" es tiempo pasado, por lo que tiene que ir con "intenté" que es tiempo pasado en lugar de "try" que es tiempo presente. (3) "hir" es un nuevo pronombre inventado por Kate Bornstein; cubre "él" y "ella" y es útil cuando no se conoce el género. ("Ze" cubre "él" y "ella".)
Jennifer
@ Jennifer No te preocupes. Tu aprendes algo nuevo cada dia. Pensé que hirera un error tipográfico. ¡Gracias por toda la información! Recomiendo mantener el formato de código resistente, pero eso depende de usted.
Dan
8

Dices que no eres un usuario avanzado, así que intentaré escribir una respuesta paso a paso.

Cuando usa Linux, debe recordar algunas cosas importantes:

  • Linux es un sistema multiusuario. Fue concebido así desde el principio, siguiendo la filosofía de Unix (observe el enfoque diferente adoptado por Windows, que fue concebido como un sistema de usuario único)

  • Como sistema multiusuario, Linux tiene la capacidad de separar los archivos que pertenecen a cada usuario en el sistema. La forma en que Linux logra esto es asignando a cada usuario una subcarpeta dentro del /home/directorio. Los archivos de cada usuario son de su propiedad, y solo él (s) puede abrirlos, modificarlos o permitir que otros usuarios los usen. Por el contrario, cada archivo en el sistema de archivos pertenece a un usuario, y ese usuario tiene poder sobre quién puede ver o usar ese archivo. Como se mencionó en otra respuesta, originalmente los usuarios podían colocar sus archivos en cualquier parte del sistema, pero en algún momento se hizo evidente que las cosas deberían estar mejor organizadas, y /home/("slash-home") se convirtió en el lugar donde deberían estar los archivos del usuario.

  • Sin embargo, hay archivos que el sistema mismo y / o todos los usuarios del sistema necesitan: archivos binarios, archivos de dispositivo, archivos de sistema, etc. (recuerde: en Linux y en cualquier otro sistema similar a Unix, todo es un archivo) . Estos archivos necesarios a nivel mundial se almacenan en varios lugares a lo largo del sistema de ficheros, organizados en varias carpetas dentro de la raíz del sistema de archivos : /. Además, estos archivos necesarios a nivel mundial no pertenecen a un usuario particular del sistema, sino al sistema mismo ... pero eso puede ser confuso: ¿quién es el propietario de los archivos binarios? ¿Quién otorga permisos sobre estos archivos necesarios a nivel mundial?

  • Dado que cada archivo en el sistema "necesita un propietario", debe haber un "usuario especial" que pueda administrar los archivos necesarios a nivel mundial. Además, este "usuario especial" puede hacer cosas que ningún otro usuario en el sistema puede hacer: puede crear otros usuarios para el sistema. Este usuario se llama "superusuario" (para nosotros los mortales) o "raíz" (para el sistema).

  • Ahora, este superusuario es otro usuario del sistema, pero tiene poderes (y responsabilidades) muy superiores a los de otros usuarios: mantenimiento, por ejemplo. Por lo tanto, es natural pensar que "root" necesita un lugar para colocar sus cosas, pero no debe confundirse con las cosas que pertenecen a los otros usuarios. Entonces, en lugar de tener una subcarpeta a continuación /home/, "root" tiene su propio espacio reservado en el sistema de archivos: /root/(llamado "slash-root"). Recuerde: "root" es un usuario muy especial, por lo que necesita un lugar especial y privilegiado para colocar sus cosas.

  • Ahora, Ubuntu no tiene una cuenta raíz habilitada de forma predeterminada, por lo que un usuario "normal" debe tener la autoridad sobre el sistema en su conjunto. Ahí es donde sudoentra en juego el comando ("cambiar de usuario y hacer"): permite que un usuario normal (incluido previamente en la lista de "sudoers") ejecute comandos como si fuera otro usuario, por ejemplo, "root".

  • Finalmente, esas -iopciones significan "simular inicio de sesión inicial". Eso significa que sudoleerá los datos del "perfil del usuario objetivo" antes de ejecutar el comando dado. Si no proporciona un comando, sudoiniciará una instancia de shell con el perfil del usuario objetivo (raíz) ... y eso comenzará con el traslado a la carpeta "inicio" del "usuario objetivo". Entonces sudo -ilo moverá a hacer la carpeta de inicio de la raíz ( /root/).

Espero que esto te ayude a entender con qué sucede sudo -i.


EDITAR

Creo que dejé algunas cosas sin aclarar, así que las agregaré aquí:

  • Dije arriba: "en Linux, todo es un archivo". ¡Y lo digo en serio, literalmente! Sus documentos e imágenes son archivos, pero también terminales (a los que puede acceder presionando [CTRL] + [ALT] + [Fn]), unidades físicas y su teclado, por ejemplo. Un sistema similar a Unix funciona leyendo o escribiendo datos desde / hacia los archivos, y dirigiendo el flujo de datos hacia / desde los archivos apropiados en el sistema, que representan el archivo con el que está trabajando y la entrada de teclas que está escribiendo, y la salida que estás viendo en la pantalla. Algunos de estos archivos pueden ser utilizados directamente por los usuarios, pero otros no; por ejemplo, no puede leer o escribir directamente en un disco duro, pero debe permitir que Linux vincule una carpeta normal y navegable al archivo del dispositivo (debajo /dev/) que representa su disco duro.

  • Un sistema de archivos Linux puede abarcar múltiples unidades físicas . Un ejemplo simple es cuando conecta una memoria USB: Linux puede montar esa unidad (el montaje es el proceso mediante el cual el sistema conecta una carpeta estándar, donde puede ver archivos en un shell o navegador de archivos, a un archivo de dispositivo /dev/) y puede trabajar con él, y cuando haya terminado, le pide a Linux que desmonte la unidad y luego la retire del puerto USB. Lo importante aquí es que este ciclo de "montar - desmontar" afecta * al mismo sistema de archivos "que usa todos los días: no crea un nuevo sistema de archivos cada vez que agrega o quita una unidad física, pero agrega esa unidad física al sistema de archivos ( nuevamente, compare esta filosofía con el enfoque de Wndows).

  • Dado que el sistema de archivos puede abarcar múltiples unidades físicas, se hace evidente que se pueden escribir diferentes archivos del sistema en diferentes unidades físicas. Una unidad puede almacenar los archivos binarios del sistema ( /bin/) y otra puede almacenar los archivos del usuario ( /home/y sus descendientes). En una configuración de unidades múltiples, es común que haya /home/escrito en una unidad física diferente a /root/, por lo tanto, si el sistema se rompe y los usuarios no pueden iniciar sesión porque la unidad donde /home/deja de funcionar, la raíz puede. (Esto es simplista ... muchas cosas necesitan ser copiadas en cada unidad física para permitir que root inicie sesión si ningún otro usuario puede hacerlo, pero esto puede darle una idea general).

  • Y ese carácter tilde ( ~) ... denota el directorio de inicio del usuario actual . Si ha iniciado sesión como "bob", cd ~lo llevará a /home/bob/, pero si ha iniciado sesión como "root", cd ~lo llevará a/root/

tl; dr Así que ahora creo que todo está dicho:

  • "root" es un usuario especial, con poderes y responsabilidades muy superiores a otros usuarios

  • "/ root /" es el lugar donde "root" puede almacenar sus cosas, sin correr el riesgo de que se confunda con otras cosas que pertenecen a usuarios normales. Esta carpeta se puede escribir en un disco físico diferente que /home/.

  • sudo -iinicia un shell que simula el inicio de sesión de root, y eso implica pasar a la carpeta de inicio de root. Como con cualquier otro usuario, cd ~lo llevará a su directorio de inicio, pero si es root, será/root/

  • Si el sistema está instalado en diferentes unidades físicas, el usuario root puede iniciar sesión e intentar arreglar las cosas incluso si falla otra unidad del sistema.

Barranka
fuente
1
Respuesta perfecta !
Arco
7

La razón principal para que el directorio de inicio de root sea tratado de manera diferente:

Cuando las cosas salen mal, debe poder realizar tareas de recuperación del sistema tan pronto como logre montar el sistema de archivos /.

Dependiendo de su configuración, los directorios de inicio del usuario pueden estar en un sistema de archivos diferente o incluso pueden estar montados en la red.

Para iniciar sesión como root (es decir, ingrese el nombre root y la contraseña de root en el indicador de inicio de sesión) desde la consola, solo necesita un sistema de archivos montado.

(Esta es también la razón por la cual las utilidades principales están en / bin y / sbin en lugar de / usr / bin o / usr / sbin; todo en / usr es prescindible).

arp
fuente