7 기타시스템관리 SPARCS 11 cling
Cron crond crontab System Logs syslogd logrotate logcheck fail2ban 기타 시스템 관리
cron?
cron 주어짂일정에따라명령어를실행하는작업스케쥴러데몬 새벽 5 시마다디스크를백업하려면? Multi-user runlevel 에들어가면서 init 에서실행 시스템과각계정의명령어실행일정을읽어서메모리에불러온다. 근데어디서?
crontab 어디에서일정을읽어올까? 시스템크롞설정파일 : /etc/crontab 사용자크롞설정파일 : /var/spool/cron/[username] 명령어스케쥴이들어있는이런파일을 crontab(cron table) 이라한다. 시스템크롞설정디렉토리 /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly Debian, Redhat 에서는 /etc/cron.d 디렉토리내에있는파일도 crontab 으로취급한다.
crond cron 데몬은매분마다 crontab의각명령어가실행될시갂인지확인한다. 실행된명령어의 output, error는 crontab의 owner에게메일로보내짂다. 또한 crontab 파일의수정시갂을확인하여변경된경우리로드한다. 변경후데몬을새로시작할필요가없다 실행확인 : ps ef grep crond 수동으로시작 / 종료 / 재시작하려면 : /etc/rc.d/init.d/crond start /etc/rc.d/init.d/crond stop /etc/rc.d/init.d/crond restart
user cron 개별사용자가 /var/spool/cron/[username] 파일에자신의 crontab 설정 직접수정 X root 권한이없으면폴더에접근하지도못할수있다 crontab 커맨드사용 자신의 crontab 내용보기 : crontab -l 자신의 crontab 파일삭제 : crontab -r 자신의 crontab 파일수정 : crontab -e root 는일반사용자의 crontab 을변경할수있다 crontab u [username] [-l / -r / -e ] 사용자 cron 에서실행되는명령어의 output, error 는사용자의메일로보내짂다.
crontab file format 빈행, 행시작의스페이스와탭무시 각행은주석, 홖경변수설정, 크롞명령어중하나 주석 (comment) # 으로시작 행의중갂에주석을입력할수없다
crontab file format 주석 (comment) 홖경변수설정 크롞명령어
crontab file format 홖경변수설정 (environment setting) name = value 등호양옆을제외한빈칸은 value로들어갂다 value 앞에빈칸을넣으려면큰 / 작은따옴표로감싼다 value는홖경변수로치홖되지않는다 PATH = $HOME/bin:$PATH와같은사용불가능 cron 에의해자동적으로설정되는홖경변수 : SHELL, LOGNAME, HOME, PATH, MAILTO, EDITOR SHELL은기본적으로 /bin/sh로설정되어있다 (bourne shell) bash에서홈디렉토리를나타내는 ~ 사용불가능, $HOME으로대체 EDITOR는 vim으로설정되어있다 LOGNAME은 crontab의소유주를나타내며나머지변수값은변경가능 MAILTO = root / MAILTO = noname@gmail.com
crontab file format 크롞명령어 (cron command) 수행시갂을나타내는 5-6개의필드와명령어현재시갂이모든시갂필드를맊족할때명령어가수행된다 sparcs 서버 crontab에는유저도쓰게되어있다 필드이름 필수여부 허용되는값 특수문자 분 (minute) Yes 0-59 * /, - 시 (hour) Yes 0-23 * /, - 날짜 (day) Yes 1-31 * /, -? L W 월 (month) Yes 1-12 / JAN-DEC * /, - 요일 (weekday) Yes 0-7 / SUN-SAT * /, -? L # 년도 (year) No 1970 2099 * /, - 별표 ( * ): 모든값 / 콤마 (, ): 값구분
crontab file format cron command 결과 * * * * * [command] 매분마다실행 17 * * * * [command] 매시 17분마다실행 25 6 * * * [command] 매일 6시 25분마다실행 09,39 * * * * [command] 매시 9분, 39분마다실행 0 23-7 * * * [command] 23시부터 7시까지매시실행 0 23-7/2 * * * [command] 23시 ~7시까지 2시갂마다실행 */5 * * * * [command] 매 5분마다실행
crontab file format string meaning @reboot 시작시실행 @yearly 1년마다 (0 0 1 1 *) @annually = @yearly @monthly 한달마다 (0 0 1 * *) @daily 한주마다 (0 0 * * 0) @midnight = @daily @hourly 한시갂마다 (0 * * * *)
crontab file format Redirection 을이용하여 output 이나 error 를메일대신파일에연결할수있다 * * * * * /sbin/ping -c 1 192.168.0.1 > /dev/null output은무시되고 error맊메일로보내짂다 * 0 1 */2 * /sbin/ping -c 192.168.0.1; ls -la >> /var/log/cronrun 두달마다 ping과 ls를수행해서결과를 /var/log/cronrun에저장한다 * 0 1 */2 /sbin/ping -c 192.168.0.1; ls la >> /var/log/cronrun 2>&1 output과 error 모두 /var/log/cronrun에저장한다 실행할내용이긴경우쉘스크립트를이용할수있다
crontab permission /etc/cron.allow 파일이있는경우 파일에등록된사용자맊 crontab 사용가능 (root 도마찬가지 ) /etc/cron.deny 파일이있는경우 파일에등록된사용자는 crontab 사용불가능 /etc/cron.allow, deny 둘다졲재할경우 둘다등록된사용자는 crontab 사용가능둘다등록되지않은사용자도 crontab 사용가능 초기에는졲재하지않으므로필요할때생성행마다 ID 하나씩적으면됨 echo ALL >>/etc/cron.deny
cron.hourly, daily, weekly
anacron 시스템이지속적으로동작하지않더라도일단위 ( 혹은며칠, 몇주, 몇달단위 ) 의작업을하도록맊들어졌다. 사용되지않는파일의삭제등리눅스의집안일 보통 cron 에서새벽등시스템사용이적은시갂에수행하도록되어있지맊그시갂에시스템이꺼져있다면? anacron 을이용하면개인컴퓨터에서도정해짂갂격마다꼭작업을수행할수있다. 그러니까스팍스서버에는없다.
cron practice 매 2 분마다 Hello World! 를출력하고결과는자신의홈디렉토리의 log 파일에기록되도록해보자
log?
System Logs 로그 : 시스템이부팅할때부터종료할때까지작동중인모든상황을별도의파일로맊드는것 로그파일 : 이러한기록이저장되는파일 로그파일을분석해서시스템의각종홖경과작업상태등을확인하고검사할수있다 시스템에이상이생겼을때, 해킹을당했을때 1 차적인확인을로그파일에서하게된다
System Logs syslogd 데몬이부팅시마다실행되어시스템의각종홗동을기록한다 로그파일의기본위치 : /var/log/ lastlog 각유저의마지막로그인정보. lastlog 명령어로확인한다. messages 운영체제에서보내지는실시갂메시지 utmp 시스템에현재로그인한유저들의정보. who, w, finger 커맨드가사용. wtmp 모든로그인 / 로그아웃과시스템재부팅을기록. last 커맨드에서사용 dmesg 시스템부팅시나왔던메시지들을기록 boot 부트메시지 cron 크롞데몬로그파일 /etc/syslog.conf 파일의설정에따라각내용을기록할위치가결정된다.
syslog.conf /etc/syslog.conf 주석을제외한각행이 selector 와 action 필드로구성되어있다. selector 는다시 facilities 와 level(priorities) 의값으로구성되어있다. 메시지종류 (selector) 기록될장소 (action) *.info; *.notice mail.debug *.warn kern.emerg /var/log/messages /var/log/maillog /var/log/syslog /dev/console 내용을변경한후에는 syslogd 에 HUP(hang up) 시그널을보내서설정파일을다시읽도록한다
syslog.conf 메시지종류 (selector) facility.level [;facility.level ] facility: 메시지를생성하는애플리케이션 / 기능 auth login 이나 su 와같은인증프로그램 authpriv 개인인증을요구하는프로그램 cron cron이나 at과같은프로그램 mail 메일시스템 news 유즈넷뉴스프로그램 user 사용자프로세스 * 모든 facility daemon( 데몬 ), kern( 커널 ), syslog.
syslog.conf level: 메시지의등급 위험레벨이낮은순으로 debug, info, notice, warning, err, crit, alert, emerg debug 프로그램을디버깅할때발생하는메시지 info 통계나기본정보메시지 notice 에러는아니지맊특별한주의가필요한메시지 warning 주의를요하는경고메시지 err, error 에러가발생하는경우메시지 crit 크게급하지는않지맊시스템에문제가생기는단계의메시지 alert 즉각적인조치가필요한상황 emerg 모든사용자에게젂달되어야하는위험한상황 facility.none: 해당 facility 를제외하겠다는의미
syslog.conf
syslog.conf
Managing System Logs 로그파일이쌓이면용량이커지며, 디스크용량이부족하면파티션이너무빨리찰수도있다 무작정지우기에는위기상황에로그파일이유용할수있다 -> 백업해보자! 로그파일을복사해서압축하고비워주면된다 mv /var/log/messages /var/log/messages-backup cp /dev/null /var/log/messages gzip /var/log/messages-backup cron 으로반복수행하기? 백업파일이같은파일명으로계속덮어쓰기될것이다
Log rotation 돌려막기 압축파일이몇개이상 ( 예 : 10 개 ) 생기면가장오래된압축파일을삭제하고새압축파일로덮어쓴다 시스템에따라 savelog, logrotate 와같은쉘스크립트가미리작성되어있다 스팍스서버에서는 logrotate 를사용하여관리중 ls /var/log
logrotate
logrotate test x FILE: 파일이졲재하고실행가능한지검사 logrotate 프로그램이졲재하고실행가능하지않으면스크립트종료 /etc/logrotate.conf 를 argument 로해서 /usr/sbin/logrotate 프로그램실행 logrotate.conf: 홖경설정파일
logrotate logrotate는보통 cron으로날마다실행되도록설정됨 로그의로테이션, 압축, 제거, 메일링을자동화 각로그파일을일, 주, 월, 혹은크기에따라관리가능 임의갯수의홖경설정파일을 argument 로젂달. 뒷쪽파일이앞쪽파일의설정을덮어쓰게된다. 보통다른설정파일들을포함 (include) 하는설정파일하나, /etc/logrotate.conf 를쓴다 ㅋ
logrotate configuration file crontab 과비슷한 comment Global option Local option
logrotate configuration file weekly/monthly/hourly: 주 / 달 / 시갂마다로테이션을한다 rotate 4: 삭제하기젂 4 번의로테이션을거친다 create: 로테이션후새로운로그파일생성 compress: 로그파일을압축한다. 일반적으로로그가너무크지않으면압축하지않는다 include /etc/logrotate.d missingok: 로그파일이없어도무시하고에러메시지를출력하지않는다 create mode owner group
logrotate configuration file
logrotate configuration file notifempty delaycompress: 로그파일의압축을다음로테이션까지미룬다 postrotate/endscript 사이에있는스크립트를로테이션후에실행한다 prerotate/endscript sharedscripts 이렇게 * 를사용한경우 prerotate, postrotate 가각파일에대해서실행되므로여러번실행되게되는데한번맊실행되게한다. mail alphamin@gmail.com: 로테이션이끝나서폐기되는내용을미스평창에게메일로보낸다 size (100/100k/100M/1G): 로그파일크기에따라로테이션
logrotate configuration file
logcheck 로그파일이너무길고쓸데없는내용이맋은것같다. 좀중요한내용맊편하게볼수없을까요? 시스템로그를분석해서이를설정한사용자에게메일로알려주는쉘스크립트 매번시스템에접속하지않아도보안위반사항이나비정상적인행위를확인할수있다! 기본적으로시스템부팅시, 그리고매시갂마다 cron 에서실행 중복된검사를피하기위해로그파일중마지막에읽은위치를기억해주는 logtail 이라는프로그램을사용한다
logcheck
/etc/logcheck
logcheck etc.logfiles 파일에는검사할로그파일의목록이들어있다 이로그파일들을 egrep 을이용하여필터링한후메일로보내준다. 필터링은세단계로나뉜다 SECURITY ALERTS: 침입시도흔적을검사하는레이어 cracking.d 검사에사용될 regular expression 패턴이적힌파일이들어있다 cracking.ignore.d 필터링한결과중이디렉토리내에있는패턴과맞는것은잘못된필터링으로갂주하고무시한다. SECURITY EVENTS: 덜치명적이지맊주의가필요한사건 violations.d violations.ignore.d SYSTEM EVENTS: 나머지로그메시지 cracking.d나 violations.d에해당하는파일없이모든나머지로그가 SYSTEM EVENTS에포함될대상으로고려된다. (ignore된결과는포함하지않는다 ) ignore.d.paranoid / ignore.d.server / ignore.d.workstation
logcheck REPORTLEVEL SYSTEM EVENTS를필터링하는강도 paranoid 소수의서비스를제공하는고보안시스템에적합 ignore하는패턴이가장적다수맋은메시지를다볼수있을때사용할것 server 기본적인필터링레벨 여러데몬에대한 ignore 패턴이있다 workstation 안젂한시스템에사용. 대부분의메시지를필터링한다 logcheck.conf 기본설정파일 REPORTLEVEL= server SENDMAILTO= root
fail2ban /var/log/pwdfail 이나 /var/log/apache/error_log 같은로그파일을읽어서패스워드를너무맋이틀리는 IP 를차단한다. filter.d 로그인실패등에해당하는 regular expression 패턴이들어있는디렉토리 action.d 상황에따라실행할여러명령어가들어있다 jail.conf 각필터와액션을이어주는설정파일
Reference http://www.utm.edu/organizations/tsa/books/(oreilly)%20running%20li nux,%204th%20edition.pdf http://www.wikipedia.org/ http://www.pantz.org/software/cron/croninfo.html http://suya55.tistory.com/32 http://lupusmaru.egloos.com/1090823 http://www.fis.unipr.it/pub/linux/redhat/9/en/doc/rh-docs/rhl-cg-ko- 9/s1-autotasks-anacron.html http://www.joinc.co.kr/modules/moniwiki/wiki.php/site/system_programi ng/unix_env/syslog_1 http://chyeon.tistory.com/entry/linux-system-log-1 http://knamhun.blogspot.com/2008/04/linux-varlog-information.html http://www.fail2ban.org/wiki/index.php/main_page Linux Man Page