프로그램 | 용도 |
---|---|
cfagent | 로컬 시스템에 설정 파일을 적용하는 주요 유틸리티 |
cfrun | 리모트 시스템에 설정 파일을 적용하는 유틸리티 |
cfservd | cfrun을 지원하는 서버 프로세스. 리모트 시스템으로부터 Cfengine 에이전트 기능을 사용할 수 있게 해줌. |
cfexecd | 작업 스케쥴링 및 보고 등을 자동화 해주는 데몬 |
cfenvd | 문제 감지 데몬 |
cfkey | 보안 키 생성 유틸리티 |
참고 도서 |
control: domain = ( ahania.com ) 로컬 도메인 지정 access = ( chavez root ) cfagent를 실행할 수 있는 사용자 actionsequence = ( links tidy ) 수행할 작업 (순서대로) maxage = ( 7 ) 나중에 사용할 변수 정의 groups: 호스트 목록 정의 HaveNoBin = ( blake yeats bogan toi robin ) tidy: 작업: 불필요한 파일 삭제 /tmp pattern=* age=$(maxage) recurse=inf /home pattern=*~ recurse=inf links: 작업: 상징적 링크 유지 /logs -> /var/log 필요에 따라서 링크 생성 HaveNoBin:: 다음 링크는 이 호스트에서만 적용된다 /bin -> /usr/bin이 파일에는 4부분으로 구성되어 있으며 각각은 키워드, 콜론으로 시작된다. 첫번째 control은 파일의 일반적인 설정, 변수 정의, 기타 용도 등을 지정하는데 사용된다. 여기서는 이 파일을 입력으로 cfagent를 실행할 수 있는 사용자 목록, 파일을 호출 했을 때 수행할 작업 순서, maxage 변수 등을 정의하고 이 변수의 값을 7로 지정했다.
name = ( value )작업은 Cfengine이 수행할 수 있는 작업으로서 키워드로 지정하면 된다. 여기서는 tidy 작업을 먼저 수행하고 links 작업을 수행하도록 했다. 각각 사용된 작업은 설정 파일에 정의되어 있어야 한다.
start-dir [pattern=regexp] [recurse=n] options여기서 start-dir은 검색을 시작할 디렉토리, regexp는 지우고자 하는 파일명을 지정하는 정규 표현식, n은 어디까지 검색을 할지(inf는 무제한), options는 파일을 선택할 때 사용되는 추가 옵션을 의미한다.
link -> target예제에서는 /var/log 디렉토리가 /logs로 연결되어 있어야 하고 /usr/bin 디렉토리가 /bin으로 링크되어 있어야 한다고 했다. 실행하면 Cfengine은 링크가 있는지 확인하고 없을 경우 만들어 준다. 그러나 후자의 링크는 HaveNoBin 목록에 있는 호스트에서만 적용된다. 이것은 클래스 지정(2개의 콜론 사용)으로 링크 정의를 앞세움으로써 가능하다. 여기서는 클래스가 호스트 집단 이름이었지만 보다 복잡한 클래스를 사용할 수도 있다.
작업 | 용도 |
---|---|
links | 상징적 혹은 하드 링크를 유지, 보수 |
tidy | 불필요한 파일 삭제 |
files | 파일 소유자, 권한, 수정 시간 등을 점검 혹은 설정 |
directories | 디렉토리 소유자 및 권한 설정 |
disks | 파일 시스템을 사용할 수 있는지, 남아있는 공간이 충분한지 확인 |
disable | 불필요한 파일을 name.cfengine으로 이름 변경 |
copy | 로컬 또는 리모트 파일을 로컬 시스템으로 복사 |
editfiles | 아스키 텍스트 파일 편집 |
binservers mailserver homeservers |
자동 NFS 파일 시스템 마운트에 사용되는 서버를 지정 |
mountables | NFS로 마운트 할 수 있는 로컬 파일 시스템 지정 |
miscmounts unmount |
Cfengine에서 마운트하거나 언마운트 할 파일 시스템 지정 |
processes | 프로세스가 존재하는지 확인하고 제어 |
interfaces | 네트워크 인터페이스 속성 지정 |
resolve | /etc/resolv.conf 유지보수 |
defaultroute | 디폴트 게이트웨이 지정 |
shellcommands | 임의의 셸 명령어 수행 |
module:name | 추가 모듈 사용 |
control: split = ( " " ) dirlist = ( tmp var/tmp 1/scratch 2/scratch ) tidy: /$(dirlist) pattern=* age=3 recurse=infcontrol 부분에서는 목록의 항목을 분리하는데 사용되는 문자를 정의하고 나서 4개의 디렉토리를 포함하고 있는 dirlist 변수를 정의한다. 이 변수는 tidy에서 사용되며 지정된 3가지 옵션은 디렉토리에 차례대로 적용된다.
files: /etc/security mode=600 owner=root group=0 recurse=inf action=fixall /home recurse=inf include=*.dat action=compress /var/log/messages owner=root mode=644 action=create첫번째 엔트리는 /etc/security 디렉토리 및 그 밑에 있는 모든 파일과 디렉토리 등의 소유자와 권한을 지정하고 있다. 디폴트로 Cfengine은 현재 설정을 점검한다. 그러나 cction=fixall 옵션을 지정하면 필요에 따라 현재 설정을 원하는 상태로 수정해준다. 두번째 엔트리는 /home 디렉토리 밑에 있는 확장자가 .dat인 파일을 압축하도록 한다. 세번째 엔트리는 /var/log/messages 파일이 없을 경우 생성하도록 한다.
control: ChecksumDatabase = ( /usr/local/admin/cfengine/cksums ) files: /usr/bin checksum=md5 exclude=*.sav action=warnallcontrol 부분에서는 점검할 파일의 정확한 체크썸을 저장하는데 사용될 데이터베이스를 지정하고 files 엔트리에 checksum 옵션은 파일을 체크썸을 비교하도록 한다. 체크썸이 틀렸을 경우 경고 메시지가 표시된다.
disable: /etc/hosts.equiv home/.rhosts inform=true /var/log/messages rotate=6첫번째 두 엔트리는 파일이 있으면 .cfengine 확장자를 추가한 이름으로 변경해준다. 두번째 엔트리에서는 특수 디렉토리 키워드 home을 사용해서 모든 사용자 홈 디렉토리를 지칭한다. 게다가 그러한 파일이 발견되면 경고 메시지가 표시된다.
processes: "sendmail" restart "/usr/sbin/sendmail" useshell=false inform=true "inetd" signal=hup "kudzu" signal=kill "g02" matches <=2 signal=suspend action=bymatch inform=true각 엔트리에서 첫번째 필드는 ps 명령어 출력에서 검색할 패턴을 지정하고 있다. 대개 Cfengine은 각 엔트리에 해당사항을 각각의 프로세스에 적용한다.
클래스 정의 | 의미 |
---|---|
solaris.Monday.Hr01:: | 솔라리스 시스템. 월요일 새벽 1시 |
aix|hp-ux:: | AIX, HP-UX 시스템. |
aix.!vader:: | 호스트 vader를 제외한 AIX 시스템. |
December.Day31.Friday:: | 12월 31일이 금요일일 경우 |
copy: linux:: $(masteretc)/rc.config dest=/etc/rc.config o=root mode=644 ShadowHosts:: $(masteretc)/passwd server=$(pwdmaster) dest=/etc/passwd owner=0 group=0 mode=644 trustkey=true $(masteretc)/shadow server=$(pwdmaster) dest=/etc/shadow owner=0 group=0 mode=600 trustkey=true encrypt=true첫번째 copy 작업은 리눅스 시스템에서만 적용되는데 masteretc 변수로 지정되어 있는 위치에 있는 rc.config 파일을 /etc로 복사하고 지정된 소유자 및 권한으로 설정해준다. (masteretc 변수는 설정 파일에 다른 부분에 정의되어 있다.)
이전 글 : StringBuilder 입문
최신 콘텐츠