Linux常用工具服务——FTP服务

介绍

FTP(File Transfer Protocol)文件传输协议,是用于控制文件的双向传输的应用程序

FTP用户类型

(1) 匿名用户:anonymous或ftp
(2) 本地用户:账号名称、密码等信息保存在passwd/shadow文件中
(3) 虚拟用户:使用独立的账号/密码数据文件

ftp的工作模式

FTP是仅基于TCP的服务,与众不同的是FTP协议要用到两个TCP连接,一个是控制链路,用来在客户端与服务器之间传递命令的;另一个是数据链路,用来上传或下载数据的。

FTP协议有两种工作方式:POST方式(主动式)和PASV方式(被动式)

主动模式:服务端从20端口主动向客户端发起链接
控制端口 21 数据传输端口 20

被动模式:服务端在指定范围内某个端口被动等待及客户端链接
控制端口21 数据传输端口 随机

FTP连接类型配置

Windows Cmd下默认为主动模式,更改Ftp为被动的方法:
ftp> quote PASV
Linux Ftp命令下默认为被动模式,更改为主动的方法:
ftp> passive

主动与被动FTP优缺点

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。
被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

FTP服务器配置

vsftp

FTP的文件传输是明文方式,为了安全诞生了vsftp,vsftpd是一个基于GPL发布的FTP服务器软件,安全性高,是RedHat linux默认的FTP服务终端软件

vsftp特点

(1) 一般以普通用户运行,降低进程权限,提高安全性
(2) 高权限指令需要上层程序许可
(3) 整合了所有ftp命令
(4) 用户chroot功能,限制限制用户只能访问自己的家目录
(5) 是RedHat linux默认的FTP服务端软件
(6) 不再依赖xinetd服务
(7) 可同时容许匿名(anonymous)与本地用户(local)访问,还支持虚拟用户

vsftp连接类型

控制连接:TCP 21,用户发送FTP命令信息
数据连接:TCP20,用户上传,下载数据

vsftp配置文件介绍

配置文件作用 配置文件路径
vsftpd的可执行文件(主程序) /usr/sbin/vsftpd
vsftpd启动脚本 /etc/rc.d/init.d/vsftpd
vsftpd主配置文件 /etc/vsftpd/vsftpd.conf
vsftpd的PAM认证文件 /etc/pam.d/vsftpd
禁止使用vsftpd的用户列表文件 /etc/vsftpd/ftpusers
禁止或允许使用vsftpd的用户列表文件 /etc/vsftpd/user_list
匿名用户主目录 /var/ftp

vsftp.conf文件常用的配置参数说明

常用的全局配置

listen_address=192.168.4.1	;设置监听的IP地址
listen=YES ;是否以独立运行的方式监听服务
listen_port=21 ;设置监听FTP服务的端口号
write_enable=YES ;是否启用写入权限
download_enable=YES ;是否允许下载文件
max_clients=0 ;限制并发客户端连接数
max_per_ip=0 ;限制同一IP地址的并发连接数
pasv_enable=yes ;设置最小的被动端口号
pasv_min_port=9981 ;设置最小的被动端口号
pasv_max_port=9981 ;设置最大的被动端口号
dirmessage_enable=yes ;是否显示目录说明文件
xferlog_enable=yes ;是否记录ftp传输过程
xferlog_file=/var/log/vsftpd.log ;日志的路径和名字
xferlog_std_format=yes ;是否使用标准的ftp xferlog
chown_username=username ;是否改变上传文件的属主,如果是则需要输入一个系统用户
名
idle_session_timeout=600 ;设置默认不活跃session时间
date_connection_timeout=120 ;设置数据传输超时时间
ftpd_banner=welcome to ftp server ;定制欢迎信息

本地用户访问限制

userlist_enable=YES ;是否启用user_list列表文件
userlist_deny=YES ;是否禁用user_list中的用户

本地用户权限控制

