当前位置:   article > 正文

服务及进程介绍及使用_fcontext

fcontext

服务及进程介绍及使用

一、 Firewalld服务

	RHEL7是一个集合多款防火墙管理工具并存的系统,Firewalld动态防火墙管理器服务(Dynamic Firewall Manager of Linux systems)是目前默认的防火墙管理工具,同时拥有命令行终端和图形化界面的配置工具,即使是对[Linux命令](http://www.linuxprobe.com/)并不熟悉的同学也能快速入门。相比于传统的防火墙管理工具还支持了动态更新技术并加入了“zone区域”的概念,简单来说就是为用户预先准备了几套防火墙策略集合(策略模板),然后可以根据生产场景的不同而选择合适的策略集合,实现了防火墙策略之间的快速切换。例如咱们有一台笔记本电脑每天都要在办公室、咖啡厅和家里使用,按常理推断最安全的应该是家里的内网,其次是公司办公室,最后是咖啡厅,如果需要在办公室内允许文件共享服务的请求流量、回到家中需要允许所有的服务,而在咖啡店则是除了上网外不允许任何其他请求,这样的需求应该是很常见的,在以前只能频繁的进行手动设置,而现在只需要预设好zone区域集合,然后轻轻点击一下就可以切换过去了上百条策略了,极大的提高了防火墙策略的应用效率,常见的zone区域名称及应用可见下表(默认为public):
  • 1

1. 简介

区域默认规则策略
trusted允许所有的数据包。
home拒绝流入的数据包,除非与输出流量数据包相关或是ssh,mdns,ipp-client,samba-client与dhcpv6-client服务则允许。
internal等同于home区域
work拒绝流入的数据包,除非与输出流量数据包相关或是ssh,ipp-client与dhcpv6-client服务则允许。
public拒绝流入的数据包,除非与输出流量数据包相关或是ssh,dhcpv6-client服务则允许。
external拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许。
dmz拒绝流入的数据包,除非与输出流量数据包相关或是ssh服务则允许。
block拒绝流入的数据包,除非与输出流量数据包相关。
drop拒绝流入的数据包,除非与输出流量数据包相关。
查看防火墙状态
firewall-cmd --state
  • 1
停止firewall
systemctl stop firewalld.service
  • 1
开启
systemctl start firewalld.service
  • 1
禁止firewall开机启动
systemctl disable firewalld.service 
  • 1
配置文件
/usr/lib/firewalld/zones/
/etc/firewalld/services/
  • 1
  • 2

2. 终端管理工具

命令行终端是一种极富效率的工作方式,firewall-cmd命令是Firewalld动态防火墙管理器服务的命令行终端。它的参数一般都是以“长格式”来执行的,但同学们也不用太过于担心,因为红帽RHEL7系统非常酷的支持了部分命令的参数补齐,也正好包括了这条命令,也就是说现在除了能够用Tab键来补齐命令或文件名等等内容,还可以用Tab键来补齐下列长格式参数啦(这点特别的棒)。

参数作用
–get-default-zone查询默认的区域名称。
–set-default-zone=<区域名称>设置默认的区域,永久生效。
–get-zones显示可用的区域。
–get-services显示预先定义的服务。
–get-active-zones显示当前正在使用的区域与网卡名称。
–add-source=将来源于此IP或子网的流量导向指定的区域。
–remove-source=不再将此IP或子网的流量导向某个指定区域。
–add-interface=<网卡名称>将来自于该网卡的所有流量都导向某个指定区域。
–change-interface=<网卡名称>将某个网卡与区域做关联。
–list-all显示当前区域的网卡配置参数,资源,端口以及服务等信息。
–list-all-zones显示所有区域的网卡配置参数,资源,端口以及服务等信息。
–add-service=<服务名>设置默认区域允许该服务的流量。
–add-port=<端口号/协议>允许默认区域允许该端口的流量。
–remove-service=<服务名>设置默认区域不再允许该服务的流量。
–remove-port=<端口号/协议>允许默认区域不再允许该端口的流量。
–reload让“永久生效”的配置规则立即生效,覆盖当前的。
查看Firewalld服务当前所使用的zone区域:
[root@linuxprobe ~]# firewall-cmd --get-default-zone
public
  • 1
  • 2
查询eno16777728网卡在Firewalld服务中的zone区域:
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728
public
  • 1
  • 2
把Firewalld防火墙服务中eno16777728网卡的默认区域修改为external,重启后再生效:
[root@linuxprobe ~]# firewall-cmd --permanent --zone=external --change-interface=eno16777728
success
[root@linuxprobe ~]# firewall-cmd --get-zone-of-interface=eno16777728
public
[root@linuxprobe ~]# firewall-cmd --permanent --get-zone-of-interface=eno16777728
external
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
把Firewalld防火墙服务的当前默认zone区域设置为public:
[root@linuxprobe ~]# firewall-cmd --set-default-zone=public
success
[root@linuxprobe ~]# firewall-cmd --get-default-zone 
public
  • 1
  • 2
  • 3
  • 4
启动/关闭Firewalld防火墙服务的应急状况模式,阻断一切网络连接(当远程控制服务器时请慎用。):
[root@linuxprobe ~]# firewall-cmd --panic-on
success
[root@linuxprobe ~]# firewall-cmd --panic-off
success
  • 1
  • 2
  • 3
  • 4
查询在public区域中的ssh与https服务请求流量是否被允许:
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@linuxprobe ~]# firewall-cmd --zone=public --query-service=https
no
  • 1
  • 2
  • 3
  • 4
