
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 -s
en 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
-c
que 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, elpwd
comando se evalúa antes de ejecutarlosu
, 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 elpwd
comando en el nuevo shell, por lo que se evaluaría comocd /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:
- Por el contrario,
-c "cd `pwd`; bash"
que significa "ejecutarbash
(nuevo shell) después de ejecutar elcd
comando. 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 - devuser
en el servidor de desarrollo, así que esto es lo que se me ocurrió:
- 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
- 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 --