Linux系统搭建FTP服务

Centos搭建FTP服务

本教程以 百度云公共镜像CentOS6.5/CentOS7.5 64位操作系统为例,说明如何在 Linux 实例上安装并配置 vsftpd。

  • 步骤一: 安装 vsftpd
  • 步骤二: 配置 vsftpd
    • 方式一:配置匿名用户上传文件权限
    • 方式二:配置本地用户登录
  • 步骤三: 设置安全组
  • 步骤四: 客户端测试

步骤一: 安装 vsftpd

1.远程连接并登录到 Linux 实例。

2.运行命令yum install -y vsftpd安装 vsftpd。

3.运行以下命令进入/etc/vsftpd目录,并查看该目录下的文件。

cd /etc/vsftpd
ls

image.png

说明:

  • /etc/vsftpd/vsftpd.conf 是 vsftpd 的核心配置文件。
  • /etc/vsftpd/user_list 是白名单文件,此文件里的用户允许访问 FTP 服务器。
  • /etc/vsftpd/ftpusers 是黑名单文件,此文件里的用户不允许访问 FTP 服务器。

4.运行以下命令设置FTP服务开机自启动。

Centos6.5: chkconfig vsftpd on

Centos7.5: systemctl enable vsftpd.service

5.运行以下命令启动 FTP 服务。

Centos6.5:/etc/init.d/vsftpd start

Centos7.5:systemctl start vsftpd.service

6运行以下命令查看 FTP 服务监听的端口。

netstat -antup | grep ftp

步骤二: 配置 vsftpd

vsftpd 安装后默认开启了匿名访问 FTP 服务器的功能。使用匿名访问,您无需输入用户名密码即可登录 FTP 服务器,但没有权限修改或上传文件。

本教程介绍了以下两种配置 vsftpd 的方法,并提供了相关的参数说明,您可以根据具体需要进行参考。

  • 配置匿名用户上传文件权限
  • 配置本地用户登录

方式一:配置匿名用户上传文件权限

匿名访问FTP服务器是一种不安全的访问模式,任何人无需密码验证就可以登录到FTP服务器,这种模式一般只用来保存不重要的公开文件,不推荐在生产环境中使用。如果您需要配置匿名用户上传文件的权限,可以参考以下步骤配置:

1.修改/etc/vsftpd/vsftpd.conf。
a.运行vim /etc/vsftpd/vsftpd.conf。
b.按i 键进入编辑模式。
c.将写权限修改为write_enable=YES。
d.将匿名上传权限修改为anon_upload_enable=YES。
e.按Esc键退出编辑模式,然后输入:wq保存并退出文件。

image.png

2.运行以下命令更改/var/ftp/pub目录的权限,为 FTP 用户添加写权限,并重新加载配置文件。

Centos6.5:

chmod o+w /var/ftp/pub/
/etc/init.d/vsftpd restart

image.png

CentOS7.5:

chmod o+w /var/ftp/pub/
systemctl restart vsftpd.service

image.png

此时使用filezilla测试可以在不需要账户密码(匿名下)的情况下正常连接该FTP服务器

image.png

方式二:配置本地用户登录

本地用户登录是指用户使用 Linux 操作系统的账号和密码登录 FTP 服务器。

vsftpd 安装后默认只支持匿名访问 FTP 服务器,如果您试图使用 Linux 操作系统中的账号登录服务器,将会被 vsftpd 服务拒绝。您可以参考以下步骤配置 vsftpd 服务,以使用Linux账号和密码访问FTP服务器。

1.运行以下命令为FTP服务创建一个Linux用户。本示例中,该用户名为ftpbaidu。

useradd ftpbaidu

image.png

2.运行以下命令修改ftptest 用户的密码。

passwd ftpbaidu

3.创建一个供FTP服务使用的文件目录。

mkdir /var/ftp/baidu

4.更改/var/ftp/baidu目录的拥有者为ftpbaidu。

chown -R ftpbaidu:ftpbaidu /var/ftp/baidu

5.输入命令vim /etc/vsftpd/vsftpd.conf打开vsftpd.conf配置文件并按键i进入编辑模式。

6.修改vsftpd.conf配置文件。

FTP服务器可以配置为主动模式或被动模式。

主动模式下,客户端向服务端发送数据端口的信息,由服务端主动连接客户端发送的数据端口。配置FTP为主动模式的参数如下:

#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#设置本地用户登录后所在的目录
local_root=/var/ftp/baidu
#全部用户被限制在主目录
chroot_local_user=YES
#启用例外用户名单
chroot_list_enable=YES
#指定例外用户列表,这些用户不被锁定在主目录
chroot_list_file=/etc/vsftpd/chroot_list

#配置其他参数
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

(1)按Esc键退出编辑模式,然后按键:wq保存并退出文件。

(2)运行touch /etc/vsftpd/chroot_list命令创建chroot_list文件,并写入不受只可以访问其主目录限制的例外用户名单。

注意:如果没有例外用户也必须要有 chroot_list文件,内容可为空。

(3)按键Esc退出编辑模式,然后按键:wq保存并退出文件。

