FTP服务简单介绍 您所在的位置:网站首页 ftp的数据端口 FTP服务简单介绍

FTP服务简单介绍

2023-12-12 08:15| 来源: 网络整理| 查看: 265

FTP服务 FTP简单介绍

FTP是File Transfer Protocol(文件传输协议)的英文缩写,用于Internet上的控制文件的双向传输。同时也是一个应用程序。

FTP用户类型

匿名用户:anonymous或ftp

本地用户:/etc/password中的用户

虚拟用户:独立的账号密码

FTP工作模式

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

过程:客户端从一个任意的非特权端口N(N>1024)向FTP服务器的命令端口(默认是21)发送请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端开始监听端口N+1,并在命令链路上用PORT命令发送N+1端口到FTP服务器,于是服务器会从自己的数据端口(20)向客户端指定的数据端口(N+1)发送连接请求,建立一条数据链路来传送数据。

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

过程:客户端从一个任意的非特权端口N(N>1024)向FTP服务器的命令端口(默认是21)发送请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PASV命令发送。于是服务器会开启一个任意的非特权端口P(P>1024),并在命令链路上把端口发送给客户端,然后客户端从自己的数据端口(N+1)向服务器的数据端口(P)发送连接请求,建立一条数据链路来传送数据。

优缺点

主动FTP对服务器管理有利,但对客户端管理不利,因为会在客户端产生随机端口建立连接,可能会被防火墙阻止。

被动FTP对客户端管理有利,但对服务球管理不利,因为在服务端建立连接时为随机端口,也可能会被防火墙阻止。

传输方式

文本模式:ASCII模式,以文本序列传输数据

二进制模式:Binary模式,以二进制序列传输数据

FTP服务器基本配置

由于FTP的文件传输是明文方式,具有一定的危险性,所以就诞生了一种更加安全的传输方式vsftp。

vsftpd是一个基于GPL发布的FTP服务器软件,安全性高,是RedHat linux默认的FTP服务终端软件。也 是linux服务器首选产品。

vsftp特点

(1)一般以普通用户运行,降低进程权限,提高安全性

(2)高权限指令需要上层程序许可

(3)整合了所有ftp命令

(4)用户chroot功能,限制限制用户只能访问自己的家目录

(5)是RedHat linux默认的FTP服务端软件。

(6)不再依赖xinetd服务。

(7)可同时容许匿名(anonymous)与本地用户(local)访问,还支持虚拟用户。

vsftpd配置文件介绍

(1)常用的全局配置

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 定制欢迎信息

(2)本地用户访问限制

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

(3)本地用户权限控制

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就会出现权限不足。

(4)匿名权限控制

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 如果设为YES,则允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。(如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。)默认值为NO anon_max_rate=0       限制最大传输速率(字节/秒) 说明:匿名用户账号名称默认为ftp或anonymous,不需要登录密码,默认只能下载无法上传。 1. 配置匿名用户

vsftp默认可以匿名访问,只是目录没有限制(window上测试)

# yum 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} # vim /etc/vsftpd/vsftpd.conf anonymous_enable=YES #启用匿名访问 anon_upload_enable=YES #允许匿名用户可上传文件 anon_mkdir_write_enable=YES #允许匿名用户可创建目录 anon_other_write_enable=YES #开放其他写入权比如改名,需要手动添加 anon_world_readable_only=NO anon_root=/home/vsftpd #此时登录后的目录为此目录

按照上面设置,重启服务后,就会有对应的权限,把目录固定在/home/vaftpd目录下

2. 配置本地用户

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

创建系统用户,并设置密码 useradd test1 passwd test1 echo "ftp test" >> /home/test1/ftptest.txt

windows上测试,匿名登录之后,右键选择登入,输入test1和密码,此时可以直接查看到用户家目录下的文件,但此时用命令行访问时可以进入到其他目录中

(2)禁锢系统用户到指定目录中

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

修改配置文件

chroot_local_user=YES # 打开此权限 local_root=/home/vsftpd/ # 设置本地登录目录 # systemctl restart vstpd

此时已经无法切换到上级目录了

让一些管理用户可以自由切换目录:配置文件

chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # vim /etc/vsftpd/chroot_list test1 # systemctl restart vsftpd

说明

