1

Centos7安装搭建FTP服务器

 2 years ago
source link: https://www.modeng.xyz/2021/10/10/centos7-install-vsftpd/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Centos7安装搭建FTP服务器 - 马克西的博客 | Cmarky Blog

img

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。

vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。

比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。

①vsftpd 是以一般身份启动服务,所以对于 Linux 系统的使用权限较低,对于Linux 系统的危害就相对的减低了。此外, vsftpd 亦利用 chroot() 这个函式进行改换根目录的动作,使得系统工具不会被vsftpd 这支服务所误用;

②任何需要具有较高执行权限的 vsftpd 指令均以一支特殊的上层程序( parent process ) 所控制 ,该上层程序享有的较高执行权限功能已经被限制的相当的低,并以不影响Linux 本身的系统为准;

③所有来自 clients 端,想要使用这支上层程序所提供的较高执行权限之vsftpd 指令的需求,均被视为『不可信任的要求』来处理,必需要经过相当程度的身份确认后,方可利用该上层程序的功能。例如chown(), Login 的要求等等动作;

④此外,上面提到的上层程序中,依然使用 chroot() 的功能来限制使用者的执行权限。

1.安装vsftpd

环境: CentOS Linux release 7.6.1810 (Core)

vsftpd版本: vsftpd.x86_64 0:3.0.2-25.el7

1.1、执行yum命令安装

[root@Sungeek ~]# yum -y install vsftpd

1.2、修改配置文件

按照下面修改配置文件

[root@Sungeek ~]# cd /etc/vsftpd
[root@Sungeek ~]# vim vsftpd.conf
#是否允许匿名,默认no
anonymous_enable=NO

#这个设定值必须要为YES 时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机
local_enable=YES

#具有写权限
write_enable=YES

#本地用户创建文件或目录的掩码
local_umask=022

#当dirmessage_enable=YES时,可以设定这个项目来让vsftpd寻找该档案来显示讯息!您也可以设定其它档名!
dirmessage_enable=YES

#当设定为YES时,使用者上传与下载日志都会被纪录起来。记录日志与下一个xferlog_file设定选项有关
xferlog_enable=YESxferlog_std_format=YES

#上传与下载日志存放路径
xferlog_file=/var/log/xferlog 

#开启20端口
connect_from_port_20=YES

#关于系统安全的设定值:
#ascii_download_enable=YES(NO)
#如果设定为YES ,那么 client 就可以使用 ASCII 格式下载档案。
#一般来说,由于启动了这个设定项目可能会导致DoS 的攻击,因此预设是NO。
#ascii_upload_enable=YES(NO)
#与上一个设定类似的,只是这个设定针对上传而言!预设是NO。
ascii_upload_enable=NO
ascii_download_enable=NO
#通过搭配能实现以下几种效果: 
#①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。 
#②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。 
#③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。 
#④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd
pam_service_name=vsftpd

#当然我们都习惯支持TCP Wrappers的啦!
tcp_wrappers=YES

#不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES

#ftp的端口号
listen_port=60021
#启动被动式联机(passivemode)
pasv_enable=YES
#上面两个是与passive mode 使用的 port number 有关,如果您想要使用65400到65410 这 11 个 port 来进行被动式资料的连接,可以这样设定
pasv_min_port=65400
pasv_max_port=65410

#FTP访问目录
local_root=/data/ftp/

1.3、添加防火墙开启相关端口

这里要是测试可以先关闭防火墙

[root@tsemongo01 vsftpd]# systemctl stop firewalld

如果是正式环境,最好开启防火墙,添加相应端口

#添加主端口
[root@tsemongo01 vsftpd]# firewall-cmd --permanent --zone=public --add-port=60021/tcp
success
#添加被动端口
[root@tsemongo01 vsftpd]# firewall-cmd --permanent --zone=public --add-port=65400-65410/tcp
success
[root@tsemongo01 vsftpd]# firewall-cmd --reload 
success

2、创建FTP用户

添加FTP用户命令:useradd XXX

