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?
Respuestas:
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_mysql
es tu amigo.fuente
nss-mysql
en mi contexto?pam_mkhomedir
va 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.nss_mysql
, por ejemplo, Debian y derivados lo proporcionan comolibnss-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 sunsswitch.conf(5)
, las cosas comenzarán a funcionar para usted.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_script
aquí: 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.
fuente
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.
fuente