centos7安装vsftpd 开启ftp

来源:互联网 发布:java sql注入漏洞修复 编辑:程序博客网 时间:2024/05/21 05:39

安装配置vsftpd做FTP服务,我们的Web应用使用Git管理进行迭代,公共文件软件存储使用开源网盘Seafile来管理,基本够用。想不到FTP的使用的场景,感觉它好像老去了,虽然现在基本没有用到这个工具,但刚好公司公司刷一个硬件需要使用FTP来下载配置文件,于是研究使用了一下,记录了一下使用过程。

安装

在安装前查看是否已安装vsftpd

?
[html] view plain copy
  1. # 查看是否已安装 方法一  
  2. [root@localhost ~]# rpm -q vsftpd  
  3. vsftpd-3.0.2-21.el7.x86_64  
  4.    
  5. # 查看是否已安装 方法二  
  6. [root@localhost ~]# vsftpd -v  
  7. vsftpd: version 3.0.2  
  8.    
  9. # 安装 vsftpd  
  10. [root@localhost ~]# yum -y install vsftpd  


查看位置

?
[html] view plain copy
  1. [root@localhost ~]# whereis vsftpd  
  2. vsftpd:/usr/sbin/vsftpd/etc/vsftpd /usr/share/man/man8/vsftpd.8.gz  


启动vsftpd服务

?
[html] view plain copy
  1. systemctl start vsftpd.service  


关闭firewall和SELinux

?
[html] view plain copy
  1. setenforce 0  # 设置SELinux 成为permissive模式 (关闭SELinux)  
  2. setenforce 1  # 设置SELinux 成为enforcing模式  (开启SELinux)  
  3.    
  4. # 或者修改配置  
  5. vi/etc/selinux/config  
  6. SELINUX=enforcing  
  7. # 注释掉  
  8. SELINUXTYPE=targeted  
  9. # 注释掉  
  10. SELINUX=disabled  
  11. # 增加  
  12. :wq!#保存退出  
  13. setenforce 0  


或者设置SELinux

?
[html] view plain copy
  1. getsebool -a | grepftp  
  2. setsebool -P ftpd_full_access on  


?
[html] view plain copy
  1. systemctl stop firewalld.service  
  2. #停止firewall  
  3. systemctl disable firewalld.service  
  4. #禁止firewall开机启动  


如果你不愿意关闭防火墙,需要防火墙添加FTP服务。

[html] view plain copy
  1. firewall-cmd --permanent --zone=public --add-service=ftp  
  2. firewall-cmd --reload  


[html]view plaincopy
  1. firewall-cmd --permanent --zone=public --add-service=ftp  
  2. firewall-cmd --reload  

?
[html]view plaincopy
  1. firewall-cmd --permanent --zone=public --add-service=ftp  
  2. firewall-cmd --reload  

修改配置文件

配置文件/etc/vsftpd/vsftpd.conf

anonymous_enable=NO #不允许匿名登录

anonymous_enable=NO
1
2
3
4
5
6
7
8
9
anonymous_enable=NO   # 不允许匿名访问,禁用匿名登录
?

虚拟用户高级参数

  • 当virtual_use_local_privs=YES 时,虚拟用户和本地用户有相同的权限;
  • 当virtual_use_local_privs=NO  时,虚拟用户和匿名用户有相同的权限,默认是NO。
  • 当virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。
  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=YES,anon_upload_enable=YES时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=NO时,虚拟用户只能下载文件,无其他权限。
  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_upload_enable=YES时,虚拟用户只能上传和下载文件,无其他权限。
  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_mkdir_write_enable=YES时,虚拟用户只能下载文件和创建文件夹,无其他权限。
  • 当virtual_use_local_privs=NO,write_enable=YES,anon_world_readable_only=NO,anon_other_write_enable=YES时,虚拟用户只能下载、删除和重命名文件,无其他权限。

匿名登录

安装完默认情况下是开启匿名登录的,对应的是 /var/ftp 目录,这时只要服务启动了,就可以直接连上FTP了。默认用户名是ftp,密码是空的。如果你在配置里面配置了anonymous_enable=NO,匿名就无法登录。

?
[html] view plain copy
  1. $ftp192.168.188.114  
  2.    
  3. Connected to 192.168.188.114.  
  4. 220 (vsFTPd 3.0.2)  
  5. Name (192.168.188.114:kennywang): ftp  
  6. 331 Please specify the password.  
  7. Password:  
  8. 230 Login successful.  
  9. Remote system typeis UNIX.  
  10. Using binary mode to transfer files.  
  11. ftp>ls  
  12. 229 Entering Extended Passive Mode (|||47867|).  
  13. 150 Here comes the directory listing.  
  14. -rw-r--r--  1 0    0       12 Jan 18 06:31 README.md  
  15. drwxr-xr-x  2 0    0        6 Nov 05 19:43 pub  
  16. 226 Directory send OK.  


