Mantén cada cuenta capaz de iniciar sesión con normalidad, pero permite que solo un grupo use la VPN. PAM puede expresar esa diferencia sin un segundo almacén de contraseñas, y el complemento de OpenVPN puede apuntarse a un servicio que contenga solo las comprobaciones que pretendes. El truco está en construir ese servicio sin heredar accidentalmente una pila de ámbito del sistema.

El recorrido que sigue parte del nombre de servicio del complemento, construye una política y luego prueba los tres resultados que importan: un miembro, un externo con una contraseña válida y una credencial incorrecta.

Por qué un servicio PAM aparte

El complemento auth-pam toma un nombre de servicio como argumento. Ese nombre selecciona un archivo bajo /etc/pam.d, y la pila de ese archivo es lo que se ejecuta durante un inicio de sesión VPN. Si le pasas el mismo nombre que usa un inicio de sesión del sistema, heredas cada decisión de esa pila, incluidas las que se añadieron después por motivos no relacionados.

Crea un servicio dedicado en su lugar. Parte de una pila funcional que ya autentique contra el backend previsto, como un archivo de contraseñas local, SSSD o un servicio de directorio, y luego añade la regla de elegibilidad. Copiar dos líneas en un archivo vacío es el error habitual: la caducidad de la contraseña, el bloqueo de la cuenta y otras comprobaciones pueden vivir en la pila que no copiaste.

Separar el servicio también limita el radio de daño. Una regla solo para VPN en una pila compartida puede denegar el acceso SSH o de consola a todos, lo que convierte un cambio de acceso en una caída.

Escribir la regla del grupo

La comprobación de elegibilidad corresponde a la fase de cuenta, después de verificar la credencial. Una regla como account required pam_succeed_if.so user ingroup vpnusers permite que el procesamiento continúe solo cuando el usuario autenticado es miembro de ese grupo.

Esa línea es un fragmento, no un servicio completo. Intégrala donde llegue cada ruta aceptada y revisa los indicadores de control que la rodean. Un control sufficient o un salto anterior en la pila puede terminar el procesamiento antes de que se ejecute tu regla, lo que convierte la restricción en una sugerencia.

No añadas use_uid por costumbre. Sin él, el módulo evalúa al usuario que se autentica; con él, el módulo evalúa la cuenta bajo la que se ejecuta el proceso de OpenVPN, que normalmente es root o una cuenta de servicio y, por tanto, no es la persona que inicia sesión.

La pertenencia al grupo proviene de la resolución de identidades del sistema, no de un nombre que reconozcas. Para los usuarios de directorio, confirma que el mismo backend responde a las consultas de grupo de ese usuario, porque un grupo local con un nombre familiar es un objeto distinto del grupo de directorio con el mismo nombre.

Trampas de orden e identidad

Coloca la regla del grupo después de la pila de autenticación y de cualquier comprobación que deba seguir aplicándose, pero antes o junto a las comprobaciones de cuenta que conserves. PAM evalúa los módulos en el orden del archivo, y el valor de control de cada línea decide si un fallo es definitivo.

Vigila las pilas duplicadas. Un patrón habitual es una inclusión que ya contiene una regla de cuenta, seguida de tu propia regla de grupo, lo que produce dos decisiones donde esperabas una. Lee el archivo incluido, no solo el que editaste. Una forma rápida de ver el orden efectivo es leer el archivo de arriba abajo y anotar cada valor de control.

Mantén intactos los demás requisitos de admisión. Una contraseña correcta no sustituye las comprobaciones de certificado, un segundo factor ni la autorización posterior a la conexión, y esta política no sustituye a ninguna de ellas. Solo decide si la cuenta es elegible para que se la considere para el acceso VPN.

Probar miembros, externos y contraseñas incorrectas

Prueba tres casos antes de dar la política por terminada. Un miembro se conecta correctamente. Una cuenta válida fuera del grupo autentica su contraseña, pero se le deniega el acceso VPN. Una contraseña incorrecta para cualquiera de las dos cuentas se rechaza en la fase de autenticación, no por la regla del grupo.

Mira el error visible para el cliente y el registro del servidor en conjunto, porque ambos fallos pueden parecer similares a la persona que se conecta. La distinción importa para el soporte: un externo con la contraseña correcta necesita un cambio de grupo, mientras que una contraseña incorrecta necesita un restablecimiento de la credencial.

Mantén una segunda sesión abierta mientras editas PAM y verifica también el inicio de sesión SSH normal después del cambio. El sentido del servicio dedicado es que el inicio de sesión del sistema quede intacto, y la única forma de saberlo es probarlo.

Si algo se rompe, restaura el archivo de servicio anterior desde una copia. La regla que quieres es sencilla de enunciar: la pertenencia hace que una cuenta sea elegible para el acceso VPN, y toda otra comprobación obligatoria sigue aplicándose.

Artículos relacionados