把Firewalld防火墙服务中https服务的请求流量设置为永久允许,并当前立即生效:
[root@linuxprobe ~]# firewall-cmd --zone=public --add-service=https
success
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@linuxprobe ~]# firewall-cmd --reload
success
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
把Firewalld防火墙服务中http服务的请求流量设置为永久拒绝,并当前立即生效:
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --remove-service=http 
success
[root@linuxprobe ~]# firewall-cmd --reload 
success
  • 1
  • 2
  • 3
  • 4
把Firewalld防火墙服务中8080和8081的请求流量允许放行,但仅限当前生效:
[root@linuxprobe ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@linuxprobe ~]# firewall-cmd --zone=public --list-ports 
8080-8081/tcp
  • 1
  • 2
  • 3
  • 4
把原本访问本机888端口号的请求流量转发到22端口号,要求当前和长期均有效:

流量转发命令格式:firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>

[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
success
[root@linuxprobe ~]# firewall-cmd --reload
success
  • 1
  • 2
  • 3
  • 4
在客 户机使用ssh命令尝试访问192.168.10.10主机的888端口:
[root@client A ~]# ssh -p 888 192.168.10.10
The authenticity of host '[192.168.10.10]:888 ([192.168.10.10]:888)' can't be established.
ECDSA key fingerprint is b8:25:88:89:5c:05:b6:dd:ef:76:63:ff:1a:54:02:1a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.10.10]:888' (ECDSA) to the list of known hosts.
root@192.168.10.10's password:此处输入远程root用户的密码
Last login: Sun Jul 19 21:43:48 2017 from 192.168.10.10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
在Firewalld防火墙服务中配置一条富规则,拒绝所有来自于192.168.10.0/24网段的用户访问本机ssh服务(22端口):
[root@linuxprobe ~]# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
success
[root@linuxprobe ~]# firewall-cmd --reload
success
  • 1
  • 2
  • 3
  • 4
在客户机使用ssh命令尝试访问192.168.10.10主机的ssh服务(22端口):
[root@client A ~]# ssh 192.168.10.10
Connecting to 192.168.10.10:22...
Could not connect to '192.168.10.10' (port 22): Connection failed.
  • 1
  • 2
  • 3

3. 富规则

3.1 简介
firewall-cmd有四个选项可以用于处理富规则,所有这些选项都可以同常规的--permanent或--zone=<ZONE>选项组合使用。
  • 1
3.2 富规则语法解释
1.source
规定限制源IP地址,源地址可以是一个IPv4或者IPv6地址或者一个网络地址段。

2.destination
规定限制目标。目标地址使用跟源地址相同的语法。

3.element
这个要素只可以是以下要素类型之一: service , port , protocol , masquerade, icmp-block 和 forward-port 。

