LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1415|回复: 9

关于vsftpd-1.1.3的530登陆错误!help!(虚拟用户mysql登陆)

[复制链接]
发表于 2005-4-8 17:53:59 | 显示全部楼层 |阅读模式
搞了几天了,或许对于高手们来说,配置vsftpd服务器是小儿科,但对于想yuyuyou这样的菜菜来说确实很难,一点点小问题都会成为linux路上的拦路虎。

搞这个vsftpd我已经耗费了好几天了,,,,,希望有同情心的高手,大侠们能伸出友爱之手!!!!

不胜感激!!!
----------------------------------------------
我的配置目的,让虚拟用户利用mysql验证登陆,并各自拥有各自的虚拟目录。让他们只能在自己的虚拟目录里。。。
------------------------------------------------

错误:

530 login incorrect。

-----------------------------------------------

系统:redhatlinux9
vsftpd版本:vsftpd-1.1.3.tar.gz
数据库:mysql-3.23.57.tar.gz
pam_mysql-0.5.tar.gz
-------------------------------------------------
vsftpd安装位置:

  1. [root@yuyuyouderedhat security]# ll /opt/vsftpd/local/sbin/vsftpd
  2. -rwxr-xr-x    1 root     root        65996  4Ô  5 06:35 /opt/vsftpd/local/sbin/vsftpd
  3. [root@yuyuyouderedhat opt]# ll /etc/vsftpd.conf
  4. -rw-r--r--    1 root     root         4162  4Ô  8 21:50 /etc/vsftpd.conf
  5. [root@yuyuyouderedhat opt]# ll /etc/pam.d/vsftpd
  6. -rw-r--r--    1 root     root          647  4Ô  8 20:25 /etc/pam.d/vsftpd
复制代码


pam_mysql.so位置:

  1. [root@yuyuyouderedhat security]# ll pam_mysql.so
  2. -rwxr-xr-x    1 root     root        23900  4Ô  5 08:42 pam_mysql.so
复制代码


home目录:

  1. [root@yuyuyouderedhat home]# ls -ld ./*
  2. drwx------    3 vsftpdvirtual vsftpdvirtual     4096  4Ô  5 08:45 ./vsftpdvirtual
  3. drw-------    3 vsftpdvirtual vsftpdvirtual     4096  4Ô  8 09:21 ./win
  4. drw-------    3 vsftpdvirtual vsftpdvirtual     4096  4Ô  8 09:21 ./wingger
复制代码


我把几个主要的文件内容贴出来:

/etc/vsftpd目录里几个主要的配置文件:

  1. [root@yuyuyouderedhat etc]# ll /etc/vsftpd
  2. ×ÜÓÃÁ¿ 8
  3. -rw-r--r--    1 root     root           13  4Ô  8 20:04 vsftpd.chroot_list
  4. drwxr-xr-x    2 root     root         4096  4Ô  8 20:06 vsftpd_user_conf

  5. [root@yuyuyouderedhat etc]# cat /etc/vsftpd/vsftpd.chroot_list
  6. win
  7. wingger


  8. [root@yuyuyouderedhat vsftpd_user_conf]# ls
  9. win  wingger
  10. [root@yuyuyouderedhat vsftpd_user_conf]# cat win
  11. local_root=/home/win
  12. [root@yuyuyouderedhat vsftpd_user_conf]# cat wingger
  13. local_root=/home/wingger
复制代码


数据库vsftpdvirtual:

  1. [root@yuyuyouderedhat vsftpd_user_conf]# /opt/mysql/bin/mysql -u vsftpdvirtual -p123456 vsftpdvirtual
  2. Welcome to the MySQL monitor.  Commands end with ; or \g.
  3. Your MySQL connection id is 1 to server version: 3.23.57-log


  4. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
  5. mysql> select * from users;
  6. +---------+------------------+
  7. | name    | passwd           |
  8. +---------+------------------+
  9. | win     | 565491d704013245 |
  10. | wingger | 565491d704013245 |
  11. +---------+------------------+
  12. 2 rows in set (0.04 sec)
复制代码


