{"id":434,"date":"2021-06-26T22:09:10","date_gmt":"2021-06-27T01:09:10","guid":{"rendered":"https:\/\/blog.galsoft.duckdns.org\/?p=434"},"modified":"2021-06-26T22:44:47","modified_gmt":"2021-06-27T01:44:47","slug":"ssh-autenticacion-de-2-factores","status":"publish","type":"post","link":"https:\/\/blog.galsoft.com.ar\/?p=434","title":{"rendered":"SSH: Autenticaci\u00f3n de 2 factores"},"content":{"rendered":"<h3 class=\"wp-block-heading\">Usuario y clave con One Time Password (Google Authenticator o Latch OTP)<\/h3>\n<p>En esta parte del manual, vamos a autenticarnos con el usuario\/contrase\u00f1a de siempre, pero adem\u00e1s, deberemos usar un OTP con Google Authenticator o Latch OTP para entrar en la sesi\u00f3n. Es decir, dotaremos al servidor SSH de verificaci\u00f3n en dos pasos.<\/p>\n<p>Lo primero que debemos hacer es instalar una serie de dependencias necesarias para poder configurar la doble autenticaci\u00f3n en nuestro servidor SSH. Para ello abriremos un terminal y teclearemos:<\/p>\n<p><code>&lt;span class=&quot;has-inline-color has-black-color&quot;&gt;$ sudo apt install libpam0g-dev make gcc wget ssh&lt;\/span&gt;<\/code><\/p>\n<p>Una vez que las dependencias est\u00e1n instaladas en nuestro sistema ya podemos descargar el software para la doble autenticaci\u00f3n.<\/p>\n<p>$ <span class=\"has-inline-color has-black-color\">sudo apt install libpam-google-authenticator<\/span><\/p>\n<p>Ya tenemos instalado Google Authenticator en nuestro sistema operativo. Los siguientes pasos a seguir son la configuraci\u00f3n de la herramienta para poderla utilizar en nuestro SSH.<\/p>\n<p>Para comenzar con la configuraci\u00f3n de Google Authenticator simplemente debemos teclear en el terminal:<\/p>\n<p>$ <code>&lt;span class=&quot;has-inline-color has-black-color&quot;&gt;google-authenticator&lt;\/span&gt;<\/code><\/p>\n<p><strong>NOTA: Ejecutarlo sin permisos de root (sudo), es decir, ejecutarlo como usuario \u00abnormal\u00bb. Si lo ejecutas como root, ese Google Auth solo estar\u00e1 disponible en el propio root, y al deshabilitarlo en el propio SSH no har\u00e1 nada.<\/strong><\/p>\n<p>A continuaci\u00f3n veremos un sencillo asistente desde el terminal. Lo primero que nos preguntar\u00e1 es si queremos que nuestros tokens de acceso est\u00e9n basados en el tiempo. A continuaci\u00f3n veremos la clave privada, la clave de verificaci\u00f3n y los c\u00f3digos de emergencia si no tenemos nuestro m\u00f3vil a mano. Debemos guardar todos estos datos de forma segura de manera que podamos recuperar el acceso en caso de p\u00e9rdida de la clave de autenticaci\u00f3n.<\/p>\n<p>Despu\u00e9s le decimos que guarde los cambios en el archivo de nuestra carpeta \/home y nos preguntar\u00e1 si queremos que cada token sea utilizado una \u00fanica vez, aunque eso limite a un inicio de sesi\u00f3n cada 30 segundos. Para protegernos frente a posibles ataques MITM seleccionamos que s\u00ed. Por \u00faltimo, nos preguntar\u00e1 si queremos ampliar el periodo de validez de cada c\u00f3digo en lugar de solo 1 minuto y 30 segundos (para evitar problemas de sincronizaci\u00f3n de tiempo). Para evitar ataques de fuerza bruta tambi\u00e9n podemos limitar las conexiones a 3 por cada 30 segundos.<\/p>\n<p>El escaneo del c\u00f3digo QR o la introducci\u00f3n manualmente de c\u00f3digo se puede realizar en programas como Google Authenticator, Authy, Latch y un largo etc\u00e9tera. Recomendamos el uso de Google Authenticator o Latch.<\/p>\n<p>El siguiente paso que debemos hacer es abrir el fichero de configuraci\u00f3n de \u00absshd\u00bb para indicarle que utilice este m\u00f3dulo para el inicio de sesi\u00f3n. Para ello podemos teclear: <\/p>\n<p>$ <code>&lt;span class=&quot;has-inline-color has-black-color&quot;&gt;sudo nano \/etc\/pam.d\/sshd&lt;\/span&gt;<\/code><\/p>\n<p>Y a\u00f1adiremos al final del fichero la siguiente l\u00ednea:<\/p>\n<p><code>&lt;span class=&quot;has-inline-color has-black-color&quot;&gt;auth required pam_google_authenticator.so&lt;\/span&gt;<\/code><\/p>\n<p>Guardamos los cambios y abrimos el fichero\u00a0sshd_config con el siguiente comando:<\/p>\n<p><strong><span class=\"has-inline-color has-black-color\">$ <\/span><\/strong><code>&lt;span class=&quot;has-inline-color has-black-color&quot;&gt;sudo nano \/etc\/ssh\/sshd_config&lt;\/span&gt;<\/code><\/p>\n<p>Y cambiamos la l\u00ednea \u00ab<strong>ChallengeResponseAuthentication no<\/strong>\u00bb por \u00ab<strong>ChallengeResponseAuthentication yes<\/strong>\u00bb.<\/p>\n<p>Reiniciamos el servidor con \u00absudo \/etc\/init.d\/ssh restart\u00bb y una vez que vuelva a arrancar, ya tendremos la autenticaci\u00f3n en dos pasos habilitada.<\/p>\n<p>Una vez hecho, con el inicio de sesi\u00f3n tambi\u00e9n nos pedir\u00e1 una clave de un solo uso, el c\u00f3digo generado por nuestra aplicaci\u00f3n m\u00f3vil.<\/p>\n<h3 class=\"wp-block-heading\">Clave p\u00fablica SSH con One Time Password (Google Authenticator o Latch OTP)<\/h3>\n<p>La configuraci\u00f3n a nivel de clave p\u00fablica debe ser exactamente igual que antes, y a nivel de instalaci\u00f3n y configuraci\u00f3n del Google Authenticator tambi\u00e9n. La \u00fanica diferencia es que en el fichero\u00a0<strong>sshd_config<\/strong>\u00a0deberemos tener algo as\u00ed:<\/p>\n<p><code>&lt;span class=&quot;has-inline-color has-black-color&quot;&gt;PasswordAuthentication no&lt;br&gt;ChallengeResponseAuthentication yes&lt;br&gt;PubKeyAuthentication yes&lt;br&gt;UsePAM yes&lt;br&gt;AuthenticationMethods publickey,keyboard-interactive&lt;\/span&gt;<\/code><\/p>\n<p>Y en el fichero <strong>\/etc\/pam.d\/sshd<\/strong> debemos tener algo como esto:<\/p>\n<p><code>&lt;span class=&quot;has-inline-color has-black-color&quot;&gt;#@include common-auth&lt;br&gt;auth required pam_google_authenticator.so&lt;\/span&gt;<\/code><\/p>\n<p>Muy importante poner una almohadilla (#) para comentar el @include, de esta forma, nos autenticaremos correctamente con clave p\u00fablica m\u00e1s el c\u00f3digo OTP generado por el m\u00f3vil. De esta forma, estaremos dici\u00e9ndole al servidor que acepte autenticaci\u00f3n con clave p\u00fablica \u00fanicamente.<\/p>","protected":false},"excerpt":{"rendered":"<p>Usuario y clave con One Time Password (Google Authenticator o Latch OTP) En esta parte del manual, vamos a autenticarnos con el usuario\/contrase\u00f1a de siempre, pero adem\u00e1s, deberemos usar un OTP con Google Authenticator o Latch OTP para entrar en la sesi\u00f3n. Es decir, dotaremos al servidor SSH de verificaci\u00f3n en dos pasos. Lo primero [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"off","ocean_gallery_id":[],"footnotes":""},"categories":[1],"tags":[],"class_list":["post-434","post","type-post","status-publish","format-standard","hentry","category-linux","entry"],"_links":{"self":[{"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=\/wp\/v2\/posts\/434","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=434"}],"version-history":[{"count":6,"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=\/wp\/v2\/posts\/434\/revisions"}],"predecessor-version":[{"id":442,"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=\/wp\/v2\/posts\/434\/revisions\/442"}],"wp:attachment":[{"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=434"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=434"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.galsoft.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}