Permanezca en el mismo directorio de trabajo cuando cambie a sudo

Permanezca en el mismo directorio de trabajo cuando cambie a sudo

Cuando trabajo en la línea de comando, a menudo cambio a sudo usando sudo -i. Sin embargo, mi directorio de trabajo cambia automáticamente a /root. No quiero ir nunca allí; ¡Quiero quedarme donde estaba! ¿Cómo puedo conseguir esto?

Respuesta1

Podría usarlo sudo -sen su lugar, no cambiaría su directorio actual a /root, aunque algunas de sus variables de entorno no serían las de raíz.

Estepáginade los foros de Ubuntu tiene un buen resumen:

Summary of the differences found   
                                               corrupted by user's 
                HOME=/root      uses root's PATH     env vars
sudo -i         Y               Y[2]                 N
sudo -s         N               Y[2]                 Y
sudo bash       N               Y[2]                 Y
sudo su         Y               N[1]                 Y

Esta página de la documentación de Ubuntu tiene mucho más.información general sobre sudo.

Respuesta2

Si desea utilizar su, hay una manera de permanecer en el mismo directorio.

su -usuario-c "cd `contraseña`; bash"

Que está pasando aqui:

  • su - user= iniciar sesión comouser
  • -cque significa "ejecutar un comando en el shell del nuevo usuario"
  • -c "cd `pwd`"el comando que damos es cambiar al directorio actual ( `pwd`), pero debido a que usamos comillas dobles, el pwdcomando se evalúa antes de ejecutarlo su, de modo que en realidad cambiamos al directorio en el que estamos AHORA como el anterior. usuario.

    • Por el contrario, -c 'cd `pwd`'ejecutaría el pwdcomando en el nuevo shell, por lo que se evaluaría como cd /root, lo que, por supuesto, no logrará nada.

    El único problema aquí es que el nuevo shell sale justo después de ejecutar el comando, entonces agregamos:

  • -c "cd `pwd`; bash"que significa "ejecutar bash(nuevo shell) después de ejecutar el cdcomando. El shell bash no sale hasta que cerramos la sesión.

Tenga en cuenta que puede reemplazar `pwd`con $(pwd). Son funcionalmente iguales, pero la abundancia de caracteres parecidos a citas puede resultar difícil de leer.

Respuesta3

Me enfrenté al mismo problema y no puedo ejecutar nada más que sudo su - devuseren el servidor de desarrollo, así que esto es lo que se me ocurrió:

  1. En el perfil .devuser, vuelva a la página de inicio del usuario anterior si lo encuentra:
prev_user_home=$(~/bin/home.sh)
if [ -n $prev_user_home ] ; then
        cd $prev_user_home
fi
  1. Un script para determinar un usuario anterior. El script se coloca en el directorio bin de devuser:
#!/bin/bash
#brings you back home after sudo su

function get_owner {
  pid=$1
  echo $(ps ouid -p $pid h | tr -d ' ')
}

pid=$$
my_uid=$(get_owner $pid)
uid=$my_uid
i=0
while [[ $uid == $my_uid && $i -lt 20 ]] ; do
    pid=$(ps -o ppid= $pid)
    uid=$(get_owner $pid)
    i=$((i+1))
done

user_home=$(getent passwd $uid | cut -d ':' -f '6')
if [[ -d $user_home && $uid != 0 ]] ; then
    echo $user_home
fi

Sube a un árbol de procesos y verifica si el usuario propietario del proceso cambió.

Respuesta4

Si ambos usuarios tienen acceso al directorio de trabajo:

sudo su -- $USER

Tenga en cuenta que si se convierte en un usuario que no tiene acceso al directorio de trabajo, el nuevo usuario no podrá realizar ninguna operación de lectura/escritura en él.

O simplemente ser root en el directorio de trabajo:

sudo su --

información relacionada