具体情况有以下几种: 1)当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件 中列出的用户,可以切换到上级目录;未在文件中列出的用户,不能切换到站点根目录的上级目录。 2)当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件 中列出的用户,不能切换到站点根目录的上级目录;未在文件中列出的用户,可以切换到上级目录。 3)当chroot_list_enable=NO,chroot_local_user=YES时,所有用户均不能切换到上级目录。 4)当chroot_list_enable=NO,chroot_local_user=NO时,所有用户均可以切换到上级目录。 5)当用户不允许切换到上级目录时,登录后FTP站点的根目录“/”是该FTP账户的主目录,即文件的系统 的/var/ftp目录。

(3)设置可以访问服务器的用户列表

vsftpd中提供了两个与系统用户相关的文件:/etc/vsftpd/user_list和/etc/vsftpd/ftpusers,这两文件均 包含一份FTP用户名的列表,但是作用却截然不同:

    /etc/vsftpd/ftpusers:这个文件中包含的用户账号将被禁止登陆vsftpd服务器,不管该用户是否 在/etc/vsftpd/user_list文件中出现。通常将root,bin,daemon等特殊用户列在该文件中,禁止用于 登陆FTP服务。

    /etc/vsftpd/user_list,该文件的用户账号可能被禁止登陆,也可能不禁止,具体要看vsftpd.conf的文 件配置。当存在“userlist_enable=YES”的配置时,/etc/vsftpd/user_list文件生效;如果配 置“userlist_deny=YES”时,则禁止用户列表中的用户登录,如果“userlist_deny=NO”时,仅容许列表中 的用户登录。

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

修改配置文件

# vim vsftpd.conf userlist_deny=NO # vim vsftpd.conf test1 # systemctl restart vsftpd 3. 配置虚拟用户

除了匿名用户,系统用户之外,还可以设置虚拟用户来访问FTP。所谓虚拟用户,是指存放于独立数据 库文件中的FTP用户账号,可以将他们映射到某个不能登录的系统用户账号上,以进一步增强FTP服务 器的安全。

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

vsftp服务的虚拟用户数据库默认使用Berkeley DB格式的数据库文件,建立数据库文件需要用到 db_load命令工具,db_load工具是由db4-utils软件包提供的,所以首先需要确认系统中已经装好db4- utils组件。

# yum install epel-release # yum provides db_load # yum install libdb-utils # rpm -qa libdb-utils libdb-utils-5.3.21-24.el7.x86_64 # db_load -T -t hash -f logins.txt logins.db # chmod 600 logins.* # ll -rw-------. 1 root root 12288 7月 13 17:09 logins.db -rw-------. 1 root root 33 7月 13 17:07 logins.txt 注:db_load命令是一种固定语法, —T:允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件。 -t hash:指定读取数据文件的基本方法。 -f:指定数据的源文件

(2)创建虚拟用户的映射账号

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

如:

# useradd -d /var/ftp/virtual -s /sbin/nologin virtual

(3)创建pam认证文件

# cp -p /etc/pam.d/vsftpd{,`date "+%Y%m%d%H%M%S"`} # vim /etc/pam.d/vsftpd auth required /lib64/security/pam_usrdb.so db=/etc/vsftpd/logins account required /lib64/security/pam_usrdb.so db=/etc/vsftpd/logins # 修改配置文件 [root@test4 vsftpd]# tail -10 vsftpd.conf # Make sure, that one of the listen options is commented !! listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES guest_enable=YES #加入 guest_username=virtual #加入 user_config_dir=/etc/vsftpd/vuser #加入 allow_writeable_chroot=YES #加入

(4)创建虚拟用户-配置文件

# mkdir vuser # cd vuser/ # vim aaa # vim aaa # vim bbb # cat aaa anon_upload_enable=YES #anon_world_readable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES # cat bbb #anon_upload_enable=YES #anon_world_readable=YES anon_mkdir_write_enable=YES #anon_other_write_enable=YES # systemctl restart vsftpd

此时

aaa用户

bbb用户

遇到的问题

1. 更改登录后的目录时无法访问到目录下的内容

# vim /etc/sysconfig/selinux SELINUX=disable # setenforce 0 # systemctl restart vsftpd

此时在主机上ftp就可以查看到文件了

2. 经常遇到配置文件修改之后不能重启服务,此时用备份配置文件覆盖掉修改后的文件

 

------------------------------------------------------------------------------------------------------- 返回目录



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有