local_enable=YES ;是否启用本地系统用户
local_umask=022 ;本地用户所上传文件的权限掩码
local_root=/var/ftp ;设置本地用户的FTP根目录
chroot_local_user=YES ;是否将用户禁锢在主目录
local_max_rate=0 ;限制最大传输速率(字节/秒)
chroot_list_enable=YES ;配合下面的文件使用
chroot_list_file=/etc/vsftpd/chroot_list ;配合使用,列表中的用户将被禁锢在目录中

本地用户的权限除了使用以上的参数控制以外,还可以使用系统的权限进行控制。ftp的权限和系统的权限都允许时才会放行,只要有一方权限不足使用FTP就会出现权限不足

匿名权限控制

anonymous_enable=YES ;启用匿名访问
anon_umask=022 ;匿名用户所上传文件的权限掩码
anon_root=/var/ftp ;匿名用户的FTP根目录
anon_word_readable_only=YES ;允许匿名下载
anon_upload_enable=YES ;允许上传文件
anon_mkdir_write_enable=YES	;允许创建目录
anon_other_write_enable=YES ;允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名,默认值为NO
anon_max_rate=0 ;限制最大传输速率(字节/秒)

(1) 如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件
(2) 如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹
(3) 匿名用户账号名称默认为ftp或anonymous,不需要登录密码,默认只能下载无法上传

配置匿名用户

这里为了展示匿名用户的所有功能才这样配置,实际中不能这样配置
(1) 安装vsftp软件,并按照下面配置修改配置文件

yum -y install vsftpd
mkdir -p /home/vsftpd/files
chmod -R 755 /home/vsftpd
chmod -R 777 /home/vsftpd/files
cp -p /etc/vsftpd/vsftpd.conf{,.bak}	;备份配置文件
grep -E -v "^#|^$" /etc/vsftpd/vsftpd.conf

anonymous_enable=YES	;启用匿名访问
anon_upload_enable=YES	;允许匿名用户可上传文件
anon_world_readable_only=NO	;允许匿名用户可创建目录
anon_mkdir_write_enable=YES	;开放其他写入权比如改名,需要手动添加
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
anon_root=/home/vsftpd/
anon_other_write_enable=YES

service vsftpd restart	;重启vsftpd服务

注意:FTP的配置要处seLinux防火墙

anon_world_readable_only=NO 只要ftp用户对文件有读权限即可下载
anon_world_readable_only=YES 文件的其他人必须有读的权限才允许下载(安全)

默认情况下,匿名用户所有上传下载都使用ftp用户的权限,若要上传文件,则需要ftp用户有写的权限,若要下载,则需要ftp用户有读的权限

(2) 在windows任务管理器测试:在地址栏输入ftp://IP,右键选择登录——>匿名登录,测试文件的上传,下载,修改文件夹名等操作

在这里插入图片描述

配置本地用户

系统本地的默认设置

vsftpd默认允许所有的系统用户都可以访问FTP,并且要进行身份验证。但是用系统用户身份登录FTP服务器后,默认将位于自己的家目录中,而不是FTP的主目录

local_enable=YES	;配置文件中关于系统用户的默认设置

创建系统用户,并设置密码,在家目录中添加测试文件

useradd anliu01
useradd anliu02
passwd anliu01
passwd anliu02
echo "ftp test" >> /home/anliu01/ftptest.txt

然后在windows的客户端利用资源管理器测试访问,在空白界面单击鼠标右键之后选择“登录”,输入用户名和密码,就可以进入到用户的家目录下,并且具写入权限
在这里插入图片描述在这里插入图片描述

禁锢系统用户于指定目录中

Windows客户端也可以通过ftp命令访问服务器,由于在命令行模式下模式采用FTP的主动模式,因而此时需要将客户端的防火墙关闭才能成功访问

此时,用户虽然默认访问的是自己的家目录,但是却可以使用cd命令切换到服务器端的任何具备访问权限的目录,如切换到/etc/目录
在这里插入图片描述这样会存在很大的安全隐患,所以一般都需要将系统用户禁锢在其家目录下,禁止随意切换(系统的所有用户都将受到限制):chroot_local_user=YES

