Generalidades
Este artículo explica cómo proteger con contraseña tu directorio a través de SSH creando un archivo .htaccess y .htpasswd. Los siguientes pasos están cubiertos en este artículo.
Crear los archivos
Ejemplos de WordPress y HTTPS
- Código para proteger un subdirectorio de WordPress
- Forzar SSL (HTTPS) en la solicitud de inicio de sesión
Usar el panel para proteger con contraseña tu sitio
La forma más fácil de proteger con contraseña tu sitio es usar la herramienta en el panel DreamHost. Navega a la página Htaccess/WebDAV Luego puedes configurar la protección con contraseña allí.
Sin acceso a tus archivos .htaccess y .htpasswd
Sin embargo, ten en cuenta que si usas la opción de panel, los archivos .htaccess y .htpasswd serán propiedad del servidor. Esto significa que no podrás editar manualmente ninguno de estos archivos si es necesario. Además, estas instrucciones sobrescribirán cualquier archivo .htaccess existente. Asegúrate de hacer una copia de seguridad de tu archivo .htaccess existente antes de comenzar estos pasos.
Si solo necesitas proteger con contraseña tu sitio y necesitas acceso a tu archivo .htaccess y .htpasswd en cualquier momento en el futuro, debes usar las instrucciones de este artículo para crear manualmente esos archivos.
En los siguientes ejemplos, cambia username a tu usuario Shell y example.com a tu sitio web.
Paso 1 — Crear el archivo .htpasswd
Puedes usar un archivo .htaccess para proteger con una contraseña un archivo o carpeta mediante la autenticación básica.
- Inicia sesión en tu servidor a través de SSH.
- Navega al directorio que deseas proteger con una contraseña.
Si estás protegiendo con contraseña todo el sitio web, lo más probable es que sea example.com.
[server]$ cd ~/example.com
Si estás protegiendo con contraseña un subdirectorio como example.com/members, este iría a ese subdirectorio.
[server]$ cd ~/example.com/members
- Corre pwd para confirmar la ruta completa del archivo a este directorio. Necesitarás esta ruta completa en el siguiente paso.
[server]$ pwd /home/username/example.com
- Crea un archivo .htpasswd corriendo el siguiente comando en el directorio que deseas proteger con contraseña. Esto usa la utilidad htpasswd y la ruta completa al directorio. Por ejemplo, si el nombre de usuario que estás creando para iniciar sesión es user1, corre lo siguiente:
[server]$ htpasswd -c /home/username/example.com/.htpasswd user1
- Ingresa una contraseña para el nuevo usuario llamado user1. El código en tu archivo .htpasswd luego muestra la contraseña encriptada así:
user1:$apr1$bkS4zPQl$SyGLA9oP75L5uM5GHpe9A2
Córrelo de nuevo (sin la opción -c) para cualquier otro usuario que desees permitir el acceso a tu directorio.
- Confirma que los permisos están configurados en 644 corriendo el siguiente comando.
[server]$ chmod 644 .htpasswd
Revisa la siguiente página para más información:
Paso 2 — Crear el archivo .htaccess
A continuación, crea un archivo .htaccess usando el comando nano:
Asegúrate de agregar este archivo .htaccess en el mismo directorio en el que agregaste el archivo .htpasswd.
[server]$ nano .htaccess
Ejemplos de código para agregar al archivo .htaccess
Proteger un sitio web completo
Esta contraseña de ejemplo protege un sitio web completo al colocar los archivos en el directorio web principal del sitio.
Asegúrate de cambiar las líneas resaltadas por tu usuario, nombre de dominio y nombres de archivo específicos.
#Protect Directory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/.htpasswd
Require valid-user
Protege un solo archivo
Este ejemplo de contraseña protege un solo archivo llamado admin.php:
#Protect single file <Files admin.php> AuthName "Dialog prompt" AuthType Basic AuthUserFile /home/username/example.com/.htpasswd Require valid-user </Files>
Protege múltiples archivos
Este ejemplo protege múltiples archivos tales como admin.php y staff.php.
#Protect multiple files <FilesMatch "^(admin|staff).php$"> AuthName "Dialog prompt" AuthType Basic AuthUserFile /home/username/example.com/.htpasswd Require valid-user </FilesMatch>
Código para proteger un subdirectorio de WordPress
Debido a cómo WordPress enruta todas las solicitudes de página, intentar acceder a un subdirectorio protegido por contraseña arrojará un error 404 Not Found. Para resolver esto, debes añadir una línea adicional al archivo .htaccess para hacer referencia a ErrorDocument.
Este ejemplo protege un subdirectorio llamado members.
ErrorDocument 401 default #Protect Directory AuthName "Dialog prompt" AuthType Basic AuthUserFile /home/username/example.com/members/.htpasswd Require valid-user
Forzar SSL (HTTPS) en la solicitud de inicio de sesión
Los siguientes pasos no son necesarios si tu sitio redirige automáticamente a HTTPS. Este es el caso de los certificados SSL agregados después de septiembre de 2020.
Si tienes un SSL anterior que actualmente no se redirige automáticamente (sin agregar ningún código personalizado a tu archivo .htaccess), comunícate con soporte para obtener ayuda.
Si tu sitio no usa un certificado SSL,, la solicitud de inicio de sesión que ves no está encriptada. Esto significa que tu contraseña se enviará como texto sin formato a través de http. Para cifrar este inicio de sesión, debes agregar un certificado SSL a tu dominio. Una vez agregues el certificado SSL, agrega el código a continuación para forzar SSL al iniciar sesión.
Este método evita el envío de una solicitud de contraseña .htaccess en una conexión no cifrada. Si deseas asegurarte de que tu servidor sólo sirve documentos a través de un canal SSL encriptado, entonces debes usar la directiva SSLRequireSSL con la opción +StrictRequire habilitada:
Paso 1 — Agregar código a tu archivo .htaccess
Los siguientes ejemplos de código obligan a que se cargue el mensaje de inicio de sesión mediante HTTPS. Sin embargo, asegúrate de haber configurado correctamente la URL base y el subdominio www como se menciona abajo.
Configurar una URL de base
Asegúrate de que la URL que ingreses en seguida de SSLRequire es la URL base de tu sitio web. Por ejemplo:
- example.com: usa esto para el dominio primario o subdirectorio como example.com/blog
- blog.example.com: usa esto para un subdoninio
El subdominio 'www'
NO incluyas www en frente de la URL si estás forzando la eliminación del subdominio www en tu panel.
- example.com
Sin embargo, si estás forzando a que se agregue el subdominio www en tu panel , asegúrate de agregar www al nombre de dominio.
- www.example.com
Además, puedes usar cualquier nombre de archivo que desees para tu documento 403. Debajo se llama error_redirect.php.
Si estás protegiendo con contraseña todo el sitio web
El siguiente ejemplo de código asume que has creado los archivos .htaccess, .htpasswd, y error_redirect.php en el directorio principal del sitio que estás protegiendo con contraseña.
SSLOptions +StrictRequire SSLRequireSSL SSLRequire %{HTTP_HOST} eq "example.com"
ErrorDocument 403 /error_redirect.php <Files /error_redirect.php> AuthType none </Files> #Protect Directory AuthName "Dialog prompt" AuthType Basic AuthUserFile /home/username/example.com/.htpasswd Require valid-user
Si solo estás protegiendo con una contraseña un subdirectorio
Si solo deseas proteger un solo subdirectorio y no todo el sitio, especifica el subdirectorio en tu archivo .htaccess como se muestra en el siguiente código:
El siguiente ejemplo de código asume que has creado los archivos .htaccess, .htpasswd, y error_redirect.php en el subdirectorio que estás protegiendo con contraseña.
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq ".example.com"
ErrorDocument 403 /error_redirect.php
<Files /error_redirect.php>
AuthType none
</Files>
#Protect Directory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/blog/.htpasswd
Require valid-user
Paso 2 — Agrega código a tu archivo error_redirect.php
Ahora que tu .htaccess redirigirá a la página de error, debes colocar algún código en esta página de error para redirigir correctamente a al inicio de sesión seguro. Agrega el siguiente código PHP.
<?php header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); ?>
Si ahora intentas iniciar sesión, verás que tanto la URL como la solicitud de inicio de sesión cambian a https://example.com.
Problema con la renovación de un certificado 'Let's Encrypt'
El código puede hacer que un certificado 'Let's Encrypt' no se renueve correctamente. Si has agregado un certificado 'Let's Encrypt' a tu dominio, asegúrate de deshabilitar el código en tu archivo .htaccess cuando tu certificado esté a punto de renovarse. Una vez renovado, puedes volver a habilitar el código.