linux中ftp

FTP介绍及原理

 

创建文件默认权限为666

创建目录默认权限为777

#通过umask值设定,因为操作系统默认umask值为002 每次创建文件或目录是都应减去umask

 

 

FTP是明文传输

 

FTP文件传输协议 是典型的C/S结构的应用层协议,需要有服务器端的软件,客户端软件分为两个部分共同实现文件传输功能

 

FTP服务器默认使用TCP协议的20,21 端口与客户端进行通信。20端口用于建立数据连接,并传输数据,21端口用户建立控制连接 并传输FTP控制命令

 

FTP登入过程是使用明文进行登入的

 

FTP连接及传输模式(两种)

主动模式: 服务端从20端口主动向客户端发起连接

默认采用了主动模式,服务端主动发起数据连接,服务器开启21端口等待客户端连接,如果服务器通过21端口接收到客户端的请求,服务端就会验证用户名和密码,如果用户名和密码不符合直接拒绝,如果验证成功,可以上传下载数据了,客户端就会随机开启一个1024以上的端口,然后在端口中传带一个PORT命令,通过PORT(携带随机端口号)告知服务器,我打开了某个端口,服务器接收PORT协议后,查看,就会开启 本机的20端口,向客户端的随机端口发送数据

 

被动模式:服务端在指定范围内某个端口被动等待客户端连接

客户端同样连接21端口,验证用户名密码,登入失败就会拒绝 ,登入成功就会客户端开机PASV命令 通过PASV命令告诉服务采用被动模式连接,服务器端会开启一个随机端口(1024)以上,不采用20端口进行传输数据,然后服务端将随机端口号告诉客户端,客户端就会使用本地的随机端口向服务端传输数据

 

常见的FTP服务程序

windows:  IIS   Serv-U

linux: wu-ftpd   proftpf   vsftp

 

服务的安装

挂载光盘,进入光盘中的rpm软件中

[root@web Packages]# rpm -ivh vsftpd-3.0.2-22.el7.x86_64.rpm

 

相关文件

#主配置文件

/etc/vsftpd/vsftpd.conf 

#用户控制列表文件

/etc/vsftpd/ftpusers   #禁止用户登入

/etc/vsftpd/user_list  #可以通过修改主配置文件更改为白名单

:如果一个用户同时存在两个文件中,黑名单的用户生效,黑名单优先级高

 

FTP相关用户

匿名用户:anonymous或ftp

本地用户:使用linux系统用户和密码

虚拟用户:管理员自定义的模拟用户

 

 

配置文件详解

注:配置文件字段前后不允许有空格或注释

默认配置文件

anon_umask=022         #匿名用户上传默认umask中

anonymous_enable=YES            #运行匿名用户登入

anon_upload_enable=YES            #运行匿名用户登入

local_enable=YES                #允许本地用户登入

write_enable=YES                #允许本地用户上传

local_umask=022                 #本地用户上传umask值

dirmessage_enable=YES           #用户进入目录时,显示message文件中信息,提示信息

message_file=.message           #指定信息文件

xferlog_enable=YES              #激活记录日志

connect_from_port_20=YES        #主动默认数据传输接口

xferlog_std_format=YES          #使用标准的ftp日志格式

ftpd_banner                     #登入欢迎信息

listen=YES                      #允许被监听

listen_ipv6=YES

pam_service_name=vsftpd         #设置PAM外挂模式提供认证服务所使用的配置文件名即/etc/pam.d/vsftpd文件

userlist_enable=YES             #用户登入限制

tcp_wrappers=YES                #是否使用tcp_wrappers作为主机访问控制方式

 

 

常用的全局配置

listen_addres=192.168.201.221   #设置监听的IP地址

listen_port=21                  #设置监听FTP服务的端口号

download_enable=YES             #是否允许下载文件

max_clients=0                   #限制并发客户连接数(限制几百)

max_per_ip=0                    #限制同一IP地址的并发连接数(2-3之间)

 

 

被动模式

pasv_enable=YES                 #开启被动模式

pasv_min_port=24500             #被动默认最小端口

pasv_max_port=24600             #被动默认最大端口  (端口信息大于10000)

 

常用安全配置

accept_timeout=60               #被动模式,连接超时时间

connect_timeout=60              #主动默认,连接超时时间

idle_session_timeout=600        #600秒没有任何操作就端口断开连接

