(四)工作方式一

在完成了对工作方式二的配置之后,它的基础上我们来配置工作方式一,这种工作方式是由服务器运行cfrun连接远程客户端的cfservd,激活远程主机的cfagent程序。相比第二种方式而言,这种做法实现了集中控制.例如现在有个配置需要立刻更改,而现在还没到客户端定时运行的时间,如果我们一台台的登录到客户机来执行cfagent,显然是十分麻烦的,而且很费时间。有了cfrun就可以在中央机上对所有的客户发出指令让他们立即运行cfagent。

1.配置客户机上的cfservd.conf

在之前的update.conf里面,我们可以看到我们已经在远程客户端上开启了cfservd进程.只是并没有为它们写配置文件,要做也其实很简单,将服务器的cfservd.conf复制过来,然后做适当修改就可以了

# cfservd.conf

# yahoon 2007.11.1

control:

   cfrunCommand = ( "/var/cfengine/bin/cfagent" ) 只需要加入这一句就可以了

    domain = ( yahoon.org )

    AllowConnectionsFrom = ( 192.168.0.0/24 )

    TrustKeysFrom = ( 192.168.0.0/24 )

    AllowUsers = ( root )

    MaxConnections = ( 150 )

    MultipleConnections = ( true )

    #AllowMultipleConnectionsFrom = ( 192.168.0 )

############################################

admit:

#/var/cfengine/rpc_out *.$(domain) 128.39.73

#/file *.$(domain) 128.39.73

    /masterfile/inputs    192.168.0.

    /var/cfengine         192.168.0.

然后重启客户机的cfservd进程

2.编辑服务器上的cfrun.hosts客户端列表

在服务器上写配置文件cfrun.host,只需要把客户机的ip加进去,这里我们先只把115加进去

# This is the host list for cfrun

192.168.0.115

3.在服务器上运行cfrun

现在就可以在服务器上运行cfrun –v

…(部分略)…

Loaded /var/cfengine/ppkeys/localhost.priv

Loaded /var/cfengine/ppkeys/localhost.pub

Looking for a source of entropy in /var/cfengine/randseed

cfrun(0):         ………. [ Hailing 192.168.0.115 ] ……….

Connecting to server 192.168.0.115 to port 0 with options

Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub

Connect to 192.168.0.115 = 192.168.0.115 on port 5308

Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub

………………………………………………………

cfrun:yahoon.org: Strong authentication of server=192.168.0.115 connection confirmed

192.168.0.115 replies..

Connection with 192.168.0.115 completed

到客户机115上查看cfagent的日志文件cfengine.centos2.runlog

Sat Nov 3 07:06:37 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.copy._masterfile_inputs__var_cfengine_inp

uts_192_168_0_114_4831:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.processes.proc_cfservd__var_cfengine_bin_

cfservd_1704:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.processes.proc_cfenvd__var_cfengine_bin_c

fenvd__H_4223:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.tidy._var_cfengine_outputs_3686:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:lock.cfagent_conf.centos2.shellcommand._bin_echo_Danger__Will_hello

_____Robison______2889:

Sat Nov 3 07:06:39 2007:Lock removed normally :pid=24784:no_active_lock:

按照115的方法将另外一台客户机116也配置好,并加入到cfrun.hosts文件里面,同样执行cfrun –v就可以看到两台主机都运行了.

4.注意:

1)cfrun是读取cfrun.hosts里面的主机列表,一个主机完成之后再连接下一台主机

2)如果现在有多台主机,我现在有紧急情况要运行其中一台的cfagent,例如115这台机,当然你可以ssh到这台主机上直接执行cfagent –v,但是有了cfrun,你只需要在服务器上执行cfrun 192.168.0.115 –v,注意输出的第一行显示Skipping host 192.168.0.116,很明显,它会跳过116来执行。

3)如果客户机的cfservd.conf从服务器拷贝过来后未增加cfrunCommand = ( "/var/cfengine/bin/cfagent" ),那么在服务器执行cfrun –v的时候会报错,同样以115为例,那么cfrun –v的输出会有:

Loaded /var/cfengine/ppkeys/root-192.168.0.115.pub

………………………………………………………

cfrun:yahoon.org: Strong authentication of server=192.168.0.115 connection confirmed

192.168.0.115 replies..

Host authentication failed. Did you forget the domain name or IP/DNS address registration (for ipv4 or ipv6)?cfrun:yahoon.org: Couldn’t recv

cfrun:yahoon.org: recv

Connection with 192.168.0.115 completed

五、小结

1、通过客户机本身的cfexecd 和 服务器的cfrun如果是同时执行cfagent会不会出现冲突?答案是不会,cfengine有很好的锁的机制来避免这种情况的发生.通常来说,客户机定时执行cfexecd来单独激活自己的cfagent和服务器执行cfrun集中激活客户机这两种方式在实际中都会使用,只是场合不同:

定时执行:作为客户机的一种例行的工作安排进行设置,属于日常任务。

集中执行:一般用于特殊情况,要临时激活某些或者所有的客户机执行cfagent,例如临时更改某个主机的配置等。

2、cfengine本身并没有客户机服务器的严格区分,每一台主机同时可以是服务器,也可以当作客户机.这与windows域的概念有些相似,只要客户端上安装了域管理工具,就可以进行域管理的工作.cfengine也是这种概念.当然,一般来讲方便于集中控制,我们会选定一台机作为服务器,例如本文的centos1,其余的机都用作客户机。

3、cfengine的日志系统:cfengine 的日志是相当丰富的,例如在centos1上,在/var/cfengine目录里面cfengine.centos1.runlog,这是cfagent进程的运行日志, cfengine.localhost.runlog这是cfenvd进程的日志.特别注意的是outputs这个目录下面,有很多文件,每次cfexecd运行一次,就会写入一个文件,文件的内容就是cfagent执行的结果.outputs这个目录包括下面的文件都是由cfexecd程序所产生的。

4、 inputs outputs 目录,这两个目录十分容易搞混,上面已经说了 outputs 目录的作用,inputs相对而言就重要得多,它是 cfengine 默认的当前有效配置文件所在的目录.我们之前创建的 *.conf 之类的文件都是在这个目录下。

5、cfengine 的所有程序都带有-v参数,用于详细的输出,这对我们排错调试带来了很大方便.而且对于cfagent程序,-n参数是十分有用的.对于一个刚刚建立的策略文件直接执行是十分危险的,-n参数是模拟执行,所以带上它来运行cfagent就给我们带来很大的安全性,特别是调试的时候.所以首先应该使用

cfagent –n –v

6、cfengine的文档是十分丰富的,我这里也只是仅仅安装上去,告诉大家基本的使用方法,更详细的使用说明可以查阅其官方网站的文档。