GNU/Linux >> Tutoriales Linux >  >> Linux

Servicio del sistema operativo Linux 'sshd'

El servicio sshd (Secure Shell Daemon) es parte de la implementación de OpenSSH para Linux que proporciona comunicación en red cifrada autenticada y de extremo a extremo. Por ejemplo, un usuario en un host puede iniciar sesión en otro sistema sin usar una contraseña porque el servicio sshd se puede configurar para usar técnicas de autenticación alternativas, como el intercambio de información de clave compartida.

OpenSSH utiliza una tecnología cliente/servidor. Un cliente, como un usuario que ejecuta el programa ssh, inicia una conexión con el servidor sshd en el host de destino. Los mensajes en el protocolo SSH se intercambian para autenticar al cliente en el host de destino y luego se permite o deniega el acceso remoto. Si está permitido, se crea una conexión TCP/IP para permitir que el cliente intercambie comandos y datos con una aplicación generada por el demonio sshd en el sistema de destino.

El beneficio de las herramientas OpenSSH es que todos los intercambios de comunicación están encriptados. La información de autenticación, como nombres de usuario, contraseñas y datos de sesión, nunca se transmite sin cifrar. A diferencia de alternativas como telnet o ftp, que utilizan exclusivamente transmisiones de texto claro.

El servidor opensh El paquete RPM proporciona el /usr/sbin/sshd daemon y sus archivos de configuración.

Existen dos versiones del protocolo de comunicación SSH, la versión 1 y la versión 2. Tanto el cliente, como scp, como el servidor sshd deben utilizar la misma versión de protocolo. El servidor sshd admite ambas versiones de protocolo de forma predeterminada, pero cada versión se configura por separado.

Las conexiones entre el cliente y el demonio sshd se realizan en el puerto TCP/IP 22 de forma predeterminada, utilizando los protocolos UDP o TCP. Primero, el cliente y el servidor deben acordar un método de cifrado:el sshd envía una lista de cifrados admitidos y el cliente selecciona su preferencia. El servidor identifica su host usando la /etc/ssh/ssh_host_key (versión 1 del protocolo) o uno de /etc/ssh/ssh_host_[rd]sa_key (protocolo versión 2). Esto permite que el cliente detecte la suplantación de IP o los ataques de intermediarios. Con la identificación del host verificada, el cliente prueba uno o más métodos de autenticación para establecer las credenciales de acceso al sistema para el usuario. Las claves de encriptación públicas se prueban primero, y se recurre a los desafíos tradicionales de contraseñas. Usando el cliente ssh, la negociación completa se puede ver agregando interruptores "-v", como este:

$ ssh -vvv myhost.example.com

El demonio sshd usa el /etc/pam.d/sshd para determinar las reglas de autenticación necesarias para su host. El paquete RPM de openssh-server proporciona un archivo predeterminado y es adecuado para la mayoría de los sitios.

Después de autenticar el acceso del usuario, el demonio sshd(8) inicia el programa de aplicación deseado del cliente con los archivos estándar de entrada/error/salida (stdin, stderr, stdout) adjuntos a la sesión TCP/IP.

Las funciones y el comportamiento disponibles con el demonio sshd(8) están controlados por un archivo de configuración de todo el sistema /etc/ssh/sshd_config. Se proporciona un archivo predeterminado con el paquete RPM, pero se puede editar para adaptarse a los requisitos locales. Por ejemplo, para evitar los inicios de sesión de raíz mediante ssh, la configuración de sshd_config se puede cambiar como en este fragmento:

# vi /etc/ssh/sshd_config
PermitRootLogin no

Control de servicios

Para administrar el servicio sshd a pedido, use el comando de servicio o ejecute el script /etc/init.d/sshd directamente:

# /sbin/service sshd help
Usage: /etc/init.d/sshd {start|stop|restart|reload|condrestart|status}
# /etc/init.d/sshd help
Usage: /etc/init.d/sshd {start|stop|restart|reload|condrestart|status}

Los comandos disponibles son:

Comando Descripción
inicio Inicie el demonio sshd.
detener Detenga el demonio sshd .
reiniciar Equivalente a una secuencia de comando de parada y luego de inicio.
recargar Obligar al demonio sshd a volver a leer sus archivos de configuración sin interrumpir el servicio.
condrestart Si el demonio sshd se está ejecutando actualmente, esto es lo mismo que un comando de reinicio. Si el demonio no se está ejecutando, no se realiza ninguna acción. A menudo se usa en la instalación de paquetes RPM para evitar iniciar un servicio que aún no se está ejecutando.
estado Si el demonio sshd se está ejecutando, informe su PID (ID de proceso). Si no se está ejecutando, infórmelo también.

El demonio sshd suele iniciarse con el servicio sshd o con el demonio xinetd(8). Es posible proporcionar argumentos de línea de comandos directamente, pero no suele hacerse. En su lugar, se pueden proporcionar argumentos de línea de comandos adicionales al demonio sshd(8) creando el archivo /etc/sysconfig/sshd y definiendo la variable ${OPTIONS}:

