linux下,主机常常会收到一些要求,比如来自本机系统要求或者是网络客户端的服务要求,只要有要求来的时候,通常就是各式各样的进程负责去唤起应该要工作的服务来工作!
守护进程目前有两种基本的模式,分别是有独立守护进程与和非独立守护进程两种方式,其中非独立守护进程的各项工作由超级守护进程xinetd(一种特殊的独立守护进程)代为管理。 换句话说,可以理解为超级守护进程可以代表全部的非独立守护进程。
独立守护进程(stand_alone):
独立守护进程之后,就直接常驻在内存当中!他虽然会一直的占用系统的资源,但最大的优点就是,他会一直启动!所以当有要求来的时候,他就会很快速的响应!常常用在这一种 进程的网络服务如常见的 httpdvsftpd 等。
超级守护进程(super daemon):
 相对于独立守护进程的执行方式,这一种服务的启动方式则是由统一的一个进程来负责唤起该服务!这一个统一负责的进程就是 xinetd!常用非独立守护进程的网络服务有telnettftp等。
   下面说说超级守护守护进程的相关信息。
   超级守护进程的配置文件位于/etc/xinetd.conf中,这个文件相当于那些非独立守护进程的配置文件的模板。在设置非独立守护进程的配置文件时可以参考这个文件。
defaults
# The next two items are intended to be a quick access place to
# temporarily enable or disable services.
#       enabled         =
#       disabled        =
确定是否开启本服务,如果enabled=yes,或者disabled=no就打开该项服务,反之enabled=no 或者disabled=yes就是关闭该项服务喽!在非独立守护进程的配置文见中默认是   disable = yes
# Define general logging characteristics.
        log_type        = SYSLOG daemon info
        log_on_failure  = HOST
        log_on_success  = PID HOST DURATION EXIT
定义登陆特征的选项,log_type选项设置显示登陆类型,如果登录失败,显示主机名,如果登陆成功,则显示登陆用户的PID,主机名,在线时间,出口。在非独立守护进程的配置文见中默认是 log_on_failure  += USERID   +=”的意思是在xinetd.conf的基础上再加上 USERID
# Define access restriction defaults
#       no_access       =
#       only_from       =
#       max_load        = 0
        cps             = 50 10
        instances       = 50
        per_source      = 10
 
定义用户登陆时的限制选项,“no_access = ”后跟不允许登录的主机,“only_from= ”后跟允许登陆的主机。表示主机的方法有四种。分别是:
1、以网段形式 例如:192.168.1.0
2、以网络名形式 这些网络名来自/etc/networks的配置文件或者NIS 例如:@mynetwork
3、以主机名形式(必须以.开头,切记) 例如:.domain.com
4、IP地址加上子网掩码 例如:192.168.0.0/255.255.255.0 或者192.168.0.0/24
【注】当在配置文件中同时存在no_access only_from时系统取最佳匹配。也就是说以指定范围小的那个选项为准。若两个都不存在,则允许访问。
max_load  最大登陆的客户端数
cps限制进入的数率。这一项有两个值,前一个值代表每秒钟处理的最大并发链接数,但是如果超过最大链接时,后面一个值就有用途了。在超过最大链接数的情况下,当有新的链接进来时需要等待一段时间后重新进行链接,后一个值就是来定义这个等待时间的。
per_source 允许一个IP发起的最大并发链接数。
 
 
# Address and networking defaults
#       bind            =
#       mdns           = yes
        v6only          = no
bind的作用是绑定监听地址
v6only 定义是否支持IP v6地址协议
# setup environmental attributes
#       passenv         =
        groups          = yes
        umask           = 002
这是设置环境变量的一些参数,一般用默认值就行了,在非独立守护进程中一般不会出现。
# Generally, banners are not used. This sets up their global defaults
#       banner          =
#       banner_fail     =
#       banner_success  =
 
