centos7搭建vsftpd服务器

2021-09-16 10:40:47 浏览数 (1)

一、vsftpd服务简介

vsftpd-very secure ftp daemon,非常安全的FTP服务进程,是linux/unix发行版中最主流的FTP服务程序。

它的优点是:小巧轻快,安全易用,稳定高效,满足企业跨部门,多用户的使用等。

FTP基于C/S模式,分为FTP主动模式和FTP被动模式。

二、安装vsftpd服务器程序

这里我们采用yum方式安装vsftpd服务器,并设置防火墙和关闭SElinux。

1.安装vsftpd并启动服务
  1. [root@vsftpserver ~]# yum install -y vsftpd
  2. [root@vsftpserver ~]# systemctl start vsftpd
  3. 设置开机启动  
  4. [root@vsftpserver ~]# systemctl enable vsftpd
2.在防火墙上开放FTP服务
  1. [root@vsftpserver ~]# firewall-cmd --permanent --add-service=ftp
  2. success  
  3. [root@vsftpserver ~]# firewall-cmd --reload
  4. success  
  5. [root@vsftpserver ~]# 
3.关闭SELinux

这里有两种方式

  1. [root@vsftpserver ~]# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
  2. 或者:  
  3. [root@vsftpserver ~]# setenforce 0
4.查看vsftpd运行状态
  1. [root@vsftpserver ~]# systemctl status vsftpd
  2. ● vsftpd.service - Vsftpd ftp daemon  
  3.    Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)  
  4.    Active: active (running) since 一 2019-04-01 15:15:36 CST; 16h ago  
  5.  Main PID: 15720 (vsftpd)  
  6.    CGroup: /system.slice/vsftpd.service  
  7.            └─15720 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf  
  8. 4月 01 15:15:36 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...  
  9. 4月 01 15:15:36 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.  
  10. [root@vsftpserver ~]# 

已经正常运行。

三、配置vsftpd服务程序及测试

vsftpd作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到FTP服务器上。

分别为:匿名开放模式、本地用户模式、虚拟用户模式。

1.匿名开放模式下测试

这种模式是一种不安全的认证模式,无需密码,通过yum install -y vsftpd安装完成启动vsftpd服务后即可访问,不需其他设置。

FTP客户端直接访问:

1)windows下资源管理器或者安装FTP客户端软件
  1. ftp://192.168.150.96/  
2)Linux系统下安装ftp/lftp客户端
  1. [root@ftpclient ~]# yum install ftp lftp -y
  2. [root@ftpclient ~]# lftp 192.168.150.96
  3. lftp 192.168.150.96:~> ls  
  4. -rw-r--r--    1 0        0               0 Apr 01 07:20 moon.txt  
  5. drwxr-xr-x    2 0        0             177 Apr 01 07:39 music  
  6. drwxr-xr-x    2 0        0               6 Oct 30 19:45 pub  
  7. lftp 192.168.150.96:/> pwd
  8. ftp://192.168.150.96/  
  9. lftp 192.168.150.96:/> mkdir mytest  
  10. mkdir: Access failed: 550 Permission denied. (mytest)  
  11. lftp 192.168.150.96:/>   

此时只有读权限。

3)从服务器上下载文件
  1. [root@ftpclient ~]# wget -m ftp://192.168.150.96/moon.txt
  2. --2019-04-02 08:26:17--  ftp://192.168.150.96/moon.txt  
  3.            => “192.168.150.96/.listing”  
  4. 正在连接 192.168.150.96:21... 已连接。  
  5. 正在以 anonymous 登录 ... 登录成功!  
  6. ==> SYST ... 完成。   ==> PWD ... 完成。  
  7. ==> TYPE I ... 完成。 ==> 不需要 CWD。  
  8. ==> PASV ... 完成。   ==> LIST ... 完成。  
  9.     [ <=>                                                                                       ] 309         --.-K/s 用时 0s        
  10. 2019-04-02 08:26:17 (33.8 MB/s) - “192.168.150.96/.listing” 已保存 [309]  
  11. 远程文件比本地文件 “192.168.150.96/moon.txt” 更老 -- 不获取。  
  12. FINISHED --2019-04-02 08:26:17--  
  13. Total wall clock time: 0.007s  
  14. Downloaded: 1 files, 309 in 0s (33.8 MB/s)  
  15. [root@ftpclient ~]# 