(4)运行以下命令重启vsftpd服务。/etc/init.d/vsftpd restart

到此完成主动模式所有配置。

被动模式下,服务端开启并发送数据端口的信息给客户端,由客户端连接服务端开启的数据端口,服务端被动接受连接。在被动模式下,您需要配置服务端可以开启的数据端口范围。配置FTP为被动模式的参数如下:

#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#设置本地用户登录后所在目录
local_root=/var/ftp/baidu
#全部用户被限制在主目录
chroot_local_user=YES
#启用例外用户名单
chroot_list_enable=YES
#指定例外用户列表,这些用户不被锁定在主目录
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式
pasv_enable=YES
#FTP服务器公网IP
pasv_address=<FTP服务器公网IP>
#设置被动模式下,建立数据传输可使用port范围的最小值
pasv_min_port=50000
#设置被动模式下,建立数据传输可使用port范围的最大值
pasv_max_port=50010
#配置其他参数
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES

注意:建议您把端口范围设在比较高的一段范围内,比如50000-50010,有助于提高访问FTP服务器的安全性。

(1)按Esc键退出编辑模式,然后按键:wq保存并退出文件。

(2)运行touch /etc/vsftpd/chroot_list命令创建chroot_list文件,并写入不受只可以访问其主目录限制的例外用户名单。

注意:如果没有例外用户也必须要有 chroot_list文件,内容可为空。

(3)按键Esc退出编辑模式,然后按键:wq保存并退出文件。

(4)运行以下命令重启vsftpd服务。/etc/init.d/vsftpd restart

到此完成被动模式所有配置。

vsftpd.conf 的配置文件参数说明

运行命令cat /etc/vsftpd/vsftpd.conf查看配置文件内容。

用户登录控制:

参数 说明
anonymous_enable=YES 接受匿名用户
no_anon_password=YES 匿名用户login时不询问口令
anon_root=(none) 匿名用户主目录
local_enable=YES 接受本地用户
local_root=(none) 本地用户主目录

用户权限控制:

参数 说明
write_enable=YES 可以上传(全局控制)
local_umask=022 本地用户上传文件的umask
file_open_mode=0666 上传文件的权限配合umask使用
anon_upload_enable=NO 匿名用户可以上传
anon_mkdir_write_enable=NO 匿名用户可以建目录
anon_other_write_enable=NO 匿名用户修改删除
chown_username=lightwiter 匿名上传文件所属用户名

步骤三: 设置安全组

搭建好 FTP 站点后,您需要在实例安全组的入方向添加放行下列 FTP 端口的规则。

FTP 为主动模式时:端口21。
FTP 为被动模式时:端口21,以及配置文件/etc/vsftpd/vsftpd.conf中参数pasv_min_port和pasv_max_port之间的所有端口。

添加安全组规则的具体步骤,请参见添加安全组规则

步骤四: 客户端测试

您可以通过 FTP 客户端或浏览器访问 FTP 服务器进行测试。本教程以filezilla工具为例:

image.png

ubantu搭建FTP服务

本教程以 百度云公共镜像ubantu14.01 64位操作系统为例,说明如何在 Linux 实例上安装并配置 vsftpd。

  • 步骤一: 安装 vsftpd
  • 步骤二: 配置 vsftpd
    • 方式一:配置匿名用户上传文件权限
    • 方式二:配置本地用户登录
  • 步骤三: 设置安全组
  • 步骤四: 客户端测试

步骤一: 安装 vsftpd

1.远程连接并登录到 Linux 实例。

2.运行命令sudo apt-get install vsftpd -y 安装 vsftpd。

image.png

3.安装完成后 VSFTPD 会自动启动且默认开机自启,通过 netstat 命令可以看到系统已经监听

image.png

步骤二: 配置 vsftpd

vsftp分为匿名模式(不需要输入账号密码即可登录)和本地用户模式

本教程介绍了以下两种配置 vsftpd 的方法,并提供了相关的参数说明,您可以根据具体需要进行参考。

  • 匿名模式

  • 本地用户模式

方式一:配置匿名用户上传文件权限

匿名访问FTP服务器是一种不安全的访问模式,任何人无需密码验证就可以登录到FTP服务器,这种模式一般只用来保存不重要的公开文件,不推荐在生产环境中使用。如果您需要配置匿名用户上传和下载文件的权限,可以参考以下步骤配置:

1.执行命令: vim /etc/vsftpd.conf

image.png

a.按i 键进入编辑模式。
b.将写权限修改为write_enable=YES。
c.将匿名上传权限修改为anon_upload_enable=YES。
d.将是否允许匿名登录修改为anonymous_enable=YES
e.按Esc键退出编辑模式,然后输入:wq保存并退出文件。

image.png

2.创建FTP子目录。

执行命令:sudo mkdir /srv/ftp/upload
ubantu搭建的FTP默认根目录是/srv/ftp/,但是匿名用户默认不可以在根目录上传文件,因此只能建立子目录实现上传.

image.png

3.对该目录设置755权限和分组。

执行命令:sudo chown root:ftp /srv/ftp/upload
之后执行:sudo chmod 755 /srv/ftp/upload

