¿Cómo se debe usar? su ó su – ?
¿Este signo de menos (-) después del su tiene importancia? Acaso no funcionan igual?
La realidad es que sí hay diferencias y muy apreciables. Yo recomiendo usar siempre su – con el signo de – detrás.
Este signito de menos te importa el perfil del usuario al que estás accediendo (normalmente root).
Es decir, si eres el usuario eperez y ejecutas su (sin el -) entonces serás root pero con el perfil de eperez.
si eres el usuario eperez y ejecutas su – entonces serás enteramente root.
Pero espera: ¿qué es esto del perfil?
Es un archivo que está en dos lugares, en /etc/profile está el perfil general del sistema (que aplica a todos) y en ~/.bash_profile (en el directorio del usuario) está el perfil particular de un usuario que se incorpora después de haberse importado /etc/profile
Qué va dentro de este perfil? Sobre todas las cosas y a lo único que me referiré es que dentro del perfil de un usuario va una variable super importantísima llamada: PATH
PATH es una variable que contiene el camino de búsqueda para cuando ejecutas un comando. Por ejemplo si no existiera el PATH o estuviera en blanco, para listar un archivo deberías ejecutar: /bin/ls (con el camino completo).
Ahora, como tenemos el PATH, podemos ejecutar simplemente “ls” y el sistema buscará en TODO su PATH por el comando ls.. en orden.
Por ejemplo veamos el PATH de mi usuario eperez:
echo $PATH
Bien, mi PATH dice que hay que buscar en todos estos directorios, en ese orden (de izquierda a derecha), primero /usr/lib/qt-3.3/bin, después en /usr/local/bin, etc.. así que cuando ejecuté simplemente “ls” mi sistema seguro lo encontró en el 4to PATH definido (/bin)
Por supuesto si hubiera un comando ls en /usr/local/bin por ejemplo, este hubiera sido el que se hubiera ejecutado, pues siempre se ejecuta uno, el primero que aparezca en el orden en que está el PATH.
Hasta aqui todo ok?
Bien, ahora tenemos aqui la primera razón por la cual debemos usar su – y es que el PATH del usuario root tiene caminos adicionales, mira:
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
no ves nada diferente? pues aparecen /sbin, /usr/sbin y /usr/local/sbin que son directorios donde se encuentran los binarios que solamente root puede ejecutar.
Si pusiera su en vez de su -, entonces persistiría el perfil (el PATH) del usuario eperez, que no tiene los “sbin”.. y por tanto cuando escribas por ejemplo: useradd prueba que es un comando que está en /usr/sbin/useradd el sistema te dará un error diciendo que no existe.. el comando, y esto es porque /usr/sbin no está en el PATH.
Ahora claro, hay dos posibles soluciones:
1- pongo el comando completo: /usr/sbin/useradd sin embargo si tuvieras que ejecutar todos los días decenas de veces comandos dentro de estos directorios, sería muy lento y aburrido, y recuerda que linux es para disfrutarle
2- algunas distribuciones de linux están incluyendo los directorios “sbin” ya en cualquier usuario de forma tal que sea o no root, siempre lo tendrá.
ahhh.. entonces mejor nos cambiamos de distro y ya dirán algunos vivazos que quieren ahorrarse el poner el insignificante signo de –
Ahora veremos la segunda y más importante razón de por qué usar su – con su signo de -:
¿Qué tal si yo altero el PATH como un usuario normal.. adiciono un nuevo camino propio mío delante de todos los PATH y entonces te llamo a tí, sabiendo que usas simplemente su y no su – ?
¿Qué pasará? que como no pones el signo de -, el PATH mío persistirá, entonces yo que soy un malintencionado, haré un programa que pondré en ese camino que se hará pasar por el original y te hará daño.
No lo crees? Mira aqui:
Aqui lo que hice fue prinero crear un archivo llamado “ls” dentro de mi propio directorio /home/eperez, dentro de este archivo simplemente invoco a useradd para agregar un usuario con uid 0,después a chpass para ponerle una clave al usuario, entonces par confundir a mi víctima le invoco al verdadero ls (fíjate que le pongo con el camino completo) y le paso cualquier parámetro que me hayan pasado en mi script falseta.
Entonces le doy derecho de ejecución.
En este instante, chequeo en .bash_profile que en el PATH, de primerito exista el directorio llamado “.”, este directorio es “este”, “donde estoy parado actualmente”.
Salgo y entro de la sesión y valido que ya tenga el directorio . en el PATH.
Bien, ahora viene la parte de ingeniería social, llamo a mi administrador y le hago una historia que le obligará a convertirse con su en root, el pobre sysadmin lo hace con muchas ganas de ayudar, desde mi usuario, pero no usa el -, por lo que el PATH permanecerá el mío!! Bieeeen! entonces cuando escriba “ls” se ejecutará mi ls y terminará creando inconscientemente un usuario con derechos de root.
Claro, esta historia tiene muchas aristas (pude haber simulado el mismo comando su)
Ahora te pido que pruebes toda la demostración anterior pero usando su – ahi si te fijas, se importará el PATH del usuario root y por tanto no permanecerá el PATH modificado del usuario normal. Para evitar que me simulen el su, podrías usar el camino completo: /bin/su
Lo mejor mejor, es no usar el su sino en tu propio usuario y siempre validar que no tengas binarios bajados por error o con intención por tí o por terceros incluso en tu propio directorio. Y sobre todas las cosas: no permitas nunca que te pongas o tengas al directorio . en tu PATH