RadarURL
Skip to content
조회 수 189 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

쉘 프로그래밍을 이용한 시스템 관리 기법

쉘 스크립트를 이용한 시스템 관리 기법 (1)

 

쉘 스크립트는 유닉스와 리눅스 시스템을 관리하는 수단으로 많이 활용되고 있다. 특히 관리자들이 시스템을 점검할 때 내·외장 명령어의 결과를 재가공할 경우 많이 쓴다. 이와 함께 쉘 스크립트를 사용하는 가장 큰 이유를 꼽으라면, 단순 반복작업을 더욱 단순하게 하거나 자동화해 시스템 관리자의 수고를 덜 수 있다는 점이 있다.

 

지난 시간까지 쉘 스크립트 작성을 위한 기본적인 문법과 주로 활용되는 명령어에 대해 알아봤다. 이번 시간에는 시스템 관리과정에서 쉘 스크립트를 활용했던 사례를 중심으로 자동화 및 점검 결과를 재처리하는 방법을 설명하도록 하겠다. 참고로 필자가 소개할 쉘 스크립트 작성 및 실행환경은 AIX 5.3이므로, 자신이 운용하는 시스템과 일부 명령어들이 다를 수 있다는 점을 이해하길 바란다. 그러나 운영 중인 시스템에 호환되는 명령어를 중심으로 보완한다면 소개되는 스크립트를 활용하는 데 큰 무리가 없을 것으로 판단된다.
 

디스크 상태 및 파일 시스템 점검

시스템 점검항목에서 가장 기본적인 것 중에 하나가 디스크 상태와 파일 시스템 사용률 점검이다. <리스트 1>은 쉘 스크립트로 디스크 상태와 파일 시스템 사용률 점검 시 필요한 정보의 가독성을 높여 좀더 쉽게 확인할 수 있게 해준 경우다. 해당 쉘 스크립트를 실행하면 <그림 1>에서 보는 것처럼 한눈에 필요한 부분을 확인할 수 있다.

<리스트 1>의 쉘 스크립트를 세부적으로 확인해 보자. 우선 시스템에 구성된 디스크의 활성화 여부를 점검한 다음 마운트된 파일 시스템별로 사용률을 확인해 사용률이 85% 이상이면 표시하게 했다. 그리고 85% 이상 사용한 파일 시스템을 추출하기 위해 grep -v를 이용해 결과의 타이틀 부분과 예외처리를 해야 하는 부분을 생략하고, sed 명령어를 통해 % 기호를 제거한 결과를 awk 명령어를 가지고 84 보다 큰 항목만을 표시하게 했다.
 


 

<리스트 1> 디스크 상태 및 파일 시스템 용량 점검 #!/bin/sh echo "" echo "******************* Disk 점검 및 Active 상태 ****************************" lspv echo "" echo "******************** 파일시스템 용량 확인 결과 ***************************" echo "" df -g | awk '{print NR, $0}' echo "" echo "******* ★ 사용율이 85% 이상인 파일시스템은 아래와 같습니다. ★ ************" echo "" df -g | grep -v Iused | grep -v /proc | sed -e s/%//g | awk '$4 > 84 {print NR, $0}' echo "**************************************************** ************************"

01.png

 

 

 

 

사용자별 디스크 사용량 분석

앞서 살펴본 사례가 파일 시스템별로 전체적인 사용량을 확인한 것이라면 <리스트 2>는 시스템에 등록된 사용자별로 디스크를 얼마만큼 사용하는지를 점검하는 쉘 스크립트다. 그리고 그 결과는 <그림 2>에서 보는 것처럼 사용자별 디스크 사용량을 MB 단위로 변환해 표시하고 있다. 일반적인 시스템에서 사용자 계정의 디스크 공간은 /home 또는 /users 디렉토리에 사용자별 홈 디렉토리를 등록한 다음 접근 권한을 활용해 분류하고 관리하기 때문에 du 명령어로 해당 디렉토리별 용량을 확인하면 된다. 하지만 /tmp 등 공용으로 사용하는 디렉토리 등에 있는 사용자 등록 파일들까지는 식별이 안 된다는 제한사항이 있다.

