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

安装

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

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

查看位置

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

启动vsftpd服务

?
1
systemctl start vsftpd.service

关闭firewall和SELinux

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

或者设置SELinux

?
1
2
getsebool -a | grep ftp
setsebool -P ftpd_full_access on

?
1
2
3
4
systemctl stop firewalld.service
#停止firewall
systemctl disable firewalld.service
#禁止firewall开机启动

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

?
1
2
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

修改配置文件

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

?
1
2
3
4
5
6
7
8
9
anonymous_enable=NO    # 不允许匿名访问,禁用匿名登录
chroot_local_user=YES   # 启用限定用户在其主目录下
use_localtime=YES     # 使用本地时(自行添加)
chroot_list_enable=YES
local_enable=YES      # 允许使用本地帐户进行FTP用户登录验证
allow_writeable_chroot=YES # 如果启用了限定用户在其主目录下需要添加这个配置,解决报错 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
xferlog_enable=YES     # 启用上传和下载的日志功能,默认开启。
local_umask=022      # 设置本地用户默认文件掩码022
# FTP上本地的文件权限,默认是077,不过vsftpd安装后的配置文件里默认是022

虚拟用户高级参数

  • 当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,匿名就无法登录。

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

多用户配置

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

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

创建宿主用户

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

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

删除用户 userdel ftpuser

建立虚拟用户文件

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

生成虚拟用户数据文件

?
1
2
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db

创建用户配置

?
1
2
3
mkdir /etc/vsftpd/vuser_conf # 建立虚拟用户个人vsftp的配置文件
cd /etc/vsftpd/vuser_conf   # 进入目录
touch hss wcj         # 这里创建两个虚拟用户配置文件

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

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

创建用户目录

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

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

vsftpd中几种用户的区分:

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

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

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

最后重启vsftpd服务器

?
1
systemctl restart vsftpd.service

服务运维

?
1
2
3
systemctl restart vsftpd.service # 重启服务
systemctl start vsftpd.service  # 启动服务
systemctl status vsftpd.service  # 服务状态查看

FTP命令

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

关闭FTP连接

bye

exit

quit

下载文件

?
1
2
ftp> get readme.txt # 下载 readme.txt 文件
ftp> mget *.txt   # 下载

上传文件

?
1
2
ftp> put /path/readme.txt # 上传 readme.txt 文件
ftp> mput *.txt      # 可以上传多个文件

状态码

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

详解CentOS7安装配置vsftp搭建FTP相关推荐

  1. centos7安装配置vsftp搭建FTP

    参考文章: CentOS7下安装FTP服务 详解CentOS7安装配置vsftp搭建FTP centos7之vsftp安装和使用 1.安装vsftp # 查看是否已安装 方法一 [root@local ...

  2. linux搭建vsftp服务器_Linux安装配置vsftp搭建FTP的详细配置

    这里主要是说vsftp的配置:基础的可以参考Linux中VSFTP的配置 转自:https://www.jb51.net/article/103904.htm 修改配置文件 配置文件/etc/vsft ...

  3. Git客户端图文详解如何安装配置GitHub操作流程攻略

    Git客户端图文详解如何安装配置GitHub操作流程攻略 软件应用 爱分享  3个月前 (08-15)  8896浏览  0评论 Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来 ...

  4. Linux系统安装Samba共享服务器详解及安装配置

    一.简介 Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,实现了Linux和windows系统间的文件共享.SMB(Server Messages Block,信息服务 ...

  5. Maven入门详解与安装配置

    Maven: Maven出现前的问题: 假设你现在做了一个项目,项目中肯定要用到一些jar包,比如说mybatis,log4j,JUnit等,除了这些之外,你有可能用到你的同事开发的其他的东西,比如说 ...

  6. freeswitch 用户配置详解_FreeSwitch安装配置记录-阿里云开发者社区

    安装FreeSwitch 主要命令如下: git clone -b v1.2.stable git://git.freeswitch.org/freeswitch.git cd freeswitch/ ...

  7. CentOS7安装配置VSFTP

    1 #是否开启匿名用户,匿名都不安全,不要开 2 anonymous_enable=NO 3 #允许本机账号登录FTP 4 local_enable=YES 5 #允许账号都有写操作 6 write_ ...

  8. CentOS7 安装配置FTP服务器详解

    CentOS7 安装配置FTP服务器详解 1.FTP简介 ftp(File Transfer Protocol文件传输协议)是基于TCP/IP 协议的应用层协议,用于文件的传输,包括ftp服务器(或服 ...

  9. CentOS7 安装配置SFTP服务器详解

    CentOS7 安装配置SFTP服务器详解 1.SFTP简介 SSH文件传输协议(英语:SSH File Transfer Protocol,也称Secret File Transfer Protoc ...

最新文章

  1. 实际运维中处理的事故问题
  2. 20个非常有用的PHP类库
  3. (Mybatis)缓存
  4. JAVA中深拷贝与浅拷贝(在网上找到的) 希望对于理解深拷贝与浅拷贝有帮助...
  5. spring-beans模块分析
  6. python中双冒号的作用_python中双冒号
  7. 如何从一个吊丝男成为一个合格的高级程序员
  8. 用Visual Studio 2008编写Win32汇编程序
  9. java mongodb 副本集,MongoDB副本集
  10. EmacsLisp学习
  11. comsol频域模拟
  12. 机器学习(聚类七)——层次聚类的优化算法
  13. 谈谈任务调度的四种实现方式
  14. 新浪产品管培生的结构化面试
  15. 近地面无人机植被定量遥感与生理参数反演
  16. Nordic芯片如何达到最快的蓝牙传输速率
  17. 国标Gb28181里Contact和Route的使用
  18. 让img在div垂直及水平居中
  19. 应网友要求易筋经联系一下
  20. CSUSTOJ-藤原书记的佩斯(简单数学)

热门文章

  1. Linux应用程序和驱动程序如何完成交互,应用程序和驱动的简易交互方式的实现...
  2. zeromq php server,zeromq   php 轻量级队列
  3. ftp 速度_如何评价我的骑行功率(FTP)?
  4. mpython掌控板_用mpython x玩转掌控板——微信小程序 遇上掌控板
  5. 学习路上遇到的Error2
  6. 网页mp3提取器_用Python写一个酷狗音乐下载器!
  7. [Unity] Animator 播放 Mixamo 动画卡在第一帧的解决办法:勾选 Loop Time
  8. c语言程序编译成功运行失败,为什么这个程序编译成功但运行失败?
  9. asp net html.dropdownlist viewdata 指定选中项_ASP.NET Web API基础(05)--- 基于JWT的身份认证 - 高原秃鹫...
  10. 织梦dede模板|HTML5建材陶瓷装修设计网站织梦dede模板源码[自适应手机版]