设置FTP用户密码:passwd XXX

[root@Sungeek vsftpd]# useradd -d /data/ftp/ -s /sbin/nologin ftpuser
[root@Sungeek vsftpd]# passwd ftpuser

查看FTP用户是否设置不能通过SSH登录,只能使用FTP

[root@Sungeek vsftpd]# vim /etc/passwd

找到创建的用户把/bin/bash修改为/sbin/nologin

img

设置用户访问权限:

[root@Sungeek vsftpd]# chown -R ftpuser /data/ftp

2.1、为不同用户配置不同目录

1、在主配置文件/etc/vsftpd/vsftpd.conf中加入:

user_config_dir=/etc/vsftpd/vsftpd_user_conf

2、然后,创建/etc/vsftpd/vsftpd_user_conf目录,

#mkdir /etc/vsftpd/vsftpd_user_conf

​ 并在该目录下建立与特定虚拟用户同名的文件:

[root@hpe45 root]# cd /etc/vsftpd/vsftpd_user_conf
[root@hpe45 vsftpd_user_conf]# vi  zhuhuajie

以上的操作为虚拟用户zhuhuajie建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/zhuhuajie。接下来,在zhuhuajie的个人配置文件中将zhuhuajie的目录锁定在/ftpdata,配置选项为:

local_root=/ftpdata

3、设置vsftpd服务开机启动

[root@Sungeek ~]# systemctl enable vsftpd.service

img

4、启动暂停查看服务状态命令

[root@Sungeek ~]# systemctl start vsftpd.service 
[root@Sungeek ~]# systemctl status vsftpd.service 

img

5、安装ftp客户端验证能否连接

随便用一个ftp客户端访问测试是否连接成功即可!我用的是FileZilla Client

img

6、常见问题

6.1、问题1

img

这种情况是说明配置文件里面设置的chroot_list_file=/etc/vsftpd/chroot_list没找到这个文件

直接去/etc/vsftpd目录cp一个user_list或者把配置文件里面改名就行

img

6.2、问题2:

img

这种情况是selinux没有关闭,关闭selinux即可

[root@localhost ~]# vim /etc/selinux/config

SELINUX=disabled

更多详细的vsftpd的配置说明:https://baike.baidu.com/item/vsftpd/5254770?fr=aladdin

7、vsftpd配置ssl

img

1.查看是否支持ssl

ldd `which vsftpd`|grep ssl

img

2.省略安装openssl,centos自带了,直接生成ssl密钥文件并复制到/etc/ssl/certs目录下。

openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
cp vsftpd.pem /etc/ssl/certs/vsftpd.pem
chmod 400 /etc/ssl/certs/vsftpd.pem

3.修改配置文件

vi vsftpd.conf
# ssl config
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/certs/vsftpd.pem

4.加入如上配置之后,重启服务

service vsftpd restart

完毕!linux的ftp工具不支持TSL,可以使用支持TSL的客户端工具,如FileZilla进行测试。

8、vsftpd 修改默认端口21

vsftpd服务启动后,默认的ftp端口是21,现在我想把ftp端口改成 64421 ,修改后能保证用户上传下载不受影响

1、编辑 /etc/vsftpd/vsftpd.conf 文件,在该配置文件中添加此行:listen_port=64421

#vi /etc/vsftpd/vsftpd.conf
listen_port=64421

2、编辑 /etc/services 文件,将其中的 ftp 21/tcp 改为 ftp 64421 /tcp , ftp 21/udp 改为 ftp 64421 /udp

#vi /etc/services
#21 is registered to ftp, but also used by fsp
ftp    64421/tcp
ftp       64421/udp     fsp fspd
3、执行 /etc/init.d/vsftpd restart 重新启动 vsftpd 服务。启动完成后可以使用 netstat -apn grep vsftpd命令可以查看到系统现监听的 vsftpd 的端口为64221
# netstat -apn|grep vsftpd
tcp    0   0 0.0.0.0:64421      0.0.0.0:*        LISTEN   11820/vsftpd


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK