vsftpd - PAM - MySQL y pam_mkhomedir para crear directorios


11

He estado usando con éxito vsftpd con usuarios virtuales que se conectan con PAM a mi base de datos mysql. Ahora me gustaría automatizar la creación de directorios de usuarios con una conexión vsftpd exitosa.

Aquí está la configuración /etc/pam.d/vsftpd:

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
account required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
session required pam_mkhomedir.so skel=/home/skel/ umask=0022 debug

Agregar pam_mkhomedir ahora solo muestra que no puede crear el directorio sin ningún otro mensaje en ningún registro. Entonces obviamente no se está aplicando. ¿Hay algo más que necesito?

Mi /etc/vsftpd/vsftpd.conf:

# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=YES

# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=vsftpd
chroot_local_user=YES
listen=YES

# here we use the authentication module for vsftpd to check users name and passw
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=YES
# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
download_enable=NO

force_local_data_ssl=NO
force_local_logins_ssl=NO

# PASV - passive ports for FTP 
pasv_enable=YES
pasv_min_port=14000
pasv_max_port=14100

Vi una publicación que decía que necesitaba esto en mi vsftpd.conf, así que también probé esto:

session_support=YES

Pero ahora ya no parece autenticarse como muestran los registros:

Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_keyinit(vsftpd:session): Unable to look up user "user1"
Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_mkhomedir(vsftpd:session): User unknown.

Esto es incluso si ya he creado el directorio. Ahora nadie puede entrar.

¿Algunas ideas?


Hola, ¿alguna vez pudiste resolver este problema?
George

@George No, en absoluto.
Tom

Resolví el problema de una manera muy diferente, me alejé de vsftpd y me fui con pureftp. Configuración y ejecución en un par de horas sin todos estos problemas. Funciona perfectamente.
George

¿Es / home / vsftpd propiedad de vsftpd?
Luca Gibelli

Respuestas:


0

Para que las búsquedas de usuarios por el módulo PAM tengan éxito, debe habilitar el módulo NSS para MySQL en nsswitch.conf(5). nss_mysqles tu amigo.


¿Alguna referencia que pueda proporcionar sobre esto? ¿Parece que no puedo encontrar nada sobre la necesidad nss-mysqlen mi contexto?
Tom

¿Cómo pam_mkhomedirva a descubrir la ruta al directorio de inicio del usuario que se supone que debe crear? ¿Cómo sabe qué base de datos usar para resolver el usuario? NSS le proporciona esa información. En su caso, necesitará nss_mysql , suponiendo que su base de datos de usuario esté almacenada en una base de datos MySQL.
Ashish SHUKLA

Solo estoy tratando de averiguar algo sobre esta biblioteca. El enlace que proporcionó es un proyecto muy antiguo sin documentación. Si instalo esto, no da ninguna indicación sobre qué poner en su nssswitch.conf. Solo que puede contener 3 parámetros. ¿Puedes proporcionar algún tipo de orientación? ¿Parece que pam_mysql es lo mismo que nss-mysql? Tengo pam_mysql trabajando donde usa mysql db para autenticarse con usuarios virtuales vsftpd.
Tom

PAM no es lo mismo que NSS . PAM está dirigido a la autenticación, mientras que el objetivo de NSS es resolver nombres (nombres de host, nombres de usuario, etc.). La mayoría de las distribuciones proporcionan un paquete nss_mysql, por ejemplo, Debian y derivados lo proporcionan como libnss-mysql. Y sí, no se actualizó durante media década, pero funciona bien. Una vez que instale el módulo, configúrelo y agréguelo a su nsswitch.conf(5), las cosas comenzarán a funcionar para usted.
Ashish SHUKLA

Agregué libnss-mysql desde mi distribución. Probado fuera de la caja y nada funciona. ¿Alguna idea sobre lo que necesito cambiar en nsswitch.conf?
Tom

0

Podría intentar usar pam_script: es un módulo pam que permite ejecutar scripts de shell arbitrarios después de abrir una sesión de usuario (entre otros).

Puede encontrar pam_scriptaquí: https://github.com/jeroennijhof/pam_script . También debería ser instalable a través de administradores de paquetes, al menos he podido instalarlo a través de apt-get.

Tenga cuidado, ya que vsftpd parece tener algunos problemas con pam_script al menos cuando niega la autenticación, vea mi pregunta no resuelta: vsftpd se congela después de la autenticación fallida de pam_script . Sin embargo, en su caso no debería ser un problema.


0

La respuesta breve es que está combinando credenciales de sistema y servicio, y no debe (¿no puede?) Usar pam_mkhomedir con usuarios virtuales en vsftpd.

pam_mkhomedir es para la creación de directorios locales de usuarios y supone que el usuario está definido en el sistema. Los usuarios virtuales en vsftpd no son usuarios del sistema (por diseño) y, como tales, no tienen privilegios fuera del servicio vsftpd (el sistema no tiene conocimiento de esos usuarios). Usar PAM para la autenticación solo es entregar la validación de las credenciales de usuario (nombre de usuario + contraseña ==> OK). Esto puede ser confuso cuando se usan usuarios virtuales, ya que vsftpd también se puede configurar para usar usuarios del sistema con PAM.

Cuando crea el directorio de inicio para un usuario virtual , debe hacer que la cuenta / grupo del servicio vsftpd sea el propietario de la carpeta y coloque el "directorio de inicio virtual" dentro de la ruta del servicio vsftpd, con los permisos apropiados para el servicio vsftpd. No estoy seguro de qué problema está tratando de resolver, pero como está modificando la sesión del usuario, asumo que está tratando de crear un cierto aislamiento entre los usuarios. Dado que debe crear el usuario virtual en su base de datos de usuarios para que puedan iniciar sesión, ¿por qué no generar el directorio de inicio al mismo tiempo? He hecho esto usando un script para agregar / cambiar / eliminar usuario para mantener la base de datos de usuario virtual y las carpetas de inicio virtuales de usuario vsftpd consistentes. YMMV.

Solo recuerde, con usuarios virtuales, solo está trabajando dentro de vsftpd, y no en el sistema.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.