
Parece que postgresql admite cualquiera de los siguientes
- Utilice tcp (es decir, localhost:5432) con autenticación de contraseña
- Utilice el scoket de dominio Unix (es decir, /var/run/postgresql/.s.PGSQL.5432) con autenticación de pares/confianza
¿Es posible tener una contraseña con un socket de dominio Unix?
Fondo:
Utilizo php-fpm para ejecutar múltiples aplicaciones. Quiero que diferentes aplicaciones tengan diferentes bases de datos y contraseñas, pero se ejecutarán como el mismo usuario (www-data). Por lo tanto, la autenticación de pares/confianza no es buena, ya que si una aplicación se ve comprometida, también puede leer datos de la otra aplicación. Tampoco puedo usar la autenticación TCP porque ejecuto el servicio php-fpm para PrivateNetwork=yes
asegurarme de que las aplicaciones no puedan realizar solicitudes externas. Además, los sockets de dominio Unix tienen un mejor rendimiento que tcp.
Respuesta1
- Utilice tcp (es decir, localhost:5432) con autenticación de contraseña
- Utilice el scoket de dominio Unix (es decir, /var/run/postgresql/.s.PGSQL.5432) con autenticación de pares/confianza
Esa es una configuración predeterminada típica, pero no un comportamiento predeterminado.
Es del lado del servidorpg_hba.confArchivo de configuración que indica qué método de autenticación se utiliza según el tipo y origen de la conexión, y la base de datos de destino y el nombre de usuario.
A menudo hay esta línea en las primeras reglas, que activan la peer
autenticación para los sockets de dominio local de Unix:
# "local" is for Unix domain socket connections only
local all all peer
Para solicitar una contraseña, reemplácela con
# "local" is for Unix domain socket connections only
local all all md5
(o el más moderno scram-sha-256
en lugar de md5
si el servidor tiene contraseñas hash con SCRAM, disponible desde Postgres 10).
A menudo también existe esta regla más específica arriba en la configuración, para el usuario de Postgres:
# Database administrative login by Unix domain socket
local all postgres peer
Puedes dejarlo como está o cambiarlo también dependiendo de tu caso. Las reglas se interpretan en el orden de aparición, por lo que las reglas más específicas van en primer lugar.
Respuesta2
No estoy familiarizado con php-fpm, pero generalmente en Postgres, si omite el host en la cadena de conexión, pero especifica el nombre de usuario, entonces se conecta como el usuario especificado. Al menos ese es el comportamiento documentado, por ejemplo, en psql
.
entonces eso resuelve
Si una aplicación se ve comprometida, también puede leer datos de la otra aplicación.
Por ejemplo, puede configurar un esquema para cada aplicación, tener un usuario para cada aplicación y solo permitir que el usuario acceda al esquema correspondiente.
Debe asegurarse en php-fm de que alguien con permisos de www-data no pueda influir en la elección del usuario.
Sin embargo, no te proporciona contraseñas. (Pero las contraseñas almacenadas en scripts no son más seguras de todos modos...)