centos7搭建vsftpd服务器

  • A+

一、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. 设置开机启动  
  5. [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.   
  9. 4月 01 15:15:36 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...  
  10. 4月 01 15:15:36 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.  
  11. [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.   
  3. [root@ftpclient ~]# lftp 192.168.150.96  
  4. lftp 192.168.150.96:~> ls  
  5. -rw-r--r--    1 0        0               0 Apr 01 07:20 moon.txt  
  6. drwxr-xr-x    2 0        0             177 Apr 01 07:39 music  
  7. drwxr-xr-x    2 0        0               6 Oct 30 19:45 pub  
  8. lftp 192.168.150.96:/> pwd  
  9. ftp://192.168.150.96/  
  10. lftp 192.168.150.96:/> mkdir mytest  
  11. mkdir: Access failed: 550 Permission denied. (mytest)  
  12. 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.   
  10.     [ <=>                                                                                       ] 309         --.-K/s 用时 0s        
  11.   
  12. 2019-04-02 08:26:17 (33.8 MB/s) - “192.168.150.96/.listing” 已保存 [309]  
  13.   
  14. 远程文件比本地文件 “192.168.150.96/moon.txt” 更老 -- 不获取。  
  15. FINISHED --2019-04-02 08:26:17--  
  16. Total wall clock time: 0.007s  
  17. Downloaded: 1 files, 309 in 0s (33.8 MB/s)  
  18. [root@ftpclient ~]  
4)修改匿名用户访问FTP服务器的权限
  1. [root@vsftpserver ~]# vim /etc/vsftpd/vsftpd.conf  
  2.   
  3. anonymous_enable=YES  
  4. anon_umask=022  
  5. anon_upload_enable=YES  
  6. anon_mkdir_write_enable=YES  
  7. anon_other_write_enable=YES  
  8. 重启服务  
  9. [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.   
  3. anonymous_enable=NO  
  4. local_enable=YES  
  5. write_enable=YES  
  6. 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.   
  4. moonrong01  
  5. 123456  
  6. moonrong02  
  7. 123456  
  8.   
  9. [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.   
  6. [root@vsftpserver ~]  
  7.   
  8. ###########这里出了问题:  
  9. [root@localhost /]# vim /etc/pam.d/vsftpd  
  10.   
  11. #%PAM-1.0  
  12. auth required pam_userdb.so db=/etc/vsftpd/vuser  
  13. account required pam_userdb.so db=/etc/vsftpd/vuser  
  14. #session    optional     pam_keyinit.so    force revoke  
  15. #auth       required    pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed  
  16. #auth       required    pam_shells.so  
  17. #auth       include     password-auth  
  18. #account    include     password-auth  
  19. #session    required     pam_loginuid.so  
  20. #session    include     password-auth  
  21.   
  22. #########################  
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.   
  7. anon_upload_enable=YES  
  8. anon_mkdir_write_enable=YES  
  9. anon_other_write_enable=YES  
  10.   
  11. [root@vsftpserver vusers_dir]  

再次修改vsftpd主配置文件

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

  1. pam_service_name=vsftpd.vu  
  2. userlist_enable=YES  
  3. tcp_wrappers=YES  
  4.   
  5. user_config_dir=/etc/vsftpd/vusers_dir  
8)重启服务测试
moonrong
  • 版权声明:本站原创文章,于2019年4月2日21:09:53,由 发表,共 8188 字。
  • 版权声明: 本文由于2019年4月2日21:09:53 发表在 好派笔记,共 8188 字。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: