实验1:最简单的实现FTP功能

1.直接yum安装

 yum install vsftpd

2.启动vsftpd服务

 service vsfptd start

3.查看端口是否开启

 ss -ntl  # 查看端口21端口是否开启

4.开始使用

 ftp  ftp服务ip地址


实验2:基于DB数据库文件的FTP虚拟用户

1.创建用户数据文件

vim /etc/vsftpd/ftpvusers

 添加用户信息(用户名、密码)

 xdg

 xdg

 mage

 xdg

cd /etc/vsftpd/

db_load -T -t hash -f ftpvusers  xdgvusers.db  # 生成用户数据库文件*.db

chmod 600 ftpvusers.db  # 添加密码文件的保密性


2.添加自定义的ftp服务用户

useradd -d /var/ftpsite -s /sbin/nologin ftpvuser

 注:就算是nologin也是能正常访问的,但是ssh是不可以的

chmod 555 /var/ftpsite

 注:加目录不能有写权限,不然登录出错

mkdir /var/ftpsite/upload

 注:上传下载使用,单个管理目录(在ftp根目录下是无法操作的)

chown ftpvuser /var/ftpsite/upload

 注:属主的更改


3.添加pam模块的机制

vim /etc/pam.d/vsftpd.vuser  # 认证机制

  auth required pam_userdb.so db=/etc/vsftpd/xdgvusers # 这里xdgvusers.db后缀省略了

  account required pam_userdb.so db=/etc/vsftpd/xdgvusers # 这里也是


4.编辑vsftpd的相关配置文件,指定pam模块机制

vim /etc/vsftpd/vsftpd.conf # 启用认证,配置相关信息

  pam_service_name=vsftpd.vuser

  guest_enable=YES

  guest_username=ftpvuser

    # 虚拟用户:访问时进程显示的用户名

  user_config_dir=/etc/vsftpd/ftpvusers.conf.d/

    # 这里是指定ftp服务的用户配置文件路径


5.建立虚拟用户各自的配置文件

mkdir /etc/vsftpd/ftpvusers.conf.d/

cd /etc/vsftpd/ftpvusers.conf.d/

vim  /etc/vsftpd/ftpvusers.conf.d/xdg  # 一个指定了家目录的相关功能

  anon_upload_enable=YES   # 上传功能

  anon_mkdir_write_enable=YES  # 只能创建目录功能

vim  /etc/vsftpd/ftpvusers.conf.d/mage # 一个指定了另个为家目录的相关功能

  local_root=/app/mage # 指定特定的家目录,上面没用特定,使用的原来创建用户的家目录

  anon_upload_enable=YES

  anon_mkdir_write_enable=YES


6.准备mage的目录

mkdir -p /app/mage/upload # 创建目录方便管理

chmod 555 mage # ftp服务用户的家目录不允许默认有写权限,不然会出错

chown ftpvuser /app/mage/upload # 设置目录的属性信息


7.测试

systemctl restart vsftpd

命令行:  ftp  ftp的ip地址

网页当中: ftp://ftp的ip地址


实现3:基于MYSQL验证的vsftpd虚拟用户 

实现环境:

 一台作为ftp服务器、一台作为数据库服务器(centos7)

准备工作:

 关闭防火墙、关闭SELinux

1、安装所需要包和包组: 

在数据库服务器上安装包: 

 Centos7:在数据库服务器上安装 

   yum –y install mariadb-server  mariadb 

   systemctl start mariadb.service 

   systemctl enable mariadb 

在FTP服务器上安装vsftpd和pam_mysql包 

 centos6:pam_mysql由epel6的源中提供(配置centos6的yum源)   # pam模块和数据库之前的连接

   yum install vsftpd  pam_mysql

   centos7:无对应rpm包,需手动编译安装 

   yum -y groupinstall "Development Tools" 

   yum -y install mariadb-devel  pam-devel  vsftpd # 所依赖的包 

   下载pam_mysql-0.7RC1.tar.gz ftp://172.16.0.1/pub/Sources/sources/pam/ 

   tar xvf pam_mysql-0.7RC1.tar.gz cd pam_mysql-0.7RC1/ 

   ./configure --with-mysql=/usr  --with-pam=/usr  --with-pam-mods-dir=/lib64/security

   make && make install 

