FTP服务简单介绍

10 篇文章 0 订阅

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. 经常遇到配置文件修改之后不能重启服务,此时用备份配置文件覆盖掉修改后的文件

 

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

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值