验证文件内容:
[root@yuyuyouderedhat vsftpd_user_conf]# vi /etc/pam.d/vsftpd


  1. #%PAM-1.0
  2. #auth       required    /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
  3. #auth       required    /lib/security/pam_pwdb.so shadow nullok
  4. #auth       required    /lib/security/pam_shells.so
  5. #account    required    /lib/security/pam_pwdb.so
  6. #session    required    /lib/security/pam_pwdb.so
  7. auth required /lib/security/pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2

  8. account required /lib/security/pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2
复制代码



/etc/vsftpd.conf:

  1. annoymous_enable=YES
  2. listen=YES
  3. guest_enable=YES
  4. guest_username=vsftpdvirtual
  5. virtual_use_local_privs=NO
  6. anon_world_readable_only=NO
  7. local_enable=YES
  8. write_enable=YES
  9. anon_other_write_enable=YES
  10. anon_upload_enable=YES
  11. anon_mkdir_write_enable=YES
  12. chroot_local_user=NO
  13. chroot_list_enable=YES
  14. chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
  15. user_config_dir=/etc/vsftpd/vsftpd_user_conf
  16. pam_service_name=/etc/pam.d/vsftpd


复制代码




切盼!!!!
 楼主| 发表于 2005-4-9 10:19:42 | 显示全部楼层
顶起!


版主大人呢???
回复 支持 反对

使用道具 举报

发表于 2005-4-9 12:04:15 | 显示全部楼层
匿名用户能登上去吗??



mysql验证的,我真没有试过呢。。。。。

兄弟先帖一下参考的帖子,我先看一看。不实践,我说的也是错误的。。

北南 呈上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-9 16:48:38 | 显示全部楼层
好.我把参考的帖子贴出来!

匿名是可以登陆的!

----------------------------------------
本文参考了vsftpd安装文档,vsftpd的EXAMPLE及网上众多网友的文章。
环境:
匿名及本地用户:REDhat9+vsftpd1.1.3(或vftpd2.0.1)。
虚拟用户:vsftpd1.1.3+mysql3.23.54+pam_mysql0.5
不适用于vsftpd2.0.1+mysql4+pam0.5。

请注意:不要直接copy我这里的配置文件,可以造成ftp启动不正常,所以还是多费点事,自己输入吧

本文对本地用户、虚拟用户目录进行了限制,每个用户拥有自己独立的目录。
本文中所使用的参数具体意义请参数回贴。
配置不外就是修改vsftpc.conf,并指定用户目录,权限等。
对虚拟用户则用pam验证方式。

另:mkdir建立目录,chown更改权限。vi编辑文件。这些命令请参考man文档

vsftpd类别:

1、PORT FTP
首先会建立控制频道,默认值是port 21,也就是跟port 21 建立联机,并透过此联机下达指令。
第二,由FTP server 端会建立数据传输频道,默认值为20,也就是跟port 20 建立联机,并透过port 20 作数

据的传输。

2、PASVFTP
首先会建立控制频道,默认值是port 21,也就是跟port 21 联机,并透过此联机下达指令。
第二,会由client 端做出数据传输的请求,包括数据传输port 的数字。

3、差别:
PORT FTP 当中的数据传输port 是由FTP server 指定,
而PASV FTP 的数据传输port 是由FTP client 决定。
通常我们使用PASV FTP,是在有防火墙的环境之下,透过client 与server 的沟通,决定数据传输的port。



vsftpd安装篇:


1、rpm安装:
代码:
[root@Linux_win vsftpd]#rpm -ivh vsftpd-1.1.3-8.i386.rpm


2、tar.gz的安装
解压后查看README和INSTALL文档

安装前的条件:

进入vsftpd目录
编辑 "builddefs.h"文件,里面定义了pam功能,tcp_wrappers功能,ssl功能,根据需要定义pam或tcpwrapper功能,以消ssl功能

然后键入 "make" .将编译出相应的二进制文件,你可以用以下命令查看
[chris@localhost vsftpd]$ ls -l vsftpd
-rwxrwxr-x 1 root root 61748 Sep 27 00:26 vsftpd

a、增加“nobody”用户。在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。
代码:
[root@Linux_win vsftpd]# useradd nobody

useradd: user nobody exists

b、建立“/usr/share/empty”目录。在系统中此目录,如果目录已经存在,mkdir命令有相应提示。
代码:
[root@hpe45 root]# mkdir /usr/share/empty/

mkdir: cannot create directory '/usr/share/empty': File exists