2、在数据库服务器上创建虚拟用户账号 

 1.建立存储虚拟用户数据库和连接的数据库用户 

   mysql> CREATE DATABASE vsftpd; 

   mysql> SHOW DATABASES; 

  ftp服务和mysql不在同一主机:

   mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'172.18.48.%'  IDENTIFIED BY 'xdg';

  ftp服务和mysql在同一主机:

   mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'xdg'; 

   mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1'  IDENTIFIED BY 'xdg'; 

   mysql> FLUSH PRIVILEGES;

  2.准备相关表 

   mysql> USE vsftpd; 

   mysql> CREATE TABLE users (name CHAR(50) NOT NULL, password CHAR(50) NOT NULL ); 

   mysql>DESC users; 

测试连接 

 mysql -uvsftpd  -pxdg  -h 172.18.48.215  

  3.添加虚拟用户

   根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储

   mysql> INSERT INTO users(name,password) values(‘xiaoming',password('xdg')); 

   mysql> INSERT INTO users(name,password) values(‘xiaohong',password('xdg')); 

   或者合在一起:insert into users(name,password) value('xiaoming',password('xdg')),('xiaohong',password('xdg'));

   mysql> SELECT * FROM users;


3、在FTP服务器上配置vsftpd服务

 1.在FTP服务器上建立pam认证所需文件 

  vi /etc/pam.d/vsftpd.mysql 添加如下两行

   auth required pam_mysql.so user=vsftpd passwd=xdg host=172.18.48.215 db=vsftpd table=users 

   usercolumn=name passwdcolumn=password crypt=2

   account required pam_mysql.so user=vsftpd passwd=xdg host=172.18.48.215 db=vsftpd table=users 

   usercolumn=name passwdcolumn=password crypt=2 

   注:user=vsftpd passwd=xdg  指的是:数据库的用户名、数据库密码

   host=172.18.48.215 db=vsftpd table=users  指的是:数据库的主机、数据库名、数据库表名

   crypt=2 指的是: crypt采用加密   2表示使用mysql password()函数加密

  2.建立相应用户和修改vsftpd配置文件,使其适应mysql认证建立虚拟用户映射的系统用户及对应的目录 

   useradd -s /sbin/nologin -d /app/ftpmysql ftpmysql 

   chmod 555 /app/ftpmysql   # centos7 需除去ftp根目录的写权限(软件要求) 

   mkdir /app/ftpmysql/{upload,pub} 

   setfacl -m u:ftpmysql:rwx  /app/ftpmysql/upload 

   注:或者 chown ftpmysql  /app/ftpmysql/upload 


 确保/etc/vsftpd.conf中已经启用了以下选项  

  anonymous_enable=YES # 允许匿名用户访问

  添加下面两项 

    guest_enable=YES 

    guest_username=ftpmysql

    注:系统用户和虚拟用户的映射

  修改下面一项,原系统用户无法登录 

  pam_service_name=vsftpd.mysql # 指定pam模块


4、启动vsftpd服务 

  service vsftpd start

  systemctl start vsftpd 

  chkconfig vsftpd on

  systemctl enable vsftpd 

  查看端口开启情况 

  netstat -tnlp | grep :21


5、Selinux相关设置:在FTP服务器上执行  # 默认进入就是关闭的,所以可以不用写

  restorecon  -R /lib64/security

  setsebool -P ftpd_connect_db 1 

  setsebool -P ftp_home_dir 1

  chcon -R -t public_content_rw_t /var/ftproot/


6、测试:利用FTP客户端工具,以虚拟用户登录验证结果

  tail /var/log/secure # 日志存放的文件,因为通过pam模块认证通过


7、在FTP服务器上配置虚拟用户具有不同的访问权限 vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在 vsftpd.conf指定其路径及名称即可

  1、配置vsftpd为虚拟用户使用配置文件目录 

   vim /etc/vsftpd/vsftpd.conf 添加如下选项 

    user_config_dir=/etc/vsftpd/vusers_config

  2、创建所需要目录,并为虚拟用户提供配置文件 

   mkdir /etc/vsftpd/vusers_config/ 

   cd /etc/vsftpd/vusers_config/ 

   touch wang mage

  3、配置虚拟用户的访问权限 虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关 指令进行的。

   如果需要让用户wang具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下 选项并设置为YES即可,只读则设为NO 

   注意:需确保对应的映射用户对于文件系统有写权限 

   anon_upload_enable={YES|NO} 

   anon_mkdir_write_enable={YES|NO} 

   anon_other_write_enable={YES|NO}