FTP 部署


Catalogue
  1. 1. 安装
  2. 2. 目录权限限制
  3. 3. 文件权限限制
    1. 3.1. 读写操作权限限制
    2. 3.2. 删除操作权限限制
    3. 3.3. 需注意项
  4. 4. 其他安全设置
    1. 4.1. 修改 ftp 端口号
    2. 4.2. 防火墙设置
    3. 4.3. 更改vsftpd安全特性和性能特性
  5. 5. 参考资料

安装

Debain 系:

1
apt-get install vsftpd

RH 系(RPM resource vsftpd下载对应版本的 rpm 包):

1
rpm -ivh vsftpd-3.0.2-29.el7_9.x86_64.rpm	# RHEL7.9

安装好后默认自动创建 ftp 用户,以下命令完成 ftp 用户的基本设置:

1
2
3
passwd ftp							# 设置ftp用户的密码
mkdir /home/ftp # 创建ftp用户的主目录
chmod -R 777 /home/ftp # 设置ftp主目录的权限

或是新建 ftp 用户:

1
2
3
4
useradd -d /home/ftpuser ftpuser	# 其中/home/ftpuser是新建用户主目录,ftpuser是新建用户用户名
usermod -s /sbin/nologin ftpuser # 取消ftpuser用户的shell登录权限,只能ftp登录
passwd ftpuser # 设置ftpuser用户的密码
chmod -R 755 ftpuser # 设置ftp主目录的权限

修改 vsftp 配置文件,文章末尾有所有选项的解释:

1
vi /etc/vsftpd.config

vi 中使用/查询修改如下设置,并删除#注释符:

1
2
3
4
5
anonymous_enable=YES				# 是否允许匿名ftp,若不允许选NO
local_enable=YES # 是否允许本地用户登录
write_enable=YES # 是否允许本地用户写的权限
chroot_local_user=YES # 是否将所有用户限制在主目录
allow_writeable_chroot=YES # 手动加上,否则可能提示 refusing to run with writable root inside chroot()

重启 vsftp 服务以加载配置:

1
2
service vsftpd restart		# 或:
systemctl restart vsftpd

测试,输入用户名与密码实现登录:

1
2
ftp://localhost				# 网页
ftp localhost # 终端

如果登录ftp总是出现密码错误,可以将 /etc/vsftpd.conf 配置文件的 pam_service_name=vsftpd 改为 pam_service_name=ftp,即可解决。

开机自启:

1
2
chkconfig --levels 235 vsftpd on	# 或:
systemctl enable vsftpd

目录权限限制

由于我们不想 ftpuser 用户访问它主目录以外的任何文件,那么就要限制 ftpuser 用户的访问路径,将它限制在 ftpuser 用户主目录 /home/ftpuser 下边。要做到这不其实不难,只要完成 vsftpd 的相关配置就可以了。

修改 vsftpd 配置:

1
vi /etc/vsftpd.conf
1
2
chroot_list_enable=YES							# 是否启动限制用户的名单
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list # 受限制用户列表,没有则需新建

修改或新建 /etc/vsftpd/vsftpd.chroot_list 文件,在其中加入:

1
ftpuser		# 如果有多个ftp用户,则每个用户一行

文件权限限制

生产环境中存在不允许删除其中的文件,只允许下载或上传文件的应用场景。

读写操作权限限制

修改 vsftpd 配置:

1
vi /etc/vsftpd.conf

/enable 搜索配置,按需修改入下设置,:wq 保存退出:

1
2
write_enable = YES		# 保证能够上传
download_enable = NO # 保证能够下载

删除操作权限限制

修改 vsftpd 配置:

1
vi /etc/vsftpd.conf

在尾部添加如下:

1
user_config_dir=/etc/vsftpd/vsftpd_user_conf	# 指定用户配置目录

创建相应目录:

1
2
mkdir -p /etc/vsftpd/vsftpd_user_conf
vi /etc/vsftpd/vsftpd_user_conf/[user] # [user]对应自己要限制权限的账户

添加如下,完成后重启服务:

1
cmds_denied=DELE		# 禁止使用 删除 命令

需注意项

  • 为防止恶意登录账户(SFTP),需取消对应账户对文档的读写权限;
  • 重启vsftpd后需检查服务状态。

其他安全设置

可根据自身需求选取特定项修改即可。

修改 ftp 端口号

以’9981’连接,’9980’数据为例,修改 /etc/vsftpd.conf 文件,在末尾加入如下几行:

1
2
3
4
listen_port=9981		# 监听端口号
pasv_enable=YES # 采用被动ftp方式
pasv_min_port=9980 # 被动ftp方式下,最小端口号
pasv_max_port=9980 # 被动ftp方式下,最大端口号

更改后保存,并重启 vsftpd 服务,并查看 vsftpd 端口号是否改为’9981’:

1
netstat -tunpl | grep vsftpd

防火墙设置

防火墙开启对内’9980’和对内’9981’端口。

更改vsftpd安全特性和性能特性

禁止匿名用户登录,更改 /etc/vsftpd.conf 文件:

1
anonymous_enable=NO

用户连接限制,更改 /etc/vsftpd.conf 文件:

1
2
max_clients=100						# 最大连接数为100,超100会报错
max_per_ip=2 # 每个ip最大连接数为2

其他,更改 /etc/vsftpd.conf 文件:

1
2
3
4
5
idle_session_timeout=600
data_connection_timeout=120
local_max_rate=50000 # 本地用户的最高速率
anon_max_rate=30000 # 匿名用户的最高速率


参考资料