4)修改匿名用户访问FTP服务器的权限
  1. [root@vsftpserver ~]# vim /etc/vsftpd/vsftpd.conf
  2. anonymous_enable=YES  
  3. anon_umask=022  
  4. anon_upload_enable=YES  
  5. anon_mkdir_write_enable=YES  
  6. anon_other_write_enable=YES  
  7. 重启服务  
  8. [root@vsftpserver ~]# systemctl restart vsftpd

然后在客户端登录服务器上进行测试

  1. [root@ftpclient ~]# ftp 192.168.150.96
  2. Connected to 192.168.150.96 (192.168.150.96).  
  3. 220 (vsFTPd 3.0.2)  
  4. Name (192.168.150.96:root): ftp  
  5. 331 Please specify the password.  
  6. Password:  
  7. 230 Login successful.  
  8. Remote system type is UNIX.  
  9. Using binary mode to transfer files.  
  10. ftp> ls  
  11. 227 Entering Passive Mode (192,168,150,96,185,61).  
  12. 150 Here comes the directory listing.  
  13. -rw-r--r--    1 0        0               0 Apr 01 07:20 moon.txt  
  14. drwxr-xr-x    2 0        0             177 Apr 01 07:39 music  
  15. drwxr-xr-x    2 0        0               6 Oct 30 19:45 pub  
  16. 226 Directory send OK.  
  17. ftp> cd pub  
  18. 250 Directory successfully changed.  
  19. ftp> ls  
  20. 227 Entering Passive Mode (192,168,150,96,126,196).  
  21. 150 Here comes the directory listing.  
  22. 226 Directory send OK.  
  23. ftp> pwd
  24. 257 "/pub"  
  25. ftp> mkdir test  
  26. 550 Create directory operation failed.  
  27. ftp>   

注:FTP匿名用户默认为anonymous、ftp密码为空。

此时还是没有写权限。

5)修改SELinux安全策略
  1. [root@vsftpserver ~]# vim /etc/vsftpd/vsftpd.conf
  2. [root@vsftpserver ~]# systemctl restart vsftpd
  3. [root@vsftpserver ~]# getsebool -a | grep ftp
  4. ftpd_anon_write --> off  
  5. ftpd_connect_all_unreserved --> off  
  6. ftpd_connect_db --> off  
  7. ftpd_full_access --> off  
  8. ftpd_use_cifs --> off  
  9. ftpd_use_fusefs --> off  
  10. ftpd_use_nfs --> off  
  11. ftpd_use_passive_mode --> off  
  12. httpd_can_connect_ftp --> off  
  13. httpd_enable_ftp_server --> off  
  14. tftp_anon_write --> off  
  15. tftp_home_dir --> off  
  16. [root@vsftpserver ~]# 

然后用-P打开ftdp_full_access使策略永久生效

  1. [root@vsftpserver ~]# setsebool -P ftpd_full_access=on
  2. [root@vsftpserver ~]# 

重启,继续测试:

6)更改目录权限
  1. [root@vsftpserver ftp]# chown -R ftp pub/
  2. [root@vsftpserver ftp]# 
2.本地用户模式下测试

将上面测试的anonymous_enable=NO

  1. [root@vsftpserver ftp]# vim /etc/vsftpd/vsftpd.conf
  2. anonymous_enable=NO  
  3. local_enable=YES  
  4. write_enable=YES  
  5. local_umask=022  

重启服务

此时无法登录,用匿名用户或者root用户。

1)新建两个FTP用户
  1. [root@vsftpserver /]# useradd moonftp01
  2. [root@vsftpserver /]# useradd moonftp02
  3. [root@vsftpserver /]# echo "11111111" | passwd --stdin moonftp01
  4. 更改用户 moonftp01 的密码 。  
  5. passwd:所有的身份验证令牌已经成功更新。  
  6. [root@vsftpserver /]# echo "11111111" | passwd --stdin moonftp02
  7. 更改用户 moonftp02 的密码 。  
  8. passwd:所有的身份验证令牌已经成功更新。  
  9. [root@vsftpserver /]# 
2)禁止这两个账户登录系统,保证系统安全
  1. [root@vsftpserver /]# usermod -s /sbin/nologin moonftp01
  2. [root@vsftpserver /]# usermod -s /sbin/nologin moonftp02
  3. [root@vsftpserver /]# 
