7. 기타시스템관리 Diff
Cron - crond, crontab System Logs 목차 -,,, syslogd logrotate logcheck fail2ban
만약.. 어떤일을일정시각마다반복하게하려면? 2012-06-14 04:00 디스크에있는파일을백업한다. 2012-06-15 04:00 디스크에있는파일을백업한다. 2012-06-16 04:00 디스크에있는파일을백업한다. 2012-06-17 04:00 디스크에있는파일을백업한다. 2012-06-18 04:00 디스크에있는파일을백업한다. 2012-06-19 04:00 디스크에있는파일을백업한다. 2012-06-20 04:00 디스크에있는파일을백업한다... 이걸사람이꼬박꼬박해줄수는없다 이런걸대신해주는게 cron
Cron 은명령어나쉘스크립트따위의일을스케줄할수있게해준다. 지정된시각과날짜에주어진일을하게할수있다. crond (cron daemon) 이라는놈이이런일들을처리해준다. - Daemon( 데몬 ) : 대부분의시간에잠들어있고필요할때마다일하는프로그램. 잘일하고있나확인하기 : cron 데몬이일을할때에는우선해야할일들의목록을얻어와야한다.... 어디에서? crond ps aux grep cron
cron table 의약자. 언제무슨일을할것인지 crond 에게알려주는파일. cd /etc; ls grep crond /etc/crontab /etc/cron.hourly? crontab : 시스템 cron 의설정파일, daily,... : 매시, 매일,... 하지만저파일은오직 root 만이직접수정할수있다. 다행히 cron 은여러사용자들이동시에쓸수있도록만들어졌다. /var/spool/cron/crontabs/ 사용자이름 에자신의설정파일을만들면된다. 하지만일반사용자는 crontabs 디렉토리의열람권한조차없다! 어떻게해야될까?
crontab 명령 자기자신의 crontab 파일은직접편집하는게아니라, 해야한다. crontab -e crontab < 파일이름 > crontab -l crontab -r : 자신의 crontab 편집하기. : 해당하는파일로 crontab 교체하기. : 자신의 crontab 목록보기. : 자신의 crontab 지우기. 적절한권한이있다면다른사용자의 crontab 도건드릴수있다. crontab -u < 다른사용자아이디 > -l 그런데, crontab 파일은어떻게생겼지? crontab : 다른사용자의 crontab 목록보기. 명령을이용
vi /etc/crontab 주석 : 맨앞글자가 # 인줄은무시된다. 그럼가운데 # 자를넣으면? 그건주석이아니다. 비어있는행과행앞의공백문자는무시. 환경변수를설정해주고... cron에지시할것들을적어주면끝.
이름 = 값 으로설정할수있다. 환경변수 등호양옆을제외하고값에들어있는공백은값에포함된다. 값값 앞에공백을넣으려면 "" 나 '' 로감싼다. 은환경변수로치환되지않는다. PATH = $HOME/bin:$PATH 같은건불가능. SHELL EDITOR PATH HOME LONGNAME : cron 이돌아가는 shell. 기본값 : 편집기. 기본값 vim : cron에쓰일프로그램을탐색할경로. : cron에쓰일홈디렉토리. : 해당 crontab 의소유주 /bin/sh MAILTO : cron 출력을받아볼이메일. 기본적으로소유주의이메일로세팅되어있다.
분시날짜월요일년도유저명령 cron 명령어 와같이한줄에하나씩지정해준다. 년도와유저는필수가아니다. 하지만 SPARCS 서버의 crontab 에서는유저는지정해주게되어있다. 모든필드의조건이만족되었을때에만명령이실행된다. 분 날짜 요일 은 0~59, 시는 0~23까지의값을가진다. 는 1~31, 월은 1~12 또는 JAN~DEC까지의값을가진다. 은 0~6 또는 SUN~SAT, 년도는 1970~2099까지의값을가진다.
cron 명령어 - 특수문자 : 모든값을의미한다. 예를들어에를적었다면 " 매달 " 을의미한다. * 월 * - : 범위를나타낼때쓴다. 예를들어요일에 MON-FRI 를적었다면 " 월요일부터금요일까지 " 를의미한다. / : 띄엄띄엄떨어진값을나타낼때쓴다. 예를들어분에 4-44/4 를적었다면 "4분부터 44분까지 4분간격 " 을의미한다. W, # : 각각 ' 제일가까운주중 ', 'n번째 x요일 ' 을의미할때쓰이나많이쓸것같지는않다.
cron 명령어 - 예제 * * * * * sl sl 다. : 매분을실행한다. : 매시 5 분을, 매일오후 8 시 5 분을실행한 05 * * * * sl 05 20 * * * sl sl sl : 매 5 분을, 3 분부터매 5 분을실행한다. */5 * * * * sl 03-59/5 * 10 * * sl sl sl : 매주일요일오전 4 시마다을실행한다. * 4 * * Sun sl sl 00 4 * * Sun sl 00 4 * * 0 sl : 둘다같은뜻이다.
@yearly @monthly @weekly @daily @hourly 미리정의된키워드들, @annually : 매년 1월 1일자정에실행한다. : 매달 1일자정에실행한다. : 매주일요일자정에실행한다. : 매일자정에실행한다. : 매시정각에실행한다. 위의키워드대신쓸수있는 cron 명령어는? @reboot : 부팅되었을때실행한다.
crontab 퍼미션 /etc/cron.allow 와 /etc/cron.deny 로접근권한을설정한다. 한줄에사용자 ID 하나씩을적는다. cron.allow 가존재한다면 (root 포함 ) 그목록에존재하는사용자만용가능. crontab cron.allow 가존재하지않고, cron.deny 만존재한다면, 그목록에존재하는사용자를제외하고 crontab 사용가능. 둘다존재하지않는다면오직 root만이 crontab 사용가능. 초기에는둘다존재하지않으므로, 필요할때생성한다. 문제 : 만약 cron.allow 와 cron.deny 모두에 differ 라는사용자가적혀있다면? 사
서버가아닌일반컴퓨터의경우하루 24 시간내내켜져있지않을수있다! 예를들어면? 0 0 1 * * backup anacron 같은일이있을때, 1 일자정에컴퓨터를꺼놨다 anacron : 24시간켜져있지않은개인용컴퓨터에서, 일이상의간격으로정해진작업을수행할때사용한다. 예 : 개인용컴퓨터에서사용되지않는파일의삭제등집안일을처리할때.. 여하튼스팍스서버에서는딱히쓰일일이없다.
cron 연습 홀수분마다현재시각을 date 명령을이용하여출력시켜라. 결과는홈디렉토리의 date.log 파일에저장시킨다.
로그?
시스템로그 시스템이켜질때부터꺼질때까지의모든상황을프로그램이기록하여파일로저장하는것. 로그파일은그렇게저장한파일을의미한다. 비행기로치자면블랙박스라고할수있다. 비행기사고가났을때블랙박스를찾아분석하는것처럼, 시스템로그는시스템에이상이생기거나해킹을당했을때분석하는용도로쓰인다. syslogd 데몬이부팅시실행되어각종시스템활동을기록한다.
log f + log i + log l + 1 로그파일은기본적으로 /var/log 폴더에저장된다. cron : cron 데몬로그파일 lastlog messages : 각유저의마지막로그인정보. lastlog 명령어로확인한다. : OS 에서보내지는실시간메세지. 용. : 시스템에현재로그인한유저들의정보.,, 명령어에서사 utmp who u finger wtmp 용. dmesg boot : 모든로그인 / 로그아웃과시스템재부팅을기록. last 명령어에서사 : 시스템부팅시나왔던메세지들. : 부트메세지 한번 cat 명령어로로그를확인해보자. /etc/syslog.conf 파일의설정에따라각위치가결정된다.
시스템로그관리하기 로그파일이쌓이면용량이늘어난다. 그렇다고무작정지우면위기상황때이전로그를볼수없게된다. 그렇다면이전로그파일을다른곳에압축해두면된다! 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 로직접확인해보자. /etc/logrotate.conf : 설정파일
logrotate.conf /etc/logrotate.d : 각종프로그램의로그의로테이션관련설정을담는다.
logrotate.conf 2 delaycompress notifempty postrotate sharedscripts mail 메일주소 : 압축을다음로테이션까지미룬다. : 비어있을경우에는로테이트를하지않는다. ~ endscript : 사이에있는스크립트를로테이션이후실행한다. : 각파일별로실행되는스크립트를한번만실행시킨다. : 해당메일주소로덮어씌워진로그파일을메일로보낸다. size 크기 : 로테이션뒤의파일사이즈가이크기를넘지않도록한다. 100k, 10M 등으로크기를지정할수있다.
logcheck 로그파일은보통길고쓸데없는내용을많이담는것같다. logcheck : 시스템로그를분석해서설정한사용자에게메일로알려주는쉘스크립트이다. 매번시스템에접속하지않고, 로그를일일이읽지않아도보안위반사항이나심각한에러등을확인할수있다. 부팅시, 그리고매시각마다 cron에서실행한다. ( cat /etc/cron.d/logcheck )
logcheck 설정 /etc/logcheck logcheck.conf logcheck.logfiles 에는각종설정파일들과폴더들이들어있다. 로 REPORTLEVEL과메일을보낼곳등을설정할수있다. 에는검사할로그파일들의목록이들어있다. 이로그파일들은 egrep 으로필터링한뒤메일로보내준다. 필터링은세단계로이루어진다. SECURITY ALERTS : 침입시도흔적을검사. cracking.d 와 cracking.ignore.d 로필터링. SECURITY EVENTS : 덜치명적이지만주의가필요한사건. violations.ignore.d 로필터링. violations.d SYSTEM EVENTS : 나머지메세지들. 무시된결과는포함하지않는다. 와
REPORTLEVEL SYSTEM EVENT 를필터링하는강도.,, ignore.d.paranoid ignore.d.server ignore.d.workstation paranoid : ignore하는패턴이제일적다. 소수의서비스를제공하는, 높은보안수준을가질시스템에적합하다. server : 기본적인필터링레벨. 여러데몬에대한 ignore 패턴이있다. workstation : 안전한시스템에사용. 대부분의메세지를필터링한다.
fail2ban /var/log/pwdfail, /var/log/apache/error_log 같은로그를읽어, 패스워드를너무많이틀리는 IP를차단한다. filter.d action.d jail.conf : 로그인실패등에해당하는정규표현식들이있는디렉토리. : 상황에따라실행할여려명령어들이들어있는디렉토리. : 각필터와액션을이어주는설정파일. fail2ban.org 에서자세한도움말을볼수있다.
http://wikipedia.org 참고자료 http://www.unixgeeks.org/security/newbie/unix/cron-1.html http://www.fis.unipr.it/pub/linux/redhat/9/en/doc/rh-docs /rhl-cg-ko-9/s1-autotasks-anacron.html http://www.superuser.co.kr/linux/logrotate/page04.htm 작년세미나자료