2008-12-02 24 views
10

Estoy escribiendo un conjunto de aplicaciones basadas en bases de datos en PHP. Estas aplicaciones se ejecutarán en un servidor Linux como su propio usuario. Es probable que otros usuarios estén en el sistema a veces, pero tienen un acceso muy controlado. Otros servidores a los que no tendrán acceso en absoluto. También expondré una API de procedimiento almacenado de límite a los desarrolladores que necesitan escribir scripts de Perl que accedan a la base de datos usando un DBI y un conjunto de funciones que escribo.¿Cuál es la mejor manera de asegurar una cadena de conexión de base de datos?

Mi pregunta es ¿cuál es la mejor manera de proteger los archivos de configuración que tienen cadenas de conexión en ellos?

¿Es un usuario diferente con [4+] 00 permisos suficientes en el archivo? ¿Debería encriptarlos? Eso parece cambiar el problema a otra parte, por lo que me preocupa dónde almacenar una clave de cifrado. Me doy cuenta de que los desarrolladores de Perl necesitarán tener una cadena de conexión propia, ya que solo tendrán permisos para ejecutar la base de datos.

+0

¿es esta una aplicación de línea de comandos o una aplicación web? –

+0

Creo que es seguro asumir que PHP == aplicaciones web en más del 99% de los casos. –

+0

Es una pregunta legítima. Partes del sistema realmente usan la CLI. –

Respuesta

7

Si la máquina realmente se está administrando de la manera tradicional de Unix, donde J. El usuario aleatorio no está desatendiendo para rootear todo el tiempo, diría que los permisos del sistema de archivos son su mejor opción. Si alguien obtiene acceso raíz no autorizado, ninguna cantidad de locura de encriptación va a "asegurar" la cadena de conexión.

Marcaré los archivos con la cadena de conexión como propiedad del "usuario de script" y les daré acceso como usted describe.

(Bravo para darse cuenta de que el cifrado de la cadena de conexión no le compra nada, en este ejemplo. Seguridad por oscuridad es contraproducente.)

+0

Buena afirmación de lo que estaba pensando. No voy a usar sudo en absoluto. La seguridad me vuelve loco a veces porque no puede ser perfecto. –

0

Mi mejor solución hasta el momento ha sido para almacenar archivos de configuración en una Partición cifrada para que las personas con acceso directo a la máquina no puedan extraer las contraseñas conectando la unidad a otra PC y con permisos del sistema de archivos para que la gente no pueda leer el archivo desde el propio sistema operativo.

Debe comprender, sin embargo, que no hay mucho que pueda hacer contra un atacante con acceso directo a la máquina. Si ejecuta el servidor de la base de datos, proteger los archivos de configuración no tendrá mucho efecto si puede modificar la base de datos. Solo asegúrate de que todo esté tan seguro como sea posible y probablemente estés bien.

2

Aquí hay un enlace a un módulo de Apache libre que ayuda a gestionar el acceso a un almacén de contraseñas:

http://uranus.it.swin.edu.au/~jn/linux/php/passwords.htm

Parece un poco complicado para mí, y requiere ejecutar PHP bajo mod_php. Y aún no aborda la posibilidad de que personas no autorizadas que tienen acceso al servidor puedan leer su archivo de contraseñas.

Creo que tiene que confiar en los permisos de archivos y confiar en que las personas no autorizadas no tienen la capacidad de sudo en su UID de la aplicación PHP, o en la raíz.

Cuestiones relacionadas