4.service
服务名称是 firewalld 提供的其中一种服务。要获得被支持的服务的列表,输入以下命令: firewall-cmd --get-services 。如果一个服务提供了一个目标地址,它将和规则中的目标地址冲突,并且导致一个错误。命令为以下形式:
$service name=service_name

5.port
端口既可以是一个独立端口数字,又或者是端口范围,例如,5060-5062。协议可以指定为 tcp 或 udp 。命令为以下形式:
$port port=number_or_range protocol=protocol

6.protocol
协议值可以是一个协议ID号,或者一个协议名。预知可用协议,请查阅/etc/protocols。命令为以下形式:
$protocol value=protocol_name_or_ID

7.icmp-block
用这个命令阻断一个或多个 ICMP 类型。
ICMP 类型是 firewalld 支持的 ICMP 类型之一。
要获得被支持的 ICMP 类型列表,输入以下命令:
$ firewall-cmd --get-icmptypes

8.masquerade
打开规则里的IP伪装。

9.forward-port
从一个带有指定为 tcp 或 udp 协议的本地端口转发数据包到另一个本地端口,或另一台机器,或另一台机器上的另一个端口。
$forward-port port=number_or_range protocol=protocol /to-port=number_or_range to-addr=address

10.log
日志等级可以是 emerg 、 alert 、 crit 、 error 、warning 、notice 、 info 或者 debug 中的一个。可以选择日志的用法,按以下方式限制日志:
$log [prefix=prefix text] [level=log level] limit value=rate/duration
持续时间的单位为 s 、 m 、 h 、 d 。 s 表示秒, m 表示分钟, h 表示小时, d 表示天。最大限定值是 1/d ,意为每天最多有一条日志进入。

11.audit
审核类型可以是ACCEPT 、 REJECT 或 DROP 中的一种   
#不能在 audit 命令后指定

12.accept|reject|drop
选择 accept,所有新的连接请求都会被允许。
选择 reject ,连接将被拒绝,连接来源将接到一个拒绝信息。
选择 drop,所有数据包会被丢弃,并且不会向来源地发送任何信息。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

二、 DNS服务

1. DNS 概述

DNS是互联网的一个基础服务。

​ 我们知道用户在与互联网上的主机通信时,必须 知道对方的 IP 地址。但是每个 IP 地址都是由 32 位的二进制组成,即使是十进制的 IP 地址表示形式,用户想要记住也是很难的一件事,况且互联网有那么多的主机。

​ 域名到 IP 地址的解析是通过许多分布在互联网上的域名服务器完成的。解析的主要过程如下:当一个主机中的进程需要把域名解析为 IP 地址时,该进程就会调用解析程序,并成为DNS的一个客户,把待解析的域名放在 DNS 的请求报中,以UDP用户数据报方式发送给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。获得IP地址后的主机即可进行通信。

2. DNS系统结构

  • DNS是一个层次结构的分布式的数据库,如下所示:

3. 分类

  • 域名服务器有以下四种类型
    • 根域名服务器
    • 顶级域名服务器
    • 权限域名服务器
    • 本地域名服务器

4. 顶级域名及详解

域名含义
com商业机构
net网络服务机构
org非营利性组织、社会团体
gov政府机构
edu教育机构
mil军事机构
cn中国
jp日本
uk英国
us美国

5. DNS查询过程

递归查询
	主机向本地域名服务器的查询一般都采用递归查询(recursive[rɪˈkɜːrsɪv] query)。所谓的递归查询就是:如果主机所询问的本地域名服务器不知道被查出来的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文(替代该主机继续查询),而不是主机自己进行下一步的查询。因此,递归查询返回的结果要么是所查询的 IP 地址,要么报错,表示无法查到所需要的 IP。本地域名服务器采用递归查询(比较少用)。
  • 1
迭代查询
	本地域名服务器向根域名服务器的查询方式通常采取迭代查询(iterative query)。迭代查询有以下的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“我这里没有你要的查询结果,你需要向哪一台域名服务器进行查询”。然后本地域名服务器进行后续的查询(不替代本地域名服务器)。
  • 1
正向查询
	根据主机名称(域名)查找对应的 IP 地址
  • 1
反向查询
	根据 IP 地址查找对应的主机域名
  • 1

6. DNS服务器功能分类