要对本地用户查看效果,需先设置local_root=/home/vsftpd
结果如下:
在这里插入图片描述
让特殊用户拥有目录的切换权限:chroot_local_userchroot_list_enable参数同时使用

chroot_local_user=YES	;;是否将用户禁锢在主目录
chroot_list_enable=YES	;启用chroot_list_file配置项指定的用户列表文件(默认NO)
chroot_list_file=/etc/vsftpd/chroot_list	; 指定用户列表文件
local_root=/var/ftp ;设置本地用户的FTP根目录
配置 作用
chroot_local_user=NO
chroot_list_enable=NO
所有用户均可以切换到上级目录
chroot_local_user=YES
chroot_list_enable=NO
所有用户均不能切换到上级目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_list文件中列出的用户,可以切换到上级目录
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_list文件中列出的用户,不能切换到上级目录

(1) 当用户不允许切换到上级目录时,登录后FTP站点的根目录“/”是该FTP账户的主目录,即文件的系统的/var/ftp目录
(2) 若设置了write_enable=YES,则用户还可对根目录下的文件进行改写操作
(3) 要对本地用户查看效果,需先设置local_root=/home/vsftpd

设置用户列表

在默认的配置下,所有的系统用户都可以访问FTP
限定只有指定的用户可以访问FTP

配置 作用
/etc/vsftpd/ftpusers 禁止登陆vsftpd服务器的用户账号列表(优先级最高)
/etc/vsftpd/user_list 与userlist_enable和userlist_deny设置有关
userlist_enable=YES 启用user_list,允许user_list中的用户登录
userlist_enable=YES
userlist_deny=YES
禁止user_list中的用户登录
userlist_enable=YES
userlist_deny=NO
允许列表中的用户登录

综合来看,/etc/vsftpd/ftpusers提供一份禁止用户列表,/etc/vsftpd/user_list提供一份灵活可控的用户列表,/etc/vsftpd/ftpusers优先级高于/etc/vsftpd/user_list

实例 系统仅允许anliu01用户登录vsftpd

#tail -n 3 /etc/vsftpd/vsftpd.conf
local_root=/home/vsftpd/
userlist_enable=YES
userlist_deny=NO
#cat user_list
anliu01

配置虚拟用户

虚拟用户,是指存放于独立数据库文件中的FTP用户账号,可以将他们映射到某个不能登录的系统用户账号上,以进一步增强FTP服务器的安全

(1) 创建虚拟用户数据库文件

安装db_load工具(该工具可以建立Berkeley DB格式的数据库文件)

yum install epel-release -y
yum install db4-utils -y

创建一个文本格式的用户名/密码列表文件,用于存放虚拟用户账号

cat /etc/vsftpd/logins.txt
anliu001
123456
anliu002
123456

以文件列表为数据源通过db_load工具创建出Berkeley DB格式的数据库文件

[root@nfs01 vsftpd]# db_load -T -t hash -f logins.txt logins.db

db_load命令是一种固定语法
-T:允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件
-t hash:指定读取数据文件的基本方法
-f:指定数据的源文件

(2) 创建虚拟用户的映射账号
vsftpd服务对虚拟用户采用映射的控制方式,把所有的虚拟用户账号都对应到了同一个系统用户上,并将这个用户的家目录作为所有虚拟用户登录的后公用的FTP主目录

例如:创建一个用户virtual,指定家目录为/var/ftp/virtual,不允许用户登录

useradd -d /var/ftp/virtual -s /sbin/nologin virtual
chmod -R 755 /var/ftp/virtual/	;改变目录的权限 ,允许上传

(3) 创建PAM认证文件
虚拟用户的认证通过PAM机制实现

PAM是linux系统中的独立API,它提供了各种验证模块以供其他程序调运。当这些程序需要进行用户身份验证操作时,就可以直接调运相应的模块,而无需由自己来提供验证功能