c、匿名服务帐号:“ftp”用户和一个有效的匿名目录(默认为/var/ftp)。
代码:
[root@Linux_win vsftpd]# mkdir /var/ftp/
[root@Linux_win vsftpd]# useradd -d /var/ftp ftp


d、更改目录的所有者为root,并让ftp用户对自己的主目录不可写
代码:
[root@Linux_win vsftpd]# chown root.root /var/ftp
[root@Linux_win vsftpd]# chmod og-w /var/ftp


编译VSFTPD
代码:
[root@Linux_win vsftpd]# tar zxvf vsftpd-1.2.0.tar.gz
[root@Linux_win vsftpd]# cd vsftpd-1.2.0
[root@Linux_win vsftpd]# make


安装编译好的VSFTPD

执行“make,make install”将编译好的二进制文件、手册等复制到相应目录。可能需要手动执行以下复制:
代码:
[root@Linux_win vsftpd]# cp vsftpd /usr/local/sbin/vsftpd
[root@Linux_win vsftpd]# cp vsftpd.conf.5 /usr/local/share/man/man5
[root@Linux_win vsftpd]# cp vsftpd.8 /usr/local/share/man/man8

如果不存在man5和man8目录,要先建立这两个目录
代码:
[root@Linux_win vsftpd]#mkdir /usr/local/share/man/man5
[root@Linux_win vsftpd]#mkdir /usr/local/share/man/man8

make不会自己copy配置文件,如果make install有错,则必须手工更改
[root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc

为本地用户设置PAM
如果允许本地用户登录VSFTPD,执行以下操作:
代码:
[root@Linux_win vsftpd]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd


3、pam_mysql安装
如果使用mysql的二进制包,那么必须加个开始包,且要修改Makefile文件,指定mysql的lib位置。
代码:
[root@Linux_win vsftpd]# tar xvzf pam_mysql-0.5.tar.gz
[root@Linux_win vsftpd]# cd pam_mysql
[root@Linux_win vsftpd]# make
[root@Linux_win vsftpd]# cp pam_mysql.so /lib/security


4、mysql安装。请查看其它文档



vsftpd启动篇

vsftpd 有两种运行方式,一种是standalone 一种是 via an inetd (或者 inetd or xinetd).
1、如何启动
1)系统自带的
代码:
[root@Linux_win software]# service vsftpd restart

2)源包安装:
[root@Linux_win software]# /安装路径/vsftpd &

代码:
[root@Linux_win vsftpd]# /sbin/service xinetd restart  
或 
[root@Linux_win vsftpd]# /usr/local/sbin/vsftpd &


2、standlone启动
具体的运行方式由参数listen决定。当listen参数值为YES时,VSFTPD单独运行,我们可以使用脚本/etc/rc.d/init.d/vsftpd来启动、关闭以及重启VSFTPD。命令如下:
  
代码:
/etc/rc.d/init.d/vsftpd start|stop|restart


3、xinetd启动,首先要将vsftpd.conf配置文件中的listen参数值改为NO。
其次,生成一个/etc/xinetd.d/vsftpd文件

代码:
[root@Linux_win vsftpd]#vi /etc/vsftpd/vsftpd.conf或vi /etc/vsftp.conf
listen=NO


代码:
[root@Linux_win vsftpd]vi /etc/xinetd.d/vsftpd
内容如下:
service vsftpd
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
port = 21
log_on_success += PID HOST DURATION
log_on_failure += HOST
}


通过修改disable值为no或yes,并重新启动xinetd,从而启动或停止VSFTPD。



配置安全匿名服务器

所要做的就是用vi修改vsftpd.conf文件

代码:
[root@Linux_win vsftpd]#vi /etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf

修改后的vsftpd.conf文件看附件:

引用:
#使用单独模式,并指定监听的IP地址
listen_address=ip address

#只允许匿名访问,不允许本地用户访问
anonymous_enable=YES
local_enable=NO

#取消写权限
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

#启用详细的日志记录格式,设定记录传输日志的文件名。默认值为/var/log/vsftpd.log。
xferlog_enable=YES
xferlog_file=/var/log/vsftp.log

#对连接进行控制,还有超时时间,那就根据具体情况再说了。
connect_from_port_20=YES
pasv_min_port=50000
pasv_max_port=60000