缓存域名服务器
  • 也称为高速缓存服务器
  • 通过向其他域名服务器查询获得域名 -> IP地址记录
  • 将域名查询结果缓存到本地,提高重复查询时的速度
主域名服务器
  • 特定 DNS 区域的官方服务器,具有唯一性。
  • 负责维护该区域内所有域名 -> IP 地址的映射记录
从域名服务器
  • 也称为辅助域名服务器
  • 其维护的域名 -> IP地址记录来源于主域名服务器

三、 Samba文件服务器

1. 概述

	在windows网络环境中,主机之间进行文件和打印机共享是通过微软公司自己的SMB/CIFS网络协议实现的。SMB(Server Message Block,服务消息块)和CIFS(Common Internet File System,通用互联网文件系统)协议是微软的私有协议,在Samba  [ˈsæmbə] 项目出现之前,并不能直接与Linux/UNIX系统进行通信。
  • 1
  • 要将Samba配置为作为工作组成员来提供SMB文件共享需执行以下基本步骤:

    1. 安装Samba软件包
    	yum install samba -y
    2. 准备要共享的目录的权限
    3. 配置/etc/samba/smb.conf文件
    4. 使用NTLMv2密码设置相应的Linux用户
       NTLM = WindowsNT LAN Manager = WindowsNT挑战/响应验证机制
    5. 启动Samba并打开本地防火墙
    6. 验证是否可以从客户端挂载共享
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

2. Selinux 上下文及布尔值

  • 要在SELinux处于强制模式时候使Samba正确运行,目录需要具有正确的SELinux上下文并且可能需要设置某些SELinux布尔值。如果将仅通过Samba来访问共享目录,则目录及其所有子目录和文件都应以samba_share_t来标记,这将为Samba提供读写访问权限。

    # -d 列出目录本身,而不是目录内容
    # -Z显示安全上下文 仅显示模式、用户、组、安全上下文和文件名
    ll -Zd /pro/share
    
    # semanage 命令是用来查询与修改SELinux默认目录的安全上下文
    # fcontext 主要用在安全上下文方面
    
    # -a:增加,可以增加一些目录的默认安全上下文类型设置
    # -m:修改
    # -d:删除
    
    # -l:列举
    # -n:不打印说明头
    # -D:全部删除
    # -f:文件
    # -s:用户
    # -t:类型
    # -r:角色
    
    semanage fcontext -a -t samba_share_t '/pro/share(/.*)?' 
    
    # estorecon命令用来恢复SELinux文件属性即恢复文件的安全上下文
    # 它使用SELinux策略中的规则来确定应该是哪种文件上下文
    # -i:忽略不存在的文件。
    # -f:infilename 文件 infilename 中记录要处理的文件。
    # -e:directory 排除目录。
    # -R/-r:递归处理目录。
    # -n:不改变文件标签。
    # -o/outfilename:保存文件列表到 outfilename,在文件不正确情况下。
    # -v:将过程显示到屏幕上。
    # -F:强制恢复文件安全语境。
    restorecon -vFR /pro/share/
    
    # 查看结果
    ls -lZd /pro/share
    drwxr-xr-x. root root system_u:object_r:samba_share_t:s0 /pro/share/
    
    # Samba还可以提供使用SELinux类型public_content_t(只读)和public_content_rw_t(读写)标记   的文件。要允许对标记为public_content_rw_t的文件和目录进行读写访问,必须还要启用SELinux  布尔值smbd_anon_write。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

3. Samba 安全级别

  • 总共分四种,默认是第一种。

    1.share---
    	不需要提供用户名和密码。
    2. user----
    	需要提供用户名和密码,而且身份验证由samba server负责。
    3.server---
    	需要提供用户名和密码,可指定其他机器(winNT/2000/XP)或另一台samba server作身份验证。
    4.domain--
    	需要提供用户名和密码,指定winNT/2000/XP域服务器作身份验证。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

