文件服务——FTP

一、FTP服务

1.1 FTP服务介绍

FTP(File Transfer Protocol)是一种应用非常广泛并且古老的一个互联网文件传输协议。

  • 主要用于互联网中文件的双向传输(上传/下载)、文件共享
  • 跨平台 Linux、Windows
  • FTP是C/S架构,拥有一个客户端和服务端,使用TCP协议作为底层传输协议,提供可靠的数据传输
  • FTP的默认端口 21号(命令端口) 20号(数据端口) 默认被动模式下
  • FTP程序(软件)vsftpd

1.2 FTP服务客户端工具

Linux:ftp、lftp(客户端程序)

Windows:FileZilla、IE、Chrome、Firefox

lftp和ftp工具区别:

  • lftp可以批量并且下载目录
lftp localhost:~> mirror remote local  下载整个目录到本地
lftp localhost:~> mirror -R local remote  rename 上传整个目录到远程同时可以重命名

1.3 FTP的两种工作模式

  • 主动模式

    • 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
    • 服务端的21号命令端口响应客户端的随机命令端口
    • 服务端的20号端口主动请求连接客户端的随机数据端口
    • 客户端的随机数据端口进行确认
  • 被动模式

    • 客户端打开大于1023的随机命令端口和大于1023的随机数据端口向服务的的21号端口发起请求
    • 服务端的21号命令端口响应客户端的随机命令端口
    • 客户端主动连接服务端打开的大于1023的随机端口
    • 服务端进行确认

    注:

    ①ftp服务端口分为数据端口20和命令端口21。

    ②21号端口是服务器的命令端口,客户端端口一般为大于1023的随机命令端口和数据端口。

1.4 FTP服务的基本配置

  • ftp文件列表
/etc/logrotate.d/vsftpd         //日志轮转的文件
/etc/pam.d/vsftpd               //安全认证
/etc/rc.d/init.d/vsftpd         //启动脚本
/etc/vsftpd                     //配置文件的主目录
/etc/vsftpd/ftpusers            //用户列表(黑名单)
/etc/vsftpd/user_list           //用户列表(默认黑名单|可黑可白)
/etc/vsftpd/vsftpd.conf         //主配置文件
/usr/sbin/vsftpd            //二进制命令


/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_HOSTS/README    //虚拟主机
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS   
/usr/share/doc/vsftpd-2.2.2/EXAMPLE/VIRTUAL_USERS/README    //虚拟用户

/usr/share/man/man5/vsftpd.conf.5.gz            //man文档

/var/ftp            //匿名用户的默认数据的根目录
/var/ftp/pub        //匿名用户的默认数据目录的扩展目录
  • ftp配置文件
[root@review1 ~]# grep -v ^# /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES    //支持匿名用户访问  
local_enable=YES        //非匿名用户
write_enable=YES        //写总开关
local_umask=022         //反掩码  file:644  dir:755
dirmessage_enable=YES   //启用消息功能
xferlog_enable=YES      //开启或启用xferlog日志
connect_from_port_20=YES    //支持主动模式(默认被动模式)
xferlog_std_format=YES      //xferlog日志格式
listen=YES                  //ftp服务独立模式下的监听

pam_service_name=vsftpd //指定认证文件
userlist_enable=YES     //启用用户列表
tcp_wrappers=YES        //支持tcp_wrappers功能
  • 启动测试ftp服务
//启动
[root@review1 ~]# service vsftpd start
Starting vsftpd for vsftpd:                                [  OK  ]

[root@review1 ~]# netstat -ntpl|grep vsftp
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1390/vsftpd         

//测试
[root@client ~]# lftp root@192.168.221.129
Password: 
lftp root@192.168.221.129:~> ?          
    !<shell-command>                     (commands)
    alias [<name> [<value>]]             bookmark [SUBCMD]
    cache [SUBCMD]                       cat [-b] <files>
    cd <rdir>                            chmod [OPTS] mode file...
    close [-a]                           [re]cls [opts] [path/][pattern]
    debug [<level>|off] [-o <file>]      du [options] <dirs>

