1
auser 2014-05-12 15:55:01 +08:00
以前看过vsftpd的源代码,没用过PAM.
刚找了下: 你那个错误在prelog.c:282行,对应函数是handle_pass_command,这个函数是处理PASS(FTP协议)时执行的,用来验证密码。走到这里,说明密码验证失败。 你可以debug编译(更改Makefile的link选项,我记得它是在link时指定去掉调试信息的,不去掉加-g也没用),然后单步追踪。看看问题在哪里。 VSFTPD为了安全,在默认的twoprocess下用sockpair进行进程间通信,只有那个保留root权限的进程才执行验证功能,另外一个drop权限后进行服务。这样的话调试比较麻烦,你可以在配置文件中设置为oneprocess. 最后PAM验证的部分貌似在sysdeputil.c:vsf_sysdep_check_auth中。根据这里的条件编译,请先确保你执行的版本编译选项没问题(我不知道怎么看,apt-cache show貌似没有,编译选项应该没保存在程序里),这里的PAM_RHOST/PAM_TTY/PAM_USER我没接触过,不知道是什么东东。 |
2
Shared OP 我的 vsftpd 是直接从源里安装的,你发的东西貌似没有可操作性啊
|
4
rqrq 2014-05-12 16:22:13 +08:00
请参照:
http://wiki.ubuntu.org.cn/Vsftpd%E8%99%9A%E6%8B%9F%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE 给你个vsftp的配置: listen=YES listen_port=21 pasv_enable=YES pasv_min_port=23321 pasv_max_port=23421 local_enable=YES guest_enable=YES guest_username=daemon user_config_dir=/etc/vsftpd_user_conf write_enable=YES local_umask=022 anon_umask=022 local_root=/data/wwwroot/ chroot_local_user=YES chroot_list_enable=NO anon_other_write_enable=YES virtual_use_local_privs=YES anonymous_enable=NO dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/private/vsftpd.pem 另外2.3.5有个蛋疼之处是根目录不允许写入权限,所以要在外面再套一层。 可以考虑下载2.3.2的deb包安装,再锁住不让升级。 |
5
Shared OP @rqrq 这个教程我也看过,结果是一样的。不允许写根目录不是啥问题,上传都用的是 FTP 软件,这样反而安全。我再试试,不行换 PureFTPd 算了。
|
6
cevincheung 2014-05-13 01:56:06 +08:00
还是用proftp吧。配置简单,支持sqlite/mysql/pgsql都好搞。能给每个用户绑定不同的系统用户。
|