4.重启服务使其生效。

执行命令: sudo service vsftpd restart

5.测试可以正常连接和上传下载文件。

image.png

方式二:配置本地用户登录

本地用户登录是指用户使用 Linux 操作系统的账号和密码登录 FTP 服务器。

您可以参考以下步骤配置 vsftpd 服务,以使用Linux账号和密码访问FTP服务器。

1.运行以下命令为FTP服务创建一个Linux用户。本示例中,该用户名为ftpbaidu。

sudo useradd ftpbaidu

image.png

2.运行以下命令修改ftptest 用户的密码。

sudo passwd ftpbaidu

3.运行以下命令创建一个供FTP服务使用的文件目录。

sudo mkdir /srv/ftp/baidu

4.运行以下命令更改/srv/ftp/baidu目录的拥有者为ftpbaidu。

sudo chown -R ftpbaidu:ftpbaidu /srv/ftp/baidu

5.输入命令vim /etc/vsftpd.conf打开vsftpd.conf配置文件并按键i进入编辑模式。

6.修改vsftpd.conf配置文件。

FTP服务器可以配置为主动模式或被动模式。

配置主动模式:主动模式下,客户端向服务端发送数据端口的信息,由服务端主动连接客户端发送的数据端口。配置FTP为主动模式的参数如下:

#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#设置本地用户登录后所在的目录
local_root=/var/ftp/baidu
#全部用户被限制在主目录
chroot_local_user=YES
#启用例外用户名单
chroot_list_enable=YES
#指定例外用户列表,这些用户不被锁定在主目录
chroot_list_file=/etc/chroot_list#主目录可写权限allow_writeable_chroot=YES
#配置其他参数
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

(1)按Esc键退出编辑模式,然后按键:wq保存并退出文件。
(2)运行touch /etc/chroot_list命令创建chroot_list文件,并写入不受只可以访问其主目录限制的例外用户名单。注意:如果没有例外用户也必须要有 chroot_list文件,内容可为空

(3)按键Esc退出编辑模式,然后按键:wq保存并退出文件。

(4)运行以下命令重启vsftpd服务。sudu service vsftpd restart

以上为主动模式配置方法

配置被动模式:被动模式下,服务端开启并发送数据端口的信息给客户端,由客户端连接服务端开启的数据端口,服务端被动接受连接。在被动模式下,您需要配置服务端可以开启的数据端口范围。配置FTP为被动模式的参数如下:

#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#设置本地用户登录后所在目录
local_root=/var/ftp/baidu
#全部用户被限制在主目录
chroot_local_user=YES
#启用例外用户名单
chroot_list_enable=YES
#指定例外用户列表,这些用户不被锁定在主目录
chroot_list_file=/etc/chroot_list
#开启被动模式
pasv_enable=YES
#FTP服务器公网IP
pasv_address=<FTP服务器公网IP>
#设置被动模式下,建立数据传输可使用port范围的最小值
pasv_min_port=50000
#设置被动模式下,建立数据传输可使用port范围的最大值pasv_max_port=50010#主目录可写权限allow_writeable_chroot=YES
pasv_max_port=50010
#配置其他参数
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES

注意:建议您把端口范围设在比较高的一段范围内,比如50000-50010,有助于提高访问FTP服务器的安全性。

(1)按Esc键退出编辑模式,然后按键:wq保存并退出文件。
(2)运行touch /etc/chroot_list命令创建chroot_list文件,并写入不受只可以访问其主目录限制的例外用户名单。注意:如果没有例外用户也必须要有 chroot_list文件,内容可为空
(3)按键Esc退出编辑模式,然后按键:wq保存并退出文件。
(4)运行以下命令重启vsftpd服务。sudu service vsftpd restart

以上为被动模式配置方法

vsftpd.conf 的配置文件参数说明

运行命令cat /etc/vsftpd.conf查看配置文件内容。

用户登录控制:

参数 说明
anonymous_enable=YES 接受匿名用户
no_anon_password=YES 匿名用户login时不询问口令
anon_root=(none) 匿名用户主目录
local_enable=YES 接受本地用户
local_root=(none) 本地用户主目录

用户权限控制:

参数 说明
write_enable=YES 可以上传(全局控制)
local_umask=022 本地用户上传文件的umask
file_open_mode=0666 上传文件的权限配合umask使用
anon_upload_enable=NO 匿名用户可以上传
anon_mkdir_write_enable=NO 匿名用户可以建目录
anon_other_write_enable=NO 匿名用户修改删除
chown_username=lightwiter 匿名上传文件所属用户名

步骤三: 设置安全组

搭建好 FTP 站点后,您需要在实例安全组的入方向添加放行下列 FTP 端口的规则。

  • FTP 为主动模式时:端口21。
  • FTP 为被动模式时:端口21,以及配置文件/etc/vsftpd.conf中参数pasv_min_port和pasv_max_port之间的所有端口。

步骤四: 客户端测试

您可以通过 FTP 客户端或浏览器访问 FTP 服务器进行测试。本教程以filezilla工具为例:

image.png