Omitir Vínculos de navegación | |
Salir de la Vista de impresión | |
Administración de Oracle Solaris 11.1: servicios de seguridad Oracle Solaris 11.1 Information Library (Español) |
Parte I Descripción general de la seguridad
1. Servicios de seguridad (descripción general)
Parte II Seguridad de sistemas, archivos y dispositivos
2. Gestión de seguridad de equipos (descripción general)
3. Control de acceso a sistemas (tareas)
4. Servicio de análisis de virus (tareas)
5. Control de acceso a dispositivos (tareas)
6. Verificación de la integridad de archivos mediante el uso de BART (tareas)
7. Control de acceso a archivos (tareas)
Parte III Roles, perfiles de derechos y privilegios
8. Uso de roles y privilegios (descripción general)
9. Uso del control de acceso basado en roles (tareas)
10. Atributos de seguridad en Oracle Solaris (referencia)
Parte IV Servicios criptográficos
11. Estructura criptográfica (descripción general)
12. Estructura criptográfica (tareas)
13. Estructura de gestión de claves
Parte V Servicios de autenticación y comunicación segura
14. Uso de módulos de autenticación conectables
Secure Shell (descripción general)
Secure Shell y el proyecto OpenSSH
Configuración de Secure Shell (tareas)
Configuración de Secure Shell (mapa de tareas)
Cómo configurar la autenticación basada en host para Secure Shell
Cómo configurar el reenvío del puerto en Secure Shell
Cómo crear excepciones de host y usuario para valores predeterminados de Secure Shell
Cómo crear un directorio aislado para archivos sftp
Uso de Secure Shell (mapa de tareas)
Cómo generar un par de clave pública y clave privada para utilizar con Secure Shell
Cómo cambiar la frase de contraseña de una clave privada de Secure Shell
Cómo iniciar sesión en un host remoto con Secure Shell
Cómo reducir indicadores de contraseñas en Secure Shell
Cómo administrar ZFS con Secure Shell de forma remota
Cómo utilizar el reenvío del puerto en Secure Shell
Cómo copiar archivos con Secure Shell
Cómo configurar conexiones Secure Shell predeterminadas a hosts fuera de un cortafuegos
17. Uso de autenticación simple y capa de seguridad
18. Autenticación de servicios de red (tareas)
19. Introducción al servicio Kerberos
20. Planificación del servicio Kerberos
21. Configuración del servicio Kerberos (tareas)
22. Mensajes de error y resolución de problemas de Kerberos
23. Administración de las políticas y los principales de Kerberos (tareas)
24. Uso de aplicaciones Kerberos (tareas)
25. El servicio Kerberos (referencia)
Parte VII Auditoría en Oracle Solaris
26. Auditoría (descripción general)
27. Planificación de la auditoría
Secure Shell proporciona acceso seguro entre un shell local y un shell remoto. Para obtener más información, consulte las páginas del comando man ssh_config(4) y ssh(1).
En el siguiente mapa de tareas, se indican procedimientos de usuario para usar Secure Shell.
|
Los usuarios deben generar un par de clave pública y clave privada cuando su sitio implementa la autenticación basada en host o la autenticación de clave pública de usuario. Para obtener opciones adicionales, consulte la página del comando man ssh-keygen(1).
Antes de empezar
Consulte al administrador del sistema si se ha configurado la autenticación basada en host.
myLocalHost% ssh-keygen -t rsa Generating public/private rsa key pair. …
Donde -t es el tipo de algoritmo, uno de rsa, dsa o rsa1.
De manera predeterminada, el nombre de archivo id_rsa, que representa una clave v2 RSA, aparece entre paréntesis. Puede seleccionar este archivo presionando la tecla de retorno. O puede escribir un nombre de archivo alternativo.
Enter file in which to save the key (/home/jdoe/.ssh/id_rsa):<Press Return>
El nombre de archivo de la clave pública se crea automáticamente adjuntando la cadena .pub al nombre del archivo de clave privada.
Esta frase de contraseña se utiliza para cifrar la clave privada. Se desaconseja el uso de una entrada nula. Tenga en cuenta que la frase de contraseña no se muestra cuando la escribe.
Enter passphrase (empty for no passphrase): <Type passphrase>
Enter same passphrase again: <Type passphrase> Your identification has been saved in /home/jdoe/.ssh/id_rsa. Your public key has been saved in /home/jdoe/.ssh/id_rsa.pub. The key fingerprint is: 0e:fb:3d:57:71:73:bf:58:b8:eb:f3:a3:aa:df:e0:d1 jdoe@myLocalHost
Compruebe que la ruta al archivo de claves sea correcta.
% ls ~/.ssh id_rsa id_rsa.pub
En este punto, ha creado un par de clave pública y clave privada.
Ahora puede iniciar sesión en el host remoto. Para obtener detalles, consulte Cómo iniciar sesión en un host remoto con Secure Shell.
% cat /etc/ssh/ssh_host_dsa_key.pub | ssh RemoteHost \ 'cat >> ~./ssh/known_hosts && echo "Host key copied"'
Enter password: <Type password> Host key copied %
Escriba el comando en una línea sin barra diagonal inversa.
myLocalHost% cat $HOME/.ssh/id_rsa.pub | ssh myRemoteHost \ 'cat >> .ssh/authorized_keys && echo "Key copied"'
Cuando el archivo se copia, se muestra el mensaje “Key copied” (clave copiada).
Enter password: Type login password Key copied myLocalHost%
Para obtener un procedimiento, consulte Cómo reducir indicadores de contraseñas en Secure Shell. Para obtener más información, consulte las páginas del comando man ssh-agent(1) y ssh-add(1).
El siguiente procedimiento no cambia la clave privada. El procedimiento cambia el mecanismo de autenticación para la clave privada, la frase de contraseña. Para obtener más información, consulte la página del comando man ssh-keygen(1).
Escriba el comando ssh-keygen con la opción -p y responda a las solicitudes.
myLocalHost% ssh-keygen -p Enter file which contains the private key (/home/jdoe/.ssh/id_rsa):<Press Return> Enter passphrase (empty for no passphrase): <Type passphrase> Enter same passphrase again: <Type passphrase>
Donde -p solicita cambiar la frase de contraseña de un archivo de clave privada.
Escriba el comando ssh y especifique el nombre del host remoto y de inicio de sesión.
myLocalHost% ssh myRemoteHost -l username
Una solicitud cuestiona la autenticidad del host remoto:
The authenticity of host 'myRemoteHost' can't be established. RSA key fingerprint in md5 is: 04:9f:bd:fc:3d:3e:d2:e7:49:fd:6e:18:4f:9c:26 Are you sure you want to continue connecting(yes/no)?
Esta solicitud es normal para conexiones iniciales a hosts remotos.
Are you sure you want to continue connecting(yes/no)? no
El administrador es responsable de actualizar el archivo /etc/ssh/ssh_known_hosts global. Un archivo ssh_known_hosts actualizado impide que esta solicitud aparezca.
Are you sure you want to continue connecting(yes/no)? yes
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase>
jdoe@myRemoteHost's password: <Type password> Last login: Wed Sep 7 09:07:49 2011 from myLocalHost Oracle Corporation SunOS 5.11 September 2011 myRemoteHost%
Los comandos que envía están cifrados. Ninguna respuesta que recibe está cifrada.
Cuando haya terminado, escriba salir (exit) o utilice el método habitual para salir de su shell.
myRemoteHost% exit myRemoteHost% logout Connection to myRemoteHost closed myLocalHost%
Ejemplo 15-2 Visualización de interfaz gráfica de usuario remoto en Secure Shell
En este ejemplo, jdoe es el usuario inicial en ambos sistemas, por lo que se le asigna el perfil de derechos de instalación de software. jdoe desea usar la interfaz gráfica de usuario de Package Manager en el sistema remoto. El valor predeterminado de la palabra clave X11Forwarding sigue siendo yes, y el paquete xauth se instala en el sistema remoto.
% ssh -l jdoe -X myRemoteHost jdoe@myRemoteHost's password: <Type password> Last login: Wed Sep 7 09:07:49 2011 from myLocalHost Oracle Corporation SunOS 5.11 September 2011 myRemoteHost% packagemanager &
Si no desea escribir la frase de contraseña ni la contraseña para utilizar Secure Shell, puede utilizar el daemon del agente. Inicie el daemon al comienzo de la sesión. A continuación, almacene las claves privadas con el daemon del agente mediante el comando ssh-add. Si tiene cuentas diferentes en hosts diferentes, agregue las claves que necesita para la sesión.
Puede iniciar el daemon del agente manualmente cuando sea necesario, como se describe en el siguiente procedimiento.
myLocalHost% eval `ssh-agent` Agent pid 9892
myLocalHost% pgrep ssh-agent 9892
Escriba el comando ssh-add.
myLocalHost% ssh-add Enter passphrase for /home/jdoe/.ssh/id_rsa: <Type passphrase> Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa) myLocalHost%
myLocalHost% ssh myRemoteHost -l jdoe
No se le solicita una frase de contraseña.
Ejemplo 15-3 Uso de opciones de ssh-add
En este ejemplo, jdoe agrega dos claves al daemon del agente. La opción -l se utiliza para enumerar todas las claves que se almacenan en el daemon. Al final de la sesión, la opción -D se usa para eliminar todas las claves del daemon del agente.
myLocalHost% ssh-agent myLocalHost% ssh-add Enter passphrase for /home/jdoe/.ssh/id_rsa: <Type passphrase> Identity added: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa) myLocalHost% ssh-add /home/jdoe/.ssh/id_dsa Enter passphrase for /home/jdoe/.ssh/id_dsa: <Type passphrase> Identity added: /home/jdoe/.ssh/id_dsa(/home/jdoe/.ssh/id_dsa) myLocalHost% ssh-add -l md5 1024 0e:fb:3d:53:71:77:bf:57:b8:eb:f7:a7:aa:df:e0:d1 /home/jdoe/.ssh/id_rsa(RSA) md5 1024 c1:d3:21:5e:40:60:c5:73:d8:87:09:3a:fa:5f:32:53 /home/jdoe/.ssh/id_dsa(DSA) User conducts Oracle Solaris Secure Shell transactions
myLocalHost% ssh-add -D Identity removed: /home/jdoe/.ssh/id_rsa(/home/jdoe/.ssh/id_rsa.pub) /home/jdoe/.ssh/id_dsa(DSA)
De manera predeterminada, el rol root no puede iniciar sesión de forma remota con Secure Shell. Históricamente, la raíz ha utilizado Secure Shell para las tareas importantes, como el envío de datos agrupados de ZFS para su almacenamiento en un sistema remoto. En este procedimiento, el rol root crea un usuario que puede actuar como administrador remoto de ZFS.
Antes de empezar
Debe asumir el rol root. Para obtener más información, consulte Cómo usar los derechos administrativos que tiene asignados.
Por ejemplo, cree el usuario zfsroot y proporcione una contraseña.
source # useradd -c "Remote ZFS Administrator" -u 1201 -d /home/zfsroot zfsroot source # passwd zfsroot Enter password: Retype password: #
dest # useradd -c "Remote ZFS Administrator" -u 1201 -d /home/zfsroot zfsroot dest # passwd zfsroot ...
El usuario zfsroot debe estar definido de idéntica manera en ambos sistemas.
El par de claves se crea en el sistema de origen. A continuación, la clave pública se copia al usuario zfsroot en el sistema de destino.
# ssh-keygen -t rsa -P "" -f ~/id_migrate Generating public/private rsa key pair. Your identification has been saved in /root/id_migrate. Your public key has been saved in /root/id_migrate.pub. The key fingerprint is: 3c:7f:40:ef:ec:63:95:b9:23:a2:72:d5:ea:d1:61:f0 root@source
# scp ~/id_migrate.pub zfsroot@dest: The authenticity of host 'dest (10.134.76.126)' can't be established. RSA key fingerprint is 44:37:ab:4e:b7:2f:2f:b8:5f:98:9d:e9:ed:6d:46:80. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'dest,10.134.76.126' (RSA) to the list of known hosts. Password: id_migrate.pub 100% |*****************************| 399 00:00
source # usermod -P +'ZFS File System Management' -S files zfsroot dest # usermod -P +'ZFS File System Management' -S files zfsroot
dest # profiles zfsroot zfsroot: ZFS File System Management Basic Solaris User All
root@dest # su - zfsroot Oracle Corporation SunOS 5.11 11.1 May 2012 zfsroot@dest $ mkdir -m 700 .ssh zfsroot@dest $ cat id_migrate.pub >> .ssh/authorized_keys
root@source# ssh -l zfsroot -i ~/id_migrate dest \ pfexec /usr/sbin/zfs snapshot zones@test root@source# ssh -l zfsroot -i ~/id_migrate dest \ pfexec /usr/sbin/zfs destroy zones@test
root@source# zfs snapshot -r rpool/zones@migrate-all root@source# zfs send -rc rpool/zones@migrate-all | \ ssh -l zfsroot -i ~/id_migrate dest pfexec /usr/sbin/zfs recv -F zones
root@dest# usermod -P -'ZFS File System Management' zfsroot root@dest# su - zfsroot zfsroot@dest# cp .ssh/authorized_keys .ssh/authorized_keys.bak zfsroot@dest# grep -v root@source .ssh/authorized_keys.bak> .ssh/authorized_keys
Puede especificar que un puerto local se reenvíe a un host remoto. Efectivamente, un socket se asigna para escuchar el puerto en el lado local. La conexión desde este puerto se realiza mediante un canal seguro al host remoto. Por ejemplo, puede especificar el puerto 143 para obtener correo electrónico remotamente con IMAP4. De forma similar, un puerto se puede especificar en el lado remoto.
Antes de empezar
Para utilizar el reenvío del puerto, el administrador debe tener activado el reenvío del puerto en el servidor remoto de Secure Shell. Para obtener detalles, consulte Cómo configurar el reenvío del puerto en Secure Shell.
Especifique el puerto local que escucha para la comunicación remota. Además, especifique el host remoto y el puerto remoto que reenvían la comunicación.
myLocalHost% ssh -L localPort:remoteHost:remotePort
Especifique el puerto remoto que escucha para la comunicación remota. Además, especifique el host local y el puerto local que reenvían la comunicación.
myLocalHost% ssh -R remotePort:localhost:localPort
Ejemplo 15-4 Uso del reenvío del puerto local para recibir correo
El ejemplo siguiente muestra cómo puede utilizar el reenvío del puerto local para recibir correo de manera segura desde un servidor remoto.
myLocalHost% ssh -L 9143:myRemoteHost:143 myRemoteHost
Este comando reenvía conexiones del puerto 9143 en myLocalHost al puerto 143. El puerto 143 es el puerto del servidor v2 IMAP en myRemoteHost. Cuando el usuario inicia una aplicación de correo, el usuario especifica el número de puerto local para el servidor IMAP, como en localhost:9143.
No confunda localhost con myLocalHost. myLocalHost es un nombre de host hipotético. localhost es una palabra clave que identifica el sistema local.
Ejemplo 15-5 Uso del reenvío del puerto remoto para comunicarse fuera de un cortafuegos
En el siguiente ejemplo, se muestra cómo un usuario en un entorno empresarial puede reenviar conexiones desde un host en una red externa hasta un host dentro de un cortafuegos corporativo.
myLocalHost% ssh -R 9022:myLocalHost:22 myOutsideHost
Este comando reenvía conexiones desde el puerto 9022 en myOutsideHost hasta el puerto 22, el servidor sshd, en el host local.
myOutsideHost% ssh -p 9022 localhost myLocalHost%
El siguiente procedimiento muestra cómo usar el comando scp para copiar archivos cifrados entre hosts. Puede copiar archivos cifrados ya sea entre un host local y un host remoto, o entre dos hosts remotos. El comando scp solicita autenticación. Para obtener más información, consulte la página del comando man scp(1).
También puede utilizar el programa de transferencia de archivos segura sftp. Para obtener más información, consulte la página del comando man sftp(1). Si desea ver un ejemplo, consulte el Ejemplo 15-6.
Nota - El servicio de auditoría puede auditar transacciones sftp a través de la clase de auditoría ft. Para scp, el servicio de auditoría puede auditar acceso y salida para la sesión ssh.
Especifique el archivo de origen, el nombre de usuario en el destino remoto y el directorio de destino.
myLocalHost% scp myfile.1 jdoe@myRemoteHost:~
Enter passphrase for key '/home/jdoe/.ssh/id_rsa': <Type passphrase> myfile.1 25% |******* | 640 KB 0:20 ETA myfile.1
Después de escribir la frase de contraseña, se muestra un indicador de progreso. Consulte la segunda línea en el resultado anterior. El indicador de progreso muestra:
El nombre del archivo
El porcentaje del archivo que se ha transferido
Una serie de asteriscos que indican el porcentaje del archivo que se ha transferido
La cantidad de datos transferidos
El tiempo calculado de llegada, o ETA, del archivo completo (es decir, la cantidad restante de tiempo)
Ejemplo 15-6 Especificación de un puerto cuando se utiliza el comando sftp
En este ejemplo, el usuario desea que el comando sftp utilice un puerto concreto. El usuario utiliza la opción -o para especificar el puerto.
% sftp -o port=2222 guest@RemoteFileServer
Puede utilizar Secure Shell para establecer una conexión desde un host dentro de un cortafuegos hasta un host fuera del cortafuegos. Esta tarea se realiza especificando un comando de proxy para ssh en un archivo de configuración o como una opción en la línea de comandos. Para la opción de línea de comandos, consulte el Ejemplo 15-7.
En general, puede personalizar las interacciones de ssh mediante un archivo de configuración.
Puede personalizar su propio archivo personal en ~/.ssh/config.
O puede utilizar los valores en el archivo de configuración administrativo, /etc/ssh/ssh_config.
Los archivos se pueden personalizar con dos tipos de comandos de proxy. Un comando de proxy es para conexiones HTTP. El otro comando de proxy es para conexiones SOCKS5. Para obtener más información, consulte la página del comando man ssh_config(4).
Utilice la sintaxis siguiente para agregar tantas líneas como sea necesario:
[Host outside-host] ProxyCommand proxy-command [-h proxy-server] \ [-p proxy-port] outside-host|%h outside-port|%p
Limita la especificación del comando de proxy a instancias cuando un nombre de host remoto se especifica en la línea de comandos. Si utiliza un carácter comodín para outside-host, aplica la especificación del comando de proxy a un conjunto de hosts.
Especifica el comando de proxy.
El comando puede ser cualquiera de los siguientes:
/usr/lib/ssh/ssh-http-proxy-connect para conexiones HTTP
/usr/lib/ssh/ssh-socks5-proxy-connect para conexiones SOCKS5
Estas opciones especifican un servidor proxy y un puerto proxy, respectivamente. Si están presentes, los proxies sustituyen cualquier variable de entorno que especifica servidores proxy y puertos proxy, como HTTPPROXY, HTTPPROXYPORT, SOCKS5_PORT, SOCKS5_SERVER y http_proxy. La variable http_proxy especifica una URL. Si las opciones no se usan, las variables de entorno relevantes se deben definir. Para obtener más información, consulte las páginas del comando man ssh-socks5-proxy-connect(1) y ssh-http-proxy-connect(1).
Designa un host específico para conectarse. Utilice el argumento de sustitución %h para especificar el host en la línea de comandos.
Designa un puerto específico para conectarse. Utilice el argumento de sustitución %p para especificar el puerto en la línea de comandos. Al especificar %h y %p sin utilizar la opción Host outside-host, el comando de proxy se aplica al argumento de host cada vez que se invoca el comando ssh.
Escriba, por ejemplo:
myLocalHost% ssh myOutsideHost
Este comando busca una especificación de comando de proxy para myOutsideHost en su archivo de configuración personal. Si la especificación no se ha encontrado, el comando busca en el archivo de configuración de todo el sistema, /etc/ssh/ssh_config. El comando de proxy se sustituye por el comando ssh.
Ejemplo 15-7 Conexión a hosts fuera de un cortafuegos desde la línea de comandos de Secure Shell
Cómo configurar conexiones Secure Shell predeterminadas a hosts fuera de un cortafuegos explica cómo especificar un comando de proxy en un archivo de configuración. En este ejemplo, un comando de proxy se especifica en la línea de comandos ssh.
% ssh -o'Proxycommand=/usr/lib/ssh/ssh-http-proxy-connect \ -h myProxyServer -p 8080 myOutsideHost 22' myOutsideHost
La opción -o para el comando ssh proporciona un método de línea de comandos para especificar un comando de proxy. En este ejemplo, el comando realiza lo siguiente:
Sustituye el comando de proxy HTTP para ssh
Utiliza el puerto 8080 y myProxyServer como el servidor proxy
Se conecta al puerto 22 en myOutsideHost