一般来说,banners的用途不大。其作用是:当客户端链接时反馈给客户端的欢迎信息或者登录失败信息。
下面就以telnet服务为例来具体说明:
telnet服务的配置文件在/etc/xinetd.d/telnet中,打开其配置文件可以看到:
service telnet{
        disable = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        only_from       =192.168.0.0/24
        log_on_failure  += USERID
        access_times     =8:00-18:00
}
其中:
flags  表示服务运行标志
socket_type 表示套接字类型,他有两个选项。 stream 表示使用的是TCP协议,dgram 表示使用的是UDP协议。
server 表示客户端使用telnet登录服务器时,服务器要调用的系统进程。
wait yes no 两个选项,yes 表示单线程,由非独立守护进程自己来管理用户的登录情况,no 表示多线程,由xinetd代为管理用户登录情况。
user 以某个用户的身份来运行该程序。
access_times 设定用户可以访问的时间段。
 
 
 
下面说一下tcp_warpper的一些设置:
事实上,除了使用 xinetd来设定安全机制之外, 我们还可以利用额外的机制来抵挡某些不受欢迎的主机! 那就是 /etc/hosts.allow 以及 /etc/hosts.deny 这两个档案的功能啦!
tcp_warpper的工作原理图为:
super daemon与tcp_wrappers结合应用小结(理论部分)_休闲
当有外界访问请求时,tcp_warpper就去/etc/hosts.allow文件中寻找对应条目,如果在该文件中寻找到就允许访问,如果寻找不到就接着去/etc/hosts.deny文件中寻找,如果找到,就拒绝访问,如果寻找不到,则允许访问。
这两个文件内容基本的语法是:
<service(program_name)> : <IP, namenetmasknetwork name> : <action>
第一项<service(program_name)>
服务进程名:即可执行二进制程序名,不是服务名。
如是独立守护进程,则直接写进程名,例如 vsftpd
如果是非独立守护进程,要在进程名前加”in.”,例如 in.tenletd
另外,如果服务器端有两块以上的网卡,还可以对网卡进行绑定,即设置客户端是基于那块网卡来进行访问的。例如:in.telnetd@192.168.0.254 : 192.168.0.
 
第二项<IP, host namenetmasknetwork name>
IP 即单个具体的IP地址,例如 192.168.0.82
还有一个特殊之处是IP地址可以写成 192.168.0.  意思是192.168.0.网段内的所有主机。
host name 即某个域名,必须以“.”开头,例如  .example.com  意思是包括example.com域中所有主机。
netmask 即包括某个网段, 例如:192.168.0.0/255.255.255.0
【注:】与非独立守护进程配置文件不同,该文件不支持无类域间路由,所以不能写成192.168.0.0/24 必须写成子网掩码形式192.168.0.0/255.255.255.0
network name 即这些网络名来自/etc/networks的配置文件或者NIS 例如:@mynetwork
 
此外,我们还可以使用一些特殊参数(即宏定义)在第二项!内容有:
* ALL:代表全部的 program_name 或者是 IP 都接受的意思,
例如 ALL: ALL: deny
    * LOCAL:匹配来自本地主机;例如: ALL: LOCAL: allow
    * UNKNOWN:表示不可被解析的 IPdomain 等主机;
    * KNOWN:表示为可解析的 IP, domain等主机;
* PARANOID:表示正反向解析不匹配的地址;
* EXCEPT:表示不包含后面的主机;
例如:in.telnetd:192.168.0. EXCEPT 192.168.0.82
【注:】这些特殊参数必须要大些。
第三项<action>
主要的内容有:
*spawn
可以利用后续接的 shell 来进行额外的工作,且具有变数功能,主要的变数内容为: %h, %a, %d等等;
          %a 表示客户端地址
%A 表示服务器端地址
%h 表示客户端主机名(如果名字不存在,则用IP来表示)%H 表示服务器端主机名
%d 表示该项服务的可执行文件名
%c 表示客户端信息(以user@host格式来表示)
 %s 表示服务器短信息(以server@host格式来表示)
%p 表示PID
%% 表示转义字符%
* twist
立刻执行后面的指令,且执行完后终止该次连线的要求 (DENY)
*banners
读取/var/banners/servicename下的的文件,将文件内的欢迎信息显示给登陆用户 切记servicename必须要与第一项service名字相同。否则就读取不到这些信息。有关具体实验步骤,请参阅实验部分。
 
 
                                                                            作者:枫飘晨霜(linuxtro)
                                                                              
                                                                                         2010年2月25日