#控制FTP最大并发数,限定每个IP地址的并发数。
max_clients=numerical value
max_per_ip=numerical value

#限定下载速度
anon_max_rate=80000


#使用ftpd_banner取代VSFTPD默认的欢迎词,免得泄漏相关信息
ftpd_banner=Welcome to this FTP Server

#只让匿名用户浏览可阅读的文件,不可以浏览整个系统
anon_world_readable_only=YES

#隐藏文件的所有者和组信息,匿名用户看到的文件的所有者和组全变为ftp
hide_ids=YES


代码:
附:vsftpd.conf
[root@Linux_win vsftpd]# cat vsftpd.conf
listen=YES
listen_address=192.168.1.2

anonymous_enable=YES
local_enable=NO

write_enable=NO
anon_root=/home
anon_upload_enable=NO
anon_other_write_enable=NO
anon_mkdir_write_enable=NO
anon_world_readable_only=YES

#dirmessage_enable=YES
ftpd_banner=welcome to this FTP server

xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES
#pasv_mix_port=50000
#pasv_max_port=60000
#xferlog_std_format=YES

max_clients=10
max_per_ip=10

hide_ids=YES

#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#chroot_local_user=NO
#pam_service_name=/etc/pam.d/vsftpd

#guest_enable=YES
#guest_username=vsftpdvirtual
#virtual_use_local_privs=NO
#user_config_dir=/etc/vsftpd/vsftpd_user_conf




配置可上传匿名服务器
[root@Linux_win vsftpd]#vi /etc/vsftpd/vsftpd.conf
修改文件,改后如下

代码:
[root@Linux_win ftp]# cat /etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.1.2

anonymous_enable=YES
local_enable=NO

write_enable=YES
#anon_root=
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
#anon_world_readable_only=YES


#dirmessage_enable=YES
ftpd_banner=welcome to this FTP server

xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES
#pasv_mix_port=50000
#pasv_max_port=60000
#xferlog_std_format=YES

max_clients=10
max_per_ip=10

hide_ids=YES

#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
#chroot_local_user=NO
#pam_service_name=/etc/pam.d/vsftpd

#guest_enable=YES
#guest_username=vsftpdvirtual
#virtual_use_local_privs=NO
#user_config_dir=/etc/vsftpd/vsftpd_user_conf


代码:
[root@Linux_win ftp]# mkidr /var/ftp/upload
[root@Linux_win ftp]# chmod o+w /var/ftp/upload


anon_root参数指定的目录或默认的/var/ftp主目录,ftp匿名用户不可有写权限,否则会出错。
办法是在/var/ftp下建立一个新目录,使得该目录对ftp匿名用户可写。才能上传。
或不用匿名上传,而使用本地用户或虚拟用户 。




配置本地用户
修改vsftpd.conf
代码:

