Ubuntu下配置vsftpd+mysql虚拟账户认证的案例分享

发布时间:2020-08-16编辑:脚本学堂
本文介绍下,在ubuntu中安装vsftpd,并结合mysql配置虚拟账户的方法。有需要的朋友参考下。

1,安装vsftpd及相关软件包
vsftpd 安装配置参考:
ubuntu搭建vsftpd服务器
ubuntu下安装vsftpd
 

复制代码 代码示例:
sudo apt-get install libpam-mysql mysql-server mysql-client phpmyadmin

2,设置数据库
创建相应的数据库账户
 

复制代码 代码示例:
create database vsftpd character set utf8;

创建相应的数据库
 

复制代码 代码示例:
grant create, update, select, insert, delete, alter, drop, index on vsftpd.* to 'vsftpd'@'localhost' identified by 'vsftpd';

创建相应的表
 

复制代码 代码示例:
use vsftpd;
create table accounts (
id int not null auto_increment primary key,
username varchar(128) not null unique,
password varchar(128) not null
);

3,配置pam
用以下内容替换/etc/pam.d/vsftpd文件的内容
 

复制代码 代码示例:
auth required pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=password crypt=2

4,添加系统账户
 

复制代码 代码示例:
sudo useradd --home /home/ftp --gid nogroup -m --shell /bin/false vsftpd

5,配置vsftpd(参见 man vsftpd.conf)
 

启用本地登录
local_enable=YES
指定vsftpd使用的pam服务名
pam_service_name=vsftpd
(配置到这里就可以是用mysql里的账户登录了,不过数据库里面的账户需和系统账户对应)
虚拟用户(mysql中)映射到vsftpd系统用户
guest_enable=YES
guest_username=vsftpd
指定虚拟用户登录后切换到的目录
user_sub_token=$USER
local_root=/home/ftp/$USER
使虚拟账户拥有本地账户的权限而不是默认的anonymous权限
virtual_use_local_privs=YES
(配置到这里就可以正常使用了,但是这没有使用chroot,任何用户可以遍历系统所有文件)
设置vsftpd执行权限
nopriv_user=vsftpd
启用本地登录的chroot
chroot_local_user=YES

6,测试
数据库添加虚拟用户
 

复制代码 代码示例:
insert into accounts (username, password) values('wuhuaxu', password('wuhuaxu'));
 

为虚拟用户添加主目录,因为chroot不允许主目录有写权限,目前较好的解决方法就是在主目录下创建一个用户具有全部权限的目录
 

复制代码 代码示例:
sudo mkdir -p /home/ftp/wuhuaxu/upload
sudo chown -R vsftpd:nogroup /home/ftp/wuhuaxu
sudo chmod a-w /home/ftp/wuhuaxu
 

登录到ftp,开始测试。

至此,有关linux下安装与配置vsftpd及虚拟账户的方法,就介绍完了,希望对大家有所帮助。