data_connection_timeout=500     #资料传输时,超过500秒没有完成,就断开传输

 

 

客户端使用

windiws  cmd

ftp 192.168.201.221 登入

get 下载文件

mget  批量下载文件

put   上传文件

mput   批量上传文件

exit退出

:登入的时的目录将会是你上传或下载文件的默认路径

文件夹不能下载只能下载文件夹中文件,不支持断链从传

 

可是使用tcpdump抓包工具抓取数据包中的内容

[root@node2 lm]# tcpdump -i ens33 -nnX port 21

-I   指定网卡名称

-nnX  拆解为16进制文件

port  指定监听端口号

 

第二种

win + e 

ftp://192.168.201.221

 

第三种第三方工具

flashFXP  winscp 

可以随意查看文件所有文件

 

匿名用户访问

匿名用户的基本配置(如有其它需求自行百度)

anon_umask=022         #匿名用户上传默认umask中

anonymous_enable=YES            #运行匿名用户登入

anon_upload_enable=YES            #运行匿名用户登创建文件

anon_mkdir_write_enable=YES      #允许匿名用户建立目录

 

注意事项

匿名用户默认位置是

/var/ftp  应修改该文件的权限属主属组等

如果允许上传 需要服务权限和系统目录 权限同时允许

vsftp服务的伪用户是ftp

低版本的ftp服务如果将目录属主修改为ftp会报错

处于安全应设置对应的目录下的子目录上传权限

 

本地用户访问

清除匿名用户的配置

:本地登入就是使用系统用户登入FTP,不仅可以登入FTP还可以登入到系统当中

缺点:用户密码容易暴露  可以切换到任意目录随意下载目录下的文件

解决在所有目录随意下载文件可以将用户限制到自己的家目录

登入到FTP默认会登入到用户所在的家目录(可更改)

本地用户的基本配置,一下三句就可以登入到FTP

local_enable=YES                #允许本地用户登入

write_enable=YES                #允许本地用户上传

local_umask=022                 #本地用户上传umask值

 

需求1:修改FTP的访问根目录(默认访问时自己的家目录,)

local_root=/var/ftp          #设置本地用户的FTP根目录(注意目录权限,和)

    因为访问FTP需要两次权限的限制,

   FTP的权限            #那有多个用户怎么办?

   linux系统的权限        可以添加一个组 将所登入的用户加入相应的组即可,修改文件夹的数组即可

:次目录是针对所有的用户,也就是说所有用户都将访问这个目录,

 

需求2:限制最大的传输速率,

local_mac_rate=0             #限制最大传输速率(字节/s)

 

需求3:使用本地访问的时候用户可以随意切换到其他目录,安全性降低,如何将用户限制到自己的家目录中?

chroot_local_user=YES         #开启用户家目录限制(只有此行,吧所有用户限制到用户主目录中)

#如果想让 李四  随意切换到其他目录并下载文件?

chroot_list_enable=YES        #相当于开启用户随意切换目录

chroot_list_file=/etc/vsftp/chroot_list    #指定随意切换用户文件路径

#注:如果chroot_list是控制用户可以不可随意切换目录的并不是,用户控制列表文件

 

 

需求4:如果需要不希望lisi用户登入到FTP怎么办?

  应为用户控制文件默认 两个文件都是黑名单

修改/etc/vsftp/user_list 将lisi 用户添加进即可

userlist_enable=YES       #开启用户访问控制 如果=NO  及没有白黑名单

userlist_deny =YES        

:控制user_list是否为黑名单,YES是黑名单  NO是白名单 (默认YES)

userlist_file=/etc/vsftp/user_list

#写入/etc/vsftp/user_List文件中的用户不能访问ftp服务器,没有写入的用户可

如果userlist_dent=NO 文件就是白名单写入的用户可以访问,没有写不可以访问

 

注意:禁止root用户登入到系统

 

 

虚拟用户访问

需要将之前配置取消以防冲突

 

因为本地用户使用的系统用户登入的,相对于linux系统来说不安全,

虚拟用户创建的是与linux系统用户完全不相关的用户,只能登入到FTP不能登入到linux系统中,模拟用户

 

虚拟用户可以单独制定配置  指定自己的家目录,指定文件权限,更加灵活

 

配置虚拟用户访问

1.添加虚拟用户口令文件 (文件名自定义)