4. 主配置文件

  • Smba的主配置文件是/etc/samba/smb.conf文件。

    • 此文件分为多个节。每节以节名称(括在方括号中)开头,后面是设置为特定值的参数的列表。任何以分号或井号字符开头的行都将被注释掉

      1.[global] 节:定义Samba服务器的基本配置。
      2.[homes] 节:定义了一个默认启用的特殊文件共享,即共享了用户家目录.
      3.[printers] 节:打印机共享设置:若需要共享打印机设备,可以在这部分进行配置。
      
      • 1
      • 2
      • 3
  • 主配置文件smb.conf

    #服务名:smb
    #配置目录:/etc/sabma/
    #主配置文件:/etc/sabma/smb.conf
    
    comment---------注释说明
    path------------分享资源的完整路径名称,除了路径要正确外,目录的权限也要设对
    browseable------是yes/否no在浏览资源中显示共享目录,若为否则必须指定共享路径才能存取
    printable-------是yes/否no允许打印
    hide dot ftles--是yes/否no隐藏隐藏文件
    public----------是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)
    guest ok--------是yes/否no公开共享,若为否则进行身份验证(只有当security = share 时此项才起作用)
    read only-------是yes/否no以只读方式共享当与writable发生冲突时也writable为准
    writable--------是yes/否no不以只读方式共享当与read only发生冲突时,无视read only
    valid users-----设定只有此名单内的用户才能访问共享资源(拒绝优先)(用户名/@组名)
    invalid users---设定只有此名单内的用户不能访问共享资源(拒绝优先)(用户名/@组名)
    read list-------设定此名单内的成员为只读(用户名/@组名)
    write list------若设定为只读时,则只有此设定的名单内的成员才可作写入动作(用户名/@组名)
    create mask-----建立文件时所给的权限
    directory mask--建立目录时所给的权限
    force group-----指定存取资源时须以此设定的群组使用者进入才能存取(用户名/@组名)
    force user------指定存取资源时须以此设定的使用者进入才能存取(用户名/@组名)
    allow hosts-----设定只有此网段/IP的用户才能访问共享资源
    allwo hosts = 网段 except IP
    deny hosts------设定只有此网段/IP的用户不能访问共享资源
    allow hosts=本网段指定IP指定IP
    deny hosts=指定IP本网段指定IP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 验证配置文件语法

    • 使用testparm命令,不带任何参数允许即可

5. 使用Samba的多用户挂载

  • 当挂载Samba共享时,默认情况下挂载凭据确定对挂载点的访问权限。新的multiuser(多用户)挂载选项将挂载凭据与用于确定每个用户的文件访问权限的凭据进行隔离,可以与security=ntlmssp身份验证一起使用。

  • 案例:

    	root用户使用multiuser选项以及一个SMB用户名(对共享内容具有最低访问权限)挂载共享。常规用户随后可以使用cifscreds命令将其自己的SMB用户名和密码存储在当前会话的内核密钥环中,其对共享的访问权限是通过来自密钥环的自身凭据而非挂载凭据来验证。用户可以随时清除或更改其针对该登录会话的凭据,并且在会话结束后将会清除。文件访问权限完全由SMB服务器根据当前使用的访问凭据强制实施。
    
    • 1
  • 实现:

    #####################服务端配置##############################
    # 配置服务器上可读写用户mary
    useradd -s /sbin/nologin mary
    
    # 创建smb密码
    smbpasswd -a mary
    # 增加mary路径权限
    setfacl -m u:mary:rwx /pro/share/
    
    # 编辑配置文件增加可写用户列表
    vim /etc/samba/smb.conf
    
    # 修改以下内容
    [share]
    	path = /pro/share
    	writable = no
    	valid users = fred,mary,@management
    	write list = mary
    	
    # 重启服务
    systemctl restart smb nmb
    
    
    ##################客户端进行多用户测试##########################
    # 重新挂载
    mount -o multiuser,sec=ntlmssp,username=fred,password=000000 //192.168.215.3/myshare /mnt/share
    df -h
    
    # 增加用户
    useradd mary
    useradd fred
    
    su - fred
    
    # 需要命令cifscreds以将身份验证凭据存储在本地用户的密钥环中。这些身份验证凭据将转发到多用户挂载上的Samba服务器。cifs-utils软件包提供cifscreds命令,客户端系统上需要安装。
    # cifscreds 命令具有各种操作
    # add:可向用户的会话密钥环中添加SMB凭证,此选项后跟SMB文件服务器的主机名
    # update:可更新用户的会话密钥环中的现有凭据,此选项后跟SMB文件服务器的主机名
    # clear:可从用户的会话密钥环中删除特定条目,此选项后跟Samba文件服务器的主机名
    # clearall:可从用户的会话密钥环中清除所有现有凭据。
    
    cifscreds add 192.168.215.3
    Password:
    cd /mnt/share/
    ls
    touch file
    
    su - mary
    cifscreds add 192.168.215.3
    Password:
    cd /mnt/share/
    touch file1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

