Por favor, no inicies sesión como administrador, utiliza RunAs

Introducción

Un error muy común a la hora de iniciar sesión en un equipo es el hacerlo con un usuario con privilegios de administrador. La causa suele estar en el deseo de poder controlar con estos privilegios el equipo, para poder así hacer todo lo que queramos, sin limitaciones impuestas por una sesión de un usuario con privilegios limitados. Esto es un enfoque erróneo, desde el punto de vista de seguridad. En este artículo veremos porqué es un error y cómo podemos evitar esta práctica sin por ello dejar de poder realizar nuestro trabajo de administración

 

El error de iniciar sesión como administrador

¿Por qué no iniciar sesión con un usuario administrador? Por motivos de seguridad, seguridad tanto en la precisión de nuestros movimientos como en las posibilidades de sufrir un ataque de código malicioso.

Si tenemos que hacer una tarea que requiera disponer de privilegios administrativos, es mejor que seamos conscientes de que lo que estamos realizando requiere estos privilegios. Esto es, que si intentamos hacer algo con un usuario sin privilegios administrativos la operación nos sea denegada o que, directamente, tomemos las acciones necesarias para poder realizar la acción como administrador; de esta manera sabremos que estamos haciendo algo "serio" y encararemos la tarea de una manera más consciente, más meditada.

Si ejecutamos un adjunto de un correo que contiene un virus (esto que he dicho nunca debería pasar, pero...), el virus intentará hacer "sus cositas", tan simpáticas y bondadosas ellas; digo intentará porque el virus será lanzado con los privilegios del usuario que lo ha ejecutado y, si no nos hemos logado como administradores, el virus no podrá tomar acciones de veras dañinas con el sistema, al carecer de los privilegios necesarios como para, por ejemplo, escribir en el directorio de Windows, o en la rama del registro HKEY_LOCAL_MACHINE. Si el virus es ejecutado con un usuario administrador..., bueno, si este es el caso, con lo dicho anteriormente, está diáfano que el virus podrá hacer, sencillamente, lo que se le antoje. Esto que decimos de los virus lo podemos decir de los troyanos, spyware, etc.

Una última consideración. Si esto que hemos dicho es grave en un equipo de usuario ¿qué pasa con los servidores? Un servidor es mejor que no tenga usuario logado, pero en muchas ocasiones estamos obligados a que haya un usuario logado, por culpa de algún software que lo requiera, por ejemplo. Es una práctica demasiado común dejar estos servidores logados con un usuario administrador ¡¡incluso con el propio administrador del dominio!! ¿Qué pasa si un código malintencionado se ejecuta en ese servidor? ¿Qué pasa si se cuela un troyano? ¡¡Privilegios de administrador del dominio para el troyano/virus/etc.!! ¡¡¡No, no, no, no, noooooooo!!! Definitivamente no es buena idea logarse como administrador....

 

¿Cómo realizar acciones administrativas sin logarme como administrador?

El problema de seguridad que se deriva de iniciar sesión como administrador no es únicamente de Windows, es algo inherente a los propios sistemas operativos. De ahí el que se incluya en ellos mecanismos para poder lanzar procesos con otras credenciales diferentes a las del usuario que está logado. Estas utilidades permiten lanzar los procesos con cualquier usuario, no es requerido que se lancen con usuarios administradores, pero su mayor utilidad es, precisamente, cuando se ejecutan para lanzar los procesos como usuario administrador. Todo buen curso de administración de un sistema operativo recomendará que no se inicie sesión como administrador nunca, si no que se haga como usuario limitado y se haga uso de estas utilidades cuando se requiera realizar una acción administrativa. En Unix/Linux usaremos SU, en Windows 2000/XP/2003 usaremos RunAs.exe.

 

RunAs.exe

RunAs nos permite, como vimos anteriormente, lanzar un programa como otro usuario distinto al que tiene iniciada la sesión. con él podremos administrar Windows, Active Directory, etc., sin necesidad de tener iniciada una sesión de administrador.

 

Sintaxis

La sintaxis completa de RunAs la tenemos en la ayuda; si queremos saberla basta con consultar en esta. Aquí sólo vamos a señalar la sintaxis básica para nuestros propósitos. Así pues, diremos que para usar RunAs lo haremos de la siguiente manera:

runas /user:{[dominio_o_equipo\]usuario | usuario[@dominio]} [/savecred | /savedcred] <ejecutable parámetros>