此文件跟linux系统用户没关系

[root@node2 ~]# vim /etc/vsftpd/vuser.txt

内容格式为   用户名   第一行用户名

           密码     第二行密码

2.生成虚拟用户口令认证文件

需要安装此软件包 libdb-utils-5.3.21-24.el7.x86_64  生成db_load命令

db_load -T -t hash -f /etc/vsftpd/vuser.txt  /etc/vsftpd/vuser.db使用此命令生将保存的文件转变成认证数据文件文件

3.编辑VSFTPPAM认证文件

因为linux内核2.6以后引入了pam认证为了防止,暴力破解linux系统用户密码文件

修改/etc/pam.d/vsftp文件将其他注释添加如下:

[root@node2 vsftpd]# vim /etc/pam.d/vsftpd

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser

account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser

#注此时就算不注释,让系统用户登入FTP,系统用户也不会登入到FTP中 因为在PAM文件中将本地用户已经注释掉了

 

如果将local_enable=YES 改为NO虚拟用户也不可以登入到系统当中,因为虚拟用户需要映射到本地用户

 

4.建立本地映射用户并设置宿主目录

[root@node2 /]# useradd -d /home/vuser -s /sbin/nologin vuser此用户不需要登入到系统,只是映射用户

用户名必须和下一步配置文件中一致

 

修改文件目录权限

[root@node2 ~]# chmod 755 /home/vuser/

默认是700 

5.修改配置文件

[root@node2 ~]# vim /etc/vsftpd/vsftpd.conf

#虚拟用户配置如下

guest_enable=YES:启用虚拟用户

guest_username=liu:设置虚拟用户对应的系统用户(前几步不是创建过新用户吗,这里就写哪个新用户的名称)

 

pam_service_name=vsftpd.vu:认证方式改为vsftpd.vu刚好对应你创建的虚拟用户的PAM认证文件

:此文件可以vsftpd  和 vsftod.xu两个文件可以同时存在(可以使用系统用户登入不可以使用虚拟用户登入,主要看其配置文件指向那个文件)

 

 

local_enable=YES:允许本地用户登陆,(虚拟用户有对应的本地用户,所有要允许本地用户登陆)

 

local_umask=077(本地用户的权限掩码,注:虚拟用户都有自己所对应的本地用户,因此给本地用户设置权限,相当与给虚拟用户设置了权限)

 

chroot_local_user=YES:把账户锁定在根目录内,不能切换到其他目录(包括虚拟用户,这是为了安全才设置的)

 

virtual_use_local_privs=YES:同步,意思为虚拟用户的权限相等与自己所对应的本地用户的权限,必须配置

注:这里配置完后虚拟用户就配置完成了,使用user文件中你所创建的虚拟用户登陆即可,验证方式和本地用户一样

注:设置虚拟账户是这个“allow_writeable_chroot=YES”字段必须添加,因为这个字段影响本地用户,所有同时影响了虚拟用户(会导致虚拟用户无法登陆),且如果设置中有“userlist_deny=NO”条目必须删除,

6.重启,并测试

[root@node2 ~]# systemctl restart vsftpd

此时虚拟用户可以登入  查看 不能下载  默认上传文件的位置是宿主用户的家目录

虚拟用户的权限使用的是匿名用户权限进行管理

:如果使用了local_root=/data 指向那个默认目录,默认指向虚拟用户映射的家目录

7.修改虚拟用户权限

anonymous_enable=NO       #g关闭匿名用户登入 安全(不影响虚拟用户登入)

anon_upload_enable=YES    #

anon_mkdir_wirite_enable=YES

anon_other_write_enable=YES   #允许匿名用户上传其他类型文件

给虚拟用户设定权限,允许所有虚拟用户上传(如果还是上传不成功,查看ftp家目录权限)

 

8.单独定义虚拟用户权限

为每个虚拟用户建立自己的配置文件,单独定义权限

将上面的匿名用户的相关的权限,注释掉即可

 

修改配置文件  添加下列

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers_dir

:指定保存虚拟用户配置文件的目录,在这个目录下建立与虚拟用户名相同的配置文件

 

[root@node2 vusers_dir]# vim lisi

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

local_root=/tmp/lisi

#给lisi指定独立的上传目录(注意tmp/lisi的权限)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/hzlzxt/p/12217022.html