CentOS7安装配置vsftp搭建FTP

记录一下本咸鱼搭建路程

Posted by Otone on August 28, 2018

为什么要安装配置vsftpd做FTP服务?
其实是考虑到可能需要给其他人修改内容,总不能给个最高权限的就给别人,于是就自己琢磨着弄了下vsftpd,记录一下安装配置过程。

1st 安装

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

** 查看是否已安装 方法一 **
[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

查看位置

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

启动vsftpd服务

systemctl start vsftpd.service
// 在centos7以下的版本使用的是service vsftpd start

同时,你需要把vsftpd服务添加进系统的启动项中(不然重启又得开一次ww

systemctl enable vsftpd.service
// 在centos7以下的版本使用的是chkconfig vsftpd on

不确定是否添加进系统启动项,可以使用systemctl list-unit-files 过滤查询可以systemctl list-unit-files | grep [服务名]

更多CentOS7与中systemctl的使用与7之前版本的对比可以看这个
https://www.cnblogs.com/shanwater/p/6847196.html

关闭firewall和SELinux

setenforce 0 // 设置SELinux 成为permissive模式 (关闭SELinux)
setenforce 1 // 设置SELinux 成为enforcing模式 (开启SELinux)

systemctl stop firewalld.service //停止firewall
systemctl disable firewalld.service //禁止firewall开机启动

*关闭的原因是一般系统中默认开启了防火墙,SELinux也处于启动状态,一般状态为enforing。致使很多服务端口默认是关闭的。有可能导致配置明明正确却无法正常使用(然后你就找半天找不出原因

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

firewall-cmd –permanent –zone=public –add-service=ftp
firewall-cmd –reload

ps:在服务器的安全组设置中放开端口应该也是可以的(大概,我也没试过

2nd 配置

** 配置文件/etc/vsftpd/vsftpd.conf修改配置文件(重要步骤) **

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

很多人配置ftp最后用户没有权限和这里的步骤有关系(不要问我怎么知道的)

当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时,虚拟用户只能下载、删除和重命名文件,无其他权限。

多用户配置

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

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 目录
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

最后重启vsftpd服务器

systemctl restart vsftpd.service

然后,刚刚创建的用户就可以登录ftp了

关于服务运维

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

关于一些虚拟用户与目录设置相关等更详细内容,可以查看

http://blog.51cto.com/11728495/2057661?utm_source=oschina-app


我创建的用户需要的权限是能正常修改内容,但是是限定那个目录下的,不能到达上一层目录
如果需要设置别的不同权限,可以根据上面的举一反三一下啦~
有问题可以留言,虽然我不一定懂(大概?),也许能交流出答案~