Donde:

/user:{[dominio_o_equipo\]usuario | usuario[@dominio]}: requerido; es el nombre del usuario con el que lanzaremos el ejecutable. El nombre puede estar expresado como Down-Level Logon Name (dominio\usuario) o como User Principal Name (usuario@dominio). Los dos ejemplos siguientes se refieren al mismo usuario:

/user:moria\balrog
/user:balrog@moria.mordor.org

/savecred o /savedcred: opcional; indica que se guarden las credenciales una vez suministradas. Es decir, sólo se nos pedirá que entremos la contraseña del usuario que lanza el ejecutable la primera vez que usemos RunAs con /savecred para lanzar el ejecutable; no sólo eso, si no que a partir de entonces todo ejecutable que lanzado con RunaAs con ese usuario no necesitará que se entre la contraseña.Por desgracia, este parámetro no está disponible en Windows 2000 ni en Windows XP Home, sólo en Windows XP Pro o Windows Server 2003. Si el sistema está en español la ayuda referencia este parámetro como /savedcred, si el sistema está en inglés lo referencia como /savecred; funciona de las dos maneras en los dos idiomas.

<ejecutable - parámetros>: requerido; es el ejecutable que se lanza, puede ir o no con su ruta, dependiendo desde dónde se lanza RunAs o de si está en el Path de sistema o usuario. Si se necesita que lleve parámetros se pondrán después del nombre del ejecutable tras un espacio. En el caso de que lleve parámetros o que en la ruta\nombre aparezca algún espacio, será necesario que encerremos el conjunto entre comillas. Se pueden utilizar variables de entorno, encerrado el nombre entre tantos por ciento (%). En ocasiones es necesario que los parámetros estén encerrados entre comillas (una ruta que tenga espacios, por ejemplo), en estos casos las comillas deberán ser escritas quitándoles el significado con slash invertido (\); por ejemplo:

runas /user:dominio\administrador "%SystemRoot%\explorer.exe /e, \"c:\Archivos de Isengard\""

Ejemplos de RunAs

En este caso lanzamos el programa "Bola de fuego.exe" del usuario gandalf del domino comunidad (expresado como DLLN); la ruta del ejecutable la construimos utilizando la variable de entorno ProgramFiles.

runas /user:comunidad\gandalf "%ProgramFiles%\LOTR\Conjuros\Bola de fuego.exe"

En este otro ejemplo, lanzamos el programa palantir.exe con el parámetro /informar_sauron con la cuenta del usuario saruman del dominio isengard.mordor.org, expresado como UPN. El programa no incluye ruta pues se supone que está en el Path.

runas /user:saruman@isengard.mordor.org /savecred "palantir.exe /informar_sauron"

En este último ejemplo se lanza el programa comer.exe con el usuario local pippin (al no llevar nombre de dominio se asume que es la máquina local); el programa está en el Path y al no haber ningún espacio (ni en la ruta ni por llevar algún parámetro) no está encerrado entre comillas.

runas /user:pippin /savecred comer.exe

 

Batería de herramientas

A continuación veremos cómo crear una batería de accesos directos usando RunAs que nos permitan realizar cualquier tarea que requiera privilegios administrativos que necesitemos hacer, estando logados como un usuario sin estos privilegios. Podemos crear un grupo de programas en el menú inicio o crear los accesos directos en el escritorio, como haremos en los sucesivos ejemplos.

 

CMD.EXE

La madre de todas las herramientas; con CMD.EXE podremos lanzar cualquier cosa que necesitemos para la administración. A continuación se muestra cómo crear un acceso directo que abra esta herramienta como otro usuario; el proceso para crear los accesos directos de otras herramientas será el mismo, sólo cambiará el origen, el nombre y el icono. Deberemos hacer clic derecho sobre el escritorio, "Nuevo\Acceso directo":

A continuación escribimos en la caja de texto localización del comando "runas /user:dominio\usuario cmd"; si deseamos que se guarden las credenciales deberemos poner "runas /user:dominio\usuario /savecred cmd":

Pulsamos "Next" y en la caja de texto de nombre del acceso directo ponemos un nombre que nos haga reconocer que es una ventana de comandos como administrador, por ejemplo "ADM - CMD.EXE":