3)登录测试
  1. [root@ftpclient ~]# ftp 192.168.150.96
  2. Connected to 192.168.150.96 (192.168.150.96).  
  3. 220 (vsFTPd 3.0.2)  
  4. Name (192.168.150.96:root): moonftp02  
  5. 331 Please specify the password.  
  6. Password:  
  7. 230 Login successful.  
  8. Remote system type is UNIX.  
  9. Using binary mode to transfer files.  
  10. ftp> ls  
  11. 227 Entering Passive Mode (192,168,150,96,37,81).  
  12. 150 Here comes the directory listing.  
  13. 226 Directory send OK.  
  14. ftp>   
3.虚拟用户模式

这种模式是安全认证机制,采用PAM(可插拔认证模块)认证。

1)安装vsftpd虚拟用户用到的软件和认证模块

  1. [root@vsftpserver ~]# yum install pam * libdb-tuils libbdb* --skip-broken -y
2)创建虚拟临时用户列表

虚拟临时用户文件/etc/vsftpd/vuser.list

  1. [root@vsftpserver vsftpd]# vim vuser.list
  2. [root@vsftpserver vsftpd]# cat vuser.list
  3. moonrong01  
  4. 123456  
  5. moonrong02  
  6. 123456  
  7. [root@vsftpserver vsftpd]# 

以上建立两个用户moonrong01和moonrong02,密码为123456

3)生成vsftpd虚拟用户数据库认证文件,设置权限为600,删除原始文件
  1. [root@vsftpserver vsftpd]# db_load -T -t hash -f vuser.list vuser.db
  2. [root@vsftpserver vsftpd]# file vuser.db
  3. vuser.db: Berkeley DB (Hash, version 9, native byte-order)  
  4. [root@vsftpserver vsftpd]# chmod 600 vuser.db
  5. [root@vsftpserver vsftpd]# rm -rf vuser.list
  6. [root@vsftpserver vsftpd]# 
4)创建vsftpd服务程序的根目录
  1. [root@vsftpserver ~]# useradd -d /var/ftproot -s /sbin/nologin virtual
  2. [root@vsftpserver ~]# ls -ld /var/ftproot/
  3. drwx------. 3 virtual virtual 78 4月   2 09:46 /var/ftproot/  
  4. [root@vsftpserver ~]# chmod -Rf 755 /var/ftproot/
  5. [root@vsftpserver ~]# 
5)配置PAM认证文件,两个文件

行首加入如下代码

  1. [root@vsftpserver ~]# vim /etc/pam.d/vsftpd.vu
  2. [root@vsftpserver ~]# cat /etc/pam.d/vsftpd.vu
  3. auth        required     pam_userdb.so db=/etc/vsftpd/vuser  
  4. account     required     pam_userdb.so db=/etc/vsftpd/vuser  
  5. [root@vsftpserver ~]# 
  6. ###########这里出了问题:
  7. [root@localhost /]# vim /etc/pam.d/vsftpd
  8. #%PAM-1.0
  9. auth required pam_userdb.so db=/etc/vsftpd/vuser  
  10. account required pam_userdb.so db=/etc/vsftpd/vuser  
  11. #session    optional     pam_keyinit.so    force revoke
  12. #auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
  13. #auth       required    pam_shells.so
  14. #auth       include     password-auth
  15. #account    include     password-auth
  16. #session    required     pam_loginuid.so
  17. #session    include     password-auth
  18. #########################
6)修改vsftpd服务程序主配置文件,通过pam_service_name参数将PAM认证文件的名称修改为vsftpd.vu。

pam_service_name=vsftpd.vu

7)为虚拟用户设置不同的权限

这里设置moonrong01上传、创建、修改、查看、删除文件的权限。

这里设置moonrong02查看文件的权限。

  1. [root@vsftpserver ~]# mkdir /etc/vsftpd/vusers_dir/
  2. [root@vsftpserver ~]# cd /etc/vsftpd/vusers_dir/
  3. [root@vsftpserver vusers_dir]# touch moonrong02
  4. [root@vsftpserver vusers_dir]# vim moonrong01
  5. [root@vsftpserver vusers_dir]# cat moonrong01
  6. anon_upload_enable=YES  
  7. anon_mkdir_write_enable=YES  
  8. anon_other_write_enable=YES  
  9. [root@vsftpserver vusers_dir]# 

再次修改vsftpd主配置文件

通过user_config_dir参数来定义这两个虚拟用户不现权限的配置文件所存放的路径。

  1. pam_service_name=vsftpd.vu  
  2. userlist_enable=YES  
  3. tcp_wrappers=YES  
  4. user_config_dir=/etc/vsftpd/vusers_dir  
8)重启服务测试

0 人点赞