30 jul 2013

Seguridad y PowerShell (Parte IV)

En el último artículo sobre seguridad y la PowerShell hablamos de como crear sesiones remotas de manera sencilla y segura. En el presente artículo hablaremos de como llevar a cabo ejecuciones remotas y qué utilidades remotas proporciona PowerShell. El objetivo del artículo de hoy es demostrar a los administradores de sistemas que pueden utilizar la PowerShell para sus tareas diarias, utilizándola para gestionar su entorno empresarial de manera remota, sencillo y sobretodo seguro.

Ejecuciones y utilidades remotas en PowerShell

Como se vió en el anterior artículo, una vez se tiene creada la sesión es realmente interesante entender como un administrador de sistemas puede enviar órdenes a sus equipos de manera remota. Esta ejecución de órdenes se debe entender como un script ejecutado de manera remota, por esta razón y mediante el uso del cmdlet Invoke-Command se puede llevar a cabo la tarea.

El cmdlet Invoke-Command dispone de los parámetros session y scriptblock. El primero de ellos indica que sesión de las creadas anteriormente son las que se quiere utilizar, es decir, si hemos creado una sesión en una máquina X y queremos ejecutar órdenes en esa máquina, indicaremos que la sesión es la X. El segundo parámetro indica que órdenes queremos ejecutar en remoto. La sintaxis es realmente sencilla, directamente indicamos lo siguiente: Invoke-Command -Session <Objeto de sesión> -Scriptblock {Órdenes a ejecutar}. Es importante recalcar que las instrucciones que se quieren ejecutar en el equipo remoto deben ir entre llaves {}.

Recordar que con el comando Get-PSSession se puede utilizar este cmdlet, por ejemplo de la siguiente manera $misesion = get-pssesion -id <X>, de esta forma se almacena el objeto sesión en la variable y podemos pasársela al parámetro Session. 

Como se puede entender de las líneas anteriores, esto abre un nuevo campo de administración y de consulta remota a los administradores de sistema. Existen ciertas utilidades imprescindibles para la administración, una es la posibilidad de ejecutar scripts en remoto y otra es la posibilidad de lanzar una PowerShell en remoto, a modo de shell.

La primera de las posibilidades la hemos visualizado un poco, pero no en todo su explendor. En vez de utilizar el parámetro Scriptblock, podríamos utilizar el parámetro Filepath, y de esta manera evitar que tengamos que copiar el script en el campo proporcionado por Scriptblock. El parámetro Filepath indica al cmdlet dónde se encuentra el script que se quiere ejecutar en la máquina remota. Los dos parámetros son incompatibles, no podemos lanzarlos juntos.

La segunda de las posibilidades, y una de las más vistosas es el lanzamiento de una PowerShell en remoto. De esta manera el administrador dispondrá de todo el potencial de la PowerShell como si estuviera delante del equipo que quiere controlar. Para lanzar una PowerShell remota se debe ejecutar el cmdlet Enter-PSSession. Simplemente hay que indicar en que máquina remota se quiere abrir una PowerShell. Un ejemplo es enter-pssession –computername <nombre máquina>. Si se quiere acceder con otras credenciales que no sean las mismas con las que el usuario está logueado en la máquina local hay que utilizar el parámetro credential. Un ejemplo sería: $cred = get-credential; enter-pssesion –computername <nombre maquina –credential $cred.

En el libro de PowerShell: La navaja suiza de los administradores de sistemas se puede obtener más información sobre la seguridad aplicada con esta línea de comandos.

No hay comentarios:

Publicar un comentario