• Linux (转)解析 xinetd.conf


    一般而言,在 /etc/rc.d/init.d/ 里面的 scripts 都是发展者之 RPM 所提供的,如果您有兴趣自行发展你的软件的话,那么可以直接以这样的方式来独立启动的!不过,我们也可以经由 super daemon 来管理我们的服务,因为这个 super daemon 可以提供相当多的功能,尤其是安全性方面的功能,所以,我们就来谈一谈如何使用这个东西吧!
     
    先来看一看预设的 /etc/xinetd.conf 这个档案的内容是什么吧!

     

    #
    # Simple configuration file for xinetd
    #
    # Some defaults, and include /etc/xinetd.d/

    defaults
    {
            instances               = 60
            log_type                = SYSLOG authpriv
            log_on_success          = HOST PID
            log_on_failure          = HOST
            cps                     = 25 30
    }

    includedir /etc/xinetd.d

    内容格式:
    service <service_name>
    {
           <attribute> <assign_op> <value> <value> ...
           ...
    }


    在上面的预设范例当中,说明的是:『如果没有指定的 services ( defaults ) 那么就用 {} 里面的设定来执行之!』正常的情况之下有点像上面例子中的黄色字体所示,那个 <> 里头的数据我们先来说明一下:注:那个 assign_op 主要有三种形式,分别如下:

     = : 表示后面的设定参数就是这样啦!
    += : 表示后面的设定为『在原来的设定里头加入新的参数
    -+ : 表示后面的设定为『在原来的参数舍弃这里输入的参数!』

    用途不太相同,敬请留意呦!好了!底下再来说一说那些 attribute 与 value !

     

    attribute
    (功能)
    assing_op
    (允许的动作)
    说明
    (范例)
    一般设定项目:

    disable yes
    no
    允许该 server 可以执行或者是不能执行!
    当设定为 yes 表示该服务不能执行!
    socket_type stream
    dgram
    raw
    当联机为 TCP 封包时,则使用 stream 类型
    当联机为 UDP 封包时,则使用 dgram  类型
    raw 代表 server 需要与 IP 直接对谈!
    protocol tcp
    udp
    ...
    这个东西说的是,联机的状态使用的是哪一种协议!?各个协议的代号可以参考 /etc/protocols 内容!此外,除非是你自己设定的服务,否则这个可以不用设定啦!
    wait yes
    no
    这就是我们刚刚提到的 Multi-threaded 与 single-threaded 的方式啦!一般来说,我们希望大家的要求都可以同时被启用,所以可以设定 wait = no
    user UID
    root
    还记得我们在 账号管理 那一篇提到的 UID 概念吗?对啦!这个 UID 就是那个 UID 啦!要注意的是,假如你的服务启动者不要以 root 为主的话,那么这个地方就可以改变其它的使用者,例如 nobody !这个咚咚也会有安全防护的机制存在!此外,需要注意这个 UID 必须存在于 /etc/passwd 。
    group GID 跟 user 的意思相同!只是这个 GID 的使用者也必须存在于 /etc/group 当中!
    instances number
    UNLIMITED
    这个是『在同一时间之内,同一个服务可以允许的联机数目』的意思,你可以写入一个『数字』来控制联机数目,也可以使用 UNLIMITED 来告诉系统『没有上限』啰!例如你在同时段之内仅允许 ftp 联机有 30 个,那么这里就可以输入 30 啦!
    nice -19 ~ 19 还记得我们在 程序管理 里面谈到的那个 nice 指令吗?!对啦!这里就是这个东西啰!数字越小( 负值 )代表该程序越优先被执行!
    server program
    /usr/sbin/in.ftpd
    这个就是指出这个服务的启动程序!例如要启动 ftp 的话,其实就是 in.ftpd 这支程序啦!所以这个时候在这里输入 server = /usr/sbin/in.ftpd
    server_args 一些参数 这里应该输入的就是你的 server 那里需要输入的一些参数啦!例如 in.ftpd 当中,我们可能就需要输入 -l -a 这个参数说!
    log_on_success PID
    HOST
    USERID
    EXIT
    DURATION
    在『成功登入』之后,需要记录的项目:PID为纪录该 server 启动时候的 process ID ,HOST 为远程主机的 IP、USERID 为登入者的账号、EXTI 为离开的时候记录的项目、DURATION 为该使用者使用此服务多久?
    log_on_failure HOST
    USERID
    ATTEMPT
    RECORD
    当登入失败之后被 syslog 登入的项目:HOST为远程主机的 IP,USERID为登入者账号、ATTEMPT为记录登入失败者企图的意图为何、RECORD为记录远程主机的信息!以及为何本机 server 不能启动的原因!主要有 login, shell, exec, finger 等指令可以使用在这里!( 基本上,可以在 /etc/hosts.allow 或 /etc/hosts.deny 书写内容 )。
    进阶设定项目:

    env 'name=value' 这一个项目可以让你设定环境变量,环境变量的设定规则可以参考 认识 BASH Shell
    port number 这里可以设定不同的服务与对应的 port ,但是请记住你的 port 与服务名称必须与 /etc/services 内记载的相同才行!
    redirect IP_Address port 将 client 端对我们 server 的要求,转到另一部主机上去!呵呵!这个好玩呦!例如当有人要使用你的 ftp 时,你可以将他转到另一部机器上面去!那个 IP_Address 就代表另一部远程主机的 IP 啰!
    includedir directory_path 表示将某个目录底下的所有档案都给他塞进来 xinetd.conf 这个设定里头!这东西有用多了,如此一来我们可以一个一个设定不同的项目!而不需要将所有的服务都写在 xinetd.conf 当中!你可以在 /etc/xinetd.conf 发现这个设定呦!
    安全控管项目:

    bind IP_Address 这个是设定『允许使用此一服务的适配卡』的意思!举个例子来说,你的 Linux 主机上面有两个 IP ,而你只想要让 IP1 可以使用此一服务,但 IP2 不能使用此服务,这里就可以将 IP1 写入即可!那么 IP2 就不可以使用此一 server 啰!
    interface IP_Address 跟 bind 相同!
    only_from 0.0.0.0
    192.168.1.0/24
    host_name
    domain_name
    这东西用在安全机制上面,也就是管制『只有这里面规定的 IP 或者是主机名称可以登入!』如果是 0.0.0.0 表示所有的 PC 皆可登入,如果是 192.168.1.0/24 则表示为 C class 的网域!亦即由 192.168.1.1 ~ 192.168.1.255 皆可登入!另外,也可以选择 domain name ,例如 .ev.ncku.edu.tw 就可以杜绝成大环工系的网域 IP 登入你的主机使用该 server !
    no_access 0.0.0.0
    192.168.1.0/24
    host_name
    domain_name
    跟 only_from 差不多啦!就是用来管理可否进入你的 Linux 主机启用你的 server 服务的管理项目! no_access 表示『不可登入』的 PC 啰!
    access_times 00:00-12:00
    HH:MM-HH:MM
    这个项目在设定『该服务 server 启动的时间』,使用的是 24 小时的设定!例如你的 ftp 要在 8 点到 16 点开放的话,就是: 08:00-16:00。
    umask 000
    777
    022
    还记得在 档案权限 里面约略提过的 umask 这个东西吗?呵呵!没错!就是那个鬼玩意儿啰!可以设定使用者建立目录或者是档案时候的属性!系统建议值是 022 。

    当然上面的参数不需要每个都设定啦!只要设定需要的就可以啦!而在 /etc/xinetd.conf 这个档案当中,一定会看到『 includedir = /etc/xinetd.d 』这一行!这说明的是,除了 /etc/xinetd.conf 之外,所有在 /etc/xinetd.d 的档案都是可以用来设定的啦!!好了,我们来举个简单的 telnet 的例子吧!那就是 /etc/xinetd.d/telnet 这个档案,如果你的 Mandrake 9.0 当中没有这个档案,那表示还没有安装telnet-server-krb5-1.2.5-1mdk这个套件,请先安装他吧!然后,他的内容有点像这样:
     

    service telnet
    {
        disable     = yes         <==服务预设是关闭的
        flags      = REUSE        <==额外使用的参数
        socket_type   = stream       <==使用 tcp 封包常用的联机型态
        wait      = no          <==不需等待,可以同时允许多个联机
        user      = root        <==启动程序的使用者身份
        server     = /usr/sbin/telnetd  <==服务启动的程序
        server_args   = -a none       <==上面那个程序的参数
        log_on_failure += USERID       <==错误登入时,要记录下来的内容
    }


    上面的表格中,已经说明了每一项参数的意义!如果原本的默认值你并不满意,那么你可以修改成比较安全与多一点机制。假设你这个 Linux 是一部主机,而且他有两块网络接口,分别是对外的 140.116.44.125 与对内的 192.168.0.254 这两个,如果你想要让对内的接口限制较松,而对外的限制较严格,你可以这样的来设定呢:

     

    # 先针对对内的较为松散的限制来设定:
    service telnet
    {
        disable     = no          <==预设就是启动 telnet 服务
        bind       = 192.168.0.254    <==只允许经由这个适配卡的封包进来
        only_from    = 192.168.0.0/24   <==只允许 192.168.0.0/24 这个网段
                             的主机联机进来使用 telnet 的服务
        instances    = UNLIMITED      <==同时允许联机不限制!
        nice       = 0          <==使用的优先级较高
        flags      = REUSE        <==额外使用的参数
        socket_type   = stream       <==使用 tcp 封包常用的联机型态
        wait      = no         <==不需等待,可以同时允许多个联机
        user      = root        <==启动程序的使用者身份
        server      = /usr/sbin/telnetd  <==服务启动的程序
        server_args   = -a none       <==上面那个程序的参数
        log_on_failure += USERID       <==错误登入时,要记录下来的内容
    }

    # 再针对外部的联机来进行限制呢!
    service telnet
    {
        disable     = no                  <==预设就是启动 telnet 服务
        bind       = 140.116.44.125      <==只允许经由这个适配卡的封包进来
        only_from    = 140.116.0.0/16      <==只允许 140.116.0.0 ~ 140.116.255.255
                                                    这个网段联机进来使用 telnet 的服务
        only_from    = .edu.tw             <==重复设定,只有教务界才能联机!
        no_access    = 140.116.32.{10,26}  <==不许这些 PC 登入
        access_times  = 1:00-9:00 20:00-23:59
                                                  <==每天只有这两个时段开放服务
        umask      = 022                 <==建立档案时的预设属性设定
        instances    = 10                  <==同时只允许 10 个联机
        nice      = 10                  <==使用的优先级较低
        flags      = REUSE               <==额外使用的参数
        socket_type   = stream              <==使用 tcp 封包常用的联机型态
        wait      = no                  <==不需等待,可以同时允许多个联机
        user      = root                <==启动程序的使用者身份
        server     = /usr/sbin/telnetd   <==服务启动的程序
        server_args   = -a none             <==上面那个程序的参数
        log_on_failure += USERID             <==错误登入时,要记录下来的内容
    }

    呵呵!如上面的设定,我们可以将 telnet 的启动项目进行更多的限制!如此一来,将有助于我们的安全防护呢!尤其如果可以针对不同的接口来设定,嘿嘿!就更加的棒啰!不过,请注意喔!如果照上面的设定,那么您的主机上面将会开了两个 23 port 的接口,分别是给两个接口来使用的呢!嗯!真好玩?同样的,你也可以针对自己的喜好来设定你的其它 daemon 使他挂在 xinetd 底下呢!

  • 相关阅读:
    measure time program
    Visual Studio Code 好用的 source code editor
    tmux
    singleTask, singleInstance使用心得
    IIS7中配置FastCGI运行PHP
    Node.js入门
    Excel的文件打开特别慢,xls文件特别大解决一例
    SQL Server开启READ_COMMITTED_SNAPSHOT
    [转]最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等本文出处
    “VS2013无法连接远程数据库”解决方案
  • 原文地址:https://www.cnblogs.com/jinzhenshui/p/1421369.html
Copyright © 2020-2023  润新知