我将VSFTPD与pam_mysql集成在一起,允许我使用mysql数据库中的帐户成功登录到FTP服务器。
如果用户第一次登录服务器,我需要自动为他们创建一个目录。我看到了使用pam_script或pam_exec来实现这一目标的建议。
作为一个测试,我修改了我的/etc/pam.d/vsftpd配置,使其包括以下一行:
account optional pam_exec.so debug log=/tmp/pam_exec.log /etc/pam-script/test.sh脚本只是回覆用户:
#!/bin/sh
echo $PAM_USER在/var/log/auth.log中,我可以看到脚本正在被调用:
Jan 16 17:15:44 ip-172-31-8-61 vsftpd: pam_exec(vsftpd:auth): Calling /etc/pam-script/dir.sh ...但是FTP登录没有完成。连接挂起。所有后续连接都会失败,我必须重新启动服务才能得到响应。
我已经排除了配置/脚本的问题,也通过调整SSHD登录的PAM配置,这似乎很好。
我还使用pam_script模块对此进行了测试,并在调用pam_script_auth脚本时获得了类似的结果。
问题似乎是,如果PAM配置中有其他步骤,VSFTP无法完成登录。我尝试过不同的设置(auth,account)和不同的需求级别(可选的,必需的),但都没有成功。
有人有什么想法吗?
更新: Ubuntu 12.04。使用经过调整的如前所述VSFTP版本
发布于 2016-05-27 22:37:23
我确认这是Debian / Ubuntu和vsftpd的原生版本上的一个bug。任何调用子进程的PAM模块都会阻塞或挂起vsftpd (例如,pam_exec、pam_script、涉及系统的定制pam模块或popen调用)。
我通过在Debian上建立centos源来解决这个问题:
apt-get install vsftpd
cd /usr/local/src
git clone https://git.centos.org/git/centos-git-common.git
cp ./centos-git-common/*.sh /usr/local/sbin
git clone https://git.centos.org/git/rpms/vsftpd
cd /usr/local/src/vsftpd
git checkout c7
get_sources.sh
cd SOURCES
tar xvzf vsftpd-3.0.2.tar.gz
mv vsftpd-3.0.2/* .
git apply *-3.0.2-*.patch
sed -i -e 's/vsf_findlibs.sh`/vsf_findlibs.sh` -lcap/g' Makefile
sed -i -e 's/undef VSF_BUILD_SSL/define VSF_BUILD_SSL/g' builddefs.h
make
cp vsftpd /usr/sbinvsftpd不再挂起,您将能够从PAM模块调用system()函数。由于某些原因,叉子和经理仍然不能正常工作。
发布于 2016-01-16 14:14:03
我知道这个问题被问了一段时间,但我在Debian上遇到了类似的问题,即在将pam_exec添加到链中时挂起vsftpd进程。对我来说,这还不够
session_support=YES到vsftpd配置文件,但也要将
@include common-session在/etc/pam.d/vsftpd中,我按照一些关于vsftpd的虚拟用户的指南进行了评论。所以完整的pam文件看起来是这样的:
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth required pam_pwdfile.so pwdfile=/etc/ftppasswd
account required pam_permit.so
session optional pam_exec.so type=close_session log=/var/log/session.log /etc/pam_session.sh
@include common-session(我的用例是在特定ftp用户注销后处理上传的文件)
https://askubuntu.com/questions/406486
复制相似问题