Pulsamos finalizar y ya tenemos el acceso directo creado, pero... ¿qué pasa con el icono?. Vamos ahora a modificar el acceso directo para que se muestre con el icono correspondiente a una ventana de comandos. Para ello hacemos clic derecho sobre el acceso directo, "Propiedades" y se muestra la ventana de propiedades del acceso directo, donde pulsaremos el botón "Cambiar icono..." que se encuentra en la pestaña "Acceso directo":

Debido a que RunAs no contiene iconos, se nos mostrará un aviso indicando esta circunstancia:

Pulsamos aceptar y se muestra el cuadro de diálogo de cambio de icono, en el que estará seleccionado "%SystemRoot%\system32\SHELL32.dll" como origen de los iconos (es el origen predeterminado). Pulsamos el botón "Examinar..." y seleccionamos "%SystemRoot%\system32\cmd.exe", pulsamos aceptar y ya tendremos el icono de CMD en el cuadro de diálogo de cambiar icono, pulsamos sobre él, aceptamos y en las propiedades del acceso directo volvemos a aceptar; ya tenemos el acceso directo con su correspondiente icono.

Si hubiésemos creado el acceso directo sin establecer que se guarden credenciales y queremos que así se haga, deberemos hacer clic derecho sobre él, "Propiedades", y en la pestaña "Acceso directo" retocar el cuadro de texto "Destino" para añadir "/savecred":

La primera vez que ejecutemos este acceso directo, si está establecido "/savecred", o cada vez que lo ejecutemos, si no lo está, se solicita del usuario que entre la contraseña correspondiente al usuario con el que RunAs lanzará la tarea:

¿Por qué se dijo al comienzo de esta parte sobre CMD.EXE que es la madre de todas las herramientas? Porque desde ella podremos acceder a todas las herramientas que queramos, a todas ubicaciones que necesitemos y esto como administradores, si como administradores hemos ejecutado CMD.EXE. Ejemplos:

> mmc

Abre una consola de administración desde la cual podremos agregar aquellos snap-ins que necesitemos; esto estará hecho siempre como administrador.

> start \\servidor\carpeta

Abre una ventana situada en el recurso compartido "carpeta" del equipo "servidor" como administrador, de forma que podremos, por ejemplo, lanzar instaladores, escribir en recursos compartidos en los que sólo los administradores pueden escribir, etc.

Un último ejemplo, quizás el más definitivo; podemos desplegar el menú inicio y arrastrar cualquier acceso directo a la ventana de comandos y soltarlo en ella, se habrá escrito la ruta\nombre del acceso directo y al pulsar intro se ejecutará como administrador (por ejemplo "Usuarios y equipos de Active Directory"); esta acción de arrastrar la podremos hacer no sólo desde el menú inicio, si no también desde una ventana de carpeta o el explorador de Windows (pudiendo por tanto lanzar ejecutables que no están en el menú inicio, por ejemplo "regserv32.exe" para registrar una librería).

 

Explorador de Windows

Es la segunda herramienta en importancia después de CMD.EXE, pues nos permite también arrancar multitud de cosas, al poder acceder a los directorios de los discos del equipo local, a los recursos de la red y al panel de control.

El proceso para crear un acceso directo que nos abra un explorador de Windows es igual al que usamos para crear el acceso directo a CMD.EXE. Difiere en que lo que debemos escribir en la caja de texto de localización del comando, que en este caso es:

runas /user:dominio\usuario "%SystemRoot%\explorer.exe <opciones>"

Las opciones son:

/n = abre nueva carpeta
/e = explorador en dos ventanas (panel del árbol y panel de detalle)
/select = carpeta o unidad seleccionada
/root = nivel superior en el explorador (si se le indica c:\Pepe no se podrá acceder a c:\ ni ninguna de sus carpetas excepto c:\Pepe y sus subcarpetas).

Ejemplos:

"%SystemRoot%\explorer.exe /n, c:\" - Abre una carpeta simple en c:\
"%SystemRoot%\explorer.exe /e, d:\Perico" - Abre una carpeta con árbol en d:\Perico
"%SystemRoot%\explorer.exe /e, d:\Perico, /select, d:\Perico\Pedrito.txt" - Abre una carpeta con árbol en d:\Perico y con el fichero Pedrito.txt seleccionado
"%SystemRoot%\explorer.exe /n, /root, e:\Julianete" - Abre una carpeta simple con raíz en e:\Julianete
"%SystemRoot%\explorer.exe /e, /root, e:\Julianete" - Abre una carpeta con árbol con raíz en e:\Julianete