[root@client ~]# ftp 192.168.221.129
Connected to 192.168.221.129 (192.168.221.129).
220 (vsFTPd 2.2.2)
Name (192.168.221.129:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

//登陆成功!

注意:

​ ① 为了安全考虑,ftp默认阻止root登录。

​ ② SELinux会阻止ftp用本地用户登录,关闭SELinux后,需要重启vsftp才能生效。

​ ③ ftp登录用的本地用户是 vsftp服务器的用户,而不是客户端的用户。

二、 FTP常用选项配置

2.1 允许匿名用户上传、下载文件,创建文件夹

默认情况下,ftp服务器只允许匿名用户下载本人文件,不允许上传

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

 26 obviously need to create a directory writable by the FTP user.
 27 #anon_upload_enable=YES
 28 #
 29 # Uncomment this if you want the anonymous FTP user to be able to create
 30 # new directories.
 31 #anon_mkdir_write_enable=YES
 //默认关闭

ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (192,168,221,129,173,140).
550 Permission denied.
//无法上传

//在配置文件中加入以下三个选项
anon_upload_enable=YES                  //允许匿名用户上传
anon_mkdir_write_enable=YES             //允许匿名用户创建文件夹
anon_other_write_enable=YES             //允许更改其他匿名用户的文件和文件夹

注: 要想上传成功,还要注意文件夹的“写“权限。总之,ftp服务器文件传输过程中遇到的权限问题主要来自于两个方面:①ftp本身权限设置。②传输的文件夹没有权限。

2.2 开启本地用户消息功能

2.2.1 创建.message文件

①本地用户访问——>/home/username

②匿名用户访问——>/var/ftp

服务端:

[root@review1 ~]# echo "welcome to my home" > /home/test/.message
[root@review1 ~]# echo "welcome to anon home" > /var/ftp/.message

测试:本地用户

[root@mysql_2 ~]# ftp 192.168.221.129
Connected to 192.168.221.129 (192.168.221.129).
220 (vsFTPd 2.2.2)
Name (192.168.221.129:root): test
331 Please specify the password.
Password:
230-welcome to my home
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

测试:匿名用户

[root@mysql_2 ~]# ftp 192.168.221.129
Connected to 192.168.221.129 (192.168.221.129).
220 (vsFTPd 2.2.2)
Name (192.168.221.129:root): ftp  
331 Please specify the password.
Password:
230-welcome to anon home
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
2.2.2 修改配置文件
1. 修改配置文件指定消息文件
banner_file=/etc/vsftpd/banner_file

2. 创建消息文件
vim /etc/vsftpd/banner_file

测试:
[root@mysql_2 ~]# ftp 192.168.221.129
Connected to 192.168.221.129 (192.168.221.129).
220-*************
220-
220-
220-
220-************
220 
Name (192.168.221.129:root): test  
331 Please specify the password.
Password:
230-welcome to my home
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

注: 配置方式不同显示的位置也不同。

2.3 用户访问目录控制及上传目录设置

  • 禁锢本地用户的家,只能在自己的家中活动

1)禁锢所有的本地用户

chroot_local_user=YES //禁锢所有的本地用户(不能随便跳转)

2)禁锢大部分用户,允许小部分

chroot_local_user=YES

chroot_list_enable=YES //启用用户文件列表

chroot_list_file=/etc/vsftpd/chroot_list //定义用户文件列表

3)允许大部分,禁锢小部分

chroot_local_user=NO 或者 # chroot_local_user=YES

chroot_list_enable=YES //启用用户文件列表

chroot_list_file=/etc/vsftpd/chroot_list //定义用户文件列表

注: chroot_list_enable 的开启与关闭会影响chroot_list_file 文件的作用,前者开启禁用 ,后者就是允许列表;前者关闭禁用,后者就是禁用列表。

  • 指定匿名用户和本地用户上传文件的目录

默认文件夹:/var/ftp (匿名) /home/username(本地)

更改配置文件/etc/vsftpd/vsftpd.conf

anon_root=指定文件夹路径

local_root=指定文件夹

注意: 要对指定文件夹增加权限chmod o+w

  • 禁锢所有用户的家,不能来回跳转

chroot_local_user=YES

2.4 FTP的访问控制

  • 对象访问控制(FTP服务的自身访问控制)
ftpusers        //黑名单   
user_list       //默认是黑名单(可以成为白名单)

例:
需求1:不允许stu1用户访问ftp服务
echo stu1 >> /etc/vsftpd/ftpusers

需求2:只允许stu2用户访问ftp服务
1)修改配置文件将user_list文件变成白名单
userlist_deny=NO

2)将stu2用户加入到user_list文件中
echo stu2 >> user_list

注:

​ 如果user_list文件是白名单,用户即在ftpusers中又在user_list中,那么ftpusers拒绝优先

  • FTP服务网络访问控制

    • 检查是否支持tcp_wrappers
    ①对于编译安装的软件:
    ./configure --enable-libwrap  表示支持tcp_wrappers访问控制
    ②对于rpm安装的软件
    [root@review1 ~]# ldd /usr/sbin/vsftpd |grep libwrap*
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fb2c28eb000)
    [root@review1 ~]# ldd /usr/sbin/sshd |grep libwrap*
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fa0e6bc1000)
    • tcp-wrappers 写法
    /etc/hosts.deny
    vsftpd:all                        全部拒绝
    vsftpd:all  EXCEPT 192.168.0.2    拒绝所有除了192.168.0.2  
    vsftpd:192.168.0.254      拒绝单个ip地址=hosts.allow文件里增加vsftpd:192.168.0.254:deny
    vsftpd:192.168.0.0/255.255.255.0   拒绝某个网段
    vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.254   拒绝某个网段,但是除了某个ip地址
    注意:子网掩码不支持192.168.0.0/24这种写法
Logo

更多推荐