多用户配置

多用户配置需要自己手工添加配置,下面内容到vsftpd.conf末尾

[html] view plain copy
  1. #  
  2. #  
  3.    
  4. use_localtime=YES    # 使用本地时(自行添加)  
  5. listen_port=21  
  6. chroot_local_user=YES  # 启用限定用户在其主目录下  
  7. idle_session_timeout=300  
  8.    
  9. data_connection_timeout=120# 数据连接超时时间  
  10. guest_enable=YES      # 设定启用虚拟用户功能  
  11. guest_username=ftpuser   # 指定虚拟用户的宿主用户 ftpuser(就是我们后面会新建这个用户)  
  12. guest_username=www  
  13. # 如果ftp目录是指向网站根目录,用来上传网站程序,  
  14. # 可以指定虚拟用户的宿主用户为nginx运行账户www,可以避免很多权限设置问题   
  15.    
  16.    
  17. user_config_dir=/etc/vsftpd/vuser_conf # 虚拟用户配置文件目录  
  18. virtual_use_local_privs=YES# NO时,虚拟用户和匿名用户有相同的权限,默认是NO  
  19.    
  20. pasv_min_port=10060    # 被动模式最小端口号10060  
  21. pasv_max_port=10090    # 被动模式最大端口号10090  
  22.    
  23. accept_timeout=5  
  24. connect_timeout=1  


?

创建宿主用户

新建系统用户ftpuser,用户目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)

?
[html] view plain copy
  1. # 方法一  
  2. # 创建用户 ftpuser 指定 `/home/vsftpd` 目录  
  3. useradd-g root -M -d /home/vsftpd-s /sbin/nologinftpuser  
  4.    
  5. # 设置用户 ftpuser 的密码  
  6. passwdftpuser  
  7. # 把 /home/vsftpd 的所有权给ftpuser.root  
  8. chown-R ftpuser.root /home/vsftpd  
  9.    
  10. # 方法二  
  11. useraddftpuser -d /home/vsftpd-s /bin/false  
  12. chownftpuser:ftpuser /home/vsftpd-R   
  13.    
  14. # 如果虚拟用户的宿主用户为www,需要这样设置  
  15. # www目录是你应用的目录  
  16. chownwww:www /home/www-R  


删除用户 userdel ftpuser

建立虚拟用户文件

?
[html] view plain copy
  1. touch/etc/vsftpd/vuser_passwd  
  2. # 编辑虚拟用户名单文件:(  
  3. # 第一行账号,第二行密码,注意:不能使用root做用户名,系统保留)  
  4. vi/etc/vsftpd/vuser_passwd  
  5. # 编辑内容,下面是 vuser_passwd 内容  
  6. wcj  
  7. 123456  
  8. hss  
  9. 123456  
  10. #保存退出  


生成虚拟用户数据文件

?
[html] view plain copy
  1. db_load -T -t hash-f /etc/vsftpd/vuser_passwd/etc/vsftpd/vuser_passwd.db  
  2. chmod600 /etc/vsftpd/vuser_passwd.db  


创建用户配置

?
[html] view plain copy
  1. mkdir/etc/vsftpd/vuser_conf # 建立虚拟用户个人vsftp的配置文件  
  2. cd/etc/vsftpd/vuser_conf   # 进入目录  
  3. touchhss wcj         # 这里创建两个虚拟用户配置文件  


每一个文件配置文件都差不多,只是参数local_root不一样。

[html] view plain copy
  1. local_root=/home/vsftpd/hss # 用户 hss 配置目录,这个地方不一样  
  2. write_enable=YES      # 允许本地用户对FTP服务器文件具有写权限  
  3. anon_world_readable_only=NO  
  4. anon_upload_enable=YES   # 允许匿名用户上传文件(须将全局的write_enable=YES,默认YES)  
  5. anon_mkdir_write_enable=YES # 允许匿名用户创建目录  
  6. anon_other_write_enable=YES # 允许匿名用户删除和重命名权限(自行添加)  

[html] view plain copy
  1. mkdir-p /home/vsftpd/hss  # 每个用户对于一个目录,创建两个目录“hss”、“wcj”  
  2.    
  3. # 下面是目录结构  
  4. /home/vsftpd  
  5.    ├── hss  
  6.    │  ├── filename.md  
  7.    │  └── upload  
  8.    └── wcj  
  9.      └── filename.md  
  10.    
  11.    
  12. # 赋予其权限  
  13. chmod-R 777 /var/vsftpd/hss/upload/  
  14.    
  15. # 在/var/ftp下新建一个目录来实现匿名用户上传  
  16. mkdir/var/ftp/upload  


