创建FTP账户有多种方式:
1.创建系统用户
2.创建虚拟用户(基于文件或者数据库),这里主要介绍基于mysql数据库的虚拟用户
步骤一:首先安装mysql与FTP
1.安装mysql: sudo apt-get install mysql-server mysql-client libmysqlclient-dev(或者选择源码安装方式)
2.安装FTP:sudo apt-get install vsftp
步骤二:安装pam_mysql
安装方式1:sudo apt-get install pam_mysql
安装方式2:源码编译安装:
下载链接:https://sourceforge.net/projects/pam-mysql/files/?source=navbar
解压:
tar -xzvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-pam-mods-dir=/lib/security/
如果是源码编译安装的mysql,需要指定mysql安装路劲,如下:
./configure --with-mysql=/usr/local/mysql/ --with-pam-mods-dir=/lib/security/
make
make install
安装过程中会遇到几个常见依赖错误,具体解决方式,随后补发,需要的同学,可以查看本人,下篇文章
另外,在最后启动ftp,登录的时候会遇到一个ubuntu16的系统BUG(其他linux系统没有此BUG),解决方式也见下一章
步骤二:
完成上面安装步骤之后,现在来配置虚拟用户:
1.进入mysql服务,创建一个数据库,并创建一张数据表用来存储虚拟用户账户、密码
mysql -uroot -p (进入数据库服务)
2.建数据库与数据表
create database vsftpd;
use vsftpd;
create table users(name char(16) binary,passwd char(16) binary);
插入一条测试数据
insert into users (name,passwd) values ('test','123456');
3.将users表查询权限付给一个系统用户:
GRANT select on vsftpd.* to vsftpd@localhost identified by '123456';
grant select on vsftpd.* to [email protected] identified by '123456';
(此时系统用户还未创建,稍后创建)
exit;
4.创建一个系统用户:
sudo useradd vsftpd -d /home/vsftpd -s /bin/false (这用户与刚才mysql授权用户必须同名)
5.编辑FTP配置文件:
sudo vim /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_umask=022
umask是在linux中常见的一个东西,它其实是一个掩码。当然,也有umask这样一个命令,它是对用户建立的文件的默认属性的定义。该定义为: 假设umask为022,则对于一个文件夹的话,它的默认属性为 777-022=755,这也就是我们平时建立文件夹的权限。而对于一般的文件的话,则是用 666-022=644. 这个umask在其他地方也经常见到,比如vsftpd中有 local_umask 和 anon_umask, 分别控制着本地用户和匿名用户所建立的文件的属性。
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
data_connection_timeout=20
ftpd_banner=Welcome to Daiyuechuan's FTP server.
listen_port=21
local_enable=YES
pasv_min_port=40000
pasv_max_port=40999
####下面配置很重要
pam_service_name=vsftpd #该用户为系统用户
guest_enable=YES
guest_username=vsftpd
allow_writeable_chroot=YES
chroot_local_user=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
virtual_use_local_privs=YES
#这个是动态模板配置,有了下面两行就不需要再给每个虚拟用户弄一个配置文件了,
否则,每添加一个虚拟用户,就添加一个配置文件,最后还得重启,这个就相当的不work了,
这里的USER是虚拟用户名,所以在你的,ftp访问根目录下,必须建一个与USER同名的目录,否则,提示找不到路径
本人ftp跟目录以 /ftp_dir 为例
user_sub_token=$USER
local_root=/ftp_dir/$USER
6.编辑pam_mysql 配置文件:
sudo vim /etc/pam.d/vsftpd
1.删除里面所有
2.添加两行
auth required pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
account required pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
# 注意:
crypt=0: 明文密码
crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
crypt=2: 使用MYSQL中的password()函数加密
crypt=3:表示使用md5的散列方式#上面是两句配置,第一句是以auth开始的,第二句以account开始的。
7.重启FTP服务:
sudo service vsftpd restart
8.测试登录:
ftp localhost
以后每新增一个虚拟用户,只需要创建一个目录即可。。。。
另外,在最后启动ftp,登录的时候会遇到一个ubuntu16的系统BUG(其他linux系统没有此BUG),解决方式也见下一章