Rocky Linux / Instalar PostgreSQL y configurar roles y acceso remoto
En Rocky Linux, puede instalar PostgreSQL con postgresql-server del repositorio de la distribución. Inicialice el clúster únicamente si es una instalación nueva sin datos existentes y active el servicio correspondiente al paquete. Para acceso remoto, coordine la escucha, las reglas de autenticación, el cortafuegos y TLS.
La versión principal de PostgreSQL y el nombre del servicio que se proporcionan pueden variar según la versión de Rocky Linux y los repositorios activos. Antes de la instalación, verifique los paquetes disponibles y la versión requerida por la aplicación.
Verificar las versiones de PostgreSQL disponibles para la instalación
cat /etc/rocky-release
dnf info postgresql-server
dnf module list postgresql
dnf module puede no estar disponible según la versión de Rocky Linux y DNF. Si necesita una versión principal específica de PostgreSQL, primero decida si utilizará el ciclo de vida del repositorio predeterminado de Rocky o los repositorios PGDG proporcionados por el proyecto PostgreSQL, y no mezcle paquetes del servidor de diferentes repositorios.
Instalar e inicializar PostgreSQL
Instalación del servidor y del cliente
sudo dnf install postgresql-server postgresql
Verifique la versión y los paquetes instalados.
psql --version
rpm -q postgresql-server postgresql
Inicializar el clúster de bases de datos
En el paquete básico de Rocky, generalmente se utilizan las siguientes herramientas.
sudo postgresql-setup --initdb
La inicialización se realiza solo una vez en un directorio de datos vacío. Si se reinicializa en un servidor con datos existentes, se puede crear un clúster separado o existir riesgo de corrupción de datos, por lo que debe verificar primero el directorio de datos y la copia de seguridad.
sudo postgresql-setup --help
Inicio del servicio y ejecución automática
sudo systemctl enable --now postgresql
systemctl status postgresql
Los paquetes por versión del repositorio PGDG pueden tener nombres de servicios y comandos de inicialización diferentes, como postgresql-16. Verifique la guía oficial del paquete instalado y el resultado de systemctl list-unit-files 'postgresql*'.
Conexión local y configuración de seguridad básica
Conectarse con la cuenta del sistema operativo postgres
sudo -iu postgres psql
La autenticación local inicial puede ser del tipo peer, que vincula la cuenta del sistema operativo con el rol de la base de datos. La contraseña del rol postgres en PostgreSQL y la contraseña de la cuenta postgres en Linux son diferentes.
Configurar la contraseña de manera segura
Dentro de la sesión psql abierta con sudo -iu postgres psql, ejecute las órdenes SQL y las órdenes que empiezan por barra invertida; estas últimas no son comandos de la shell. Antes de fijar contraseñas destinadas a una regla SCRAM, ejecute SET password_encryption = 'scram-sha-256'; en esa sesión y después \password. Así no depende del valor predeterminado de una versión antigua. Compruebe también que el cliente admita SCRAM, según la documentación de autenticación por contraseña. La orden interactiva evita escribir la contraseña literal en el historial.
\password postgres
No use el superusuario postgres para la aplicación. El ejemplo crea un rol nuevo y lo hace propietario de su propia base de datos; no lo convierte en superusuario del servidor. Si el rol o la base ya existen, revise sus atributos antes de repetir órdenes y no los elimine para evitar el error. Tras las consultas SHOW, salga de psql con \q para volver a la shell antes de ejecutar firewall-cmd o systemctl.
CREATE ROLE appuser LOGIN;
\password appuser
CREATE DATABASE appdb OWNER appuser;
Verificar la ubicación real del archivo de configuración
SHOW config_file;
SHOW hba_file;
SHOW data_directory;
La ruta puede variar según el paquete y la versión, así que no suponga la ruta basada en documentos de Internet; use los valores que indique el servidor.
Permitir conexiones remotas de manera segura
Restringir las direcciones de escucha
Se recomienda limitar listen_addresses de postgresql.conf a una IP privada específica del servidor.
listen_addresses = '192.0.2.20'
192.0.2.20 es un ejemplo para documentación. Cambie por la dirección real del servidor. * representa todas las interfaces, lo cual es conveniente pero puede exponerse a redes innecesarias. El valor predeterminado de PostgreSQL es la conexión de loopback local; puede consultar su significado detallado en la documentación oficial de configuración de conexiones de PostgreSQL.
Restringir clientes y autenticación en pg_hba.conf
Por ejemplo, si desea que solo un servidor de aplicaciones específico acceda a la base de datos appdb con el rol appuser, puede revisar los siguientes registros.
hostssl appdb appuser 192.0.2.10/32 scram-sha-256
hostssl requiere que el servidor admita TLS y tenga ssl=on, un certificado válido y su clave privada configurados mediante ssl_cert_file y ssl_key_file. Las rutas relativas se interpretan desde el directorio de datos. Prepare esos archivos y sus permisos para la cuenta que ejecuta PostgreSQL antes de probar el acceso; una regla hostssl no crea certificados ni activa TLS por sí sola. No abra el puerto antes de preparar la autenticación y el cifrado.
pg_hba.conf se examina de arriba hacia abajo y solo se utiliza la primera regla que coincida. Si coloca una regla de permiso amplia al principio, las reglas de restricción posteriores no se aplicarán. Para detalles de campos y el orden, consulte la documentación oficial de PostgreSQL pg_hba.conf.
Restringir la dirección de origen también en el firewall
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.10/32" port port="5432" protocol="tcp" accept'
Antes de conservar reglas, pruebe desde el cliente autorizado y revise la zona activa: public y las direcciones 192.0.2.x son ejemplos que debe adaptar. El siguiente --runtime-to-permanent guarda la configuración temporal completa, incluidos otros cambios. Úselo solo tras revisar todas las zonas; si desea conservar únicamente esta regla, repita esa misma orden --add-rich-rule con --permanent. Una regla restringida no anula permisos amplios ya existentes.
sudo firewall-cmd --runtime-to-permanent
No exponga directamente los puertos de la base de datos a toda Internet; use una red privada, VPN, grupos de seguridad y firewall en conjunto.
Aplicación y verificación de la configuración
Volver a leer las reglas de autenticación
Los cambios recargables, como pg_hba.conf, se vuelven a leer al solicitar la recarga siguiente. Un resultado verdadero de pg_reload_conf() indica que se envió la señal; confirme en los registros y en una conexión nueva que el servidor aceptó la configuración. La vista pg_hba_file_rules ayuda a detectar errores de las líneas del archivo, pero no sustituye la prueba de autenticación.
sudo -iu postgres psql -c 'SELECT pg_reload_conf();'
La sintaxis de las reglas puede consultarse en la vista del sistema.
sudo -iu postgres psql -c 'SELECT line_number, type, database, user_name, address, auth_method, error FROM pg_hba_file_rules;'
Aplicar configuraciones que requieren reinicio
Las configuraciones que se aplican al iniciar el servidor, como listen_addresses, requieren reinicio.
sudo systemctl restart postgresql
sudo systemctl status postgresql
Probar el puerto de escucha y la conexión
ss -lntp | grep 5432
psql 'host=192.0.2.20 dbname=appdb user=appuser sslmode=verify-full'
En el cliente, sslmode=verify-full requiere confiar en la autoridad certificadora (CA) del servidor y verificar su identidad. En un cliente Linux, puede instalar la CA en ~/.postgresql/root.crt o indicar su ruta con sslrootcert. Sustituya 192.0.2.20 por el nombre o dirección real que figure en el certificado; si usa una IP, el certificado debe admitir esa identidad. El servidor presenta su certificado y conserva su clave privada. Consulte las reglas de verificación TLS de libpq; no desactive la verificación para ocultar un error de identidad.
Elementos a preparar antes de la operación
- Copias de seguridad lógicas y físicas periódicas y pruebas reales de recuperación
- Plan de aplicación de actualizaciones menores compatibles
- Roles de permiso mínimo por aplicación y rotación de contraseñas
- Verificación del certificado TLS y uso de red privada o VPN
- Monitoreo del uso del disco, número de conexiones, latencia, puntos de control y registros de errores
- Revisión de compatibilidad y preparación de procedimientos separados antes de la actualización de versión principal
La actualización de versión principal de PostgreSQL no es lo mismo que una simple actualización de paquete. Planifique una ruta admitida para las versiones de origen y destino: pg_upgrade, replicación lógica o volcado y restauración, según las condiciones documentadas.
Preguntas frecuentes
No se encuentra el comando postgresql-setup
Verifique el repositorio y el nombre del paquete instalado. Los paquetes básicos de Rocky y los paquetes PGDG por versión pueden tener nombres de herramientas de inicialización y servicios diferentes.
El acceso externo sigue siendo rechazado.
Verifique en orden la primera regla de coincidencia de listen_addresses, pg_hba.conf, el puerto de servicio de recepción, firewalld y el grupo de seguridad en la nube.
¿Está bien permitir 0.0.0.0/0 en pg_hba.conf?
Como coincide con toda la Internet, generalmente se debe evitar. Limítelo a las direcciones fijas del servidor de aplicaciones real o a una subred privada, y use TLS y permisos mínimos.
Después de cambiar el archivo de configuración, ¿debo usar reload o restart?
Depende de cada elemento. pg_hba.conf puede hacer reload, pero listen_addresses necesita reinicio. Verifique pg_settings.pending_restart y el contexto de la documentación oficial.