[html]view plaincopy
  1. <span style="font-family: tahoma, arial, 宋体; font-size: 14px;">创建用户配置</span>local_root=/home/vsftpd/hss # 用户 hss 配置目录,这个地方不一样  
  2. write_enable=YES      # 允许本地用户对FTP服务器文件具有写权限  
  3. anon_world_readable_only=NO  
  4. anon_upload_enable=YES   # 允许匿名用户上传文件(须将全局的write_enable=YES,默认YES)  
  5. anon_mkdir_write_enable=YES # 允许匿名用户创建目录  
  6. anon_other_write_enable=YES # 允许匿名用户删除和重命名权限(自行添加)  

每个用户目录文件夹是有root用户创建的,也就是上面local_root配置目录,其权限应设置为755。因为权限的问题在该文件夹内无法直接上传文件。而如果设置为777则无法访问,这是由于vsftpd的安全性设置。解决上传问题的方法是在local_root文件夹内新建一个upload的文件夹,权限设置为777,可将文件上传到该文件夹。
?创建用户目录

vsftpd中几种用户的区分:

本地用户:用户在FTP服务器拥有账号,且该账号为本地用户的账号,可以通过自己的账号和口令进行授权登录,登录目录为自己的home目录$HOME 

虚拟用户:用户在FTP服务器上拥有账号,但该账号只能用于文件传输服务。登录目录为某一特定的目录,通常可以上传和下载 

匿名用户:用户在FTP服务器上没有账号,登录目录为/var/ftp

最后重启vsftpd服务器

?
[html] view plain copy
  1. systemctl restart vsftpd.service  


服务运维

?
[html] view plain copy
  1. systemctl restart vsftpd.service # 重启服务  
  2. systemctl start vsftpd.service  # 启动服务  
  3. systemctl status vsftpd.service  # 服务状态查看  


FTP命令

[html] view plain copy
  1. ftp> ascii # 设定以ASCII方式传送文件(缺省值)   
  2. ftp> bell  # 每完成一次文件传送,报警提示.   
  3. ftp> binary # 设定以二进制方式传送文件.   
  4. ftp> bye  # 终止主机FTP进程,并退出FTP管理方式.   
  5. ftp>case# 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母.   
  6. ftp>cd  # 同UNIX的CD命令.   
  7. ftp> cdup  # 返回上一级目录.   
  8. ftp>chmod# 改变远端主机的文件权限.   
  9. ftp> close # 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除.   
  10. ftp> delete # 删除远端主机中的文件.   
  11. ftp>dir[remote-directory] [local-file]# 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件.   
  12. ftp> get [remote-file] [local-file]# 从远端主机中传送至本地主机中.   
  13. ftp> help [command]# 输出命令的解释.   
  14. ftp> lcd # 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录.   
  15. ftp>ls[remote-directory] [local-file]# 同DIR.   
  16. ftp> macdef         # 定义宏命令.   
  17. ftp> mdelete [remote-files] # 删除一批文件.   
  18. ftp> mget [remote-files]  # 从远端主机接收一批文件至本地主机.   
  19. ftp>mkdirdirectory-name  # 在远端主机中建立目录.   
  20. ftp> mput local-files# 将本地主机中一批文件传送至远端主机.   
  21. ftp>openhost [port] # 重新建立一个新的连接.   
  22. ftp> prompt      # 交互提示模式.   
  23. ftp> put local-file[remote-file]# 将本地一个文件传送至远端主机中.   
  24. ftp>pwd# 列出当前远端主机目录.   
  25. ftp> quit # 同BYE.   
  26. ftp> recv remote-file[local-file]# 同GET.   
  27. ftp> rename [from] [to]   # 改变远端主机中的文件名.   
  28. ftp>rmdirdirectory-name  # 删除远端主机中的目录.   
  29. ftp> send local-file[remote-file]# 同PUT.   
  30. ftp> status  # 显示当前FTP的状态.   
  31. ftp> system  # 显示远端主机系统类型.   
  32. ftp> user user-name [password] [account] # 重新以别的用户名登录远端主机.   
  33. ftp> ? [command]# 同HELP. [command]指定需要帮助的命令名称。如果没有指定 command,ftp 将显示全部命令的列表。  
  34. ftp> ! # 从 ftp 子系统退出到外壳。   


?

关闭FTP连接

bye

exit

quit

下载文件

?
[html] view plain copy
  1. ftp> get readme.txt # 下载 readme.txt 文件  
  2. ftp> mget *.txt   # 下载  


上传文件

?
[html] view plain copy
  1. ftp> put /path/readme.txt# 上传 readme.txt 文件  
  2. ftp> mput *.txt      # 可以上传多个文件  


状态码

  • 230 - 登录成功
  • 200 - 命令执行成功
  • 150 - 文件状态正常,开启数据连接端口
  • 250 - 目录切换操作完成
  • 226 - 关闭数据连接端口,请求的文件操作成功