四、 vsftp文件服务

1. 概述

  • VSFTP文件服务是一个基于GPL(GNU General[ˈdʒenrəl] Public License[ˈlaɪsns] 通用公共许可证)发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure[sɪˈkjʊr] FTP 从此名称可以看出来,编制者的初衷是代码的安全。

    安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点。
    
    在速度方面,使用ASCII[ˈæski] 代码的模式下载数据时,VSFTP的速度是Wu-FTP的两倍,如果Linux主机使用2.4.*的内核,在千兆以太网上的下载速度可达86MB/S。
    
    在稳定方面,VSFTP就更加的出色,VSFTP在单机(非集群)上支持4000个以上的并发用户同时连接,根据Red Hat的Ftp服务器的数据,VSFTP服务器可以支持15000个并发用户。
    
    VSFTP市场应用十分广范,很多国际性的大公司和自由开源组织在使用,如:Red Hat, Suse //ˈsuːsə//,Debian // 'dai bɪn//,OpenBSD。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

2. 软件特点

1.它是一个安全、高速、稳定的FTP服务器;

2.它可以做基于多个IP的虚拟FTP主机服务器;

3.匿名服务设置十分方便;

4.匿名FTP的根目录不需要任何特殊的目录结构,或系统程序或其它的系统文件;

5.不执行任何外部程序,从而减少了安全隐患;

6.支持虚拟用户,并且每个虚拟用户可以具有独立的属性配置;

7.可以设置从Xinetd(扩展internet守护进程)(代替inetd)中启动,或者独立的FTP服务器两种运行方式;

8.支持两种认证方式(PAP(密码认证协议)或xinetd / tcp_wrappers);
	wrappers[ˈræpərz] 包装纸
	tcp_wrappers 为 由 inetd 生成的服务提供了增强的安全性。提供防止主机名和主机地址欺骗的保护。
	tcp_wrappers 使用访问控制列表 (ACL) 来防止欺骗。ACL 是 /etc/hosts.allow 和 /etc/hosts.deny 文件中的系统列表。在配置为验证主机名到 IP 地址映射,以及拒绝使用 IP 源路由的软件包时,TCP Wrappers 提供某些防止 IP 欺骗的保护。
	tcp_wrappers 工作原理 :在服务器向外提供的tcp服务商包装一层安全检测机制。外来连接请求首先通过这个安全检测,获得安全认证后才可被系统服务接受。

9.支持带宽限制;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3. FTP连接及连接模式

  • 连接:

    1.控制连接:TCP 21,用于发送FTP命令信息
    2.数据连接:TCP 20,用于上传、下载数据
    
    • 1
    • 2
  • 模式:

    1.主动模式:服务端从 20 端口主动向客户端发起连接
    2.被动模式:服务端在指定范围内某个端口被动等待客户端连接
    
    • 1
    • 2
    • 主动模式

    • 被动模式

4. FTP传输模式

1.文本模式:ASCII [ˈæski] 模式,以文本序列传输数据
2.二进制模式:Binary  [ˈbaɪnəri] 模式,以二进制序列传输数据
  • 1
  • 2

5. FTP 用户的类型

  • 匿名用户、本地用户、虚拟用户

6. Vsftpd 软件包

  • 官方站点:
    • http: //vsftpd.beasts.org/
  • 主程序:
    • /usr/sbin/vsftpd
  • 服务名:
    • vsftpd
  • 用户控制列表文件:
    • /etc/vsftpd/ftpusers
    • /etc/vsftpd/user_list
  • 主配置文件:
    • /etc/vsftpd/vsftpd.conf

7. 常用配置选项

anonymous_enable=YES #是否允许匿名登陆 anonymous[əˈnɑːnɪməs]

local_enable=YES	 #允许本地登陆

