¿Alguna vez te preguntaste por que escribís siempre «sudo su -«, que quiere decir cada parte del comando y por que se concatenan en ese orden?
Como seguramente sabrás –y si no lo sabías, bienvenido al club de los que si lo saben-, cada vez que un usuario inicia sesión en la consola, se ejecuta el comando login, que toma la configuración y el comportamiento por defecto de lo que hubieras especificado en el archivo /etc/login.defs, ejecuta a continuación todo el contenido de /etc/bash.bashrc y por último el contenido de ~/.bashrc y ~/.bash_profile
Nota al margen o micro tip anidado: Decir «~» es equivalente a decir /home/<aquí tu numbre de usuario> así que si estás en la consola como tal o cual usuario y necesitás volver a tu home, todo lo que tenés que hacer ejecutar:
cd ~
O mejor, MUCHO mejor:
cd
Volviendo al tema que nos ocupa, cuando necesitás definir por ejemplo, un alias en bash de manera global, lo hacés editando /etc/bash.bashrc y cuando querés que ese alias solo sea válido para tal o cual usuario, lo hacés editando el archivo .bashrc que está en el directorio home del mismo (y que me faltó aclarar, no necesariamente tiene que ser /home si no que puede ser cualquier otro path arbitrario. Para mas info vean el archivo login.defs o /etc/passwd).
Supongamos que como yo venís de Gentoo y caiste en un Debian, la fuerza de la costumbre hizo que te de por las pelotas tener que escribir todas las veces un comando tan largo como «apt-cache search» para buscar un paquete dentro del repositorio, que querés un comando mas corto y para no errarle, querés que sea igual que en Gentoo, querés buscar con el comando «eix».
En ese caso, basta con agregar a tu .bashrc ya sea local o globalmente un alias que diga:
alias eix=’apt-cache search’
Para que el alias entre en vigencia inmeditamente sin tener que cerrar la sesión, podés simplemente recargar el .bashrc:
source ~/.bashrc
O mejor, MUCHO mejor:
. ~/.bashrc
También podés tirar del comando login para iniciar una sesión dentro de la sesión actual:
login -f <aquí tu numbre de usuario>
O bien usar el comando «su»:
su – <aquí tu numbre de usuario>
El guión después del comando «su» es el que hace que se recarguen todos los archivos que hacen al perfil del usuario que está iniciando sesión y se reseteen todos los paths y alias en consecuencia. Cuando a «su» no se le especifica un nombre de usuario, interpreta por defecto que se hace referencia a root, al SuperUsuario.
Por todo lo anterior es que siempre usás «sudo su -«, que para el caso es lo mismo que ejecutar:
su – root
Y que como ves, no es lo mismo que ejecutar «sudo su» sin guión.
En realidad, es muy distinto ejecutar ‘sudo su -‘ que ejecutar ‘su -‘ o ‘su – root’, etc.
Para uno poder ejecutar ‘sudo’, tiene que estar previamente definido en el archivo de sudoers, y usa su propia contraseña de login (la del usuario que lo invoca). En cambio ‘su’, a menos que se niegue su ejecución, puede ser llamado por cualquier usuario, pero siempre debe ingresar la contraseña de root.
Por ejemplo en Ubuntu, por defecto, es imposible ejecutar ‘su’ por sí sólo, ya que la cuenta de root no tiene contraseña. El equivalente de hacer ‘su -‘ en este caso, si es que no me equivoco, sería ‘sudo -i’.
Cierto, me olvido de Ubuntu y debería haberlo incluído, por ser el mejor de todos los Linux, lejos.
Ni idea como es en Ubuntu así que tu explicación viene mas que bien al post. En todos los Linux que usé alguna vez y que todavía uso, sudo necesita la contraseña de root para escalar privilegios y no sé como se las ingenian en Ubuntu para autenticar con el login de usuario estándar. Lo que te dejen ejecutar o no el comando «su» tiene que ver con el grupo al que pertenezca tu usuario. Tengo entendido que es arbitrario y en Gentoo por ejemplo para poder hacer «su» tenés que pertenecer al grupo «wheel» (Esto seguro es cuestión de la configuración de «su» exclusivamente).
Gracias por la aclaración y por recordarme que no debería usar Ubuntu si no quuiero romper la pantalla de un cabezazo 😀
¡Saludos!
Mirá, yo no sólo uso Ubuntu, sino también Debian y Arch, y en TODAS ocurre que ‘sudo’ funciona igual que como te comenté:
Agregas a los usuarios (o grupos, es a gusto) al archivo de sudoers, y éstos, al menos por defecto, tienen derecho a elevar sus privilegios usando su propia contraseña de usuario UNIX.
El único ejecutable que te pide la contraseña de root es ‘su’.
Capaz que en Gentoo es al revés que en todos los demás jaja 😀
Ah, mirá vos. Tengo un Debian (mi primer Debian tengo que aclarar y no será el último, creo que me enamoré) en una de las PC de mi casa hará cosa de un año ya pero como no uso sudo, ni se me ocurrió probar.
El raro debe ser Gentoo nomás.
¡Saludos!
EDITO:
Esto lo escribí el 11 de Febrero de 2011 así que si, llevo poquito mas de un año con ese Debian instalado y no me ha traído mas que satisfacciones:
http://www.malditonerd.com/debian-6-no-se-la-come-despues-de-todo/