Sé que el título es simplemente el cebo de "su configuración es insegura", pero permítame explicarlo.
Estoy trabajando en una aplicación que tiene como objetivo permitir a los clientes sincronizar a través de SSH a nuestro servidor. Necesitamos una aplicación web desde la cual podamos crear / rotar claves SSH para nuestros usuarios. Esta aplicación devolverá una clave SSH privada al usuario para su uso futuro y almacenará el archivo authorized_keys del usuario de clave pública.
Al registrarse, tendremos que crear automáticamente el usuario y el directorio y las claves iniciales .ssh.
Estamos en CentOS 5 ahora, pero somos flexibles si hay razones suficientes para migrar. Este servidor ejecutará solo esta aplicación web en Apache (como apache: apache) y no se almacenarán más datos que los datos de usuario sincronizados en el sistema.
He estado pensando en la siguiente solución, pero he tenido problemas:
- Otorgue privilegios de sudo
useradd
al usuario de apache para permitirles crear nuevos usuarios - Llame a
sudo useradd
desde el script PHP en la aplicación web con una suma de 000 en el directorio de inicio que se acaba de crear. -
chgrp
el nuevo directorio de inicio aapache
para que apache pueda crear un nuevo directorio .ssh y escribir las claves. * -
chmod
el nuevo directorio de inicio a 770 para que solo el usuario y apache tengan acceso. * -
mkdir .ssh
en el nuevo directorio de inicio yssh-keygen
para crear la nueva clave, almacenando la clave pública enauthorized_keys
y devolviendo la clave privada al cliente que llama.
Los problemas que encuentro son con los puntos * d: parece que, incluso con chmod 777, no puedo chgrp
o chmod
el directorio, ya que se creó con el propietario y el grupo. Perteneciente al nuevo usuario.
He observado cambiar el grupo predeterminado del usuario a algo que le permita a apache escribir en él, pero no puedo encontrar una manera de hacerlo sin tener que otorgarle a apache usermod
sudo privilegios, lo que parece una muy mala idea.
¡Cualquier pensamiento sería apreciado!