[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.1.2

anonymous_enable=NO
local_enable=YES
#local_root=

write_enable=YES
#anon_root=
#anon_upload_enable=YES
#anon_other_write_enable=YES
#anon_mkdir_write_enable=YES
#anon_world_readable_only=YES
#anon_umask=777

#dirmessage_enable=YES
ftpd_banner=welcome to this FTP server

xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES
#pasv_mix_port=50000
#pasv_max_port=60000
#xferlog_std_format=YES

max_clients=10
max_per_ip=10

hide_ids=YES

#limit all users in it's owner dir
#chroot_local_user=YES

#or limit some
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#use ownwer conf file
user_config_dir=/etc/vsftpd/vsftpd_user_conf

pam_service_name=/etc/pam.d/vsftpd

#guest_enable=YES
#guest_username=vsftpdvirtual
#virtual_use_local_privs=NO


由于上面了用户列表,因此须建立chroot_list文件,
代码:
[root@Linux_win vsftpd]# touch /etc/vsftpd/chroot_list

并加入以下内容,查看chroot_list文件内容,结果如下
代码:
[root@Linux_win vsftpd]# cat /etc/vsftpd/chroot_list
sam
gem

配置文件中指定了用户配置文件,因此建立此文件
代码:
[root@Linux_win vsftpd]# mkdir /etc/vsftpd/vsftpd_user_conf

并根据用户名建立文件
代码:
[root@Linux_win vsftpd]# touch sam
[root@Linux_win vsftpd]# touch gem
[root@Linux_win vsftpd]# ls -l /etc/vsftpd/vsftpd_user_conf
总用量 8
-rw-r--r--    1 root     root           21  1月  8 00:25 sam
-rw-r--r--    1 root     root           25  1月  8 00:17 gem


并在sam,gem文件加加入以下内容,可用vi编辑并保存,下面的虚拟用户也一样,不过只须更改文件内容就可以了
代码:
[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/sam
local_root=/home/sam

代码:
[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/gem
local_root=/home/gem



本地用户验证要用pam文件,内容是默认的。
代码:
[root@Linux_win vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers

onerr=succeed
auth       required     pam_stack.so service=system-auth
auth       required     pam_shells.so
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth





配置虚拟用户(mysql)

  VSFTPD的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而

VSFTPD的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读

写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。

  VSFTPD的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了

系统的安全性。VSFTPD可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器

中,如MySQL等。VSFTPD验证虚拟用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证

时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正

如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。

  配置虚拟用户分为几部分:guest用户的创建、用户/口令的保存、PAM认证配置、vsftpd.conf文件设置等

。在后面的例子中,假定存在虚拟用户win和wingger.



1、在系统中添加vsftpdvirtual用户,作为虚拟用户在系统中的代表。
代码:
[root@Linux_win vsftpd]# useradd vsftpdvirtual

  当虚拟用户登录后,所在的位置为vsftpdvirtual的自家目录/home/vsftpdvirtual。

2、配置文件vsftpd.conf: 加入以下内容
guest_enable=YES
guest_username=vsftpdvirtual
virtual_use_local_privs=YES|NO

3、虚拟用户的权限配置。
virtual_use_local_privs参数,
当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。所有虚拟用户的权限使用local参数。
当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,所有虚拟用户的权限使用anon参数。
这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。

由于本人的vsftpd为1.1.3,只好用virtual_use_local_privs=NO了:
因此匿名用户的设置即是虚拟用户的设置,在改参数权限时,同时也要修改目录权限
如:让用户不能浏览目录,但仍可以对文件操作且虚拟用户目录的权限改为只能由vsftpdvirtual操作:

代码:
[root@Linux_win vsftpd]# chown vsftpdvirtual.vsftpdvirtual /home/vsftpdvirtual
[root@Linux_win vsftpd]# chmod 700 /home/vsftpdvirtual

由于这些设置对匿名用户生效。最好是禁止匿名用户登录。


在VSFTPD-1.2.0以上版本,当virtual_use_local_privs=YES时,只需write_enable=YES,虚拟用户就可以就拥

有写权限。应该与本地用户使用相同,有兴趣的可以去验证。

如果不同用户使用不同的目录,须加入权限
代码:
chown vsftpdvirtual.vsftpdvirtual /home/win
chown vsftpdvirtual.vsftpdvirtual /home/wingger


4、用MySQL保存虚拟用户

  1、虚拟用户的用户名/口令的保存。这部分在MySQL数据库中完成。
首先,创建数据库vsftpdvirtual以及表users,并插入虚拟用户win、wingger。执行以下命令:
代码:
[root@Linux_win vsftpd]# #mysql -uroot -p
mysql>create database vsftpdvirtual;
mysql>use vsftpdvirtual;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>insert into users (name,passwd) values ('win',password('123456'));
mysql>insert into users (name,passwd) values ('wingger',password('123456'));
mysql>quit


然后,授权vsftpdvirtual只能读vsftpdvirtual数据库的users表。执行以下命令:
代码:
[root@Linux_win vsftpd]# mysql -u root mysql -p
mysql>grant select on vsftpdvirtual.users to vsftpdvirtual@localhost identified by '123456';
mysql>quit


验证刚才的操作是否成功可以执行下面命令:
代码:
[root@Linux_win vsftpd]# mysql -u vsftpdvirtual -p123456 ftpdvirtual
mysql>select * from users;

如果成功,将会列出wing、wingger和加密后的密码。
如下所示:
引用:
mysql> select * from users;
+---------+------------------+
| name | passwd |
+---------+------------------+
| win | 23932fe477657768 |
| wingger | 23932fe477657768 |
+---------+------------------+
2 rows in set (0.00 sec)



  2、设置PAM认证。这里我们要用到一个利用mysql进行pam验证的开源项目(http://sourceforge.net/proj

ects/pam-mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz。在编译安装之前,要确保mysql-devel

的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:
代码:
[root@Linux_win vsftpd]# tar xvzf pam_mysql-0.5.tar.gz
[root@Linux_win vsftpd]# cd pam_mysql
[root@Linux_win vsftpd]# make
[root@Linux_win vsftpd]# cp pam_mysql.so /bli/security


接下来,我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/vsftpd文件,加入以下内容:
引用:
  auth required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual

table=users usercolumn=name passwdcolumn=passwd crypt=2
  account required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost

db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2


具体可查看vsftpd源包里的EXAMPLE中的例子。



附:虚拟用户文档
1、vsftpd.conf配置文件
代码:

[root@Linux_win vsftpd]# cat vsftpd.conf
listen=YES
listen_address=192.168.1.2

anonymous_enable=NO
local_enable=YES

write_enable=YES
#anon_root=
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
#anon_world_readable_only=YES
#anon_umask=777

#dirmessage_enable=YES
ftpd_banner=welcome to this FTP server

xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log

connect_from_port_20=YES
#pasv_mix_port=50000
#pasv_max_port=60000
#xferlog_std_format=YES

max_clients=10
max_per_ip=10

hide_ids=YES

#limit all users in it's owner dir
#chroot_local_user=YES

#or limit some
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#use ownwer conf file
user_config_dir=/etc/vsftpd/vsftpd_user_conf

pam_service_name=/etc/pam.d/vsftpd

guest_enable=YES
guest_username=vsftpdvirtual
#virtual_use_local_privs=NO



代码:
2、[root@Linux_win vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers

onerr=succeed
#auth       required    pam_stack.so service=system-auth
#auth       required    pam_shells.so
#account    required    pam_stack.so service=system-auth
#session    required    pam_stack.so service=system-auth
auth       required     /lib/security/pam_mysql.so user=vsftpdvirtual    passwd=123456

host=localhost   db=vsftpdvirtual table=users  usercolumn=name  passwdcolumn=passwd  crypt=2
account    required     /lib/security/pam_mysql.so user=vsftpdvirtual     passwd=123456   

host=localhost   db=vsftpdvirtual table=users  usercolumn=name  passwdcolumn=passwd  crypt=2


代码:
3、[root@Linux_win vsftpd]# cat /etc/vsftpd/chroot_list
win
wingger


代码:
4、[root@Linux_win vsftpd]# ls -l /etc/vsftpd/vsftpd_user_conf
总用量 8
-rw-r--r--    1 root     root           21  1月  8 00:25 win
-rw-r--r--    1 root     root           25  1月  8 00:17 wingger


代码:
5、[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/win
local_root=/home/win
[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/wingger
local_root=/home/wingger


代码:
6、drwx------    6 vsftpdvirtual vsftpdvirtual    4096  1月  8 00:16 vsftpdvirtual
drwxrwxrwx    5 vsftpdvirtual vsftpdvirtual     4096  1月  8 01:47 win
drwxrwxrwx    3 vsftpdvirtual vsftpdvirtual     4096  1月  8 20:19 wingger


7、版本:(vsFTPd 1.1.3)、pam_mysql-0.5.tar.gz、mysql3.23.54

8、[root@Linux_win vsftpd]# mysql -u vsftpdvirtual -pchenwy vsftpdvirtual

mysql> select * from users;
+---------+------------------+
| name | passwd |
+---------+------------------+
| win | 23932fe477657768 |
| wingger | 23932fe477657768 |
+---------+------------------+
2 rows in set (0.00 sec)
回复 支持 反对

使用道具 举报

发表于 2005-4-9 19:19:52 | 显示全部楼层
pam_mysql最新版还是2002年底的,应该是mysql的版本问题,你的mysql是什么版本?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-9 20:49:00 | 显示全部楼层
系统:redhatlinux9
vsftpd版本:vsftpd-1.1.3.tar.gz
数据库:mysql-3.23.57.tar.gz
pam_mysql-0.5.tar.gz
回复 支持 反对

使用道具 举报

发表于 2005-4-10 00:14:03 | 显示全部楼层
mysql-3.23....应该可以用pam_mysql.so
你可以先看看/var/log 下面的日志,一般都有pam_mysql.so验证失败的提示,比如我这里的/var/log/message就有下面这样的提示

  1. Apr  9 19:33:25 aries vsftpd[3538]: pam_sm_authenticate called.
  2. Apr  9 19:33:25 aries vsftpd[3538]: dbuser changed.
  3. Apr  9 19:33:25 aries vsftpd[3538]: dbpasswd changed.
  4. Apr  9 19:33:25 aries vsftpd[3538]: host changed.
  5. Apr  9 19:33:25 aries vsftpd[3538]: database changed.
  6. Apr  9 19:33:25 aries vsftpd[3538]: table changed.
  7. Apr  9 19:33:25 aries vsftpd[3538]: usercolumn changed.
  8. Apr  9 19:33:25 aries vsftpd[3538]: passwdcolumn changed.
  9. Apr  9 19:33:25 aries vsftpd[3538]: crypt changed.
  10. Apr  9 19:33:25 aries vsftpd[3538]: db_connect  called.
  11. Apr  9 19:33:25 aries vsftpd[3538]: returning 0 .
  12. Apr  9 19:33:25 aries vsftpd[3538]: db_checkpasswd called.
  13. Apr  9 19:33:25 aries vsftpd[3538]: pam_mysql: where clause =
  14. Apr  9 19:33:25 aries vsftpd[3538]: SELECT password FROM vsftpd WHERE name='love'
复制代码

另外可以用lftp登录,然后输入debug 5开启调试模式,这样的错误输出信息也会多些!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-14 00:29:59 | 显示全部楼层
我这里的/var/log/message没有那么多提示,,,

另外如何用lftp登陆呢?

是这样吗?


#lftp 192.168.5.12


另外这个debug 5调试模式怎么用呢?


希望指教!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-30 21:36:19 | 显示全部楼层
upupup
回复 支持 反对

使用道具 举报

发表于 2005-12-5 14:38:03 | 显示全部楼层

楼主:这个问题已经解决了吗

解决的话出来教教我啊

遇上这个问题,反复试,没法自己解决。
也搜了n多的贴,没找到方法。
我的系统是gentoo2005.1,相关软件版本:
pam_mysql==>0.5
mysql==>4.1.14
vsftpd==>2.0.3-r1
有关的配置文件:
###/etc/vsftpd/vsftpd.conf###
dirmessage_enable=YES

chown_uploads=NO

xferlog_enable=YES

idle_session_timeout=600

data_connection_timeout=120

ascii_upload_enable=NO

ascii_download_enable=NO

chroot_local_user=NO

chroot_list_enable=YES

background=YES

listen=YES

ls_recurse_enable=NO





anonymous_enable=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES



ftpd_banner=Welcome to gentoolink!



local_enable=YES

write_enable=YES





pam_service_name=/etc/pam.d/ftp

chroot_list_file=/etc/vsftpd/chroot_list

user_config_dir=/etc/vsftpd/vsftpd_user_conf

guest_enable=YES

guest_username=vsftpdguest

virtual_use_local_privs=NO


###/etc/pam.d/ftp###
# Provided by ftpbase (dont remove this line!)

# Standard pam.d file for ftp service packages.

# $Header: /var/cvsroot/gentoo-x86/net-ftp/ftpbase/files/ftp-pamd-include,v 1.1 2005/06/28 14:52:26 uberlord Exp $



# auth     required  pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

# auth     include   system-auth



# If this is enabled, anonymous logins will fail because the 'ftp' user does

# not have a "valid" shell, as listed in /etc/shells.

#

# If you enable this, it is recommended that you do *not* give the 'ftp'

# user a real shell. Instead, give the 'ftp' user /bin/false for a shell and

# add /bin/false to /etc/shells.

# auth     required  pam_shells.so



# account  include   system-auth



# session  include   system-auth



auth required /lib/security/pam_mysql.so user=vsftpdguest passwd=vsftpdguest host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2



account required /lib/security/pam_mysql.so user=vsftpdguest passwd=vsftpdguest host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2



数据库配置没有问题。


客户端登录进行密码认证的时候,mysql日志/var/log/mysql.log里没有任何记录。
/var/log/vsftpd里也只是说登录不成功。



楼上的两位兄弟如果已经解决这个问题一定要出来说一下啊!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表