[root@nfs01 ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth        required /lib64/security/pam_userdb.so      db=/etc/vsftpd/logins
account     required /lib64/security/pam_userdb.so      db=/etc/vsftpd/logins

(4) 修改vsftpd配置,添加虚拟用户支持

[root@nfs01 vsftpd]# grep -E -v "^#|^$" vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES #启动虚拟用户映射功能
guest_username=virtual #定制所映射的系统用户名称
pam_service_name=vsftpd #指定PAM认证文件
user_config_dir=/etc/vsftpd/vuser #表示虚拟用户配置文件的存放目录
allow_writeable_chroot=YES #去除用户主目录的写权限

(5) 创建虚拟用户配置文件
为了对虚拟用户的精准控制,实现不同用户有不同权限,我们需要为每个用户创建独立的配置文件

mkdir /etc/vsftpd/vuser
#cat /etc/vsftpd/vuser/anliu001
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#cat /etc/vsftpd/vuser/anliu002
anon_upload_enable=NO	;经测试用户默认可以下载,若此项设置为YES,用户可上传

在linux中测试

anliu01可以正常的文件上传与下载(上传后的文件属主与属组是virtual,文件权限是600,不能下载)
在这里插入图片描述anliu02只能下载,不能上传
在这里插入图片描述

练习

1.在Centos 7上构建vsftp服务器。要求采用FTP虚拟用户方式,添加2个用户,分别是user01,user02。要求如下:
(1)用户user01能够对服务器/var/ftp/soft目录中的资料管理(上传,创建目录,删除文件等)
(2)用户user02能够下载服务器/var/ftp/soft目录中的资料。

准备工作
yum -y install vsftpd
cp -p /etc/vsftpd/vsftpd.conf{,.bak}	;备份配置文件
yum install epel-release -y
yum install db4-utils -y
systemctl stop firewalld
setenforce 0
步骤一:创建一个文本格式的用户名/密码列表文件,用于存放虚拟用户账号
[root@nfs01 vsftpd]# vim logins.txt
user01
123456
user02
123456
步骤二:创建数据库文件logins.db
[root@nfs01 vsftpd]# db_load -T -t hash -f logins.txt logins.db
步骤三:创建虚拟用户的映射账号
useradd -d /var/ftp/soft -s /sbin/nologin soft
chmod -R 755 /var/ftp/soft/	;改变目录的权限 ,允许上传
步骤四:创建PAM认证文件
[root@nfs01 ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth        required /lib64/security/pam_userdb.so      db=/etc/vsftpd/logins
account     required /lib64/security/pam_userdb.so      db=/etc/vsftpd/logins
步骤五:修改vsftpd配置,添加虚拟用户支持
#vim /etc/vsftpd/vsftpd.conf
guest_enable=YES #启动虚拟用户映射功能
guest_username=virtual #定制所映射的系统用户名称
pam_service_name=vsftpd #指定PAM认证文件
user_config_dir=/etc/vsftpd/vuser #表示虚拟用户配置文件的存放目录
allow_writeable_chroot=YES #去除用户主目录的写权限
anon_umask=022	#不设置,文件默认权限为600,user02无法下载user01上传的文件【文件默认不能拥有执行权限】
步骤六:创建虚拟用户配置文件
mkdir /etc/vsftpd/vuser
#cat /etc/vsftpd/vuser/user01
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#cat /etc/vsftpd/vuser/user02
anon_upload_enable=YES
write_enable=NO

进行测试在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.(1)创建文件resource,对teacher有所有权限,对于student来说有可读权限;
(2)每个学生有一个账号(虚拟用户实现),对应有一个目录,这个目录针对学生的账号以及teacher有所有权限,对其他没有任何权限。

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
local_root=/home/vsftpd
anon_other_write_enable=YES
[root@ftp ~]# useradd teacher	#设置密码
[root@ftp ~]# useradd student	#设置密码
[root@ftp ~]# mkdir /home/vsftpd
[root@ftp ~]# echo "test" >/home/vsftpd/resource
[root@ftp ~]# chmod -R 745 /home/vsftpd
[root@ftp ~]# chown -R teacher:teacher /home/vsftpd
[root@ftp ~]# chmod 744 /home/vsftpd/resource

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

发布了57 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42049496/article/details/104280744