write_enable=YES 	#启用任何形式的ftp写入命令

local_umask=022 	#FTP上本本地的文件权限,默认是077,不过vsftp安装后的配置文件里默认是022

anon_upload_enable=YES  	#允许匿名ftp用户上传文件

anon_mkdir_write_enable=YES  	#允许匿名用户创建新的目录

dirmessage_enables=YES 	 #激活目录消息,向远程用户发送消息,进入某个目录

xferlog_enable=YES 	 #激活上传/下载日志记录

connect_from_port_20=YES 	#确保RORT传输连接来自端口20

chown_uploads=YES
chown_username=whoever
#设置匿名用户上传文件的默认用户,不推荐使用root

xferlog_file=/var/log/xferlog 	#日志文件路径
xferlog_std_format=YES #日志文件使用标准ftpdxferlog格式的日志文件,默认位置/var/log/xferlog
idle_session_timeout=600 	#更改超时空闲会话的默认值  idle[ˈaɪdl]闲置
data_connection_timeout=120	 #超时数据连接的默认值
nopriv_user=ftpsecure	 #创建ftp服务器独立的用户
async_abor_enable=YES 	#启用异步中止(ABOR)请求 async//ei'sɪŋk// = asynchronous [eɪˈsɪŋkrənəs] 异步
ascii_upload_enable=YES 	#允许ASCII [ˈæski] 模式上传文件
ascii_download_enable=YES 	#允许ASCII模式下载文件
ftpd_banner=Welcome to blah FTP service. 	#自定义登陆标题字符串
deny_email_enable=YES 	#指定不允许匿名登陆电子邮件 deny [dɪˈnaɪ]
banned_email_file=/etc/vsftpd/banned_emails 	#email默认路径 banned [bænd] 明令禁止

chroot_local_user=YES #将所有用户限制在主目录
chroot_list_enable=YES #是否启动限制用户的名单
chroot_list_file=/etc/vsftpd/chroot_list #限制用户的名单

ls_recurse_enable=YES 	#启用ls–R选项 recurse//rɪˈkɜːrs//
listen=NO  #启用 listen 指令,vsftp 以独立模式运行侦听ipv4套接字,该指令不能同时使用withlisten_inv6指令
listen_ipv6=YES 	#监听ipv6
pam_service_name=vsftpd 	#虚拟用户使用PAM认证方式
userlist_enable=YES 	#只允许userlist文件中的账户的登录
tcp_wrappers=YES	#是否允许tcp_wrappers管理  wrappers[ˈræpərz] 包装纸
anon_other_write_enable=YES  	#允许匿名用户改名和删除文件
anon_world_readable_only=YES 	#匿名用户可以读文件,反之就是不能读
pasv_min_port=3000
pasv_max_port=3500  #PASV模式下指定端口范围 pasv=Passive [ˈpæsɪv]被动的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

