1 安装vsftpd
(1) yum install -y vsftpd
(2)编辑vsftpd.conf
内容如下
listen=YES
connect_from_port_20=YES
pasv_enable=YES
tcp_wrappers=YES
local_enable=YES
chroot_local_user=yes
anonymous_enable=NO
guest_enable=YES
guest_username=vsftpdguest
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pam_service_name=/etc/pam.d/vsftpd
dirmessage_enable=YES
idle_session_timeout=600
check_shell=NO
(3)创建一个虚拟用户映射系统用户
useradd –s /sbin/nologin vsftpdguest
2 安装 mysql
具体步骤参考 http://www.lishiming.net/thread-7-1-2.html
3 安装 pam-mysql
wget https://nchc.dl.sourceforge.net/project/pam-mysql/pam-mysql/0.7RC1/pam_mysql-0.7RC1.tar.gz
tar zxvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-mysql=/usr/local/mysql --with-pam=/usr --with-pam-mods-dir=/usr/lib
make && make install
4 创建vsftp 库和相关的表并授权
>create database vsftp;
>use vsftp ;
>create table users ( name char(16) binary ,passwd char(125) binary ) ;
>insert into users (name,passwd) values ('test001',password('123456'));
>insert into users (name,passwd) values ('test002',password('234567'));
>grant select on vsftp.users to vsftpdguest@localhost identified by 'vsftpdguest';
5 创建虚拟账户的配置文件
mkdir /etc/vsftpd/vsftpd_user_conf
cd /etc/vsftpd/vsftpd_user_conf
vim test001
内容如下
local_root=/ftp/
write_enable=YES
virtual_use_local_privs=YES
chmod_enable=YES
6 编辑验证文件
vim /etc/pam.d/vsftpd
内容如下
#%PAM-1.0
auth required /usr/lib/pam_mysql.so user=vsftpdguest passwd=vsftpdguest host=localhost db=vsftp table=users usercolumn=name passwdcolumn=passwd crypt=2
account required /usr/lib/pam_mysql.so user=vsftpdguest passwd=vsftpdguest host=localhost db=vsftp table=users usercolumn=name passwdcolumn=passwd crypt=2
如果不想使用mysql也可以使用文件的形式来搞虚拟账号,请参考 Centos5.5 配置vsftpd 虚拟账号
但是我测试时,出现了错误,始终不能正常登录ftp。
我尝试查看日志,/var/log/message 并没有得到我想要的日志
接着我查看 /var/log/secure 出现了以下错误
Sep 15 10:21:21 localhost vsftpd: PAM unable to dlopen(/usr/lib/pam_mysql.so)
Sep 15 10:21:21 localhost vsftpd: PAM [error: libmysqlclient.so.16: cannot open shared object file: No such file or directory]
由此,我开始有了头绪,既然说是没有 libmysqlclient.so.16 那我就去找一下这个文件,因为我的mysql是直接用的二进制包,并没有编译,也就是说libmysqlclient.so.16 这个库文件存在于 /usr/local/mysql/lib/ 下
我猜测,根据错误日志,它提示在 /usr/lib/ 下没有libmysqlclient.so.16 这个文件。
于是我做了如下操作
ln -s /usr/local/mysql/lib/libmysqlclient.so.16 /usr/lib/libmysqlclient.so.16
然后重启 vsftpd 服务,再次登录时,就能顺利登录了。
vsftp 利用文件数据库验证虚拟账户
安装软件:
[root@neocool ~]#yum -y install vsftpd pam-devel db4-utils
查看
[root@neocool ~]# rpm -qa | grep -e vsftp -e pam-devel -e db4
db4-4.3.29-10.el5
pam-devel-0.99.6.2-6.el5_4.1
db4-utils-4.3.29-10.el5
vsftpd-2.0.5-16.el5_5.1
一、创建虚拟用户数据库
1. 创建用户信息文件
格式如下:
user_id
passwd
[root@neocool ~]#vim /etc/vsftpd/loginuser.txt
u1
p1
u2
p2
u3
p3
2. 生成数据库文件
[root@neocool ~]#db_load -T -t hash -f /etc/vsftpd/loginuser.txt /etc/vsftpd/vsftpd_login.db
[root@neocool ~]#chmod 600 /etc/vsftpd/vsftpd_login.db
[root@neocool ~]#rm /etc/vsftpd/loginuser.txt
3. 配置pam文件
[root@neocool ~]#> /etc/pam.d/vsftpd 清空文件
[root@neocool ~]#vim /etc/pam.d/vsftpd
插入以下3行
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
二、为虚拟用户创建本地系统用户
[root@neocool ~]#useradd www -s /bin/false
[root@neocool ~]#chown www.www /home/www
三、配置vsftpd.conf
anonymous_enable=NO
local_enable=YES // PAM方式此处比如为YES,不然会报 500 OOPS: vsftpd: both local and anonymous access disabled!
write_enable=NO // 用户通过ftp在服务器上是否有写权限
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
listen=YES
listen_port=2121 //改ftp默认端口的
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
guest_enable=YES
guest_username=www
pam_service_name=vsftpd
user_config_dir=/etc/vsftpd/vsftpd_user_conf
virtual_use_local_privs=YES
pasv_min_port=50000
pasv_max_port=60000
pasv_enable=yes
max_clients=200
max_per_ip=4
ftpd_banner=Welcome to cmdi FTP service.
四、建立日志文件
[root@neocool ~]#touch /var/log/vsftpd.log
[root@neocool ~]#chown www.www /var/log/vsftpd.log
五、创建每个用户各自配置文件
[root@neocool ~]#mkdir /etc/vsftpd/vsftpd_user_conf
[root@neocool ~]#vim /etc/vsftpd/vsftpd_user_conf/u1 所有权限
write_enable=YES
anonymous_enable=NO
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
download_enable=Yes
local_root=/ftp/
[root@neocool ~]#vim /etc/vsftpd/vsftpd_user_conf/u2 只能上传权限,无法修改和删除
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_umask=022
download_enable=NO
local_root=/ftp/
[root@neocool ~]#vim /etc/vsftpd/vsftpd_user_conf/u3 只能下载
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_umask=022
download_enable=yes
local_root=/ftp/
六、启动ftp
[root@neocool ~]#mkdir /ftp
[root@neocool ~]#chmod 700 /ftp
[root@neocool ~]#chown www:www /ftp
[root@neocool ~]#/etc/init.d/vsftpd start
[root@neocool ~]#chkconfig vsftpd on
cmds_allowed=XXXXX, 此用户可以使用的指令
# ABOR - abort a file transfer
# CWD - change working directory
# DELE - delete a remote file
# LIST - list remote files
# MDTM - return the modification time of a file
# MKD - make a remote directory
# NLST - name list of remote directory
# PASS - send password
# PASV - enter passive mode
# PORT - open a data port
# PWD - print working directory
# QUIT - terminate the connection
# RETR - retrieve a remote file
# RMD - remove a remote directory
# RNFR - rename from
# RNTO - rename to
# SITE - site-specific commands
# SIZE - return the size of a file
# STOR - store a file on the remote host
# TYPE - set transfer type
# USER - send username
#
# less common commands:
# ACCT* - send account information
# APPE - append to a remote file
# CDUP - CWD to the parent of the current directory
# HELP - return help on using the server
# MODE - set transfer mode
# NOOP - do nothing
# REIN* - reinitialize the connection
# STAT - return server status
# STOU - store a file uniquely
# STRU - set file transfer structure
# SYST - return system type
参数说明:LIST 文件或目录列表
STOR 存储文件
MKD 创建目录
CWD 改变目录
ABOR 终止进程
REST 断点续传
Apr 1 18:13:52 localhost vsftpd[13012]: PAM (vsftpd) no control flag supplied
Apr 1 18:13:52 localhost vsftpd[13012]: PAM (vsftpd) no module name supplied
登陆不上,这是什么问题呀
阿铭 发表于 2010-9-15 11:14
经过以上配置基本上算是完成了vsfpd 和mysql的结合。
但是我测试时,出现了错误,始终不能正常登录ftp。
...
问一下
ln -s /usr/local/mysql/lib/libmysqlclient.so.16 /usr/lib/libmysqlclient.so.16
将libmysqlclient.so.16 复制过去可以吗
cp /usr/local/mysql/lib/libmysqlclient.so.16 /usr/lib/libmysqlclient.so.16
Dec 23 15:07:37 Changzhi vsftpd[29541]: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=test001 rhost=localhost
Dec 23 15:07:37 Changzhi vsftpd[29541]: pam_succeed_if(vsftpd:auth): error retrieving information about user test001
Dec 23 17:25:35 Peng vsftpd[26612]: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=test001 rhost=www.peng.com
Dec 23 17:25:35 Peng vsftpd[26612]: pam_succeed_if(vsftpd:auth): error retrieving information about user test001
Dec 23 17:25:43 Peng vsftpd[26616]: pam_unix(vsftpd:auth): check pass; user unknown
Dec 23 17:25:43 Peng vsftpd[26616]: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=test001 rhost=www.peng.com
Dec 23 17:25:43 Peng vsftpd[26616]: pam_succeed_if(vsftpd:auth): error retrieving information about user test001
为何我死活登录不上去?
编辑回复