精华内容
下载资源
问答
  • linux session 浅谈

    2012-12-13 09:55:34
    linux session 浅谈 分类: linux浅说2012-08-16 12:02 103人阅读 评论(2) 收藏 举报 今天我来谈一谈关于linux session的一些认识,以下都是我对这个概念的认识,只是很初级的,希望对各位有所帮组...
     

    linux session 浅谈

    分类: linux浅说   103人阅读  评论(2)  收藏  举报

    今天我来谈一谈关于linux session的一些认识,以下都是我对这个概念的认识,只是很初级的,希望对各位有所帮组吧。
    • session的概念:

    在web中的session概念,维系是基于凭证,在web中一般用session保存的是登录的信息,当客户端每次进行请求的时候,都会在请求的数据后面加上session ,这样

    服务端就可以知道该用户是什么用户,以及他所具有的权限。当用户退出,或长时间没有交互,则session无效(该凭证已经失效),需要重新登录。


    linux中的session跟这个有点类似,也是在一个用户登录到主机,那么就建立了一个session,但是它的维系是基于连接的,那么该对于这个会话存在两种的维持方法

    1. 本地连接:就是说用户是在主机本机上进行的登录,直接通过键盘和屏幕和主机进行交互。

    2. 远程连接:用户通过互联网进行连接,比如基于ssh,连接都是经过加密的。



    session是一个或多个进程组的集合。



    • session的创建:

    创建有两种方法:


    1. 用户登录就是一个会话的开始,登录之后,用户会得到一个与终端相关联的进程,该进程就是该会话的leader,会话的id就是该进程的id。

    2. 是在程序中调用pid_t setsid(void),如果调用此函数的进程不是一个进程组的组长,则此函数就会创建一个新的会话,它将做以下三件事:

    a. 该进程是新会话的首进程(session leader),也是该会话中唯一的进程;

    b. 该进程成为一个新进程组的组长进程,新进程组id是该进程id;

    c. 该进程是没有控制终端的。如果该进程原来是有一个控制中断的,但是这种联系也会被打断。因此呢,我们在新建一个session的时候就要记得对输入输出进程重定向哦。

    在调用setsid()的时候呢,要注意如果caller process是进程组组长,那么函数将会返回出错哦,所以一般偶是先fork一个进程后,在调用该函数,保证了caller process不是进程组组长哦。
    • session的退出:
    对于session的退出会进行很多的操作,且听我慢慢说来:

    当session 中leader进程退出,将导致它所连接终端被hangup,这就意味着该会话结束。如果是像ssh这种远程连接,可以通过断开网络连接来使(伪)终端hangup,这将使得leader进程收到SIGHUP信号而退出。如果是pty,其本身就是随着会话建立而创建的,会话结束,那么该终端也会被销毁的。而如果是tty则不会,因为该设备是在系统初始化的时候创建的(请看前一篇博客),并不是依赖该会话建立的,所以当该会话退出,tty仍然是存在的。只是init进程在会话结束后,就会重启getty来监听该tty。


    但是对于会话的结束,并不会意味着该会话的所以进程都结束。


    对于daemon进程,在会话中创建,但是不依赖于会话,是常驻在后台的进程。


    具体来说当终端hangup时候,内核会有如下两个动作:


    1. 想对应会话的leader进程发送SIGHUP信号,一般来说leader是一个shell,它收到SIGHUP信号后并不是马上退出,而hi想他启动的子进程都各自发送一个SIGHUP,将他们都杀死后,自己才退出,但是如果当该leader进程主动退出,而导致的终端hangup那么就不会发送SIGHUP信号给子进程了。

    2. 因为session都将消亡了,那么它将控制终端修改为不可读不可写的文件。所以呢,会话退出后没有消亡的进程是不能控制终端的。


    如果又想要某个进程称为常驻后台进程,不随session退出而退出,有下面几个方法:


    1. 避免shell发送SIGHUP信号: a. 主动调用exit,而不是直接断开终端;b. 两次fork,因为shell只给子进程发送SIGHUP信号,不给孙进程发送。

    2. 忽略SIGHUP信号:进程捕捉到该信号将该信号忽略就行了。

    3. 通过上面说到的setsid()系统调用,那么该调用进程将会退出该session而建立一个新的session。

    展开全文
  • Linux 网络基础篇

    千次阅读 多人点赞 2020-05-30 22:47:36
    从今天开始开始更新Linux网络基础,希望大家多多关注,指出错误,我的Linux系统管理已经更新完成,有需要的可以去看看,链接: 链接: 从零开始学习Linux. Linux 网络基础篇第一章 计算机基础第一节 进制转换第二章...

    从今天开始开始更新Linux的网络基础,希望大家多多关注,指出错误,我的Linux系统管理已经更新完成,有需要的可以去看看,链接:
    链接: 从零开始学习Linux.

    Linux 网络基础篇

    第一章 计算机基础

    第一节 进制转换

    • 十进制数:逢十进一
      1 2 3 4 5 6 7 8 9 10

    • 二进制数:逢二进一
      0 1 10 11 100 101 110 111 1000
      1001 1010 (1-10的表示)
      计算机只能识别二进制

    • 十进制转化二进制

      • 十进制数除二,把余数放到右边,直到除到得数为0或者1,用最后的得数开头把最右边的余数放在一起,就是二进制数
        比如:

        123的二进制数是1111011
        进制转换

      • 二进制转化十进制

        • 求权,然后把它加起来,从后面开始加
          比如:11010011
          12^0+12^1+02^2+02^3+12^4+02^5+12^6+12^7=211

        • 装水桶法
          适合不能太大,258以内,不支持小数,用在心算,算IP
          先列个表,写二进制对位

    11111111
    1286432168421

    十进制转二进制。如:137
    137大于128,减去128有余数则,128下面有1
    1 0 0 0 0 0 0 0
    减完之后剩9,得挨个往后减,不能跨过,减不动就计0,换下一位
    1 0 0 0 1 0 0 0
    直到碰到8,计1
    1 0 0 0 1 0 0 1

    十进制换二进制。如:110110
    把数对应到表格下面,不够补0
    1 1 1 1 1 1 1 1
    128 64 32 16 8 4 2 1
    0 0 1 1 0 1 1 0
    然后把有1的对应的数加起来
    32+16+4+2=54

    十六进制:逢十六进一
    1-9表示:1-9 a-f表示:10-15

    • 十六进制转化二进制
      先转换为二进制(四个二进制位代表一个十六进制位),直接连起来就为二进制
      再转换为十进制

      比如:8ea转换十进制
      8 e(14) a(10)
      1000 1110 1010
      二进制表示:100011101010
      十进制表示:装水桶法
      2048+128+64+32+8+2=2282
    • 十进制转化十六进制
      先转化二进制
      再转化十六进制
      比如:297转化为十六进制
      297二进制:100101001
      装水桶法:
      0001 0010 1001 不管左侧补0
      1 2 9
      十六进制数123

    第二章 网络基础

    第一节 互联网概述

    Internet简介

    • Internet是国际互联网。

    Internet的发展历史

    • ARPAnet ——> TCP/IP ——> NSFnet ——> ANSnet ——> Internet

    Internet的作用

    • 互联网缩短了时空的距离,大大加快了消息的传递。使得社会的各种资源得以共享
    • 互联网创造出了更多的机会,可以有效的提高传统产业的生产效率,有力的拉动消费需求,从而促进经济增长
    • 互联网为各个层次的文化交流提供了良好的平台

    Internet的应用领域

    • 在线招聘
    • 网上银行
    • 在线教育系统
    • 交友或参与讨论

    互联网的典型应用

    • WWW:万维网
    • FTP:文件传输协议
    • E-MAIL:电子邮件

    WWW WWW(World Wide Web)又称全球网,环球网或万维网等,也可简称为Web
    服务器S <——> 客户端C C/S架构

    URL:统一资源定位
    协议+域名或者IP:端口+网页路径+网页名
    http://www.lampbrother.net:80/index.html

    • http 协议
    • .net 一级域名
    • lampbrother 二级域名
    • www 三级域名
    • :80 端口,默认80

    常见的一级域名 (也叫顶级域名)

    一级域名组织
    Edu教育组织
    Com商业组织
    gov非军事政府机构
    Mil军事结构
    Org其他组织
    net网络服务机构
    一级域名地区
    au澳大利亚
    cn中国
    in印度
    us美国
    uk英国

    二级域名自己申请

    遇到钓鱼网站注意二级域名,他是唯一的,别被骗

    第二节 互联网接入方法

    互联网接入方法

    • ADSL:非对称数字用户环路
    • FTTH:光纤入户
    • 小区宽带
    • 固定IP光纤

    ADSL
    非对称数字用户环路。ADSL可以提供最高1Mbps的上行速率和最高8Mbps(1Mbps=1024Kbps 比特率除以8才为字节)的下行速率。最新的ADSL2+技术可以提供最高24Mbps的下行速率,ADSL2+打破了ADSL接入方式带宽限制的瓶颈,使其应用范围更加广泛。

    • 优点:
      • 使用电话线,节省了布网成本
      • 上网的同时可以打电话,节省了点话费
    • 缺点:
      • 铜线耗材昂贵
      • 带宽限制
      • 动态IP地址(拨号)

    FTTH
    光纤入户的带宽更高,而光纤的原材料是二氧化硅,在自然界取之不尽用之不竭。当然也是动态IP地址。

    小区宽带
    小区宽带是一个大局域网,所有客户都在同一个网段中。外网接口可以是FTTH,也可以是固定IP的光纤。在用户高峰期太卡,所有人用一个带宽,共享带宽。最好不要选择这个,非常不安全,监听网关可以抓获所有的数据包。

    固定IP的光纤
    带宽自由申请,价格最贵。因为固定IP地址,所以可以搭建服务器。一般是公司和服务器使用。

    第三章 网络通信协议

    第一节 OSI七层模型和TCP四层模型

    OSI 的七层框架
    OSI 七层框架计算机A通过应用层到达物理层,然后通过网络层传输到计算机B的物理层,然后从物理层传输到应用层。

    • 物理层:设备之间的比特流的传输,物理接口,电气特性等
    • 数据链路层:成帧,用MAC地址访问媒介,错误检测与修正,局域网主要靠MAC(MAC地址)
    • 网络层:提供逻辑地址,选路(路由选择)(网络IP)
    • 传输层:可靠与不可靠的传输,传输前的错误检测,流控 (包头端口)
    • 会话层:对应用户会话的管理,同步
    • 表示层:数据的表现形式,特定功能的实现如—加密
    • 应用层:用户接口

    TCP/IP协议4层模型
    在这里插入图片描述
    TCP/IP模型与OSI模型的对应

    在这里插入图片描述

    • 网络接口层
      网络接入层与OSI参考模型中的物理层和数据链路层相对应。它负责监视数据在主机和网络之间的交换。事实上,TCP/IP本身并未定义盖层的协议,而由参与互联的各网络使用自己的物理层和数据链路层进行连接。地址解析协议(ARP 把IP解析为MAC地址)工作在此层,即OSI参考模型的数据链路层。

    • 网际互联层
      网际互联层对应于OSI参考模型的网络层,主要解决主机到主机的通信问题。它所包含的协议设计数据包在整个网络上的逻辑传输。该层有三个主要协议:网际协议(IP),互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。

    • 传输层
      传输层对应于OSI参考模型的传输层,为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP)。

      在这里插入图片描述
      TCP/IP也叫面向连接的可靠传输协议

      端口是应用层与传输层的接口
      在这里插入图片描述
      对于TCP和UDP可以使用同一个端口,通过分别协议不同来区分不同服务,比如:DNS
      有的服务可以使用多个端口

    • 应用层
      应用层对应于OSI参考模型的表示层和应用层,为用户提供所需要的各种服务,例如:FTP,Telnet,DNS,SMTP等。

    数据封装过程
    在这里插入图片描述

    TCP/IP模型与OSI模型的比较

    • 共同点:
      • OSI参考模型和TCP/IP参考模型都采用了层次结构的概念
      • 都能提供面向连接和无连接两种通信服务机制
    • 不同点:
      • 前者是七层模型,后者是四层模型
      • 对可靠性要求不同(后者更高)
    • OSI模型是在协议开发前设计的,具有通用性。TCP/IP是先有协议集然后建立模型,不适用于非TCP/IP网络。
    • 实际市场应用不同(OSI模型只是理论上的模型,并没有成熟的产品,而TCP/IP已经成为“实际上的国际标准”)

    第三章 网络通信协议

    第一节 网络协议层与IP地址的划分

    • 网络层协议

    • 网际协议(IP)

    • 互联网控制报文协议(ICMP)
      在这里插入图片描述

    • IP包头
      在这里插入图片描述
      注:字段后面括号中的数字是指该字段在IP数据包头部信息所占的位数
      IPV4中为32位

    • IP地址的分类
      在这里插入图片描述

    • 子网掩码的使用
      在这里插入图片描述

    • 变长子网掩码以及子网规划
      在这里插入图片描述

    • 如何判断子网掩码是否合法的唯一标准为:网络位是否全为连续的1

    • 网络地址为每一个网段的第一个IP,用来表示网段,不可以使用

    • 广播地址为每一个网段最后一个IP,用来表示网段,不可以使用

    • IP与子网掩码相与可以算出来网络地址,而只要是子网掩码为连续的0的字段就把IP地址对应的字段变为1,其他字段照着IP写出来,这样出来的为广播地址

    ICMP协议

    • ICMP消息通过IP数据报传送,被用来发送错误和控制信息。(ping操作)

    ICMP定义了很多信息类型,例如:

    • 目的地不可达
    • TTL超时
    • 信息请求
    • 信息应答
    • 地址请求
    • 地址应答

    第四章 Linux网络基础

    第一节 Linux的IP地址配置

    Linux的IP地址配置地址的方法

    • ifconfig命令临时配置IP地址
    • Setup工具永久配置IP地址
    • 修改网络配置文件
    • 图形界面配置IP地址

    ifconfig命令

    • Ifconfig命令:查看与配置网络状态命令
    • ifconfig eth0 192.169.0.200 netmask 255.255.255.0
      临时设置eth0网卡的IP地址与子网掩码
      eth0 表示网卡,但是这个命令看不到网关
      ifconfig eth0:1 192.169.0.200
      设置另一个IP也生效
    • ifconfig eth0:1 down 取消设置

    setup工具
    红帽专有图形化工具设置setup设置IP地址
    CentOS 7 为nmtui命令 最小化安装需要下载

    第二节 Linux网络配置文件

    网卡信息文件
    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    • DEVICE=eth0 网卡设备名
    • BOOTPROTO=none 是否自动获取IP(none,static,dhcp)
    • HWADDR=00:0c:29:17:c4:09 MAC地址
    • NM_CONTROLLED=yes 是否可以由Network Manager图形管理工具托管
    • ONBOOT=yes 是否随网络服务启动,eth0生效
    • TYPE=Ethernet 类型为以太网
    • UUID=“” 唯一识别码
    • IPADDR=192.168.0.252 IP地址
    • NETMASK=255.255.255.0 子网掩码
    • GATEWAY=192.168.0.1 网关
    • DNS1=202.106.0.20 DNS
    • IPV6INIT=no IPv6没有启用
    • USERCTL=no 不允许非root用户控制此网卡

    主机名文件
    vim /etc/sysconfig/network

    • NETWORKING=yes

    • HOSTNAME=localhost.localdomain

    • hostname [主机名]
      查看与临时设置主机名

    DNS配置文件
    vim /etc/resolv.conf
    nameserver DNS 服务

    第三节 常用网络命令(1)

    ifconfig命令

    hostname [主机名]

    关闭与启动网卡

    • ifup 网卡设备名
      启用该网卡
    • ifdown 网卡设备名
      禁用该网卡

    查询网络状态
    netstat [选项]

    • -t:列出TCP协议端口
    • -u:列出UDP协议端口
    • -n:不使用域名与服务名,而使用IP地址和端口号
    • -l:仅列出在监听状态网络服务
    • -a:列出所有的网络连接
      netstat -rn
      • -r:列出路由列表,功能与route命令一致

    route命令
    route -n
    查看路由列表(可以看到网关)

    域名解析命令
    nslookup [主机名或IP]
    进行域名与IP地址解析

    nslookup
    >server
    查看本机DNS服务器

    如果没有这个命令 使用 yum -y install bind-utils 下载

    yum provides 命令 查询该命令在哪个软件包里

    第四节 常用网络命令(2)

    ping 命令
    ping [选项] ip或者域名
    探测指定IP或域名的网络状况

    • -c 次数:指定Ping包的次数

    telnet命令
    telnet [域名或ip] [端口]
    远程管理与端口探测命令
    telnet 192.168.0.252 80

    traceroute
    traceroute [选项] IP或域名
    路由跟踪命令
    -n 使用IP,不使用域名,速度更快

    wget命令
    wget 下载网址
    下载命令,下载的东西的具体目录,不能为上一级目录

    第五节 虚拟机网络参数配置

    vim /etc/sysconfig/network-scripts/ifcfg-eth0 把ONBOOT=“no”改为yes

    利用setup配置IP

    在虚拟机中配置

    • 桥接:使用真实网卡,占用和本机想通的网段,还可以和同一个网段的局域网连接
    • NAT连接 使用VMnet8 只能和本机通信,不能连局域网,虚拟机可以通过主机单向网络上的其他工作站,其他工作站不能访问虚拟机。
    • Host-only 使用VMnet1 此时虚拟机只能与虚拟机、主机互访。也就是不能上互联网

    选择不同的模式就把I虚拟机IP设置为对应模式相同的网段,选择真实IP网段,VMnet1 IP网段,VMnet8 IP网段

    VMware虚拟机克隆镜像需要改UUID

    • vim /etc/sysconfig/network-scripts/ifcfg-eth0
      删除MAC地址行

    • rm -rf /etc/udev/rules.d/70-persistent-net.rules
      删除网卡和MAC地址绑定文件

    • 重启系统

    第五章 SSH远程管理服务

    第一节 SSH简介

    ssh(安全外壳协议)
    SSH为Secure Shell的缩写,SSH为建立在应用层和传输层基础上的安全协议

    SSH端口

    • SSH端口:22
    • Linux中守护进程:sshd

    安装服务:OpenSSH

    • 服务端主程序:/usr/sbin/sshd
    • 客户端主程序:/usr/bin/ssh

    相关配置文件

    • 服务端配置文件:/etc/ssh/sshd_config
    • 客户端配置文件:/etc/ssh/ssh_config

    网络监听
    tcpdump -I 网卡文件名 -nnX port 21

    第二节 SSH原理

    对称加密算法
    采用单钥密码系统的加密方式,同一个密钥可以同时用作信息的加密和解密,这种加密方式称为对称加密,也称为单密钥加密

    在这里插入图片描述
    非对称加密算法
    非对称加密算法(asymmetric cryptographic algorithm)又名“公开密钥加密算法”,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
    在这里插入图片描述
    SSH安全外壳协议
    在这里插入图片描述
    保护信息安全

    第三节 SSH配置文件

    服务端配置文件:/etc/ssh/sshd_config

    • Port 22 端口
    • ListenAddress 0.0.0.0 监听的IP
    • Protocol 2 SSH版本选择
    • HostKey /etc/ssh/ssh_host_dsa_key 私钥保存位置
    • ServerKeyBits 1024 私钥的位数
    • SyslogFacility AUTH 日志记录SSH登陆情况
    • LogLevel NFO 日志等级
    • GSSAPIAuthentication yes GSSAPI认证开启

    在Linux远程管理Linux是,如果没有搭建DNS服务,这个建议关闭,把客户端的GSSAPIAuthentication yes 改为no,默认是yes,取消注释即可,否则登陆会异常缓慢

    • 客户端配置文件:/etc/ssh/ssh_config
      安全设定部分
    • PermitRootLogin yes 允许root的ssh登陆
    • PubkeyAuthentication yes 是否使用公钥登陆
    • AuthorizedKeysFile .ssh/authorized_keys
      公钥的保存位置
    • PasswordAuthentication yes 允许使用密码验证登陆
    • PermitEmptyPasswords no 不允许空密码登陆

    第四节 常用SSH命令

    • Linux管理其他Linux
      ssh 用户名@IP
      可以用来苹果Mac笔记本终端远登陆服务器

    • scp

      • 下载
        scp root@192.168.44.2:/root/test.txt .
      • 上传
        scp -r /root/123 root@192.168.44.2/root

        例子:
        scp -r localfile.txt username@192.168.0.1:/home/username/
        其中,
        1)scp是命令,-r是参数
        2)localfile.txt 是文件的路径和文件名
        3)username是服务器账号
        4)192.168.0.1是要上传的服务器ip地址
        5)/home/username/是要拷入的文件夹路径
        scp -r /Users/yangyangyang/Desktop/1.txt root@47.95.5.171:/tmp
    • Sftp文件传输
      sftp root@192.168.4.2

      • ls 查看服务器端数据
      • cd 切换服务器端目录
      • lls 查看本地数据
      • lcd 切换本地目录
      • get 下载
      • put 上传

    第五节 SSH连接工具

    • butty

    • secureCRT

    • Xshell

    • Mac 自带终端

    第六节 秘钥对登陆

    密钥对验证在这里插入图片描述
    即安全又方便

    步骤1:

    • Client客户端:
      ssh-keygen -t rsa
    • Sever服务端:
      把公钥上传到服务器端
      cat id_rsa.pub >> /root/.ssh/authorized_keys
      chmod 600 /root/.ssh/authorized_keys

    步骤2:
    修改服务器端ssh配置文件

    • RSAAuthentication yes 开启RSA验证
    • PubkeyAuthentication yes 是否使用公钥验证
    • AuthorizedKeysFile .ssh/aurhorized_keys
      公钥保存位置
    • PasswordAuthentication no 禁止使用密码验证登陆

    步骤3:

    • 服务器端关闭SELinux服务
      vim /etc/seliunx/config
    • 重启系统 reboot
    • 服务器端重启ssh服务
      service sshd restart

    第六章 DHCP服务

    第一节 DHCP简介与原理

    DHCP服务作用(Dynamic Host Configuration Protocol 动态主机配置协议):

    • 为大量客户机自动分配地址,提供集中管理
    • 减轻管理和维护成本,提供网络配置效率

    可分配的地址信息主要包括:

    • 网卡的IP地址,子网掩码
    • 对应的网络地址,广播地址
    • 默认的网关服务
    • DNS服务器地址
    • 引导文件,TFTP服务器地址
      在这里插入图片描述
      DHCP的原理
    • 1.客户端寻找服务器
    • 2.服务器提供地址信息(仅给IP)
    • 3.接受广播(ARP协议确认IP是否有效)
    • 4.服务器确认
    • 5.客户端重新登陆
      在这里插入图片描述
      DHCP四次握手到了第四步的时候就已经完成
      第五步申请续租IP,分为三次询问,如果IP租用时间为8天,就在4天,6天,8天头上进行三次续租申请,如果服务器都没回应,重新开始发送广播,如果服务器回应了,续租成功,第六步。

    第二节 DHCP服务器相关文件

    安装DHCP服务器
    RHEL6的DHCP软件包
    dhcp-4.1.1-31.P1.el6.i686.rpm

    对应的端口
    端口号:

    • ipv4 udp67,udp68
    • ipv6 udp546,udp547

    相关文件

    • 服务名:dhcpd
    • 主配置文件:/etc/dhcp/dhcpd.conf
    • 模版文件:/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample

    需要用模板文件覆盖主配置文件

    第三节 DHCP配置文件

    全局配置

    • option domain-name 设定所在DNS域
    • option domain-name-servers 设置DNS服务器地址
    • default-lease-time 设置默认租约时间,单位为秒
    • max-lease-time 设置最大租约时间,单位为秒
    • log-facility 指定日志设备
    • ddns-update-style 设定DNS的更新方式
    • authoritative 标识权威服务器
    • log-facility local7 日志发送到local7日志服务中

    第四节 配置DHCP服务器

    服务器端配置

    • 修改配置文件
    • 重启DHCP服务
    • service dhcpd restart

    客户端配置
    vim /etc/sysconfig/network-scripts/ifcfg-eth0

    • 修改以下文件
      DEVICE=eth0
      BOOTPROTO=dhcp
      ONBOOT=yes
      TYPE=Ethernet
    • 重启网络服务
      service network restart

    服务器端租约文件
    vim /var/lib/dhcpd/dhcpd.leases

    第七章 VSFTP服务

    第一节 FTP简介与原理

    FTP简介
    FTP(File Transfer Protocol)中文称为“文件传输协议”。用于Internet上的控制文件的双向传输。

    • “下载”文件就是从远程主机拷贝文件至自己的计算机上;
    • “上传”文件就是将文件从自己的计算机中拷贝至远程主机上。

    主动模式
    主动模式:服务的从20端口主动向客户端发起连接
    在这里插入图片描述
    被动模式
    被动模式:服务端在指定范围内某个端口被动等待客户端连接
    在这里插入图片描述
    主动模式不好实验,客户端不在管理员的控制范围之内,FTP连接有可能被客户端的防火墙中断。

    端口
    FTP连接端口

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

    第二节 FTP相关文件

    常见的FTP服务器程序

    • WIndows:IIS,Serv-U
    • Linux:wu-ftpd(淘汰),Proftpd,Vsftpd(Very Secure FTP Daemon)

    安装
    Vsftpd-2.2.2-11.el6.i686.rpm

    相关文件

    • 主配置文件
    • /etc/vsftpd/vsftpd.conf
    • 用户控制列表文件
      • /etc/vsftpd/ftpusers(黑名单,禁止登陆用户)
      • /etc/vsftpd/user_list(通过配置文件修改成白名单,只有这个上面的用户可以登陆)
        默认禁止root登陆,因为密码是明文显示,防止被抓包

    FTP相关用户

    • 匿名用户:
      anonymous或ftp
    • 本地用户
      使用Linux系统用户和密码
    • 虚拟用户
      管理员自定义的模拟用户

    注意事项

    • 关闭防火墙
    • 关闭SElinux

    第三节 配置文件详解

    /etc/vsftpd/vsftpd.conf

    • anonymous_enable=YES 允许匿名用户登陆
    • local_enable=YES 允许本地用户登陆
    • write_enable=YES 允许本地用户上传
    • local_umask=022 本地用户上传的默认权限
    • dirmessage_enable=YES 用户进入目录时,显示.message文件中信息
    • message_file=.message 指定信息文件(登陆界面警告信息)
    • xferlog_enable=YES 激活记录日志
    • connect_from_port_20=YES 主动模式数据传输接口
    • xferlog_std_format=YES 使用标准的ftp日志格式
    • #ftpd_banner=Welcome to blah FTP service.
      登陆欢迎信息
    • listen=NO 允许被监听
    • pam_service_name=vsftpd 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
    • userlist_enable=YES 用户限制登陆
    • tcp_wrappers=YES 是否使用tcp_wrappers作为主机访问控制方式

    常用全局配置

    • listen_address=192.168.1.1 设置监听的IP地址
    • listen_port 设置监听FTP服务的端口号
    • download_enable=YES 是否允许下载文件
    • max_per_ip=0 限制同一IP地址的并发连接数

    被动模式

    • pasv_enable=YES 开启被动模式
    • pasv_min_port=24500 被动模式最小端口
    • pasv_max_port=24600 被动模式最多端口
      大于10000,小于65535

    常用安全配置

    • #accept_timeout=60 被动模式,连接超时时间
    • #connect_timeout=60 主动模式,连接超时时间
    • #idle_session_timeout=600 600秒没有任何操作就断开端口连接
    • #data_connection_timeout=120 资料传输时,超过500秒没有完成,就断开传输

    第四节 客户端使用

    • 使用命令行连接
      ftp IP

      • -help 获取帮助
      • -get 下载
      • -mget 下载一批文件
      • -put 上传
      • -mput 上传一批文件
      • -exit 退出
    • 不支持目录下载,不支持断点续传

    • 使用Windows对话框
      在文件夹路径搜索页面输入ftp://192.168.44.3/输入服务器IP
      支持目录下载,不支持断点续传

    • 使用第三方工具
      flashFXP
      只要工具支持就可以目录下载,断点续传

    第五节 匿名用户访问

    anonymous_enable=YES 允许匿名用户访问
    #anon_upload_enable=YES 允许匿名用户上传
    #anon_mkdir_write_enable=YES 允许匿名用户建立目录
    #anon_umask 设置上传的默认文件权限(默认是600)

    匿名用户如果想上传,先修改配置文件,还得修改服务器中/var/ftp目录中pub目录的权限,把这个目录的所有者修改为ftp用户 chown ftp /var/ftp/pub,不能直接把权限修改为777,这样有很大的安全隐患
    注意事项:

    • 默认上传目录:/var/ftp/pub
    • 如果允许上传,需要服务权限和系统目录权限同时允许
    • vsfptd服务的伪用户是ftp

    第六节 本地用户访问

    第一讲 本地用户基本设置

    本地用户基本配置

    • local_enable=YES 允许本地用户登陆
    • write_enable=YES 允许本地用户上传
    • local_umask=022 本地用户上传的默认权限
    • local_root=/var/ftp 设置本地用户的FTP根目录(注意目录权限)
    • local_max_rate=0 限制最大传输速率(字节/秒)

    把用户限制在家目录

    chroot_local_user=YES
    #开启用户目录限制(只有此行,把所有用户都限制在用户目录中)
    在CentOS 7 中用yum下载的ftp,在这一步之后会报错
    需要在配置文件中加入这条语句

    allow_writeable_chroot=YES ##验证在vsftpd.conf中增加该项配置,vsftpd服务无法正常启动。

    给一些人畅通无阻的权限的时候,需要把下面三条配置文件全打开

    • chroot_local_user=YES
    • chroot_list_enable=YES
    • chroot_listl_filer=/etc/vsftpd/chroot_list
      写入/etc/vsftpd/chroot_list文件中的用户可以访问任何目录,其他用户限制在用户主目录

    第二讲 用户访问控制

    用户控制列表文件

    • /etc/vsftpd/ftpusers(黑名单,禁止登陆用户)
    • /etc/vsftpd/user_list(通过修改配置文件修改白名单,只有这个上面的用户可以登陆)

    访问控制
    这几条配置文件没有写

    • userlist_enable=YES 开启用户访问控制
    • userlist_deny=YES
    • userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户不能访问ftp服务器,没有写入的用户可以访问(默认如此)
      我们需要改为
      • userlist_enable=YES 开启用户访问控制
      • userlist_deny=NO
      • userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户可以访问ftp服务器,没有写入的用户不能访问(默认如此)

    不要把限制用户主目录和用户访问限制搞混
    chroot_local_user=YES 用于把用户禁锢在主目录
    uselist_enable=YES 用于用户访问控制

    第七节 虚拟用户访问

    第一讲 配置虚拟用户访问

    配置虚拟用户登陆步骤

    • 添加虚拟用户口令
    • 生成虚拟用户口令认证文件
    • 编辑vsftpd的PAM认证文件
    • 建立本地映射用户并设置宿主目录权限
    • 修改配置文件
    • 重启vsftpd服务,并测试
    • 调整虚拟用户权限

    添加虚拟用户口令
    vim /etc/vsftpd/vuser.txt
    cangls 用户名
    123 密码
    bols 用户名
    123 密码

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

    yum -y install db4-utils 如果没安装口令认证命令,需要安装
    或者使用wget http://rpmfind.net/linux/centos/6.10/os/i386/Packages/db4-utils-4.7.25-22.el6.i686.rpm
    安装
    db_load -T -t hash -f /etc/vsftpd/vuser.txt
    /etc/vsftpd/vuser.db 把文本文档转变为认证的数据库

    编辑vsftpd的PAM认证文件

    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
    注释掉其他的行,加入 这两行即可
    注释掉其他行,可以禁止本地用户登陆,因为本地用户登陆时的验证依然依赖这个文件

    建立本地映射用户并设置宿主目录权限

    • useradd -d /home/vftproot -s /sbin/nologin vuser
      此用户不需要登陆,只是映射用户
      用户名必须和下一步配置文件中一致
    • chmod 755 /home/vftproot

    修改配置文件
    vim /etc/vsftpd/vsftpd.conf,加入:

    • guest_enable=YES 允许虚拟用户登陆
    • guest_username=vuser FTP虚拟用户对应的系统用户
    • pam_service_name=vsftpd PAM认证文件(默认存在)

    重启vsftpd服务,并测试
    systemctl restart vsftpd.service
    此时虚拟用户可以登陆,查看,下载,不能上传
    默认上传文件的位置是宿主用户的家目录
    权限使用的是匿名用户权限进行管理

    调整虚拟用户权限

    • vim /etc/vsftpd/vsftpd.conf
    • anonymous_enable=NO 关闭匿名用户登陆,更加安全(不影响虚拟用户登陆)
    • anon_upload_enable=YES
    • anon_mkdir_write_enable=YES
    • anon_other_write_enable=YES 给虚拟用户设置权限,允许所有虚拟用户上传

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

    可以给每个虚拟用户单独建立目录,并建立自己的配置文件。这样方便单独配置权限,并可以单独指定上传目录

    修改配置文件
    vim /etc/vsftpd/vsftpd.conf
    user_config_dir=/etc/vsftpd/vusers_dir
    指定保存虚拟用户配置文件的目录

    手工建立目录
    mkdir /etc/vsftpd/vusers_dir

    为每个虚拟用户建立配置文件
    vim /etc/vsftpd/vusers_dir/cangls
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    允许此用户上传
    local_root=/tmp/cangls
    给cangls指定独立的上传目录

    建立上传目录
    mkdir /tmp/vcangls
    chown vuser /tmp/vcangls/

    如果不给bols指定单独的配置文件,则遵守主配置文件(/etc/vsftpd/vsftpd.conf)的权限

    配置完效果如下:

    • 禁止匿名用户登陆(配置文件修改)
    • 禁止本地系统用户登陆(pam文件修改)
    • 允许虚拟用户登陆(配置文件修改)
    • cangls的上传目录是/tmp/vcangls,并且允许查看,下载,上传
    • bols的上传目录是虚拟用户的默认目录/home/vftproot,只能查看,下载。但是不能上传

    第八节 总结

    我是阿里云忠实用户!!!,我会在里面穿插基于阿里云CentOS7 FTP服务器搭建!!!!

    匿名用户很简单,下载好启动服务就可以,不过非常不安全,
    需要把匿名用户登陆修改为anonymous_enable=YES 默认即可,anon_upload_enable=YES 把匿名上传权限的注释去掉,
    local_root=/var/ftp/,为匿名用户默认上传位置
    修改/var/ftp/pub权限。允许匿名用户写入文件
    ,chmod o+w /var/ftp/pub/ 或者 chown ftp /var/ftp/pub,修改所有者,不能直接把权限修改为777,这样有很大的安全隐患

    接着systemctl restart vsftpd.service重启服务即可
    这种模式非常不安全,最好不要使用,这里只是介绍一下!!!!

    所以只讲本地用户和虚拟用户
    允许本地用户登陆

    • 下载好之后,先把防火墙,selinux关闭,

    • 创建一个新用户 useradd test1
      设置密码 passed test1
      123456

    • 建立一个用户登陆FTP以后的家目录 mkdir/var/ftp/test
      修改文件所有者,以及权限 chown -R test:test /var/ftp/test

      进入 /etc/vsftpd/vsftpd.conf文件

    • 主动模式:

      • 需要把匿名用户登陆修改为anonymous_enable=NO ,local_enable=YES,write_enable=yes ,#listen_ipv6=YES,关闭监听IPv6 sockets,listen=YES 开启监听IPv4 sockets,
      • 现在需要控制FTP用户登陆后的范围
        chroot_local_user=YES 全部用户被限制在主目录
        chroot_list_enable=YES 启用可以登陆用户白名单
        chroot_list_file=/etc/vsftpd/chroot_list 指定白名单用户列表文件,列表中的用户不被锁定在主目录
        allow_writeable_chroot=YES 新版vsftp在vsftpd.conf中增加该项配置,如果没有vsftpd服务无法正常启动。
      • local_root=/var/ftp/test 设置登录用户的默认目录
    • 被动模式

      • 其他和主动模式一样,只需另外加入以下语句(阿里云环境需要开启被动模式,公网共享,连接不到服务器)
        pasv_enable=YES 开启被动模式
        pasv_address=<阿里云实例公网IP> 阿里云实例公网IP
        pasv_min_port= 设置被动模式下,建立数据传输可使用的端口范围的最小值
        pasv_max_port= 设置被动模式下,建立数据传输可使用的端口范围的最大值

        建议把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
    • 创建白名单
      vim /etc/vsftpd/chroot_list 这里没有例外用户时,也必须创建chroot_list文件,内容可为空。
      必须输入:wq 保存并退出

    • 重启服务
      systemctl restart vsftpd.service

    • 阿里云服务器用户需要设置安全组

      • 主动模式:
        在这里插入图片描述
      • 被动模式:
        在这里插入图片描述
        其中这里第二个安全组的端口范围是刚才文件中设置的
    • 限制用户登陆需要用到黑名单
      /etc/vsftpd/ftpusers
      里面加入登陆的用户名

    • 如果需要开启用户访问控制
      首先写入
      userlist_enable=YES 开启用户访问控制
      接着在下面写入以下语句
      userlist_deny=NO

      userlist_file=/etc/vsftpd/user_list 写入/etc/vsftpd/user_list文件中的用户可以访问ftp服务器,没有写入的用户不能访问(默认如此)
      总结:

      • userlist_enable 是控制userlist_deny文件能否生效的开工,如果是YES,就可以生效,如果为NO,无论userlist_deny怎么调都没有作用。
      • 当userlist_enable=YES时,userlist_deny=YES时:user_list是一个黑名单,即:所有出现在名单中的用户都会被拒绝登入
      • 而当为userlist_deny=NO时:user_list是一个白名单,即:只有出现在名单中的用户才会被准许登入(user_list之外的用户都被拒绝登入)
      • 另外需要特别提醒的是:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous
    • 虚拟用户:

      • 1.添加虚拟用户口令
        vim /etc/vsftpd/vuser.txt
        用户名一行,密码一行
        保存退出

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

        • yum -y install db4-utils 如果没安装口令认证命令,需要安装
          或者
          wget http://rpmfind.net/linux/centos/6.10/os/i386/Packages/db4-utils-4.7.25-22.el6.i686.rpm
          安装
          db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db 把文本文档转变为认证的数据库
        • 编辑vsftpd的PAM认证文件
          vim /etc/pam.d/vsftpd
          auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser /lib64/security/pam_userdb.so
          account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
          注释掉其他的行,加入这两行即可
      • 3.建立本地映射用户并设置宿主目录权限
        useradd -d /home/vftproot -s /sbin/nologin vuser
        此用户不需要登陆,只是映射用户
        用户名必须和下一步配置文件中一致
        chmod 755 /home/vftproot

      • 4.修改配置文件
        vim /etc/vsftpd/vsftpd.conf,加入:
        guest_enable=YES 开始虚拟用户
        guest_username=vuser FTP虚拟用户对应的系统用户
        pam_service_name=vsftpd PAM认证文件(默认存在)

      • 5.重启vsftpd服务,并测试

      • 6.调整虚拟用户权限
        vim /etc/vsftpd/vsftpd.conf
        anonymous_enable=NO 关闭匿名用户登陆,更加安全(不影响虚拟用户登陆)
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        anon_other_write_enable=YES 给虚拟用户设置权限,允许所有虚拟用户上传

      • 7.可以给每个虚拟用户单独建立目录,并建立自己的配置文件。这样方便单独配置权限,并可以单独指定上传目录
        修改配置文件
        vim /etc/vsftpd/vsftpd.conf
        user_config_dir=/etc/vsftpd/vusers_dir
        指定保存虚拟用户配置文件的目录
        手工建立目录
        mkdir /etc/vsftpd/vusers_dir
        为每个虚拟用户建立配置文件
        vim /etc/vsftpd/vusers_dir/cangls
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        anon_other_write_enable=YES
        允许此用户上传
        local_root=/tmp/vcangls
        给cangls指定独立的上传目录
        建立上传目录
        mkdir /tmp/vcangls
        chown vuser /tmp/vcangls/

    OK 这个服务器就搭建好啦!!!!大家辛苦了!

    第七章 Samba服务

    第一节 samba简介

    数据共享的方法

    Windows中最常用的是“网上邻居”。网上邻居使用的文件系统是CIFS(通用互联网文件系统)协议进行数据共享
    Linux中最常用的是NFS服务

    Samba的由来

    • 在 1991 年Andrew Tridgell为了实现Unix和Windows之间文件共享,开发了SMB( Server Message Block,服务消息块)文件系统
    • 由于SMB无法注册,就取名为Samba,热情的桑巴舞

    Samba与NetBIOS协议

    • IBM开发的NetBIOS协议是为了局域网内少数计算机进行通信的协议
    • Samba基于NetBIOS协议开发,所以可以和Windows通信,但是只能在局域网通信
    • 相当于在Linux上搭建Windows的网上邻居,减少病毒传播

    Samba主要应用

    • 文件共享
    • 打印服务器
    • Samba登陆时身份验证
    • 可以进行 Windows 的主机名解析

    常见文件服务器的比较

    服务名称使用范围服务器端客户端局限性
    FTP内网和公网Windows、LinuxWindows、Linux无法直接在服务器端修改数据无法直接在服务器端修改数据
    Samba内网Windows、LinuxWindows、Linux只能在内网使用
    NFS内网和公网LinuxLinux只能Linux之间使用

    第二节 Samba安装与端口

    安装

    • samba: 主服务包
    • samba-client: 客户端
    • samba-common: 通用工具
    • samba4-libs: 库
    • samba-winbind: Windows域映射
    • samba-winbind-clients: 域映射客户端

    samba的守护进程

    • smbd:提供对服务器中文件、打印资源的共享访问 139 445
    • nmbd:提供基于NetBIOS主机名称的解析 137 138

    启动samba服务

    • service smb start
    • service nmb start

    第三节 Samba相关文件

    常用文件

    • /etc/samba/smb.conf #配置文件
    • /etc/samba/lmhosts #对应NetBOIS名与主机的IP的文件,一般samba会自动搜索(只对本机生效) IP 与 主机名对应
    • etc/samba/smbpasswd #samba密码保存文件,默认不存在
    • /etc/samba/smbusers #用户别名,用于适用不同操作系统中用户名习惯。需要配置文件中“username map”选项支持

    常用命令

    testparm 检测配置文件是否正确

    第四节 Samba配置文件详解

    配置文件结构 smb .conf

    Global Settings

    • [global]: 全局设置

    Share Definitions

    • [homes]: 用户目录共享设置
    • [printers]: 打印机共享设置
    • [myshare]:自定义名称的共享目录设置

    Global Settings

    • workgroup:所在工作组名称(Windows)我的电脑里面有
    • server string:服务器描述信息
    • log file:日志文件位置
    • max log size:日志文件的最大容量
    • security:安全级别,可用值如下:
      • share: 不需要密码可以访问
      • user: 使用系统用户,samba密码登陆
      • server: 由其他服务器提供认证
      • domain: 由域控制器提供认证

    Share Definitions

    • comment: 描述信息
    • path: 共享的路径
    • guest ok:允许所有人访问,等同于public
    • read only: 所有人只读
    • writable: 所有人可写
    • write list: 拥有写权限的用户列表
    • browseable: 是否浏览可见
    • valid users: 指定可以访问的用户

    常见的变量

    • %v: samba的版本号
    • %S: 任意用户可以登陆
    • %m: client端的NetBIOS主机名
    • %L: 服务器端的NetBIOS主机名
    • %u: 当前登陆的用户名
    • %g: 当前登陆的用户组名

    第五节 基本使用

    第一讲 share权限访问

    配置文件修改

    [global]

    • workgroup = MYGROUP
    • server string = Samba Server Lamp
    • log file = /var/log/samba/log.%m
    • max log size = 50
    • security = share
    • passdb backend = tdbsam
      这里需要注意:samba4较之前的SAMBA 3有一个重大的变化是:security不再支持share,参数需要做调整
      原来:
      security=share
      现在:
      security=user
      map to guest =Bad User

    Share Definitions

    • [movie]
      • comment = study material
      • path = /study
      • browseable = yes
      • writable = yes
      • guest ok = yes

    建立共享目录

    • mkdir /study #建立共享目录
    • chown nobody /study/ #赋予用户访问权限
      映射为Linux中的nobody用户

    测试配置文件命令

    testparm

    重启Samba服务

    • service smb restart
    • service nmb restart

    第二讲 客户端的使用

    Windows客户端访问

    • 网上邻居访问
      \192.168.44.4
    • Linux客户端访问
      • smbclient -L 192.168.44.4 #查看主机的共享资源
      • smbclient //192.168.44.4/movie #访问共享目录
      • 如果有密码:
        smbclient //192.168.44.4/movie -U 用户名
        即可访问

    第三讲 user级别访问

    配置文件修改
    [global]

    • workgroup = MYGROUP
    • server string = Samba Server Lamp
    • log file = /var/log/samba/log.%m
    • max log size = 50
    • security = user
    • passdb backend = tdbsam

    Share Definitions

    • [homes]
      • comment = Home Directories
      • browseable = no
      • writable = yes
    • [pub]
      • path = /public
      • browseable = no
      • writable = yes
      • write list = sc
      • valid users = sc 控制访问目录权限

    建立共享目录与测试配置文件

    • mkdir /public
    • testparm
    • 重启Samba服务
      service smb restart
      service nmb restart
    • 添加Samba用户
      smbpasswd -a 系统用户名#注意,要给用户添加samba密码,该用户必须已经是系统用户

    区别:

    • FTP:使用系统用户,系统密码登陆
    • Samba:使用系统用户,samba登陆
      权限设定

      如果要想访问与上传:
      • Linux系统权限需要允许
      • Samba服务权限也需要允许

    第四讲 添加、删除、查看用户

    添加samba用户

    注意用户必须已经是系统用户,才能添加为samba用户

    • pdbedit -a -u 系统用户
    • 或 smbpasswd -a 系统用户名

    删除samba用户

    • pdbedit -x -u 系统用户名
    • 或smbpasswd -x 系统用户

    查看samba用户

    • pebedit -L

    第六节 Samba访问实验

    Samba共享目录权限

    • 系统权限要对共享目录生效
    • Samba服务器权限也会对共享目录生效
    • 在实际的工作中,可能的共享目录众多, 用户众多,权限交叉。建议使用系统权限控制共享目录权限,而不是使用samba权限

    例子:
    在这里插入图片描述
    Samba共享目录

    • [教学]
      • path = /share/jiaoxue
      • browseable = yes
      • writable = yes
    • [教务]
      • path = /share/jiaowu
      • browseable = yes
      • writable = yes

    Linux系统控制权限

    • chmod 700 /jiaoxue /jiaowu
      教学的权限
    • setfacl –m u:jx:rwx /share/jiaoxue
    • setfacl –m u:jw:rx /share/jiaoxue
    • setfacl –m u:xz:rx /share/jiaoxue
    • setfacl –m u:wl:rx /share/jiaoxue
      教务的权限
    • setfacl –m u:jw:rwx /share/jiaowu
    • setfacl –m u:jx:rwx /share/jiaowu
    • setfacl –m u:xz:rx /share/jiaowu
    • setfacl –m u:tg:rx /share/jiaowu

    第七节 Samba其他使用

    客户端挂载到本地使用

    mount -t cifs -o username=用户 原路径 目标路径
    例如:
    mount -t cifs -o username=user1 //192.168.44.3/pub /test

    开机自动挂载

    vi /etc/fstab //192.168.44.3/pub /test cifs defaults,username=user1,password=456 1 2

    Samba别名

    Linux的用户如root、nobody在Windows中可能对应的用户是administrator、guest用户Samba是跨平台的,所以用别名让他们可以通用

    别名文件

    vi /etc/samba/smbusers
    原名 = 别名 (多个别名 空格隔开) user1 = lamp1

    配置文件中开启别名

    vi /etc/samba/smb.conf
    加入 username map = /etc/samba/smbusers
    重启,就可以使用别名访问samba了

    总结
    Vsftp:

    • 内网 外网服务器: Windows Linux
    • 客户端: Windows Linux
    • 用户: 系统用户,系统密码
    • 缺点:不能直接在服务器上修改文件

    Samba

    • 内网使用服务器: Windows Linux
    • 客户端: Windows Linux
    • 用户: 系统用户,samba密码
    • 缺点: 只能在内网使用

    第八章 NFS服务

    第一节 NFS简介

    什么是NFS
    NFS(Network File System):
    NFS可以让客户端把服务器的共享目录,挂载到本机使用,就像使用本机分区一样,使用非常方便

    RPC服务
    RPC(远程调用)服务:
    NFS是被RPC服务管理的,所以必须安装RPC的主程序rpcbind

    NFS端口

    • NFS端口:2049
    • RPC端口:111
    • NFS daemon端口:随机

    和其他文件服务器对比(SFU Windows客户端搭建)

    服务名称使用范围服务器端客户端局限性
    FTP内网和公网Windows、LinuxWindows、Linux无法直接在服务器端修改数据
    Samba内网Windows、LinuxWindows、Linux只能在内网使用
    NFS内网和公网LinuxLinux (Windows)客户端需要挂载使用,对普通用户有一定的技术要求

    第二节 NFS权限说明

    权限说明

    • Linux系统目录权限会生效
    • NFS服务共享权限也会生效

    用户身份映射(系统权限)
    NFS没有用户登陆认证机制,所以客户端登陆到服务器之后,会把客户端的身份映射到服务器端。就会出现一下四种可能:

    • 第一种可能

      • client和server上刚好有相同的帐号和用户组(用户名和UID都要相同)
      • client上用户可以在server上按照用户权限使用文件
    • 第二种可能

      • 当clinet和server上拥有相同的UID,但是用户名不同,
        假设clinet上有用户aa(UID:500),server上有用户bb(UID:500)。在clinet在使用server共享目录时,身份识别为bb(因为Linux权限绑定在UID上)
        此种情况尽量避免出现,容易逻辑混乱
    • 第三种可能

      • server上没有clinet的UID
        clinet用户访问server时,server上没有此UID, 则把此用户自动转变为nfsnobody(UID: 65534)用户
    • 第四种可能

      • clinet上是root使用共享
        默认把root也转变为nfsnobody。服务器端可以修改配置文件,允许root访问nfs服务器

    第三节 NFS服务器端设置

    服务器端安装
    默认已经安装,如果需要手工安装
    – NFS主程序:nfs-utils
    – RPC主程序:rpcbind(旧版本portmap)

    相关文件
    配置文件: /etc/exports

    服务器端管理
    默认已经启动,如果需要手工启动:

    • service nfs start
    • service rpcbind start

    守护进程
    ps aux | grep -E "nfs|rpc”
    – rpc.rquotad:NFS配额
    – rpc.mountd:处理客户端挂载
    – nfsd:NFS守护进程
    – rpcbind:RPC守护进程

    RPC服务注册情况
    rpcinfo -p IP或主机名

    第四节 NFS服务器端配置文件

    配置文件
    /etc/exports
    共享目录 客户端(权限)
    多个共享,空格隔开

    可以识别的客户端

    • 指定IP:192.168.44.4
    • 指定网段: 192.168.44.0/24 192.168.44.0/255.255.255.0
    • 指定主机名:www.itxdl.cn
    • 所有主机:*

    常用权限

    • rw: 读写

    • ro: 只读

    • all_squash:不论登陆是谁,都压缩为匿名用户nfsnobody

    • root_squash:如果登陆的是root,压缩为nfsnobody

    • no_root_squash:允许root身份登陆,不推荐anonuid:把所有的登陆用户,不再压缩为nfsnobody用户,而是压缩为指定uid用户

    • sync:将数据同步写入内存缓冲区与磁盘中,效率低, 但可以保证数据的一致性;

    • async:将数据先保存在内存缓冲区中,必要时才写入磁盘

    • 举例1
      任何人可以访问,允许root访问
      vi /etc/exports
      /home/test *(rw,no_root_squash)

    • 举例2
      同时共享多个目录
      vi /etc/exports
      /home/test 192.168.44.3(rw,no_root_squash) *(ro)
      /home/soft 192.168.44.0/24(rw)

    • 举例3
      匿名用户访问
      vi /etc/exports
      /home/soft 192.168.44.0/24(rw,all_squash,anonuid=600)

    常用命令
    exportfs 选项
    选项:
    -a: 按照配置文件挂载/卸载所有目录
    -r: 重新挂载
    -u: 卸载
    -v: 显示详细信息

    exportfs举例

    • exportfs -auv #全部卸载所有目录
    • exportfs -arv #重新挂载所有目录,不用重启NFS服务
      这种是为了不用重启服务,就可以使修改的配置文件生效,而且不会把正在登陆的用户踢掉

    showmount命令

    • showmount查看共享目录
    • showmount -e IP或主机名
      选项:
      -e: 查看某个主机的共享目录

    第五节 NFS客户端使用

    客户端需要启动的服务
    需要启动rpcbind,默认已经启
    手工启动命令:
    service rpcbind start

    查看服务器端共享目录
    showmount -e 192.168.44.3 #指定服务器端IP即可

    把服务器共享目录挂载到本地

    • mkdir /home/client #建立挂载点
    • mount -t nfs 192.168.44.3:/home/soft /home/client #挂载到本地使用
    • mount #查看挂载

    卸载
    umount /home/client

    开机自动挂载
    vim /etc/fstab
    192.168.44.3:/home/test /home/client nfs defaults 0 0

    第六节 权限实验

    • 第一种可能
      client和server上刚好有相同的帐号和用户组(用户名和UID都要相同)
      client上用户可以在server上按照用户权限使用文件

      服务器:
      – [root@localhost ~]# useradd -u 600 test1
      – [root@localhost ~]# passwd test1

      客户端:
      – 一样的用户与UID
      – [root@localhost test]# su - test1
      – [test1@localhost ~]$ cd /home/test
      – [test1@localhost test]$ touch cde
      – [test1@localhost test]$ ll cde
      – -rw-rw-r-- 1 test1 test1 0 11月 14 2016 cde

    • 第二种可能
      当clinet和server上拥有相同的UID,但是用户名不同,
      假设clinet上有用户aa(UID:500),server上有用户bb(UID:500)。在clinet在使用server共享目录时,身份识别为bb(因为Linux权限绑定在UID上)
      此种情况尽量避免出现,容易逻辑混乱

      服务器端:
      – 用户名:test1 UID:600

      客户端:
      – [root@localhost ~]# useradd -u 600 user1
      – [root@localhost ~]# su - user1
      – [user1@localhost ~]$ cd /home/test/
      – [user1@localhost test]$ touch def
      – [user1@localhost test]$ ll def
      – -rw-rw-r-- 1 user1 user1 0 11月 14 2016 def
      服务器端:
      – [root@localhost ~]# ll /tmp/def
      – -rw-rw-r-- 1 test1 test1 0 11月 14 04:40 /tmp/def

    • 第三种可能
      server上没有clinet的UID
      clinet用户访问server时,server上没有此UID, 则把此用户自动转变为nfsnobody(UID: 65534)用户

      服务器端:
      – 没有UID为700的用户

      客户端:
      – [root@localhost ~]# useradd -u 700 test2
      – [test2@localhost test]$ touch qwe
      – [test2@localhost test]$ ll qwe
      – -rw-rw-r-- 1 nobody nobody 0 11月 14 2016 qwe

    • 第四种可能
      clinet上是root使用共享
      默认把root也转变为nfsnobody。服务器端可以修改配置文件,允许root访问nfs服务器

      服务器端:
      – 不允许root访问

      客户端:
      – [root@localhost ~]# cd /home/test
      – [root@localhost test]# touch asd
      – [root@localhost test]# ll asd
      – -rw-r–r-- 1 nfsnobody nfsnobody 0 11月 14 2016 asd
      服务器端:
      – 允许root访问
      – [root@localhost ~]# vi /etc/exports
      – /tmp 192.168.44.4(rw,no_root_squash)
      – [root@localhost ~]# exportfs -auv
      – [root@localhost ~]# exportfs -arv
      客户端:
      – [root@localhost ~]# cd /home/test
      – [root@localhost test]# touch zxc
      – [root@localhost test]# ll zxc
      – -rw-r–r-- 1 root root 0 11月 14 2016 zxc

    第七节 总结

    简单写一下关于NFS服务器搭建中的一些问题

    首先要知道在我们搭建这些服务器的时候,对我们最大的阻碍就是SELinux与防火墙,我们先从这两点开始说起
    SE Linux是美国国家安全局开发的Linux安全模块,它在本来已经很安全的Linux上,凌驾于root权限之上,设置了很多额外的条条框框;

    如果你了解这些条条框框,那还好;但如果不了解,那SELinux可能并没有帮什么忙,却给你带来了很多不确定因素,通俗来讲, 把它关了就好,在刚开始学Linux这个东西对我们没有一点作用,所以我们在搭建这些Samba,FTP,NFS服务的时候,首先就要做到把它先关闭,
    vim /etc/sysconfig/selinux 命令进入SELinux的配置文件,把SELINUX=disabled这一句设置好了,他就干干净净的从你的世界消失了,再也没有他的打扰,接下来第二个困扰便是防火墙,这个东西更加头疼,如果你是虚拟机搭建 ,没有太大的安全隐患,直接 iptables -F或者 systemctl stop firewalld.service 关了就好,但是如果在比如阿里云,华为云,腾讯云这上面的服务器来说,就有一定的安全隐患了,而且直接把它关了也很令人不爽,你如果到了企业工作,不能也直接把企业的防火墙关了吧。
    所以说,我们还是老老实实的学一下关于防火墙的一点东西吧,为什么我在刚才说需要 iptables -F或者systemctl stop firewalld.service这么两个命令呢?这是因为在Linux中有两种防火墙软件,CentOS7.0以上使用的是firewall,CentOS7.0以下使用的是iptables,有一个就好。
    对于防火墙,我们该如何理解呢?这样举个例子吧,有一个男孩喜欢一个女孩,那她怎么才能追到这个女孩呢?很简单,让这个女孩喜欢他就好了,这就是男追女,隔座山;女追男,隔层纱的意思,我们把服务器端(Server)比作男孩,客户端(Client)比作女孩,他们之间要想相互通信,就得有连接啊,但是很遗憾,防火墙就像女孩的父亲一样隔在你和女孩之间,如果你一味的去追女孩,因为有防火墙的存在,你是不可能建立联系的,这就好比FTP服务器的主动模式与被动模式,我们可以控制自己服务器的防火墙,但是却不能控制客户端的防火墙,而客户端也有可能对防火墙不太理解,你不能强迫人家说:你要想连接,去吧防火墙关了,或者开端口。这些对于非专业人士来说,是很难办到的。所以我们就有让我们自己的服务器开启相应的端口,让我们被动,我们去接客户端传来连接请求。这样女孩的父亲也管不住了,你们就可以完美的建立联系。所以,对于阿里云这些服务器,他的公网IP会映射到内网上,也就是你的私有IP,阿里云的环境需要开启被动模式,公网共享,否则连接不到服务器。
    对于端口,他就是好像在防火墙上的一扇窗,通过特定开放的端口就可以进行连接,所以你也可以使用公网IP加端口(47.95.1.123:21)这样来链接,我们在服务器端需要把服务的每一个端口都开启,对于阿里云用户来说,就是在阿里云控制台里面的设置安全组,把里面的所需的服务的端口都打开。这样才能建立连接,FTP主动模式需要开20,21两个端口,服务从20端口主动向客户端发起连接,而被动模式你也需要另外在加开端口,比如50000-50010,这是一个范围,服务端在指定范围内某个端口被动等待客户端连接。这便是被动模式。
    而对于NFS这种服务,他是先通过RPC服务的注册,才能正常工作,NFS是被RPC服务管理的,所以必须安装RPC的主程序rpcbind,才能允许NFS,在开启服务的时候也需要先开启rpcbind服务,才能开启nfs服务,而NFS主进程端口是2049,RPC端口是111 ,但是NFS还有许多子进程,这便是通过RPC注册的NFS daemon端口,他的端口号是随机的,因为端口随机,如果关了防火墙还好说,啥都可以过,但是一旦开启呢?你总不能在使用服务之前先查一下端口号再来配置防火墙规则吧,这是不现实的,所以我们就需要把随机端口给固定了。可以更改配置文件固定NFS服务相关端口。这样设置固定端口以后即便重启机器也很方便挂载,如果不设置固定端口,机器或服务重启后之前添加的iptables规则就失效了,当然你也可以systemctl stop iptables.service,systemctl stop firewalld.service来临时关闭防火墙,重启之后就会失效。那如何配置nfs的效果端口配置文件呢?

    vim /etc/sysconfig/nfs
    RQUOTAD_PORT=30001
    LOCKD_TCPPORT=30002
    LOCKD_UDPPORT=30002
    MOUNTD_PORT=30003
    STATD_PORT=30004
    添加这几条规则,就把端口限制了。
    systemctl restart rpcbind.service
    systemctl restart nfs.service
    重启rpc,nfs服务,配置生效
    rpcinfo -p查看服务端口
    你会发现,全都是你设定的端口号
    接下来就需要给防火墙设置规则,开窗户了:
    添加iptables规则

    iptables -A INPUT -s 192.168.214.0/24 -p tcp –dport 111 -j ACCEPT
    iptables -A INPUT -s 192.168.214.0/24 -p udp –dport 111 -j ACCEPT
    iptables -A INPUT -s 192.168.214.0/24 -p tcp –dport 2049 -j ACCEPT
    iptables -A INPUT -s 192.168.214.0/24 -p udp –dport 2049 -j ACCEPT
    iptables -A INPUT -s 192.168.214.0/24 -p tcp –dport 30001:30004 -j ACCEPT
    iptables -A INPUT -s 192.168.214.0/24 -p udp –dport 30001:30004 -j ACCEPT

    保存退出后,重启防火墙
    systemctl restart iptables.service
    添加firewall规则
    firewall-cmd --permanent --add-port=111/tcp
    firewall-cmd --permanent --add-port=111/udp
    firewall-cmd --permanent --add-port=2049/tcp
    firewall-cmd --permanent --add-port=2049/udp
    firewall-cmd --permanent --add-port=30001/tcp
    firewall-cmd --permanent --add-port=30001/udp
    firewall-cmd --permanent --add-port=30002/tcp
    firewall-cmd --permanent --add-port=30002/udp
    firewall-cmd --permanent --add-port=30003/tcp
    firewall-cmd --permanent --add-port=30003/udp
    firewall-cmd --permanent --add-port=30004/tcp
    firewall-cmd --permanent --add-port=30004/udp
    保存退出后,重启防火墙

    systemctl restart iptables.service
    重启服务器
    reboot
    重启之后执行"rpcinfo -p"命令
    就发现全部都OK了
    这两种选其一即可,看你电脑是开启的哪种防火墙

    这些都弄完之后,就可以配置NFS的配置文件了

    如果还有报错的话,学会使用/var/log/secure日志文件,查看报错原因,再进行谷歌。

    第九章 DNS服务

    第一节 DNS服务(一)

    结构
    在这里插入图片描述
    域名系统
    DNS系统的作用:

    • 正向解析:根据主机名称(域名)查找对应的IP地址
    • 反向解析:根据IP地址查找对应的主机域名

    域名:
    域名:baidu.com
    主机名:www
    www.baidu.com 完整的FQDN名称

    IANA 军方把DNS的分配权限转给ICANN 国际联盟组织

    DNS发展阶段:

    • 第一阶段,通过文件维护
      • /etc/hosts 主机映射文件
    • 第二阶段,通过服务器维护
      • DNS Server
      • 比文件维护效率更高,但是服务器压力过高
    • 第三阶段,通过分布式存储服务器
      • 搭建更多的服务器分担压力
        缺点:
        • 时间长,上级服务器只需要维护直属下级服务器
        • 管理相对麻烦,systemctl status iptables.service上级服务器只需要维护直属下级服务器
      • 优点:
        • 管理简单,允许重名,从而减低网络中域名的复杂程度

    域名结构
    在这里插入图片描述
    www.baidu.com.:80/index.html
    这应该是全名,浏览器帮我们简化掉了.:80/index.html 这一部分,其中的.为根域

    比如:www.sina.com.cn.
    根域;.
    一级域;.cn
    二级域;.com.cn
    三级域;sina.com.cn
    主机名;www

    域名解析的工作模式:

    • 递归查询:压力在服务器端
    • 迭代查询:按照域名等级挨个询问服务器,服务器压力大大减小,压力在客户端

    根DNS的特点:

    • 全球有13台根NDS服务器
      A INTERNIC.NET(美国,弗吉尼亚州) 198.41.0.4
      B 美国信息科学研究所(美国,加利弗尼亚州) 128.9.0.107
      C PSINet公司(美国,弗吉尼亚州) 192.33.4.12
      D 马里兰大学(美国马里兰州) 128.8.10.90
      E 美国航空航天管理局[NASA](美国加利弗尼亚州) 192.203.230.10
      F 因特网软件联盟(美国加利弗尼亚州) 192.5.5.241
      G 美国国防部网络信息中心(美国弗吉尼亚州) 192.112.36.4
      H 美国陆军研究所(美国马里兰州) 128.63.2.53
      I Autonomica公司(瑞典,斯德哥尔摩)192.36.148.17
      J VeriSign公司(美国,弗吉尼亚州) 192.58.128.30
      K RIPE NCC(英国,伦敦) 193.0.14.129
      L IANA (美国,弗吉尼亚州) 198.32.64.12
      M 日本WIDE项目 202.12.27.33

    • 不支持递归查询

    DNS安装
    安装:
    软件BIND
    安装软件名:bind
    服务开启名:named
    端口:53
    配置:
    1.修改主配置文件
    2.修改区域文件
    3.修改解析数据文件

    BIND(Berkeley Internet Name Daemon)
    伯克利Internet域名服务
    官方站点:https://www.isc.org/
    软件包:bind-9.3.3-7.el5.i386.rpm
    服务名:named
    端口号:53
    主配置文件:/etc/named.conf
    保存DNS解析记录的数据文件位于: /var/named/

    • 主域名服务器: 特定DNS区域的官方服务器,具有唯一性负责维护该区域内所有域名->IP地址的映射记录
    • 从域名服务器: 也称为 辅助域名服务器其维护的域名->IP地址记录 来源于主域名服务器

    DNS 服务器

    主DNS服务器

    配置主配置文件
    在这里插入图片描述
    配置区域文件
    在这里插入图片描述
    配置正向数据文件
    在这里插入图片描述
    配置反向数据文件
    在这里插入图片描述
    从DNS服务器
    * 减轻主服务器的压力
    * 数据从主服务器复制

    修改主DNS配置文件
    在这里插入图片描述
    配置从DNS配置文件
    在这里插入图片描述
    配置从DNS区域文件
    在这里插入图片描述

    第一节 DNS服务(二)

    在这里插入图片描述
    外网访问内网服务器的全过程:
    S:200.200.200.2
    D:200.200.200.200

    通过端口映射 NET策略
    S:200.200.200.2
    D:1.1.1.2
    回信:
    S:1.1.1.2
    D:200.200.200.2
    S:200.200.200.200
    D:200.200.200.2

    内网访问内网服务器的全过程:
    S:1.1.1.1
    D:200.200.200.200

    S:1.1.1.1
    D:1.1.1.2
    S:1.1.1.2
    D:1.1.1.1

    原地址与目标地址不匹配,基于TCP的协议无法建立连接。
    而解决这种回流现象的问题至关重要,这便是分离解析

    分离解析DNS 服务器
    作用: 将相同的域名解析为不同的IP地址

    实验环境:
    三台虚拟机:
    1、第一个网段测试机
    2、网关、分离解析DNS
    3、第二个网段测试机

    代码
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    第十章 Postfix服务器配置

    本章主要说这几点:

    • Postfix概念与原理
    • Postfix配置文件解析
    • 邮件服务器端配置与客户端使用
    • dovecot的使用
    • extmail和extman

    邮件服务器概述:

    邮件服务器概念: 电子邮件服务器是处理邮件交换的软硬件设施的总称,包括电子邮件程序、电子邮件箱等。它是为用户提供基于E-mail服务的电子邮件系统,人们通过访问服务器实现邮件的交换。
    常见的邮件服务器:

    • Sendmail、Qmail、Postfix
    • Exchange、 Notes/Domino
    • Coremail

    在初期没有邮件服务器诞生:

    在这里插入图片描述
    邮件服务器出现之后:
    在这里插入图片描述
    邮件系统角色:

    • MUA(邮件用户代理)
    • MTA(邮件传输代理)
    • MDA(邮件分发代理)
    • MRA (邮件检索代理)

    邮件应用协议:

    • SMTP,简单邮件传输协议,TCP 25端口,加密时使用TCP 465端口(发送邮件)
    • POP3,第3版邮局协议,TCP 110端口 , 加密时使用995端口(收取邮件)
    • IMAP4,第4版互联网消息访问协议,TCP 143端口 ,加密时使用993端口(收取邮件)

    邮件服务器的原理:
    在这里插入图片描述
    在这里插入图片描述
    实验搭建邮件服务器

    • 第一步搭建邮件域
      使用一台虚拟机搭建DNS服务器,解析邮件域名
    • 第二步下载邮件服务器
      默认安装,没有的话

      yum -y install postfix
    • 第三部配置配置文件
      Vim main.cf
      • :set nu 设置行号
        在第75行 myhostname = host.domain.tld
        需要修改,改为你DNS解析的域名

        第83行 #mydomain = domain.tld
        需要修改,设置邮件域
        比如
        12345@yangyang.com 其中yangyang.com 就为邮件域

        在第98行 #myorigin = $myhostname
        第99行 #myorigin = $mydomain
        用户在发送时自动补全邮件域名称

        113行去掉注释
        116行加上注释

        164行用来设置接收方信息,设置接收哪类邮件
        比如

        a@mail.yangyang.com
        a@localhost.yangyang.com
        a@localhost
        a@yangyang.com
        只接受这四类邮件,其他一律拒绝掉

        221行 unknown_local_recipient_reject_code = 550
        用来设置拒绝不存在的本地账号,或者使用者不明的账号,拒绝掉之后返回550错误代码
        386行 alias_maps = hash:/etc/aliases
        用来定义用户别名 用来用户转发,需要数据库支持,数据库文件存放在397行
        419行 home_mailbox = Maildir/ 邮箱位置需要启动

      • 一切准备好之后。在本机下载telnet,进行邮箱连接
        yum -y install telent
        首先关闭防火墙
        接着输入
        telnet mail.yangyang.com 25 进行连接
        mail.yangyang.com是域名,25为portfix对应开启的端口号

      • 链接好之后,先声明邮件服务器地址
        helo mail.yangyang.com
        然后声明发送方
        mail from:pp@mail.yangyang.com
        声明接收放
        rcpt to:gg@mail.yangyang.com
        声明邮件正文
        data
        写正文。。。。
        如果不想写了
        另起一行写. 接着回车就好
        quit 退出

      • 接着就可以在收件人的家目录里发现一个Maildir/目录 进去里面,有new目录,再进去就会发现有发的邮件啦

    dovecot是一个MRA 是一种收邮件的软件
    可以下载用telnet连接,也可以进行接收邮件
    下载:yum -y install dovecot dovecot-deve1
    telnet mail.yangyang.com 110
    进行连接
    连接好之后
    输入
    user 用名 回车
    pass 密码 回车
    就可以登陆啦
    然后输入list就可以看到里面的内容了
    查看内容 使用
    retr 邮件编号
    即可查看
    quit退出

    企业级邮件服务器搭建

    • 第一步:
      先把DNS里添加解析extmail.org的语句
    • 第二步:
      安装数据库
      yum -y install mysql mysql-server

      启动
      systemctl start mysql.service
    • 第三步:
      创建 /var/www/extsuite 文件夹
      下载extmail 与extman
      https://474b.com/file/4095383-385096033
      https://474b.com/file/4095383-385096042
      解压到/var/www/extsuite/ 文件夹
    • **第四步:
      进入extman-1.1文件夹的docs/文件夹里面
      把init.sql的管理员用户密码修改了,在最后一行root,修改为:

      INSERT INTO `manager` VALUES (‘root@extmail.org’,‘123456’,‘admin’,‘root’,‘Super User’,‘my question’,‘my answer’,‘0’,‘2007-02-14 15:10:04’,‘2010-11-08’,1);
      即可,保存退出后接着输入
      mysql < extmail.sql

      这一步会报错:
      ERROR 1064 (42000) at line 50: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘TYPE=MyISAM COMMENT=‘Ext/Webman - Admin Accounts’’ at line 15

      这是因为TYPE是老版本的参数了,mysql5.5版本之后移除了TYPE选项并推荐使用ENNIGE代替
      所以需要将里面所有的TYPE=MyISAM改为ENGINE=MyISAM
      你肯定会发现还有错误:

      ERROR 1364 (HY000) at line 31: Field ‘ssl_cipher’ doesn’t have a default value
      出现错误的原因是mysql默认配置严格模式,该模式禁止通过insert的方式直接修改mysql库中的user表进行添加新用户。
      进入/etc/my.cnf文件修改:sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
      为:
      sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
      就可以了

      如果还有报错:
      ERROR 1007 (HY000) at line 46: Can’t create database ‘extmail’; database exists
      进入:/var/lib/mysql
      把extmail目录删除

      回到/var/www/extsuite/extman/docs/重新输入mysql < extmail.sql
      就OK了

      接着输入:
      mysql < init.sql 把密码信息导入数据库

      遇到错误:
      ERROR 1062 (23000) at line 5: Duplicate entry ‘support@extmail.org’ for key ‘PRIMARY’
      使用: vim init.sql
      把INSERT改为INSERT IGNORE
    • 第五步:
      把模版拷贝到主目录下
      cp mysql_virtual_domains_maps.cf mysql_virtual_alias_maps.cf mysql_virtual_mailbox_maps.cf /etc/postfix/

      创建虚拟用户
      useradd -u 600 vmail
      接着
      vim /etc/postfix/main.cf
      在文件最后加入:
      virtual_mailbox_base = /home/vmail

      virtual_uid_maps = static:600
      virtule_gid_maps = static:600
      virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
      virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
      virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
      保存退出

      重启邮件服务
      systemctl restart postfix.service

    咱们来做个小测试吧
    输入:
    echo “hi” | mail -s test support@extmail.org
    你会在刚刚配置文件里加入的收件目录里:
    cd /home/vmail
    进去之后你会惊喜的发现有一个extmail.org的文件夹,哈哈哈哈哈哈哈!这就代表你成功啦,再进去会发现:postmaster,再进去
    就是Maildir了,再进去就可以看到我们熟悉的new目录啦,存放邮件的地方,再进去就可以查看邮件啦!

    • 第六步:
      接下来就需要我们配置dovecot模块了,把整个服务架起来
      yum -y install dovecot dovecot-mysql
      下载好之后,进入:
      cd /etc/dovecot/conf.d/
      第一个我们来修改
      10-mail.conf这个文件,用来设置邮件的配置
      找到mail_location = maildir:这一行,把它修改:
      mail_location = maildir:/home/vmail/%d/%n/Maildir
      这是用来设置我们接收邮件的地址
      %d的意思配置文件上一行有解释
      接着把first_valid_uid =设置为600
      保存退出
      修改第二个文件:
      10-auth.conf这个是设置认证方式的
      找到这一行!include auth-sql.conf.ext把注释去掉,通过数据库认证
      保存退出
      修改第三个文件:
      先返回上一级

      cd …
      执行
      cp /usr/share/doc/dovecot-2.2.36/example-config/dovecot-sql.conf.ext .
      把这个文件拷贝到当前目录

      打开这个文件修改:

      • 1.#driver = 这句话的注释去了后面加mysql
        driver = mysql
      • 2.找到Examples:这一项,下面的第二行,把值修改为一下内容:
        connect = host=localhost dbname=extmail user=extmail password=extmail
      • 3.#default_pass_scheme = MD5,去掉注释
      • 4.找到这一项:#password_query =
        去掉三行注释,改为这样
        password_query =
        SELECT username, domain, password
        FROM mailbox WHERE username = ‘%u’ AND domain = '%d’
      • 5.找到这一行:
        # user_query = SELECT home, 501 AS uid, 501 AS gid FROM users WHERE userid = ‘%u’
        改为:
        user_query = SELECT maildir, 600 AS uid, 600 AS gid FROM mailbox WHERE username = ‘%u’
        这是用户的查询方法
      • 6:保存退出
    • 第七步:
      启动dovecot
      systemctl start dovecot.service
      测试
      telnet mail.extmail.org 110
      输入用户名:
      user postmaster@extmail.org
      输入密码:
      pass extmail
      查看:
      list
      retr 1
      便可以看到刚刚收到的邮件了
      quit退出

    第十一章 RSYNC 文件同步

    备份服务器数据
    在这里插入图片描述
    Samba只不过是映射点,并不能保存,数据还在服务器
    所以我们需要一个文件同步的工具

    在这里插入图片描述
    关于RSYNC

    • 一款快速增量备份工具
    • Remote Sync,远程同步
    • 支持本地复制,或者与其他SSH、rsync主机同步
    • 官方网站:http://rsync.samba.org/

    Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。
    Rsync 是用于取代rcp的一个工具,Rsync使用所谓的 “Rsync 算法” 来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分(校验和),而不是每次都整份传送,因此速度相当快。您可以参考 How Rsync Works A Practical Overview 进一步了解rsync 的运作机制。
    Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS

    特点:

    • 能更新整个目录和树和文件系统;
    • 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
    • 对于安装来说,无任何特殊权限要求;
    • 能用rsh、ssh 或直接端口做为传输入端口;
    • 支持匿名rsync 同步文件,是理想的镜像工具

    同步源与发起端

    rsync同步源: 指备份操作的远程服务器,也称为备份源主要包括两种:rsync源、SSH源
    在这里插入图片描述
    搭建同步源

    • 1.基于ssh的同步源
    • 2.基于RSYNC的同步源

    1.基于ssh的同步源
    在/var/www/html文件夹下面创建vim网页文件
    vim /var/www/html/index.html
    写入网站内容
    保存退出
    在另一台虚拟机上运行命令
    curl 服务器IP
    就可以显示网页所写的内容啦
    如果需要备份网站内容,使用ssh同步源备份到另一台服务器
    如果两台服务器需要使用rsync同步,两台服务器全需要下载yum -y install rsync
    同步命令:rsync -avz 同步源的一个账户@同步源IP:同步源目录 发起端目录

    rsync命令的用法:
    基本格式:rsync [选项] 原始位置 目标位置
    常用选项:
    -a:归档模式,递归并保留对象属性,等同于 -rlptgoD
    -v:显示同步过程的详细(verbose)信息
    -z:在传输文件时进行压缩(compress)
    -H:保留硬连接文件
    -A:保留ACL属性信息
    –delete:删除目标位置有而原始位置没有的文件
    -r:递归模式,包含目录及子目录中所有文件
    -l:对于符号链接文件仍然复制为符号链接文件
    -p:保留文件的权限标记-t:保留文件的时间标记
    -g:保留文件的属组标记(仅超级用户使用)
    -o:保留文件的属主标记(仅超级用户使用)
    -D:保留设备文件及其他特殊文件

    • rsync -avz 同步源的一个账户@同步源IP:同步源目录 发起端目录 下行同步
    • rsync -avz 发起端目录 同步源的一个账户@同步源IP:同步源目录 上行同步(发送到同步源)
      这一步需要在同步源设置接收文件夹的权限 最好使用ACL

    2.基于RSYNC的同步源

    数据下行同步

    • 生成配置文件
      vim /etc/rsyncd.conf
      写入工作方式

      全局配置部分:
      address = IP
      port = 873
      pid file = /var/run/rsyncd.pid
      log file = /var/log/rsyncd.log

      共享配置部分
      [share]
      comment = soft
      path = /server/rsync
      read only = yes
      dont compress = *.gz *.bz2 *.zip
      auth users = wang
      secrets file = /etc/rsyncd_users.db
      接着创建文件
      vim /etc/rsyncd_users.db
      wang:123456

      rsync不支持特别复杂的密码设定
      因为他是通过超级守护进程xinetd
      来管理的,需要输入
      rsync --daemon
      来进行启动

      创建目录:
      mkdir -p /server/rsync
      创建测试文件
      touch rsync.txt
      客户端创建目录:
      mkdir -p /client/rsync
      输入命令:
      rsync -avz wang@192.168.1.14::share /client/rsync/
      这时会报错
      @ERROR: auth failed on module share
      rsync error: error starting client-server protocol (code 5) at main.c(1649) [Receiver=3.1.2]
      因为rsync的密码文件的权限必须为600
      服务器执行
      chmod 600 /etc/rsyncd_users.db

    数据上行同步

    • 客户端创建测试文件
      touch client.txt
      修改配置文件
      vim /etc/rsyncd.conf
      read only = no
      保存退出
      杀死进程
      pkill rsync
      重启
      rsync --daemon
      修改上传目录的写入权限

      setfacl -m u:nobody:rwx /server/rsync
      这个时候客户端执行:
      rsync -avz /client/rsync/
      wang@192.168.1.14::share
      会发现有以下信息:
      sending incremental file list
      client.txt
      rsync: chgrp “/.client.txt.ce66QW” (in share) failed: Operation not permitted (1)
      *
      sent 111 bytes received 121 bytes 92.80 bytes/sec
      total size is 0 speedup is 0.00
      rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]

      去服务器端查看发现文件已经传输过去了
      这是因为新版本需要在配置文件share模块中加入
      fake super = yes #无需rsync以root身份运行,允许接受数据
      修改配置文件

      杀死进程
      rsync --daemon
      重启就可以啦

      需要主要rsync -avz /client/rsync/* wang@192.168.1.14/share
      这种书写格式也可以上传

    命令格式
    在这里插入图片描述
    免密码验证

    • 基于ssh的免密码同步
      生成密钥对

      ssh-keygen -t rsa
      公钥上传到服务器
      ssh-copy-id server@服务器IP
      此时同步不需要密码了

    • 基于rsync的免密码同步
      系统为rsync准备了变量
      RSYNC_PASSWORD
      我们只需要为这个变量赋值
      echo $RSYNC_PASSWORD
      查看这个变量,此时为空
      给他赋值,为我们刚开始设置的rsync的密码
      export RSYNC_PASSWORD=123456
      这回下行同步就不需要密码了

    同步的优缺点

    • 定期同步的不足:
      执行备份的时间固定,延迟明显、实时性差
      当同步源长期不变化时,密集的定期任务是不必要的
    • 实时同步的优点:
      一旦同步源出现变化,立即启动备份
      只要同步源无变化,则不执行备份

    inotify实现实时同步
    安装gcc
    yum -y install gcc

    安装inotifu-tools
    wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
    解压 tar -zxvf inotify-tools-3.14.tar.gz
    进入解压好的包
    ./configure && make && make install
    *
    如何你希望使用效果高,可以调整inotify内核参数
    调整inotify内核参数
    max_queue_events:监控队列大小 max_user_instances:最多监控实例数
    max_user_watches:每个实例最多监控文件数
    你需要在官方网站查看不同版本的系统不同的内核参数
    到/etc/sysctl.conf里面添加参数

    安装inotify-tools辅助工具
    inotifywait:用于持续监控,实时输出结果inotifywatch:用于短期监控,任务完成后再出结果
    [root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html
    Setting up watches. Beware: since -r was given, this may take a while! Watches established.
    /var/www/html/ CREATE index.php /var/www/html/ MODIFY index.php /var/www/html/ MOVED_FROM index.php /var/www/html/ MOVED_TO test.php

    ………

    实时监控
    inotifywait -mrq -e modify,create,move,delete /var/www/html
    选项:
    -m:表示持续监控
    -r:表示递归监控
    -q:表示输出数据简化
    -e:指定你要监控的哪些数据,比如create,move,delete,多个命令用逗号隔开

    这条命令输入后,界面会被锁死,需要换一个终端连接,咋检测的目录下创建删除文件,这个锁死的终端就会显示信息
    ctrl+c退出界面

    实时同步实现

    • inotify+rsync
      基于ssh的实时同步
      利用inotify有输出这一特性可以进行与脚本的配合,实时监控数据的增删,进行同步

      **先进行免密认证
      然后在服务器端写脚本
      cd
      vim 1.sh
    #!/bin/bash**
    *a=“/usr/local/bin/inotifywait -mrq -e create /var/www/html/”
    b=“/usr/bin/rsync -avz /var/www/html/* 192.168.1.13:/client/ssh”
    $a | while read directory event file
    do 
    	$b
    done
    

    保存退出
    执行
    bash 1.sh &

    • inotify+unsion
      服务器建立目录
      mkdir /server1
      客户端建立目录
      mkdir /server2

      服务器安装gcc
      yum -y install gcc*
      服务器与客户端直接相互生成密钥对
      服务器:
      ssh-keygen -t rsa
      ssh-copy-id 客户端IP
      客户端:
      ssh-keygen -t rsa
      ssh-copy-id 服务器端IP
      服务器:
      安装ocaml-3.10.1tar.gz
      wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.1.tar.gz
      解压
      tar -zxvf ocaml-3.10.1.tar.gz
      cd ocaml-3.10.1
      ./configure
      make world opt
      make install
      安装unison
      wget https://www.seas.upenn.edu/~bcpierce/unison/download/releases/unison-2.13.16/unison-2.13.16.tar.gz
      解压
      tar -zxvf unison-2.13.16.tar.gz
      cd unison-2.13.16
      make UISTYLE=text THREADS=true STATIC=true
      cp unison /usr/local/bin/

      客户端:
      安装gcc
      yum -y install gcc*
      安装inotifu-tools
      wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
      解压 tar -zxvf inotify-tools-3.14.tar.gz
      进入解压好的包
      ./configure && make && make install
      安装ocaml-3.10.1tar.gz
      wget http://caml.inria.fr/pub/distrib/ocaml-3.10/ocaml-3.10.1.tar.gz
      解压
      tar -zxvf ocaml-3.10.1.tar.gz
      cd ocaml-3.10.1
      ./configure
      make world opt
      make install
      安装unison
      wget https://www.seas.upenn.edu/~bcpierce/unison/download/releases/unison-2.13.16/unison-2.13.16.tar.gz
      解压
      tar -zxvf unison-2.13.16.tar.gz
      cd unison-2.13.16
      make UISTYLE=text THREADS=true STATIC=true
      cp unison /usr/local/bin/

      全部安装完成后
      服务器:
      写脚本:

      vim 2.sh
    #!/bin/bash
    a=“/usr/local/bin/inotifywait -mrq -e create,delete /server1”
    b=“/usr/local/bin/unison -batch /server1 ssh://客户端IP//server2”
    $a | while read directory event file
    do
    	$b
    done
    

    scp 2.sh 客户端IP:/root
    客户端:
    vim 2.sh

    #!/bin/bash
    a="/usr/local/bin/inotifywait -mrq -e create,delete /server2"
    b="/usr/local/bin/unison -batch /server1 ssh://服务器IP//server1"
    
    $a | while read directory event file
    do
            $b
    done
    

    服务器:
    bash 2.sh &

    这回就全部完成啦
    可以自己在服务器/server1中的文件夹里面创建文件,观察客户端/server2中的变化

    终于把Linux网络篇的以下基础知识也更新完啦,这里面每个实验,服务器搭建我都花费了大量时间,每一个都成功搭建了,如果看到这个博客的你们有那个服务搭建不出来,或者有一些奇形怪状的错误返回值代码,可以联系我,我帮你们看看,也希望大家可以可以点点赞,关注一下,谢谢大家。
    我的QQ:1771566679
    谢谢大家!!!

    展开全文
  • Linux网络编程

    千次阅读 2011-11-08 15:54:28
    Linux网络编程入门  http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html Linux网络编程一步一步学+基础 http://blog.chinaunix.net/u1/34426/showart_419300.html ...
    Linux网络编程入门  
     
    

    Linux网络编程一步一步学+基础

    服务器端程序编写:
    (1) 调用ServerSocket(int port)创建一个服务器套接字,并绑定到指定端口上。
    (2) 调用accept(),监听连接请求,则接受连接,返回通信套接字。
    (3) 调用Socket类的getOutStream() 和 getInputStream 获取输出流和输入流,开始网络数据的发送和接受。(用到的函数是send(),recv())
    (4)关闭通信套接字:Socket.close().
    说明:编写服务器程序时,先调用socket()创建一个套接字,调用bind()绑定IP地址和端口,并进行监听listen(),然后启动一个死循环,循环中调用accept()接受连接。对于每个接受的连接,可以启动多线程方式进行处理,在线程中调用send(), recv()发送和接受数据。


    客户端程序编写:
    (1) 调用Socket() 创建一个流套接字,并连接服务器。(函数是connect())
    (2)调用Socket类的getOutputStream()和fetInputStream获取输出流和输入流,开始网络数据的发送和接受,(用到的函数是send(),recv())
    (3)关闭通信套接字Socket.close()。


    OSI标准七层中最重要的是传输层,它把实际使用的通信子网与高层应用分开,提供发送端 和接收端之间的可靠低成本的数据传输。TCP和UDP协议属于这一层。
    网络层:主要对主机和网络之间的交互进行定义,它又被成为通信子网层,定义了在网络中传输的基本数据单元以及目的寻址和选路的概念,IP协议输入这一层。
    OSI标准:应用层(Application)—表示层(Presentation)—会话层(Session)—传输层(Transport)—网络层(Network)—数据链路层(Data Link)—物理层(Physical)

    TCP/IP协议是一组在网络中提供可靠数据传输和无连接数据服务的协议。其中提供可靠数据传输的协议称为传输控制协议TCP,而提供无连接服务的协议叫做网际协议IP。TCP/IP协议是一个包含很多其他协议的一个网络协议集合。
    TCP/IP协议的网络提供的主要服务有:电子邮件,文件传输,远程登录,网络文件系统,电视会议系统以及万维网等
    TCP/IP协议的体系结构是:应用层—传输层(TCP、UDP、ICMP)—网络层(IP协议)—网络接口层

    TCP建立连接时使用“三次握手协议TWH”方式:
    (1) 客户端先用connect()向服务器发出一个要求连接的信号SYN1。
    (2) 服务器进程接收到这个信号后,发回应答信号ack1,同时也这也是一个要求回答的信号SYN2。
    (3) 客户端收到信号ack1和SYN2后,再次应答ack2。
    (4) 服务器受到应答信号ack2,一次连接才算建立完成。

    一、TCP握手协议 
    
    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
     完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念: 
    未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目
    所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。 
    Backlog参数:表示未连接队列的最大容纳数目。
     SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,
    系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。 

    二、TCP断开连接
    
    采用四次握手断开一个连接
    

    断开连接其实从我的角度看不区分客户端和服务器端,任何一方都可以调用close(or closesocket)之类的函数开始主动终止一个连接。 第一次握手:当调用close函数断开一个连接时,主动断开的一方发送FIN(finish报文)给对方。有了之前的经验,我想你应该明白我说的FIN报文时什么东西。

    也就是一个设置了FIN标志位的报文段。FIN报文也可能附加用户数据,如果这一方还有数据要发送时,将数据附加到这个FIN报文时完全正常的。

    之后你会看到,这种附加报文还会有很多,例如ACK报文。 第二次握手:当被动关闭的一方收到FIN报文时,它会发送ACK确认报文(对于ACK这个东西你应该很熟悉了)。这里有个东西要注意,因为TCP是双工的,也就是说,你可以想象一对TCP连接上

    有两条数据通路。当发送FIN报文时,意思是说,发送FIN的一端就不能发送数据,也就是关闭了其中一条数据通路。被动关闭的一端发送了ACK后,应用层通常就会检测到这个连接即将断开,

    然后被动断开的应用层调用close关闭连接。 第三次握手:被关闭端一旦当调用close(or closesocket),这一端就会发送FIN报文。也就是说,现在被动关闭的一端也发送FIN给主动关闭端。

    有时候,被动关闭端会将ACK和FIN两个报文合在一起发送。 第四次握手:主动关闭端收到FIN后也发送ACK,然后整个连接关闭(事实上还没完全关闭,只是关闭需要交换的报文发送完毕),四次握手完成。

    如你所见,因为被动关闭端可能会将ACK和FIN合到一起发送,所以这也算不上

    二、TCP断开连接
    
    采用四次握手断开一个连接
    

    断开连接其实从我的角度看不区分客户端和服务器端,任何一方都可以调用close(or closesocket)之类的函数开始主动终止一个连接。 第一次握手:当调用close函数断开一个连接时,主动断开的一方发送FIN(finish报文)给对方。有了之前的经验,我想你应该明白我说的FIN报文时什么东西。

    也就是一个设置了FIN标志位的报文段。FIN报文也可能附加用户数据,如果这一方还有数据要发送时,将数据附加到这个FIN报文时完全正常的。

    之后你会看到,这种附加报文还会有很多,例如ACK报文。 第二次握手:当被动关闭的一方收到FIN报文时,它会发送ACK确认报文(对于ACK这个东西你应该很熟悉了)。这里有个东西要注意,因为TCP是双工的,也就是说,你可以想象一对TCP连接上

    有两条数据通路。当发送FIN报文时,意思是说,发送FIN的一端就不能发送数据,也就是关闭了其中一条数据通路。被动关闭的一端发送了ACK后,应用层通常就会检测到这个连接即将断开,

    然后被动断开的应用层调用close关闭连接。 第三次握手:被关闭端一旦当调用close(or closesocket),这一端就会发送FIN报文。也就是说,现在被动关闭的一端也发送FIN给主动关闭端。

    有时候,被动关闭端会将ACK和FIN两个报文合在一起发送。 第四次握手:主动关闭端收到FIN后也发送ACK,然后整个连接关闭(事实上还没完全关闭,只是关闭需要交换的报文发送完毕),四次握手完成。

    如你所见,因为被动关闭端可能会将ACK和FIN合到一起发送,所以这也算不上

    二、TCP断开连接
    
    采用四次握手断开一个连接
    

    断开连接其实从我的角度看不区分客户端和服务器端,任何一方都可以调用close(or closesocket)之类的函数开始主动终止一个连接。 第一次握手:当调用close函数断开一个连接时,主动断开的一方发送FIN(finish报文)给对方。有了之前的经验,我想你应该明白我说的FIN报文时什么东西。

    也就是一个设置了FIN标志位的报文段。FIN报文也可能附加用户数据,如果这一方还有数据要发送时,将数据附加到这个FIN报文时完全正常的。

    之后你会看到,这种附加报文还会有很多,例如ACK报文。 第二次握手:当被动关闭的一方收到FIN报文时,它会发送ACK确认报文(对于ACK这个东西你应该很熟悉了)。这里有个东西要注意,因为TCP是双工的,也就是说,你可以想象一对TCP连接上

    有两条数据通路。当发送FIN报文时,意思是说,发送FIN的一端就不能发送数据,也就是关闭了其中一条数据通路。被动关闭的一端发送了ACK后,应用层通常就会检测到这个连接即将断开,

    然后被动断开的应用层调用close关闭连接。 第三次握手:被关闭端一旦当调用close(or closesocket),这一端就会发送FIN报文。也就是说,现在被动关闭的一端也发送FIN给主动关闭端。

    有时候,被动关闭端会将ACK和FIN两个报文合在一起发送。 第四次握手:主动关闭端收到FIN后也发送ACK,然后整个连接关闭(事实上还没完全关闭,只是关闭需要交换的报文发送完毕),四次握手完成。

    如你所见,因为被动关闭端可能会将ACK和FIN合到一起发送,所以这也算不上






           
    11-5-31
       socket函数read write send和recv

    11-5-31


    11-5-31


    11-5-31
    异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET使用说明  linux中select()函数分析


    11-5-31
    使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
    http://blog.csdn.net/dlutcat/archive/2007/10/07/1813933.aspx 



    11-5-31


    11-5-31
    异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET使用说明  linux中select()函数分析


    11-5-31
    使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
    http://blog.csdn.net/dlutcat/archive/2007/10/07/1813933.aspx 



    11-5-31
    11-5-31
    11-5-31
    异步套接字基础:select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET使用说明  linux中select()函数分析
    11-5-31
    使用socket的Linux上的C语言helloworld多线程服务器和客户端测试程序
    http://blog.csdn.net/dlutcat/archive/2007/10/07/1813933.aspx 
    展开全文
  • linux 网络配置

    千次阅读 2006-10-09 16:56:00
    服务器类 从linux诞生的那一天起,就注定了它的网络功能空前地强大.所以在linux系统中如何配置网络,使其高效,安全的工作就显得十分重要.下面我们就从网络设备的安装,网络服务的设置和网络安全性三个方面来介绍一下...

    服务器类

     从linux诞生的那一天起,就注定了它的网络功能空前地强大.所以在linux系统中如何配置网络,使其高效,安全的工作就显得十分重要.下面我们就从网络设备的安装,网络服务的设置和网络安全性三个方面来介绍一下linux系统中网络的设置.

    一.安装和配置网络设备

    在安装linux时,如果你有网卡,安装程序将会提示你给出tcp/ip网络的配置参数,如本机的ip地址,缺省网关的ip地址,DNS的ip地址等等.根据这些配置参数,安装程序将会自动把网卡(linux系统首先要支持)驱动程序编译到内核中去.但是我们一定要了解加载网卡驱动程序的过程,那么在以后改变网卡,使用多个网卡的时候我们就会很容易的操作.网卡的驱动程序是作为模块加载到内核中去的,所有linux支持的网卡驱动程序都是存放在目录/lib/modules/(linux版本号)/net/ ,例如inter的82559系列10/100M自适应的引导网卡的驱动程序是eepro100.o,3COM的3C509 ISA网卡的驱动程序是3C509.o,DLINK的pci 10网卡的驱动程序是via-rhine.o,NE2000兼容性网卡的驱动程序是ne2k-pci.o和ne.o.在了解了这些基本的驱动程序之后,我们就可以通过修改模块配置文件来更换网卡或者增加网卡.

    1. 修改/etc/conf.modules 文件

    这个配置文件是加载模块的重要参数文件,大家先看一个范例文件

    #/etc/conf.modules

    alias eth0 eepro100

    alias eth1 eepro100

    这个文件是一个装有两块inter 82559系列网卡的linux系统中的conf.modules中的内容.alias命令表明以太口(如eth0)所具有的驱动程序的名称,alias eth0 eepro100说明在零号以太网口所要加载的驱动程序是eepro100.o.那么在使用命令 modprobe eth0的时候,系统将自动将eepro100.o加载到内核中.对于pci的网卡来说,由于系统会自动找到网卡的io地址和中断号,所以没有必要在conf.modules中使用选项options来指定网卡的io地址和中断号.但是对应于ISA网卡,则必须要在conf.modules中指定硬件的io地址或中断号, 如下所示,表明了一块NE的ISA网卡的conf.modules文件.

    alias eth0 ne

    options ne io=0x300 irq=5

    在修改完conf.modules文件之后,就可以使用命令来加载模块,例如要插入inter的第二块网卡:

    #insmod /lib/modules/2.2.14/net/eepro100.o

    这样就可以在以太口加载模块eepro100.o.同时,还可以使用命令来查看当前加载的模块信息:

    [root@ice /etc]# lsmod

    Module Size Used by

    eepro100 15652 2 (autoclean)

    返回结果的含义是当前加载的模块是eepro100,大小是15652个字节,使用者两个,方式是自动清除.

    2. 修改/etc/lilo.conf文件

    在一些比较新的linux版本中,由于操作系统自动检测所有相关的硬件,所以此时不必修改/etc/lilo.conf文件.但是对于ISA网卡和老的版本,为了在系统初始化中对新加的网卡进行初始化,可以修改lilo.conf文件.在/etc/lilo.conf文件中增加如下命令:

    append="ether=5,0x240,eth0 ether=7,0x300,eth1"

    这条命令的含义是eth0的io地址是0x240,中断是5,eth1的io地址是0x300,中断是7.

    实际上,这条语句来自在系统引导影像文件时传递的参数,

    LILO: linux ether=5,0x240,eth0 ether=7,0x300,eth1

    这种方法也同样能够使linux系统配置好两个网卡.类似的,在使用三个以上网卡的时候,也可以依照同样的方法.

    在配置好网卡之后,就应该配置TCP/IP的参数,在一般情况下,在安装linux系统的同时就会提示你配置网络参数.但是之后如果我们想要修改网络设置,可以使用如下的命令:

    #ifconfig eth0 A.B.C.D netmask E.F.G.H

    A.B.C.D 是eth0的IP地址,E.F.G.H是网络掩码.

    其实,在linux系统中我们可以给一块网卡设置多个ip地址,例如下面的命令:

    #ifconfig eth0:1 202.112.11.218 netmask 255.255.255.192

    然后,使用命令#ifconfig -a 就可以看到所有的网络接口的界面:

    eth0 Link encap:Ethernet HWaddr 00:90:27:58:AF:1A

    inet addr:202.112.13.204 Bcast:202.112.13.255 Mask:255.255.255.192

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:435510 errors:0 dropped:0 overruns:0 frame:2

    TX packets:538988 errors:0 dropped:0 overruns:0 carrier:0

    collisions:318683 txqueuelen:100

    Interrupt:10 Base address:0xc000

    eth0:1  Link encap:Ethernet HWaddr 00:90:27:58:AF:1A

    inet addr:202.112.11.218 Bcast:202.112.11.255 Mask:255.255.255.192

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    Interrupt:10 Base address:0xc000

    lo  Link encap:Local Loopback

    inet addr:127.0.0.1 Mask:255.0.0.0

    UP LOOPBACK RUNNING MTU:3924 Metric:1

    RX packets:2055 errors:0 dropped:0 overruns:0 frame:0

    TX packets:2055 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:0

    我们看到网络接口有三个,eth0 , eth0:1,lo,eth0是真实的以太网络接口,eth0:1和eth0是同一块网卡,只不过绑定了另外的一个地址,lo是会送地址。eth0和eth0:1可以使用不同网段的ip地址,这在同一个物理网段却使用不同的网络地址的时候十分有用。

    另外,网卡有一种模式是混杂模式(prosimc),在这个模式下,网卡将会接收网络中所有的数据包,一些linux下的网络监听工具例如tcpdump,snort等等都是把网卡设置为混杂模式.

    ifconfig命令可以在本次运行的时间内改变网卡的ip地址,但是如果系统重新启动,linux仍然按照原来的默认的设置启动网络接口。这时候,可以使用netconfig或netconf命令来重新设置默认网络参数。netconfig 命令是重新配置基本的tcp/ip参数,参数包括是否配置为动态获得ip地址(dhcpd和bootp),网卡的ip地址,网络掩码,缺省网关和首选的域名服务器地址。netconf命令可以详细的配置所有网络的参数,分为客户端任务,服务器端任务和其他的配置三个部分,在客户端的配置中,主要包括基本主机的配置(主机名,有效域名,网络别名,对应相应网卡的ip地址,网络掩码,网络设备名,网络设备的内核驱动程序),DNS地址配置,缺省网关的地址配置,NIS地址配置,ipx接口配置,ppp/slip的配置等等。在服务器端配置中,主要包括NFS的配置,DNS的配置,ApacheWebServer配置,Samba的配置和Wu-ftpd的配置。在其他的配置选项中,一个是关于/etc/hosts文件中的主机配置,一个是关于/etc/networks文件中的网络配置信息,最后是关于使用linuxconf配置的信息。

    在linuxconf命令下,同样也可以配置网络信息,但是大家可以发现,linuxconf程序是调用netconf来进行网络配置的。

    另外,在/etc/sysconfig/network-scripts目录下存放着系统关于网络的配置文件,范例如下:

    ifcfg-eth0*  ifdown-post*  ifup-aliases*  ifup-ppp*

    ifcfg-eth1*  ifdown-ppp*   ifup-ipx*  ifup-routes*

    ifcfg-lo* ifdown-sl* ifup-plip* ifup-sl*

    ifdown@  ifup@ ifup-post* network-functions

    ifcfg-eth0是以太口eth0的配置信息,它的内容如下:

    DEVICE="eth0"  /*指明网络设备名称*/

    IPADDR="202.112.13.204" /*指明网络设备的ip地址*/

    NETMASK="255.255.255.192"  /*指明网络掩码*/

    NETWORK=202.112.13.192 /*指明网络地址*/

    BROADCAST=202.112.13.255   /*指明广播地址*/

    ONBOOT="yes"   /*指明在系统启动时是否激活网卡*/

    BOOTPROTO="none"   /*指明是否使用bootp协议*/

    所以,我们也可以修改这个文件来进行linux下网络参数的改变。

    二 网络服务的配置:

    在这一部分,我们并不是详细的介绍具体的网络服务器(DNS,FTP,WWW,SENDMAIL)的配置(那将是巨大的篇幅),而是介绍一下与linux网络服务的配置相关的文件.

    1. LILO的配置文件

    在linux系统中,有一个系统引导程序,那就是lilo(linux loadin),利用lilo可以实现多操作系统的选择启动.它的配置文件是/etc/lilo.conf.在这个配置文件中,lilo的配置参数主要分为两个部分,一个是全局配置参数,包括设置启动设备等等.另一个是局部配置参数,包括每个引导影像文件的配置参数.在这里我就不详细介绍每个参数,特别的仅仅说明两个重要的参数--------password和restricted选项,password选项为每个引导的影像文件加入口令保护.我们都知道,在linux系统中有一个运行模式是单用户模式,在这个模式下,用户是以超级用户的身份登录到linux系统中.人们可以通过在lilo引导的时候加入参数(linux single 或linux init 0)就可以不需要口令直接进入单用户模式的超级用户环境中,这将是十分危险的.所以在lilo.conf中增加了password的配置选项来为每个影像文件增加口令保护.你可以在全局模式中使用password选项(对所有影像文件都加入相同的口令),或者为每个单独的影像文件加入口令.这样一来,在每次系统启动时,都会要求用户输入口令.也许你觉得每次都要输入口令很麻烦,可以使用restricted选项,它可以使lilo仅仅在linux启动时输入了参数(例如 linux single)的时候才会检验密码.这两个选项可以极大的增加系统的安全性,建议在lilo.conf文件中设置它们.由于password在/etc/lilo.conf文件是以明文存放的,所以必须要将/etc/lilo.conf文件的属性改为仅仅root可读(0400).

    另外,在lilo的早期版本中,存在着引导扇区必须存放到前1024柱面的限制,在lilo的2.51版本中已经突破了这个限制,同时引导界面也变成了图形界面更加直观.最新版本的下载站点:

    ftp://166.111.136.3/pub/linux/lilo/lilo-2.51.tar.gz

    下载解压后,使用命令make install即可完成安装.

    注意: 物理安全才是最基本的安全,即使在lilo.conf中增加了口令保护,如果没有物理安全,恶意闯入者可以使用启动软盘启动linux系统.

    2. 域名服务的配置文件

    (1)/etc/HOSTNAME 在这个文件中保存着linux系统的主机名和域名.范例文件

    ice.xanet.edu.cn

    这个文件表明了主机名ice,域名是xanet.edu.cn

    (2)/etc/hosts和/etc/networks文件 在域名服务系统中,有着主机表机制,/etc/hosts和/etc/networks就是主机表发展而来在/etc/hosts中存放着你不需要DNS系统查询而得的主机ip地址和主机名的对应,下面是一个范例文件:

    # ip 地址 主机名 别名

    127.0.0.1  localhosts  loopback

    202.117.1.13www.xjtu.edu.cn www

    202.117.1.24   ftp.xjtu.edu.cn ftp

    在/etc/networks 中,存放着网络ip地址和网络名称的一一对应.它的文件格式和/etc/hosts是类似的

    (3)/etc/resolv.conf 这个文件是DNS域名解析器的主要配置文件,它的格式十分简单,每一行由一个主关键字组成./etc/resolv.conf的关键字主要有:

    domain 指明缺省的本地域名,

    earch 指明了一系列查找主机名的时候搜索的域名列表,

    ameserver 指明了在进行域名解析时域名服务器的ip地址.下面给出一个范例文件:

    #/etc/resolv.conf

    domain  xjtu.edu.cn

    earch  xjtu.edu.cn edu.cn

    ameserver  202.117.0.20

    ameserver  202.117.1.9

    (4)/etc/host.conf 在系统中同时存在着DNS域名解析和/etc/hosts的主机表机制时,由文件/etc/host.conf来说明了解析器的查询顺序.范例文件如下:

    #/etc/host.conf

    order hosts,bind #解析器查询顺序是文件/etc/hosts,然后是DNS

    multi on #允许主机拥有多个ip地址

    ospoof on  #禁止ip地址欺骗

    3. DHCP的配置文件

    /etc/dhcpd.conf是DHCPD的配置文件,我们可以通过在/etc/dhcpd.conf文件中的配置来实现在局域网中动态分配ip地址,一台linux主机设置为dhcpd服务器,通过鉴别网卡的MAC地址来动态的分配ip地址.范例文件如下:

    option domain-name "chinapub.com";

    use-host-decl-names off;

    ubnet 210.27.48.0 netmask 255.255.255.192 {

    filename "/tmp/image";

    host dial_server {

     hardware ethernet 00:02:b3:11:f2:30;

     fixed-address 210.27.48.8;

     filename "/tmp/image";

    }

    }

    在这个文件中,最主要的是通过设置的硬件地址来鉴别局域网中的主机,并分配给它指定的ip地址,hardware ethernet 00:02:b3:11:f2:30指定要动态分配ip的主机得网卡的MAC地址,fixed-address 210.27.48.8指定分配其ip地址。filename "/tmp/image"是通过tftp服务,主机所要得到的影像文件,可以通过得到的影像文件来引导主机启动。

    4. 超级守候进程inetd的配置

    在linux系统中有一个超级守候进程inetd,inetd监听由文件/etc/services指定的服务的端口,inetd根据网络连接请求,调用相应的服务进程来相应请求.在这里有两个文件十分重要,/etc/inetd.conf和/etc/services,文件/etc/services定义linu系统中所有服务的名称,协议类型,服务的端口等等信息,/etc/inetd.conf是inetd的配置文件,由它来指定那些服务可以由inetd来监听,以及相应的服务进程的调用命令.首先介绍一下/etc/services文件,/etc/services文件是一个服务名和服务端口对应的数据库文件,如下面所示:

    # /etc/services:

    # $Id: services,v 1.4 2000/01/23 21:03:36 notting Exp $

    #

    # Network services, Internet style

    #

    # Note that it is presently the policy of IANA to assign a single well-known

    # port number for both TCP and UDP; hence, most entries here have two entries

    # even if the protocol doesn't support UDP operations.

    # Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports

    # are included, only the more common ones.

    #名称  端口/协议 别名  注释

    tcpmux 1/tcp  # TCP port service multiplexer

    echo   7/tcp

    echo   7/udp

    discard 9/tcp  sink null

    discard 9/udp  sink null

    ystat 11/tcp users

    daytime 13/tcp

    daytime 13/udp

    etstat 15/tcp

    qotd   17/tcp  quote

    msp 18/tcp # message send protocol

    msp 18/udp # message send protocol

    chargen 19/tcp ttytst source

    chargen 19/udp ttytst source

    ftp-data   20/tcp

    ftp 21/tcp

    fsp21/udp  fspd

    h 22/tcp # SSH Remote Login Protocol

    h22/udp # SSH Remote Login Protocol

    telnet 23/tcp

    # 24 - private

    mtp  25/tcp  mail

    # 26 - unassigned

    time37/tcp timserver

    time  37/udp  timserver

    rlp 39/udp  resource # resource location

    ameserver 42/tcp  name # IEN 116

    whois  43/tcp  nicname

    re-mail-ck  50/tcp  # Remote Mail Checking Protocol

    re-mail-ck 50/udp   # Remote Mail Checking Protocol

    domain 53/tcp nameserver # name-domain server

    domain 53/udp nameserver

    mtp 57/tcp # deprecated

    ootps 67/tcp # BOOTP server

    ootps 67/udp

    ootpc 68/tcp # BOOTP client

    ootpc 68/udp

    tftp   69/udp

    gopher 70/tcp # Internet Gopher

    gopher 70/udp

    rje 77/tcp netrjs

    finger 79/tcp

    www 80/tcp http # WorldWideWeb HTTP

    www 80/udp # HyperText Transfer Protocol

    link   87/tcp ttylink

    kerberos   88/tcp kerberos5 krb5  # Kerberos v5

    kerberos   88/udp kerberos5 krb5  # Kerberos v5

    updup 95/tcp

    # 100 - reserved

    hostnames  101/tcp hostname # usually from sri-nic

    iso-tsap  102/tcp tsap # part of ISODE.

    csnet-ns  105/tcp cso-ns # also used by CSO name server

    csnet-ns  105/udp cso-ns

    rtelnet 107/tcp  # Remote Telnet

    rtelnet 107/udp

    op2 109/tcp  pop-2 postoffice  # POP version 2

    op2 109/udp  pop-2

    op3 110/tcp  pop-3  # POP version 3

    op3 110/udp  pop-3

    unrpc  111/tcp portmapper  # RPC 4.0 portmapper TCP

    unrpc  111/udp portmapper  # RPC 4.0 portmapper UDP

    auth 113/tcp authentication tap ident

    ftp 115/tcp

    uucp-path 117/tcp

    tp 119/tcp  readnews untp  # USENET News Transfer Protocol

    tp  123/tcp

    tp  123/udp # Network Time Protocol

    etbios-ns 137/tcp # NETBIOS Name Service

    etbios-ns 137/udp

    etbios-dgm 138/tcp # NETBIOS Datagram Service

    etbios-dgm 138/udp

    etbios-ssn 139/tcp # NETBIOS session service

    etbios-ssn 139/udp

    imap2  143/tcp imap # Interim Mail Access Proto v2

    imap2  143/udp imap

    (实际上,以上仅仅是/etc/services的一部分,限于篇幅没有全部写出)

    在这个文件中,为了安全考虑,我们可以修改一些常用服务的端口地址,例如我们可以把telnet服务的端口地址改为52323,www的端口改为8080,ftp端口地址改为2121等等,这样仅仅需要在应用程序中修改相应的端口即可.这样可以提高系统的安全性.

    /etc/inetd.conf文件是inetd的配置文件, 首先要了解一下linux服务器到底要提供哪些服务。一个很好的原则是" 禁止所有不需要的服务",这样黑客就少了一些攻击系统的机会./etc/inetd.conf范例文件如下:

    #

    # inetd.confThis file describes the services that will be available

    #  through the INETD TCP/IP super server. To re-configure

    #  the running INETD process, edit this file, then send the

    #  NETD process a SIGHUP signal.

    #

    # Version:  @(#)/etc/inetd.conf 3.10 05/27/93

    #

    # Authors:  Original taken from BSD UNIX 4.3/TAHOE.

    # Fred N. van Kempen, <
    waltje@uwalt.nl.mugnet.org>

    #

    # Modified for Debian Linux by Ian A. Murdock <
    imurdock@shell.portal.com>

    #

    # Modified for RHS Linux by Marc Ewing <
    marc@redhat.com>

    #

    #

    #服务名 socket类型 协议 动作 拥有者 服务进程路径名 掉用参数

    #nowait 表示在相应一个网络连接之后,服务进程在释放旧的联接之前可以接受

    #新的连接请求,wait 则表示必须在旧连接清除之后才能接收新的连接.

    # Echo, discard, daytime, and chargen are used primarily for testing.

    # To re-read this file after changes, just do a 'killall -HUP inetd'

    #

    #echo  stream  tcp  nowait  root  internal

    #echo  dgram udp  wait root  internal

    #discard  stream  tcp  nowait  root  internal

    #discard  dgram udp  wait root  internal

    #daytime stream  tcp nowait root internal

    #daytime dgramudp wait  root internal

    #chargen stream  tcp nowait  root  internal

    #chargen dgram  udp  wait root internal

    #time stream tcp nowait root  internal

    #time dgram udp wait root internal

    #

    # These are standard services.

    #

    ftp stream tcp nowait root /usr/sbin/tcpd in.wuftpd -l -a

    telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

    #

    # Shell, login, exec, comsat and talk are BSD protocols.

    #

    #shell  stream  tcp  nowait  root /usr/sbin/tcpd in.rshd

    #login  stream  tcp  nowait  root /usr/sbin/tcpd in.rlogind

    #exec  stream  tcp  nowait  root /usr/sbin/tcpd in.rexecd

    #comsat dgram  udp  wait root /usr/sbin/tcpd in.comsat

    #talk  dgram  udp  wait root /usr/sbin/tcpd in.talkd

    #ntalk  dgram  udp wait root /usr/sbin/tcpd in.ntalkd

    #dtalk  stream tcp  waut nobody  /usr/sbin/tcpd in.dtalkd

    # Pop and imap mail services et al

    #

    #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d

    #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d

    #imap stream tcp nowait root /usr/sbin/tcpd imapd

    #

    # The Internet UUCP service.

    #

    #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l

    #

    # Tftp service is provided primarily for booting. Most sites

    # run this only on machines acting as "boot servers." Do not uncomment

    # this unless you *need* it.

    #

    #tftp  dgram  udp  wait  root  /usr/sbin/tcpd  in.tftpd

    #bootps dgram  udp  wait  root  /usr/sbin/tcpd  bootpd

    # 

    # Finger, systat and netstat give out user information which may be

    # valuable to potential "system crackers." Many sites choose to disable

    # some or all of these services to improve security.

    #

    #finger stream  tcp nowait root /usr/sbin/tcpd in.fingerd

    #cfinger stream  tcp nowait root /usr/sbin/tcpd in.cfingerd

    #systat stream  tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx

    #netstat stream  tcp nowait guest /usr/sbin/tcpd /bin/netstat  -f inet

    #

    # Authentication

    #

    #auth  stream  tcp  nowait  nobody  /usr/sbin/in.identd in.identd -l -e -o

    #linuxconf stream tcp  wait root /bin/linuxconf linuxconf -http

    大家看到的这个文件已经修改过的文件,除了telnet 和ftp服务,其他所有的服务都被禁止了.在修改了/etc/inetd.conf之后,使用命令kill -HUP (inetd的进程号),使inetd重新读取配置文件并重新启动即可.

    5. ip route的配置

    利用linux,一台普通的微机也可以实现高性价比的路由器.首先让我们了解一下linux的查看路由信息的命令:

    [root@ice /etc]# route -n

    Kernel IP routing table

    Destination  Gateway  Genmask Flags Metric Ref Use Iface

    202.112.13.2040.0.0.0  255.255.255.255 UH  0  0  0 eth0

    202.117.48.43 0.0.0.0  255.255.255.255 UH  0  0  0 eth1

    202.112.13.192  202.112.13.204 255.255.255.192 UG  0  0  0 eth0

    202.112.13.192  0.0.0.0255.255.255.192 U  0  0  0  eth0

    202.117.48.0 202.117.48.43 255.255.255.0  UG  0  0  0 eth1

    202.117.48.0 0.0.0.0 255.255.255.0  U  0  0  0 eth1

    127.0.0.0  0.0.0.0 255.0.0.0 U  0  0  0 lo

    0.0.0.0 202.117.48.1 0.0.0.0 UG  0  0  0 eth1

    命令netstat -r n 得到输出结果和route -n是一样的.它们操作的都是linux 内核的路由表.

    命令cat /proc/net/route的输出结果是以十六进制表示的路由表.

    [root@ice /etc]# cat /proc/net/route

    Iface  Destination Gateway  Flags  RefCnt  Use Metric Mask

    eth0  CC0D70CA 00000000 0005  0 0  0 FFFFFFF

    eth1  2B3075CA 00000000 0005  0 0  0 FFFFFFF

    eth0  C00D70CA CC0D70CA 0003  0 0  0 C0FFFFF

    eth0  C00D70CA 00000000 0001  0 0  0 C0FFFFF

    eth1  003075CA 2B3075CA 0003  0   0  0 00FFFFF

    eth1003075CA 00000000 0001  0 0  0 00FFFFF

    lo 0000007F  00000000 0001  0 0  0  000000F

    eth1 00000000  013075CA 0003  0  0  0 0000000

    通过计算可以知道,下面的这个路由表(十六进制)和前面的路由表(十进制)是一致的.

    我们还可以通过命令route add (del )来操作路由表,增加和删除路由信息.

    除了上面的静态路由,linux还可以通过routed来实现rip协议的动态路由.我们只需要打开linux的路由转发功能,在/proc/sys/net/ipv4/ip_forward文件中增加一个字符1.

    三.网络的安全设置

    在这一部分,再次强调一定要修改/etc/inetd.conf,安全的策略是禁止所有不需要的服务.除此之外,还有以下几个文件和网络安全相关.

    (1)./etc/ftpusers ftp服务是一个不太安全的服务,所以/etc/ftpusers限定了不允许通过ftp访问linux主机的用户列表.当一个ftp请求传送到ftpd,ftpd首先检查用户名,如果用户名在/etc/ftpusers中,则ftpd将不会允许该用户继续连接.范例文件如下:

    # /etc/ftpusers - users not allowed to login via ftp

    root

    in

    daemon

    adm

    lp

    ync

    hutdown

    halt

    mail

    ews

    uucp

    operator

    games

    obody

    admin

    (2)/etc/securetty 在linux系统中,总共有六个终端控制台,我们可以在/etc/securetty中设置哪个终端允许root登录,所有其他没有写入文件中的终端都不允许root登录.范例文件如下:

    # /etc/securetty - tty's on which root is allowed to login

    tty1

    tty2

    tty3

    tty4

    (3)tcpd的控制登录文件/etc/hosts.allow和/etc/hosts.deny

    在tcpd服务进程中,通过在/etc/hosts.allow和/etc/hosts.deny中的访问控制规则来控制外部对linux主机的访问.它们的格式都是

    ervice-list : hosts-list [ : command]

    服务进程的名称 : 主机列表 可选,当规则满足时的操作

    在主机表中可以使用域名或ip地址,ALL表示匹配所有项,EXCEPT表示除了某些项, PARANOID表示当ip地址和域名不匹配时(域名伪装)匹配该项.

    范例文件如下:

    #

    # hosts.allow This file describes the names of the hosts which are

    # allowed to use the local INET services, as decided

    # by the '/usr/sbin/tcpd' server.

    #

    ALL : 202.112.13.0/255.255.255.0

    ftpd: 202.117.13.196

    in.telnetd: 202.117.48.33

    ALL : 127.0.0.1

    在这个文件中,网段202.112.13.0/24可以访问linux系统中所有的网络服务,主机202.117.13.196只能访问ftpd服务,主机202.117.48.33只能访问telnetd服务.本机自身可以访问所有网络服务.

    在/etc/hosts.deny文件中禁止所有其他情况:

    #/etc/hosts.deny

    ALL : DENY : spawn (/usr/bin/finger -lp @%h | /bin/mail -s "Port Denial noted in %d-%h" root)

    在/etc/hosts.allow中,定义了在所有其他情况下,linux所应该执行的操作.spawn选项允许linux系统在匹配规则中执行指定的shell命令,在我们的例子中,linux系统在发现无授权的访问时,将会发送给超级用户一封主题是"Port Denial noted in %d-%h"的邮件,在这里,我们先要介绍一下allow和deny文件中的变量扩展.

    (4)/etc/issue和/etc/issue.net

    在我们登录linux系统中的时候,我们常常可以看到我们linux系统的版本号等敏感信息.在如今的网络攻击行为中,许多黑客首先要收集目标系统的信息,版本号等就是十分重要的信息,所以在linux系统中一般要把这些信息隐藏起来./etc/issue和/etc/issue.net就是存放这些信息的文件.我们可以修改这些文件来隐藏版本信息.

    另外,在每次linux重新启动的时候,都会在脚本/etc/rc.d/rc.local中再次覆盖上面那两个文件./etc/rc.d/rc.local文件的范例如下:

    # This script will be executed *after* all the other init scripts.

    # You can put your own initialization stuff in here if you don't

    # want to do the full Sys V style init stuff.

    if [ -f /etc/redhat-release ]; then

    R=$(cat /etc/redhat-release)

    arch=$(uname -m)

    a="a"

    case "_$arch" in

    _a*) a="an";;

    _i*) a="an";;

    esac

    NUMPROC=`egrep -c "^cpu[0-9]+" /proc/stat`

    if [ "$NUMPROC" -gt "1" ]; then

    SMP="$NUMPROC-processor "

    if [ "$NUMPROC" = "8" -o "$NUMPROC" = "11" ]; then

    a="an"

    else

    a="a"

    fi

    fi

    # This will overwrite /etc/issue at every boot. So, make any changes you

    # want to make to /etc/issue here or you will lose them when you reboot.

    #echo "" > /etc/issue

    #echo "$R" >> /etc/issue

    # echo "Kernel $(uname -r) on $a $SMP$(uname -m)" >> /etc/issue

    cp -f /etc/issue /etc/issue.net

    echo >> /etc/issue

    在文件中黑体的部分就是得到系统版本信息的地方.一定要将他们注释掉.

    (5)其他配置

    在普通微机中,都可以通过ctl+alt+del三键的组合来重新启动linux.这样是十分不安全的,所以要在/etc/inittab文件中注释该功能:

    # Trap CTRL-ALT-DELETE

    #ca::ctrlaltdel:/sbin/shutdown -t3 -r now

     
    展开全文
  • Linux nginx 会话保持(session

    千次阅读 2018-07-29 20:44:36
    nginx 会话保持(session)有2种算法,一种是自带IP HASH 算法,一种是基于第三方模块sticky模块来实现会话保持 ...不适用CDN网络,不适用于前段还有代理的情况 2)sticky 使用sticky启用会话亲缘关系,...
  • 安徽工业大学Linux 网络程序设计历年试卷
  • sysctl优化linux网络

    千次阅读 2012-06-12 20:01:16
     sysctl优化linux网络  1, 优化网络设备接收队列  net.core.netdev_max_backlog=3000  该文件表示在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
  • nginx+tomcat+session复制(linux

    千次阅读 2012-03-15 09:13:18
    Nginx+tomcat+session复制 说明:Server1:nginx+tomcat1  Server2:tomcat2 1.安装nginx tar zxf pcre-8.12.tar.gz cd pcre-8.12 ./configure make;make install 下载下面的插件安装,否则nginx无法识别...
  • Linux网络配置与远程连接

    千次阅读 2015-11-20 12:48:28
    Linux网络配置与远程连接 1 Linux网络配置 1.1 WMware网络适配置器 1、在虚拟机下安装完成Linux后,在Wmware设置网络配置,选择虚拟机,右击“设置” 2、在打开的弹出框中选择网络适配器: 3、...
  • 转自:http://blog.csdn.net/kyn/archive/2009/05/10/4164118.aspx<br />最近我的网站访问在直线上升,因为动态会员游戏网站,一直在想办法做些优化,今天想到如果把php的session放在内存,可能会提升网站的...
  • 嵌入式Linux网络连接管理

    千次阅读 2018-03-06 00:00:00
    连接管理器(ConnMan)是一个连接管理守护进程 , 用于管理运行 Linux 操作系统中设备的互联网连接。 它以快速、连贯、同步的方式对不断变化的网络条件提供了低内存消耗。ConnMan拥有各种插件, 是一个完全模块化的系统,...
  • Kali Linux 渗透测试平台提供了大量高效的工具,来完成企业渗透测试中所需的大多数常见任务。 然而,有时单个工具不足以完成给定的任务。 与构建完全新的脚本或程序来完成具有挑战性的任务相比,编写使用现有工具...
  • linux中的网络端口

    千次阅读 2017-06-13 09:39:18
    网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如RJ-45端口、SC端口等等;二是逻辑意义上的端口,一般是指TCP/IP协议中的...
  • 前言在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A、B两台服务器,用户在第一次访问网站时,Nginx通过其负载均衡...
  • linux网络环境配置及tcp/ip基础

    千次阅读 2018-10-16 11:25:44
    linux网络环境配置(1) 第一种方法: (1)用root身份登陆,运行setup命令进入到text mode setup utiliy对网络进行配置,这里可以进行ip,子网掩码,默认网关,dns的设置。 (2)这时网卡的配置没有生效,运行/etc/rc....
  • NAT工作原理 1当内部主机IP地址为7使用端口2013需要与Internet上的某主机...2如果还没有为该内部主机建立地址转换映射项NAPT服务器就会为这个传输创建一个Session并且给这个Session分配一个端口2806然后改变这个数据
  • 6.6 NTP 放大 DoS 攻击NTP 放大 DoS 攻击利用响应远程 monlist 请求的网络时间协议(NTP)服务器。 monlist 函数返回与服务器交互的所有设备的列表,在某些情况下最多达 600 个列表。 攻击者可以伪造来自目标 IP ...
  • Linux内核网络部分控制流

    千次阅读 2013-03-14 03:29:52
    英文原文地址:...这篇文章描述Linux内核网络部分的控制流(以及相关的数据缓冲),上述图片是对网络控制流的一个概括性的总图。这篇文
  • Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Fri Mar 6 11:36:42 UTC 2015 1. 安装nginx  SERVER:192....
  • Linux系统管理+网络监控命令

    千次阅读 2010-08-20 15:23:00
    Linux系统管理中需要监控Linux服务器 的 性能, Linux本身提供一些很有用的命令和组件, 几乎所有的Linux发行版都装备了大量的... 网络性能. #1: top – 进程活动状态 “top” 命令提供运行系统的动态实时视图,
  • [root@caibird ~]# netstat ...unix 3 [ ] STREAM CONNECTED 16451 @/tmp/gdm-session-tzykVCfE unix 3 [ ] STREAM CONNECTED 16450 unix 3 [ ] STREAM CONNECTED 16447 /var/run/dbus/system_bus_socket
  • Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap
  • session 的工作原理?

    千次阅读 2019-06-24 23:56:39
    session 的工作原理? 1、什么是 session session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ...
  • linux dhcp 及网络的命令及描述

    千次阅读 2018-11-14 10:22:03
    OSI七层框架和tcp/ip的四层架构  OSI七层网络模型 对应网络协议  应用层(application) HTTP.TFTP.FTP.NFS.WAIS.SMT...
  • OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardization)国际标准化组织定义的网络分层模型,共七层,如下图。 物理层(Physical Layer):物理层定义了...
  • 部署服务器集群离不开Session共享,实现Session共享方式有很多种,对于小型集群(5台服务器内)我们可以采用Session ...1,同步Session数据造成了网络带宽的开销。只要Session数据有变化,就需要将数据同步到所有其他
  • Linux下用TensorFlow搭建神经网络

    千次阅读 2018-04-12 19:44:49
    一、Linux常用 指令 桌面点击右键 ,选择 Open Terminal 打开终端 pwd :打印当前在哪个目录 ls :列出当前路径下的文件和目录 mkdir 目录名: 新建目录 cd 目录名 :进到指定目录 进到指定目录 python :运行...
  • PHP session详解

    千次阅读 2018-08-27 17:45:19
     在传统的client/server应用中,对于session失效的情况,可以交给网络协议自己来处理。无论是client端主动关闭连接,还是因为网络异常而导致的连接中断,server端都能够得到通知,触发连接中断的...
  • session效率

    千次阅读 2013-06-26 16:02:38
    HttpSession的使用是有代价的,需要占用服务器资源,本着能不浪费就不浪费的原则,我希望系统中的session都在掌握之中,在需要创建时由 我们的代码明确创建。但是最近在开发中发现,新的session

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,969
精华内容 34,387
关键字:

linux网络session

linux 订阅