Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org/
Licencia de este documento: Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2022 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.
SSH (Secure Shell) es un conjunto de estándares y protocolo de red que permite establecer una comunicación a través de un canal seguro entre un cliente local y un servidor remoto. Utiliza una llave pública para autenticar el servidor remoto y —de manera opcional— permitir al servidor remoto autenticar al usuario. SSH provee confidencialidad e integridad en la transferencia de los datos utilizando criptografía y MAC (Message Authentication Codes o Códigos de Autenticación de Mensaje). De modo predeterminado, escucha peticiones a través del puerto 22 por TCP.
SFTP (SSH File Transfer Protocol) es un protocolo que provee funcionalidad de transferencia y manipulación de archivos a través de un flujo confiable de datos. Comúnmente se utiliza con SSH para proveer a éste de transferencia segura de archivos.
SCP (Secure Copy o Copia Segura) es una protocolo seguro para transferir archivos entre un anfitrión local y otro remoto, a través de SSH. Básicamente, es idéntico a RCP (Remote Copy o Copia Remota), con la diferencia de que los datos son cifrados durante la transferencia para evitar la extracción potencial de información a través de programas de captura de las tramas de red (packet sniffers). SCP sólo implementa la transferencia de archivos, pues la autenticación requerida es realizada a través de SSH.
OpenSSH (Open Secure Shell) es una alternativa de código fuente abierto, con licencia BSD , hacia la implementación propietaria y de código cerrado SSH creada por Tatu Ylönen. OpenSSH es un proyecto creado por el equipo de desarrollo de OpenBSD y actualmente dirigido por Theo de Raadt. Se considera es más segura que la versión privativa Ylönen, gracias a la constante auditoría que se realiza sobre el código fuente por parte de una enorme comunidad de desarrolladores, una ventaja que brinda el Software Libre.
OpenSSH incluye servicio y clientes para los protocolos SSH, SFTP y SCP.
URL: http://www.openssh.org/.
Si realizó una instalación mínima, ejecute lo siguiente para instalar la paquetería necesaria:
yum -y install openssh openssh-server openssh-clients
De modo predeterminado el servicio está activo en todos los niveles de ejecución.
Ejecute lo siguiente para desactivar el servicio de todos los niveles de ejecución ejecute:
systemctl disable sshd
Ejecute lo siguiente para iniciar por primera vez el servicio:
systemctl start sshd
Ejecute lo siguiente para reiniciar el servicio y aplicar cambios en la configuración:
systemctl restart sshd
Ejecute lo siguiente para detener el servicio:
systemctl stop sshd
Es necesario abrir el puerto 22 por TCP (SSH) o bien el puerto que se haya seleccionado para el servicio.
Ejecute lo siguiente:
firewall-cmd --add-service=sshd --permanent
firewall-cmd --reload
AlmaLinux o Red Hat™ Enterprise Linux incluyen varias políticas para el servicio sshd.
Si configura el servicio para utilizar un puerto distinto al 22, debe cambiar el contexto de SELinux de éste para permitir al servicio hacer uso de éste. En el siguiente ejemplo se permite utilizar el puerto 52341:
semanage port -a -t ssh_port_t -p tcp 52341
Ejecute lo siguiente para abrir el puerto corespondiente en el muro cortafuegos:
firewall-cmd --add-port=52341/tcp --permanent
firewall-cmd --reload
Habilita los atributos lectura y escritura de archivos en los directorios de inicio de los usuarios con chroot. El valor predeterminado es deshabilitado. Para habilitar sólo ejecute:
setsebool -P ssh_chroot_rw_homedirs 1
Permite a usuarios con chroot poder ingresar también a través de SSH. El valor predeterminado es deshabilitado. Por lo general se evita utilizar esta política. Para habilitar ejecute:
setsebool -P fenced_can_ssh 1
Habilita el acceso a usuarios con rol de administrador de sistema (contextos sysadm_r:sysadm_t. El valor predeterminado es deshabilitado. Para habilitar ejecute:
setsebool -P ssh_sysadm_login 1
Habilita el uso de firmas digitales. El valor predeterminado es deshabilitado. Para habilitar ejecute:
setsebool -P allow_ssh_keysign 1
Para más detalles, consulte el documento titulado «OpenSSH con autenticación a través de firma digital».
El contexto de SELinux para de los directorios ~/.ssh —y sus contenidos— debe ser tipo ssh_home_t. Reasigne los contextos ejecutando lo siguiente:
restorecon -Rv /root/.ssh /home/*/.ssh
O bien ejecutando:
chcon -R -t ssh_home_t /root/.ssh /home/*/.ssh
Cuando se utilizan cuentas con acceso al intérprete de mandatos, las opciones suministradas a ssh tienen precedencia sobre las opciones establecidas en el archivo ~/.ssh/config, que a su vez tiene precedencia sobre las opciones definidas en el archivo /etc/ssh/ssh_config.
Edite el archivo /etc/ssh/sshd_config.
vi /etc/ssh/sshd_config
A continuación se analizarán las opciones básicas que se recomienda modificar.
Una forma de elevar considerablemente la seguridad al servicio consiste en cambiar el número de puerto predeterminado por otro que sólo conozca el administrador del sistema. A este tipo de técnicas se les conoce como Seguridad por Oscuridad. La mayoría de los delincuentes informáticos utiliza guiones que buscan servidores que respondan a peticiones a través del puerto 22. Cambiar de puerto disminuye considerablemente la posibilidad de una intrusión.
Port 22
SSH trabaja a través del puerto 22 por TCP. Puede elegirse cualquier otro puerto entre el 1025 y 65535. En el siguiente ejemplo se establecerá el puerto 52341:
Port 52341
De modo predeterminado el servicio de SSH escuchará peticiones a través de todas las direcciones presentes en todas las interfaces de red del sistema. En el siguiente ejemplo el servidor a configurar tiene la dirección IP 192.168.1.254, la cual sólo podría ser accedida desde la red local:
ListenAddress 192.168.1.254
Establece si se va a permitir el ingreso directo del usuario root al servidor SSH. Si se va a permitir el ingreso hacia el servidor desde redes públicas, resultará prudente utilizar esta opción con el valor no, de modo que sea necesario ingresar primero con una cuenta de usuario activa, con un intérprete de mandatos que permita el acceso.
PermitRootLogin no
Esta opción habilita o deshabilita la autenticación con contraseñas. De modo predeterminado está permitido el acceso autenticado con contraseñas. Si pone como valor «no» sólo se permitirá el acceso a través de firmas digitales. Por favor, evite cambiar el valor de esta opción hasta haber instalado su firma digital.
PasswordAuthentication yes
Establece si se permitirá la ejecución remota de aplicaciones gráficas que utilicen el servidor X11. Resultará conveniente para algunas tareas administrativas que sólo puedan llevarse a cabo con herramientas gráficas o bien si se requiere utilizar una aplicación gráfica en particular. Para este fin, esta opción puede establecerse con el valor yes.
X11Forwarding yes
Permite restringir el acceso por usuario y/o por anfitrión. El siguiente ejemplo restringe el acceso hacia el servidor SSH para que sólo puedan hacerlo los usuarios fulano y mengano, desde cualquier anfitrión.
AllowUsers fulano mengano
El siguiente ejemplo restringe el acceso hacia el servidor SSH para que sólo puedan hacerlo los usuarios fulano y mengano, pero sólo desde los anfitriones 10.1.1.1 y 10.2.2.1.
AllowUsers fulano@10.1.1.1 mengano@10.1.1.1 fulano@10.2.2.1 mengano@10.2.2.1
Cuando un cliente realiza una conexión hacia un servidor SSH, éste último intentará resolver la dirección IP del cliente. Si el servidor DNS predeterminado del sistema carece de una zona de resolución inversa que resuelva un nombre para la dirección IP del cliente, la conexión se demorará algunos segundos más de lo normal. Algunos administradores prefieren desactivar esta función con el fin de agilizar las conexiones SSH en redes donde se carece de servidores DNS que tengan zonas de reenvío para resolver los nombres o zonas de resolución inversa para resolver las direcciones IP de los segmentos de red local.
UseDNS no
Del lado del cliente se realiza un proceso de validación, que tiene como objetivo verificar si se están falsificando registros en un servidor DNS, en el caso de que éste último se haya visto comprometido en su seguridad. La opción que controla esta función es CheckHostIP, tiene establecido yes como valor predeterminado y se define en el archivo /etc/ssh/ssh_config (archivo de configuración para los clientes SSH del anfitrión local).
Se recomienda dejar intacta esta opción con el valor predeterminado, salvo que los servidores SSH involucrados carezcan de resolución en algún servidor DNS. Establecer el valor no, tiene como riesgo el ser susceptible de conectarse inadvertidamente a un servidor distinto al que realmente se quería utilizar, cuya resolución de nombre de anfitrión haya sido falsificada y que pudiera estar siendo utilizado con malas intenciones para engañar y poder capturar nombres de usuario y contraseñas y posteriormente utilizar éstos para acceder al verdadero servidor.
Para acceder con intérprete de mandatos hacia el servidor, ejecute ssh desde una terminal en el sistema cliente, definiendo como argumentos el usuario a utilizar, una arroba y la dirección IP o nombre del servidor al cual se quiera conectar:
ssh usuario@nombre.o.ip.servidor
Si el servidor SSH utiliza un puerto distinto al 22, se puede utilizar la opción -p con el número de puerto utilizado como argumento. En el siguiente ejemplo se utiliza la cuenta del usuario juan para acceder hacia el servidor con dirección IP 192.168.100.15, el cual tiene un servicio de SSH que escucha peticiones a través del puerto 52341.
ssh -p 52341 juan@192.168.100.15
Acceda hacia putty.org, descargue y ejecute PuTTY. Éste es un cliente para SSH para todas las versiones de Windows.
Ventana de configuración de PuTTY.
Aceptando firma digital de servidor SSH en PuTTY.
Ingresando a un servidor SSH con PuTTY.
Para acceder a través de SFTP hacia el servidor, ejecute sftp desde el sistema cliente definiendo el usuario a utilizar, una arroba y el nombre o dirección IP del servidor remoto:
sftp usuario@servidor
El intérprete de mandatos de SFTP es muy similar al utilizado para el protocolo FTP y tiene las mismas funcionalidades.
Ejecute sftp con la opción -o con el valor Port=número de puerto para acceder hacia un servidor SSH en un puerto distinto al 22. En el siguiente ejemplo se intentará acceder con el usuario juan hacia el servidor con dirección IP 192.168.100.15 y que escucha peticiones en el puerto 52341:
sftp -o Port=52341 juan@192.168.100.15
Si utiliza GNOME 2.x o MATE como escritorio, puede acceder hacia servidores SSH a través del protocolo SFTP utilizando el administrador de archivos (Nautilus) para realizar transferencias y manipulación de archivos, especificando el URI (Uniform Resource Locator o Localizador Uniforme de Recursos) «sftp:», seguido del servidor y la ruta hacia la que se quiere acceder, seguido del puerto, en el caso que sea distinto al 22.
Nautilus, accediendo hacia un directorio remoto a través de SFTP.
La función de chroot (jaula de confinamiento de los usuarios) viene incluida desde la versión 4.9p1 de OpenSSH.
Edite el archivo /etc/ssh/sshd_config:
vi /etc/ssh/sshd_config
Localice la siguiente línea resaltada. La encontrará casi al final del archivo:
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
Deshabilite la línea con una almohadilla y añada el siguiente contenido resaltado:
# override default of no subsystems
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Guarde el archivo, salga del editor de texto y regrese al intérprete de mandatos.
Si utiliza AlmaLinux o Red Hat™ Enterprise Linux, reinicie el servicio ejecutando lo siguiente:
service sshd restart
Si utiliza openSUSE™ o SUSE™ Linux Enterprise, reinicie el servicio ejecutando lo siguiente:
rcsshd restart
Ejecute groupadd con sftpusers como argumento para crear un grupo con este nombre.
groupadd sftpusers
Añada usuarios a los cuales se quiera enjaular con chroot al grupo sftpusers ejecutando usermod con la opción -G (mayúscula) y sftpusers y el nombre del usuario como argumentos. Ejemplo:
usermod -G sftpusers perengano
Cambie los permisos del directorio de inicio de los usuarios involucrados para que pertenezcan al grupo y usuario root y además tengan permiso de acceso 755 —es decir drwxr-xr-x.
chown root:root /home/perengano<br />chmod 755 /home/perengano
Genere un directorio donde el usuario y su grupo sí predeterminado tengan privilegios de escritura:
mkdir -p -m 0755 /home/perengano/public_html
mkdir -p -m 0700 /home/perengano/{mail,.ssh}
chown perengano:perengano /home/perengano/{mail,.ssh,public_html}
Finalmente, cambie el intérprete de mandatos de los usuarios involucrados a /sbin/nologin.
usermod -s /sbin/nologin perengano
A partir de este momento los usuarios involucrados podrán ingresar al sistema a través de SFTP, pero sólo podrán tener acceso a su directorio de inicio. Ejemplo:
[fulano@centos6 ~]$ sftp perengano@192.168.80.8 |
Accediendo con Nautilus a cuenta SFTP con chroot.
Para realizar transferencias de archivos a través de SCP, es necesario conocer las rutas de los directorios objetivo del anfitrión remoto. A continuación se describen algunas de las opciones más importantes de scp.
En el siguiente ejemplo se transferirá el archivo algo.txt —preservando tiempos y modos— hacia el directorio de inicio del usuario fulano en el servidor 192.169.0.99.
scp -p algo.txt fulano@192.168.100.15:~/
En el siguiente ejemplo se transferirá la carpeta Mail, junto con todo su contenido, preservando tiempos y modos, hacia el directorio de inicio del usuario fulano en el servidor 192.169.0.99.
scp -rp Mail fulano@192.168.100.15:~/
En el siguiente ejemplo se transferirá la carpeta Mail, junto con todo su contenido, desde el directorio de inicio del usuario fulano en el servidor 192.169.0.99, cuyo servicio de SSH escucha peticiones a través del puerto 52341, preservando tiempos y modos, hacia el directorio del usuario con el que se está trabajando en el anfitrión local.
scp -P 52341 -rp fulano@192.168.100.15:~/Mail ./
Por favor continúe con el documento titulado «OpenSSH con autenticación a través de firma digital.»