그러므로 사용자별로 생성한 파일까지도 점검할 필요가 있다. <리스트 2>의 쉘 스크립트는 /etc/passwd 파일에서 cut과 awk 명령어를 이용해 사용자 계정을 추출하고자 UID가 1만 이상인 사용자만을 검색하도록 했다. 이것은 현재 운영하고 있는 시스템 환경에 맞게 UID를 변경해 적용하면 된다. 이렇게 UID를 가지고 추출된 사용자 계정명은 find 명령어를 이용해서 홈 디렉토리 및 공용으로 사용되는 디렉토리를 지정한 후, 앞서 추출한 사용자가 생성된 파일을 조회해서 나온 용량을 MB 단위 합산해서 최종 결과로 표시하게 해주면 된다.
 


 

<리스트 2> 사용자별 디스크 사용량 점검 #!/bin/sh for name in $(cut -d: -f1,3 /etc/passwd | awk -F: '$2 > 10000 {print $1}') do echo "사용자 $name 의 DISK 사용량은 아래와 같습니다. " find / /usr /var /home /c4i/sgis/temp /c4i/data/exercise -user $name -xdev -type f -ls | awk '{ sum += $7 } END { print sum / (1024*1024) "MB" }' done exit 0

02.png

 

 

 

 

DNS Zone Transfer 설정 점검

때로는 시스템 자원뿐만 아니라 서버에서 구동 중인 서비스들의 이상 유무와 관련된 설정파일을 점검할 때도 있다. 이런 사례에 대해서는 현재 필자가 관리하는 DNS 서비스의 설정 중 하나를 점검했던 경우를 가지고 설명하겠다. 필자는 DNS와 연동되는 응용 서비스가 상대적으로 많다. 그런데 종종 숙련도가 다소 낮은 하부조직 시스템 관리자들 또는 용역 유지보수 요원들이 DNS의 전파기능인 Zone Transfer 부분을 잘못 설정하는 경우가 있다. 이로 인해 접속 중인 단말기나 연동하고 있던 다른 서버에서 DNS 질의에 대한 처리를 정상적으로 못하는 경우가 사례가 종종 발생했다.

이로 인해 해당 설정이 정상적으로 설정됐는지를 확인하는 쉘 스크립트를 <리스트 3>과 같이 작성해 활용했다. 구동 원리는 /etc/named.conf 파일을 awk 명령어를 통해 DNS Zone Transfer 설정이 None으로 됐는지를 점검하는 다소 간단한 방식이다. 물론 Zone Transfer 설정뿐 아니라 시스템상에서 가변적이지 않은 설정들이 변조됐는지를 확인하는 용도로 활용 가능하다.
 


 

<리스트 3> DNS Zone Transfer 설정 점검 #!/bin/sh echo"**************** DNS Zone Transfer 설정 확인 ****************************" echo "" grep allow-transfer /etc/named.conf echo "" echo "******************* ★ 점검 결과는 아래와 같습니다. ★ *********************" echo "" grep allow-transfer /etc/named.conf | awk '{if($3 ~ "none") print "현재 DNS 전파기능에 장애가 있습니다. 전문요원의 점검을 요청하세"}' echo "" echo "*************************************************** *************************"

03.png

 

 

 

 

프로세스 개수 점검

시스템 관리자에게 있어 서버 데몬이나 프로그램의 프로세스 가동여부를 점검하는 것은 일상적인 일이다. 일반적으로 프로그램들이 단일 프로세스로 구동되기보다 여러 개의 프로세스로 구성된 상태로 구동되는 경우가 많다보니, 관리자들은 프로그램의 구성별 프로세스 개수를 점검함으로써 일차적인 시스템 이상 유무를 파악한다.

<리스트 4>는 필자가 운영하는 시스템과 통합보안 관제체계(ESM)의 프로세스에 대한 구성별 개수를 점검하는 쉘 스크립트다. 작동원리는 ps 및 grep 명령어를 이용해 해당 프로세스 그룹을 나누고, wc 명령어를 가지고 카운트해 구성 및 그룹별 정상인 프로세스 개수와 비교해 이상 유무를 점검하고 그 결과를 표시한다.
 


 