# Additional command line options for sshd
OPTIONS="-q"

Este ejemplo activará el modo silencioso, evitando que sshd registre el comienzo, la autenticación y el final de cada sesión. Consulte la página del manual en línea de sshd para obtener detalles sobre las opciones de línea de comandos disponibles.

Configuración

Para administrar el servicio sshd en el momento del arranque, use la herramienta chkconfig:

# /sbin/chkconfig --list sshd
sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# /sbin/chkconfig sshd on
# /sbin/chkconfig --list sshd
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Se utiliza una variedad de archivos de configuración para adaptar el demonio sshd para la operación dependiente del sitio. Estos se describen a continuación:

Ruta del archivo de configuración Descripción
/etc/ssh/sshd_config Archivo de configuración requerido. La mayoría de los valores predeterminados se proporcionan como comentarios.
/etc/ssh/ssh_host_key Contiene la clave de host utilizada para la versión 1 del protocolo SSH. Solo se necesita si se utiliza la versión 1 del protocolo.
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_dsa_key
Contiene la clave de host utilizada para la versión 2 del protocolo SSH. Solo se necesita si se utiliza la versión 2 del protocolo.
/etc/motd Mensaje del archivo del día presentado al cliente ssh al iniciar sesión correctamente.
~/.hushlogin Si el archivo existe, ssh no muestra el archivo /etc/motd al iniciar sesión correctamente.
/etc/nologin Si el archivo existe, el cliente muestra su contenido y la sesión finaliza. Ignorado para inicios de sesión raíz.
~/.ssh/entorno Si el archivo existe y se establece el parámetro sshd_config PermitUserEnvironment, las variables de entorno de shell de este archivo se exportan a la sesión SSH.
~/.ssh/rc
/etc/ssh/sshrc
Los archivos se comprueban en el orden que se muestra y se ejecuta el primero que se encuentra. Si no se encuentra ninguno, se ejecuta la utilidad xauth .
~/.ssh/claves_autorizadas Enumera las claves públicas utilizadas para la autenticación de sesión RSA.
~/.ssh/hosts_conocidos
/etc/ssh/ssh_known_hosts
Contener claves públicas de host para todos los hosts conocidos. El archivo por usuario se mantiene automáticamente. El administrador del sistema mantiene el archivo global opcional.
/etc/módulos
/etc/ssh/moduli
Al contrario de la página del manual, el archivo /etc/moduli no se usa en esta implementación. El archivo /etc/ssh/moduli contiene grupos Diffie-Hellman utilizados para la negociación del protocolo "Diffie-Hellman Group Exchange".
/var/vacío/sshd directorio chroot usado durante la separación de privilegios antes de completar la fase de autenticación. Este directorio, que es propiedad de root y no se puede escribir en todo el mundo, normalmente solo contiene un archivo etc/localtime para la presentación de fecha y hora.
/etc/hosts.permitir
/etc/hosts.deny
Controles de acceso que debe aplicar la función tcp_wrappers . Consulte tcpd para obtener más detalles.
~/.rhosts Se utiliza para autenticación RSA o autenticación basada en host. Lista de pares de nombre de usuario/nombre de host para identificar inicios de sesión que no requieren un intercambio de contraseña.
~/.shosts Similar a ~/.rhosts, pero ignorado por las utilidades rlogin o rshd.
/etc/hosts.equiv Lista de hosts donde no se requieren desafíos de contraseña siempre que el nombre de usuario coincida en los hosts del cliente y del servidor. Si una línea también contiene un nombre de usuario, ese usuario en la máquina del cliente puede iniciar sesión en cualquier cuenta de servidor, incluso en la cuenta raíz del host; esto generalmente no se recomienda.
/etc/shosts.equiv Procesado de manera idéntica al archivo /etc/hosts.equiv , los demonios rsh y rshd ignoran este archivo.

Archivo de configuración /etc/ssh/sshd_config

A continuación se muestra un archivo de configuración de muestra /etc/ssh/sshd_config.

#	$OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
# problems.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation sandbox
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

# override default of no subsystems
Subsystem sftp	/usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server


Linux
  1. Servicio del sistema operativo Linux 'dhcpd'

  2. Servicio de sistema operativo Linux 'nfs'

  3. Servicio del sistema operativo Linux 'microcode_ctl'

  4. Servicio del sistema operativo Linux 'hplip'

  5. Servicio del sistema operativo Linux 'irqbalance'

Servicio de sistema operativo Linux 'ldap'

Servicio del sistema operativo Linux 'yppasswdd'

Servicio de sistema operativo Linux 'xendomains'

Servicio del sistema operativo Linux 'nscd'

Servicio de sistema operativo Linux 'calamar'

Servicio de sistema operativo Linux 'smartd'