Así pues, podríamos lanzar, por ejemplo:

runas /user:dominio\administrador "%SystemRoot%\explorer.exe /e, c:\"

El icono para el acceso directo lo encontraremos en el propio ejecutable, es decir en "%SystemRoot%\explorer.exe"

Nota importante: lo más probable, es que si ejecutamos esta línea no se abra un explorador de Windows ¿por qué? Esto es debido a que de, forma predeterminada, los usuarios no tienen activada la opción "Abrir cada carpeta en un proceso independiente" en "Mi PC", menú "Herramientas\Opciones de carpeta...", pestaña "Ver". Por tanto deberemos logarnos con el usuario que deseemos que se utilice con RunAs y establecer esta opción; una vez cerrada la sesión de ese usuario y abierta la sesión con el que queremos que utilice RunAs, veremos como ejecutando esa línea sí que se abre un explorador de Windows.

 

MMC.EXE

MMC.EXE es la consola de administración genérica, a la cual podemos agregar snap-ins que nos permiten administrar el dominio, el equipo, servicios, etc. Es por tanto una poderosa y elástica herramienta. Es interesante tener un acceso directo preparado con RunAs para lanzar una consola MMC. La línea a ejecutar sería:

runas /user:dominio\administrador mmc

También podemos crear accesos directos que nos abran determinadas consolas, tanto de las que proporciona el propio sistema (como gpedit.msc o services.msc) como aquellas consola personalizadas que nosotros creemos. La forma sería la siguiente:

runas /user:dominio\administrador "mmc <ruta\nombre-consola.msc>"

Ejemplos

Administración del equipo:

runas.exe /user:dominio\administrador "mmc %windir%\system32\compmgmt.msc"

Configuración de Terminal Services:

runas.exe /user:dominio\administrador"mmc.exe %SystemRoot%\system32\tscc.msc /s"

 

Internet Explorer

Navegar por Internet como administrador del equipo no es precisamente una buena idea ¡hay gente muy mala por ahí afuera! no obstante, en ocasiones, puede ser que necesitemos navegar como administrador, por ejemplo para poder visitar Windows Update y actualizar nuestro equipo. Para ello es conveniente que también tengamos un acceso directo con RunAs que nos abra Internet Explorer con privilegios administrativos. La línea a ejecutar sería la siguiente:

runas.exe /user:dominio\administrador "%ProgramFiles%\Internet Explorer\iexplore.exe"

 

RegEdit

Una tarea que debemos también arrostrar en ocasiones como administrador es la edición del registro. Para poder lanzar regedit.exe con privilegios administrativos la línea a ejecutar sería:

runas.exe /user:dominio\administrador "%windir%\regedit.exe"

 

Administrador de tareas

Si queremos matar determinados procesos, es necesario que seamos administradores del equipo, de ahí que sea interesante tener un acceso directo que ejecute el administrador de tareas con privilegios administrativos. La línea para ello es:

runas.exe /user:dominio\administrador "%SystemRoot%\system32\taskmgr.exe"

 

Sobre /savecred

Esta opción es muy cómoda, pues con sólo una vez que entremos la contraseña en un acceso directo que tenga esta opción, no volveremos a entrar la contraseña más, no sólo en ese acceso directo, si no en cualquier otro acceso directo que tenga esta opción activada y lance la tarea con ese mismo usuario.

Esta comodidad, no obstante, entraña un peligro: que no ejecutemos las cosas con privilegios administrativos con la suficiente "solemnidad" que nos da el que sea necesario tener que suministrar la contraseña para ello. Así pues, aunque sea más incómodo y pesado, es preferible evitar el uso de esta opción.

 

Utilidades de terceros

A continuación pongo enlaces a utilidades de terceros de tipo RunAs. Esto va destinado, principalmente, a usuarios de Windows 2000 y XP Home, debido sobre todo a la falta del modificador /savecred. Además añaden otras prestaciones que pueden resultar interesantes para los sistemas que sí disponen de /savecred.

NetExec
http://www.netexec.de/


Masquerade
http://mtvlabs.com:9225/

EMCO RunAs Professional
http://www.emco.is/run_as_professional/features.html

TqcRunA
http://www.quimeras.com/products/displayproduct.asp?IdProduct=4

© 2/2006 Fernando Reyes López