<리스트 4> ESM 프로세스 개수 점검 #!/bin/sh clear eua1='ps -ef |grep eua |grep -v grep| wc -l' logsvr2='ps -ef |grep logsvr |grep -v grep | wc -l' procsvr3='ps -ef |grep procsvr |grep -v grep | wc -l' echo "" echo "********************** ESM 관련 프로세스 진단 **************************" echo "" echo " ① eua 프로세스는 갯수는 $eua1 입니다. (정상 : 3개)" echo "" echo " ② logsvr 프로세스 갯수는 $logsvr2 입니다. (정상 : 10개)" echo "" echo " ③ procsvr 프로세스 갯수는 $procsvr3 입니다. (정상 : 13개)" echo "" echo "" echo "**************************************************** ************************" echo "" echo " ★ ESM 관련 프로세스 진단 결과 ★" echo "" if [ $eua1 != "3" ]; then echo " ① eua 관련 프로세스 진단 결과 : 장애(점검 필요) "; else echo " ① eua 관련 프로세스 진단 결과 : 정상 " fi echo "" if [ $logsvr2 != "10" ]; then echo " ② logsvr 관련 프로세스 진단 결과 : 장애(점검 필요) "; else echo " ② logsvr 관련 프로세스 진단 결과 : 정상 " fi echo "" if [ $procsvr3 != "13" ]; then echo " ③ procsvr 관련 프로세스 진단 결과 : 장애(점검 필요) "; else echo " ③ procsvr 관련 프로세스 진단 결과 : 정상 " fi echo "" echo "**************************************************** ************************"

04.png

 

 

 

 

주요 설정 파일 권한 점검

시스템 관리에서의 파일의 권한은 보안측면, 특히 비인가자의 접근 통제 및 변조를 막기 위한 특별 관리대상이다. 하지만 서버에서 구동 중인 다양한 데몬과 서비스 등의 설정을 매번 확인하는 것은 번거로운 일이다. 특히 어떤 설정은 권한이 변경되면 해당 기능이 제대로 작동하지 않을 수 있으므로 설정 권한에 대한 부분은 유심히 점검해야 한다.

실제로 필자가 관리하는 하부 조직의 단위 서버에서 일부 기능에 장애가 발생돼 이와 관련한 연동 및 설정을 점검하고자 많은 시간을 소비한 적이 있었다. 그 결과 /.rhosts 설정 권한이 변경돼 발생된 것임을 확인하고 조금 허탈한 적이 있었다. 이렇게 사소할 수 있는 파일 권한 점검을 간과하는 것만이라도 예방한다면 전체적인 시스템 점검 및 분석을 위한 불필요한 시간 낭비를 줄일 수 있다. 주요 설정 파일의 권한 점검을 일괄 점검하도록 쉘 스크립트를 활용한 사례가 <리스트 5>다.
 


 

<리스트 5> 주요 설정 파일 권한 점검 #!/bin/sh echo "" echo " ◈ 주요 설정 파일 권한 점검 결과" echo "************************************************** **************************" echo "" echo " ⓐ /.profile 점검 결과 " ls -al /.profile | awk '{if($1 ~ "-rw-r--r--") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo " ⓑ /.rhosts 점검 결과 " ls -al /.rhosts | awk '{if($1 ~ "-rw-------") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo " ⓒ /etc/profile 점검 결과 " ls -al /etc/profile | awk '{if($1 ~ "-r-xr-xr-x") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo " ⓓ /etc/rc.nfs 점검 결과 " ls -al /etc/rc.nfs | awk '{if($1 ~ "-rwxr-xr-x") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo " ⓔ /etc/rc.tcpip 점검 결과 " ls -al /etc/rc.tcpip | awk '{if($1 ~ "-rwxr-x---") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo " ⓕ /etc/hosts 점검 결과 " ls -al /etc/hosts | awk '{if($1 ~ "-rw-r--r--") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo " ⓖ /etc/filesystems 점검 결과 " ls -al /etc/filesystems | awk '{if($1 ~ "-rw-rw-r--") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo " ⓗ /etc/inittab 점검 결과 " ls -al /etc/inittab | awk '{if($1 ~ "-rw-r--r--") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo " ⓘ /etc/inetd.conf 점검 결과 " ls -al /etc/inetd.conf | awk '{if($1 ~ "-rw-r--r--") print "☞ 정상" ;else print "☞ 점검 필요"}' echo "" echo "**************************************************** ************************"

05.png

 



구동원리는 시스템에서 점검해야 하??, 권한부분을 awk 명령어를 통해 추출한 후 정상적인 권한상태와 비교함으로써 이상 유무를 점검하도록 했다.
 

 

 

Set User ID 권한 파일 점검

