首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pam_exec或pam_script时挂起的vsftpd

问使用pam_exec或pam_script时挂起的vsftpd
EN

Ask Ubuntu用户
提问于 2014-01-16 17:28:58
回答 2查看 2.7K关注 0票数 3

我将VSFTPD与pam_mysql集成在一起,允许我使用mysql数据库中的帐户成功登录到FTP服务器。

如果用户第一次登录服务器,我需要自动为他们创建一个目录。我看到了使用pam_script或pam_exec来实现这一目标的建议。

作为一个测试,我修改了我的/etc/pam.d/vsftpd配置,使其包括以下一行:

代码语言:javascript
复制
account optional pam_exec.so debug log=/tmp/pam_exec.log /etc/pam-script/test.sh

脚本只是回覆用户:

代码语言:javascript
复制
#!/bin/sh
echo $PAM_USER

在/var/log/auth.log中,我可以看到脚本正在被调用:

代码语言:javascript
复制
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版本

EN

回答 2

Ask Ubuntu用户

发布于 2016-05-27 22:37:23

我确认这是Debian / Ubuntu和vsftpd的原生版本上的一个bug。任何调用子进程的PAM模块都会阻塞或挂起vsftpd (例如,pam_exec、pam_script、涉及系统的定制pam模块或popen调用)。

我通过在Debian上建立centos源来解决这个问题:

代码语言:javascript
复制
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/sbin

vsftpd不再挂起,您将能够从PAM模块调用system()函数。由于某些原因,叉子和经理仍然不能正常工作。

票数 2
EN

Ask Ubuntu用户

发布于 2016-01-16 14:14:03

我知道这个问题被问了一段时间,但我在Debian上遇到了类似的问题,即在将pam_exec添加到链中时挂起vsftpd进程。对我来说,这还不够

代码语言:javascript
复制
session_support=YES

到vsftpd配置文件,但也要将

代码语言:javascript
复制
@include common-session

在/etc/pam.d/vsftpd中,我按照一些关于vsftpd的虚拟用户的指南进行了评论。所以完整的pam文件看起来是这样的:

代码语言:javascript
复制
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用户注销后处理上传的文件)

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/406486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档