8. VSFTP服务器配置

  • 匿名访问:

    anonymous_enable=YES/NO(YES)
    #控制是否允许匿名用户登入,YES 为允许匿名登入,NO 为不允许。默认值为YES。
    
    write_enable=YES/NO(YES)
    #是否允许登陆用户有写权限。属于全局设置,默认值为YES。
    
    no_anon_password=YES/NO(NO)
    #若是启动这项功能,则使用匿名登入时,不会询问密码。默认值为NO。
    
    ftp_username=ftp
    #定义匿名登入的使用者名称。默认值为ftp。
    
    anon_root=/var/ftp	 #使用匿名登入时,所登入的目录。默认值为/var/ftp。注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限。
    
    anon_upload_enable=YES/NO(NO)
    #如果设为YES,则允许匿名登入者有上传文件(非目录)的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO。
    
    anon_world_readable_only=YES/NO(YES)
    #如果设为YES,则允许匿名登入者下载可阅读的档案(可以下载到本机阅读,不能直接在FTP服务器中打开阅读)。默认值为YES。
    
    anon_mkdir_write_enable=YES/NO(NO)
    #如果设为YES,则允许匿名登入者有新增目录的权限,只有在write_enable=YES时,此项才有效。当然,匿名用户必须要有对上层目录的写入权。默认值为NO。
    
    anon_other_write_enable=YES/NO(NO)	
    #如果设为YES,则允许匿名登入者更多于上传或者建立目录之外的权限,譬如删除或者重命名。(如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件;如果anon_mkdir_write_enable=NO,#则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的文件夹。)默认值为NO。
    
    chown_uploads=YES/NO(NO)
    #设置是否改变匿名用户上传文件(非目录)的属主。默认值为NO。
    
    chown_username=username
    #设置匿名用户上传文件(非目录)的属主名。建议不要设置为root。
    
    anon_umask=077
    #设置匿名登入者新增或上传档案时的umask 值。默认值为077,则新建档案的对应权限为700。
    
    deny_email_enable=YES/NO(NO)
    #若是启动这项功能,则必须提供一个档案/etc/vsftpd/banner_emails,内容为email  address。若是使用匿名登入,则会要求输入email address,
    #若输入的email address 在此档案内,则不允许进入。默认值为NO。
    
    banned_email_file=/etc/vsftpd/banner_emails
    #此文件用来输入email  address,只有在deny_email_enable=YES时,才会使用到此档案。若是使用匿名登入,则会要求输入email address,若输入的email address 在此档案内,则不允许进入
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
  • 本地用户:

    anonymous_enable=NO #不允许匿名用户登入
    
    local_enable=YES/NO(YES)
    #控制是否允许本地用户登入,YES 为允许本地用户登入,NO为不允许。默认值为YES。
    
    local_root=/home/username
    #当本地用户登入时,将被更换到定义的目录下。默认值为各用户的家目录。
    
    write_enable=YES/NO(YES)
    #是否允许登陆用户有写权限。属于全局设置,默认值为YES。
    
    local_umask=022
    #本地用户新增档案时的umask 值。默认值为077。
    
    file_open_mode=0755
    #本地用户上传档案后的档案权限,与chmod所使用的数值相同。默认值为0666。
    
    chroot_local_user=YES
    #用于指定用户列表文件中的用户不允许切换到上级目录。默认值为NO
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

9. 案例

1.需要创建一个本地用户,只是用于FTP登录,不需要登录系统
	useradd -s /sbin/nologin ftpuser 
	echo 000000 | passwd --stdin ftpuser

2.创建一个目录,用于作为ftp用户的根目录
	mkdir /pro/ftp
	setfacl -m u:ftpuser:rwx /pro/ftp/
	
3.调整vsftp的主配置文件,关闭匿名登录,启用本地用户
	vim /etc/vsftpd/vsftpd.conf
	anonymous_enable=NO
	local_enable=YES 
	local_root=/pro/ftp 
	chroot_local_user=YES 
	allow_writeable_chroot=YES
	write_enable=YES
	
4.调整SELinux的布尔值
	setsebool -P ftpd_full_access=on
	getsebool -a | grep ftpd
	
5.重启vsftpd服务后,客户端进程测试
	ftp 192.168.215.3
	Connected to 192.168.215.3 (192.168.215.3).
	220 (vsFTPd 3.0.2)
	Name (192.168.215.3:root): ftpuser
	331 Please specify the password.
	Password:
	230 Login successful.
	Remote system type is UNIX.
	Using binary mode to transfer files.
	ftp> ls
	227 Entering Passive Mode (192,168,215,3,207,158).
	150 Here comes the directory listing.
	226 Directory send OK.
	ftp> mkdir aaa
	257 "/aaa" created
	ftp> ls
	227 Entering Passive Mode (192,168,215,3,47,233).
	150 Here comes the directory listing.
	drwxr-xr-x    2 1005     1005            6 Nov 04 22:33 aaa
	226 Directory send OK.
	
6.增加第二个本地用户lisi
	useradd lisi
	echo 123 | passwd --stdin lisi 
	setfacl -m u:lisi:rwx /pro/ftp/
	
7.使用lisi登录,也可以创建文件,但是lisi可以删除ftpuser创建的文件及文件夹,所以为了安全,为ftp根  目录增加Sticky (SBIT)特殊权限
	chmod o+t /pro/ftp/ 
	ls -ld /pro/ftp/
	
#更多的选项可以:man vsftpd.conf
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/309007
推荐阅读
相关标签
  

闽ICP备14008679号