파일이 실행될 때 실행파일을 소유한 그룹 및 사용자 권한을 가진 상태로 설정해주는 setgid와 setuid는 보안에 있어서 큰 취약점이 될 수 있다. 특히 root 권한으로 된 실행파일이라면 문제가 매우 심각하므로, 시스템 관리자는 주기적으로 setgid와 setuid에 권한 파일이 존재하는지를 점검해야 한다. <리스트 6>의 쉘 스크립트는 시스템 전체를 대상으로 어떤 사용자 파일이 setuid로 설정됐는지를 점검해 출력하고, /setuid.log 파일에 그 결과를 저장하게 한다. 또한 재실행 시 기존 저장된 로그와의 중복 저장을 막기 위해 쉘 스크립트가 실행 초기부터 로그 파일인 /setuid.log를 초기화할 수 있게 프로그래밍했다.

특히 소개된 쉘 스크립트를 응용해 주기적인 점검을 수행할 수 있도록 cron에 스케줄을 등록하거나 점검결과를 관리자 계정 메일로 발송해준다면 좀더 손쉽게 관련 취약요소를 식별할 수 있을 것이다.
 


 

<그림 6> 주요 설정 파일 권한 점검 결과 #!/bin/sh cat /dev/null > /setuid.log for perm in $(find / -type f -perm -4000 -print) do owner="$(ls -ld $perm | awk '{print $3}')" if [ ! -z $perm ] then echo " ★ $owner 의 Setuid 권한을 포함한 파일 : $perm " echo $perm >> /setuid.log fi done exit 0

이번 시간에는 시스템 관리의 효율성을 높여주는 쉘 스크립트 제작해 활용한 사례를 소개했다. 다음 시간에는 미처 소개하지 못한 로그파일의 Full 현상을 예방하는 로테이션 기능과 필요한 로그를 원격지에서 ftp를 이용해 전송하는 기능에 대한 쉘 스크립트를 소개하겠다.

 



 

출처 : 2013 마이크로소프트웨어 9월호

제공 : DB포탈사이트 DBguide.net 

 

출처 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0JHcJ&articleno=8382786

?

List of Articles
번호 제목 글쓴이 날짜 조회 수
164 CentOS Linux 에서 설치시 uuid/uuid.h: No such file or directory JAESOO 2016.10.24 106
163 한번에 끝내는 CentOS 7.x (7.0 ~ 7.2) 웹서버세팅 (센토스 서버세팅) JAESOO 2016.10.24 191
162 리눅스(Linux) 디렉토리 구조 JAESOO 2016.10.19 173
161 ssh서버가 비밀번호를 거부했습니다. 다시 시도하십시오. JAESOO 2016.08.26 425
160 [리눅스] IP 설정 변경 하기 JAESOO 2016.08.26 339
159 리눅스 설치후 초기설정해야 할 것들 [2] JAESOO 2016.07.13 177
158 리눅스 설치후 초기설정해야 할 것들 [1] JAESOO 2016.07.13 173
» 쉘 프로그래밍을 이용한 시스템 관리 기법 JAESOO 2016.05.11 189
156 AIX 자주 쓰이는 관리 명령 모음 JAESOO 2016.05.11 478
155 AIX 시스템상의 core, SMT(Simultaneous Multi Threading) 수 확인하기 JAESOO 2016.05.11 277
154 리눅스 호스트명 변경 JAESOO 2016.05.11 152
153 AIX 서버 기초 JAESOO 2016.05.11 499
152 AIX Admin Study 교육 자료 JAESOO 2016.05.11 448
151 성능 엔지니어링 대한 접근 방법 (Performance tuning) JAESOO 2016.05.04 144
150 [AIX] 파일시스템 관리 (du, df) JAESOO 2016.05.03 303
149 IBM AIX Admin (사용자 DISK 관리) JAESOO 2016.05.03 141
148 [UNIX] 유닉스 기본명령어 JAESOO 2016.05.03 232
147 [AIX] 파일시스템 용량 늘리기 JAESOO 2016.05.03 235
146 유닉스 상에서 ls 출력물을 MB 단위로 출력해주는 옵션 JAESOO 2016.05.03 84
145 ls 명령시 날짜 전체가 보이도록 하기 JAESOO 2016.05.02 51
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 Next
/ 10

PageViews   Today : 1,290   Yesterday : 1,275   Total : 19,676,123  /  Counter Status   Today : 427   Yesterday : 475   Total : 1,383,147
Site Info   Member : 220  /  Total documents : 1,221   New documents : 0  /  Total comments : 24

Edited by JAESOO

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소