Linux: use “su -” pero mantenga el directorio actual

14

Cuando hago su -para llegar a la raíz, mi directorio actual se establece en la página de inicio de la raíz. ¿Hay alguna forma de mantener el directorio actual en el que estaba, al igual que sudo -s? ¿O es la respuesta para usar sudo?

Rory
fuente
55
Tenga en cuenta que no quiero parecer grosero, pero ¿por qué este problema no se resuelve a través de "man su"?
Myrrdyn
1
@Rory por favor lea el comentario de
Myrrdyn
Me gusta usar sudo su -c "zsh", en mi caso, me mantiene en el directorio actual y cargar zsh como shell con el usuario root. ctrl+ddespués y vuelve al usuario actual. Para el directorio, funciona directamente en centos para mí, pero tal vez agregar `&& cd $ (pwd)` dentro del comando pasado podría ser el truco.
GabLeRoux
@Myrrdyn Las documentaciones son geniales cuando sabes lo que estás buscando. Cuando no lo hace, pedirle a los expertos algunos consejos es más rápido y más didáctico.
Romain Vincent

Respuestas:

18

Siempre es mejor usar sudo, si es posible, porque entonces no necesita saber (o dar a alguien) la contraseña de root. Establezca la contraseña de root en algo largo y horrible y luego guárdela en una caja fuerte.

Si desea denegar el acceso a alguien más tarde, simplemente elimine su acceso a sudo, en lugar de tener que enseñar a todos los demás una nueva contraseña de root.

Sin embargo, no necesita usar el parámetro '-' si no lo desea. Obtendrá un shell como root, simplemente no será un shell de inicio de sesión (por lo que no ejecutará el .profile de root).

crb
fuente
1
En mi caso, necesitaba un alias para hacer algo así asuser git reset --hard. Sin embargo, su - <user> -m -c "git reset --hard"y sudo -u <user> git reset --hardahorraría mi entorno y git podría tratar de leer actual git config del usuario. Así que solo quería decir que a veces la solución de user205705 usando su - <user> -c "cd pwd; bash" es mejor.
ReFruity
16

Estoy de acuerdo en que sudo es casi siempre una mejor respuesta, pero para responder la otra parte de la pregunta ...

El '-' en 'su -' indica que desea emular un inicio de sesión de superusuario, en lugar de simplemente ejecutarlo con privilegios de superusuario.

Si usa 'su' simple en lugar de 'su -' permanecerá en el mismo directorio; sin embargo, también se ejecutará en el mismo entorno, por lo que es posible que deba modificar su ruta para acceder a algunos comandos de administrador.

Russell Heilling
fuente
9

Si usa susin el -, debería mantenerlo en su directorio actual. -, -lO --login decirle a su para:

Proporcione un entorno similar al que el usuario esperaría si el usuario hubiera iniciado sesión directamente.

O simplemente use sudo, tiene muchas otras ventajas. O teclas ssh.

freiheit
fuente
6

Definitivamente deberías usar sudo.

su -m
-m (-p): no restablece las variables de entorno (generalmente no se recomienda)

Eso lo mantendrá en la carpeta cuando cambie a root.

Beneficios de usar sudo

Jindrich
fuente
1
No puedo ver cómo esto es diferente de simplemente "su" en sí mismo, aparte de no restablecer el entorno PATH, que es un posible problema de seguridad.
David Pashley
@DavidPashley, por ejemplo, ejecuta el .bashrcusuario externo, no el raíz.
phil294
4

Si realmente quiere usar su, hay una manera de permanecer en el mismo directorio.

su - <user> -c "cd `pwd`; bash"

Que está pasando aqui:

  • su - <user> = iniciar sesión como
  • -c lo que significa "ejecutar un comando en el nuevo shell
  • -c "cd `pwd`" el comando que le damos es cambiar al directorio actual ( pwd), pero debido a que usamos los backticks, el pwdcomando se evalúa antes de ejecutar el sucomando para que realmente cambiemos al directorio en el que estamos AHORA como el usuario anterior. El único problema aquí es que el nuevo shell sale justo después de ejecutar el comando, por lo que agregamos:
  • -c "cd `pwd`; bash" lo que significa "ejecutar bash(nuevo shell) después de ejecutar el cdcomando y el shell bash no se cierra hasta que cerramos la sesión.
will.barley
fuente
1
Esta es en realidad la única respuesta a la pregunta. ¡Buen trabajo!
Cacahuete Frito
En realidad, su - [user] -c "cd $(pwd); bash"podría ser un poco mejor (cambie los backticks a $()).
Cacahuete Frito
3

Usa sudo :). En serio, no necesitas su. 'sudo' es mejor ya que solo lo usa para comandos privilegiados y puede ayudar a evitar errores. También obtienes responsabilidad.

chmeee
fuente
2

Si usa "su", hace un shell interactivo. Esto es lo mismo que "sudo -s". "su -" crea un shell de inicio de sesión, que anulará el entorno. "sudo -i" es el equivalente con sudo. Si está intentando obtener un shell interactivo, siempre debe usar el formulario sudo -i (o su -), o es posible terminar con permisos de archivos extraños en el directorio de inicio de un usuario.

David Pashley
fuente
0

debe modificar la fuente de su para realizar este trabajo. hay una llamada a chdir en un procedimiento de inicialización de variables de entorno. comentar esas declaraciones incluidas esa llamada. y ahora, puede hacer "su -" pero mantiene el directorio actual.


fuente