vsftp 利用mysql 验证虚拟账户

回复 收藏

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 虚拟账号

2010-09-15 09:48 举报
已邀请:
0

阿铭 管理员

赞同来自:

经过以上配置基本上算是完成了vsfpd 和mysql的结合。
但是我测试时,出现了错误,始终不能正常登录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  服务,再次登录时,就能顺利登录了。
0

雷老师 管理员

赞同来自:

本帖最后由 lqph3387 于 2011-1-26 11:00 编辑

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
0

sungm

赞同来自:

3# lqph3387


u2按照以上配置,除了上传外,还拥有删除的权限,跟u1一样:dizzy:
0

忧郁蓝

赞同来自:

u2确实还可以删除 我在网上查了一下是因为vsftp的权限划分太粗 解决办法可以设置用户使用的指令
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 断点续传
0

bsh741

赞同来自:

localhost vsftpd[18884]: pam_mysql - MySQL error (Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13))  这是什么情况
0

RHEL5.6.7

赞同来自:

铭哥我用基于mysql的虚拟用户一直提醒 pam_mysql - MySQL error (Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 明明就在/var/lib/mysql/mysql.sock目录下,怎么不能连接呢? 搞一下午了,现在才弄好,selinux忘关了,我要撞墙。
0

qq20847697

赞同来自:

Apr  1 18:13:52 localhost vsftpd[13012]: PAM (vsftpd) illegal module type: %PAM-1.0
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
登陆不上,这是什么问题呀
0

lyhabc

赞同来自:

阿铭 发表于 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
0

彭勇士

赞同来自:

Dec 23 15:07:37 Changzhi vsftpd[29541]: pam_unix(vsftpd:auth): check pass; user unknown
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
0

彭勇士

赞同来自:

我的这个报错!
0

彭勇士

赞同来自:

#在这里快速回复#Dec 23 17:25:35 Peng vsftpd[26612]: pam_unix(vsftpd:auth): check pass; user unknown 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
0

彭勇士

赞同来自:

Dec 23 17:25:35 Peng vsftpd[26612]: pam_unix(vsftpd:auth): check pass; user unknown
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
为何我死活登录不上去?
0

continue

赞同来自:

这个不错
0

sumea

赞同来自:

登录不上,最后发现vsftpdguest用户没创建,/ftp文件夹也没创建,创建后成功了

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: