Posted on 2004/03/03 13:02
Filed Under 리눅스기술문서/서버관련 조회수:

업무 효율화(?) 의 한방도로 시스템내의 telnlet 접속자 관리를 위한 방도 에 대한
안내입니다.

telnet 으로 접속하여 작업을 할경우 시스템내의 해당 홈디렉토리에 .bash_history
화일로 저장이 됩니다.

이 분산된 .bash_history 화일을 시스템내 하나의 화일에 저장하고 또한 이렇게
생성된 여러 시스템의 화일을 하나의 로그 전용서버에서 볼수 있는 방법에 대한 안내
입니다.

아직 수정되어야 할 부분도 많지만 참고하시기 바라며 더 좋은 의견 있으시면 조언을
부탁드립니다.

붙임 : 스크립트가 완료되었습니다.

control 서버에 있는 /admin 디렉토리에 보시면 pr 이라는 화일에 그날의
모든 이용자가 작업한 명령어가 저장됩니다. 이 화일에는 각 서버와 각 명
령어를 입력한 이용자의 id 가 기재됩니다.

##### 대외비 #####

telnet 접속자 관리를 위한 history 분석 방도 ver0.2

produced by antihong at tt.co.kr


"모든 것은 안의 문제라..." "안을 보라!! 안이 즐겁다!"
이 카피는 비단 모자동차의 광고에서만이 의미가 있는 것이 아니다.

실제적으로 보안관리라 함은 지속적으로 log화일을 분석하는 것도 중요하지만
시스템의 설 정을 여기저기 살펴보는 내부인을 관리하는 것도 상당히 중요하다.
또한 실제로 크래킹을 당한다 하더라도 크래커는 일반 id로 접속후 root권한을
얻은후 크래킹 작업을 하므로 일반id로 작업하는 명령어를 감시하는 것은 매우
중요한 일이라 할수 있 다. 따라서 이를 위해 다음과 같이 설정한다.

먼저 로그 전용서버가 있다.
서버가 많아지면서 일일이 해당 서버에 접근하여 로그화일을 살펴보는 것
이 이제는 거의 불가능해졌다.

따라서 로그 전용 서버를 두어 이 서버에서 모든 서버의 로그 화일만을 받아
일일이 해당 서버에 접속할 필요없이 로그 전용 서버에서 모든 로그를 살펴보는
것이다.

이는 다음과 같이 구현한다.

먼저 /etc/profile 에 다음의 줄을 첨가한다.
HISTFILE=/.../www32

TMOUT=200
echo "####################" >> /.../www32
echo "로그인 ID: $LOGNAME " >> /.../www32

(www32는 서버번호, 즉 서버에 따라 달라짐)
이는 telnet 접속후 타이핑하는 모든 명령어는 기본적으로 자신의 홈디렉
토리에
.bash_history 로 생기게 되는데 이를 생기지 않게 하고 모든 명령어의 내
용을/.../디렉토리 에 www32 로 저장되도록 하는 것이다.
이때 모든 사용자의 명령어가 하나의 파일에 그대로 출력되므로 특정 명령
어가 누구의 명령 어인지 알수 없다.
따라서 시작시 여기서부터 명령어입력은 누구의 것이다 라는 것을 지정하는

것이 필요하며 이를 위해

echo "####################" >> /.../www32
echo "로그인 ID: $LOGNAME " >> /.../www32

줄을 첨가한 것이다. 이는 명령어입력 시작전에 실행되어 이 부분부터는
이 사람이 입력하
는 명령어이다라고 알려주는 것이다.
그러나 동시에 여러 이용자가 접속하여 명령어를 입력하였을 경우 한 부분
에 여러이용자들 의 입력 내용이 나오는 문제는 해결할 수 있는 뾰족한 답안이 없는
듯 하다. 그러나 telnet 으로 접속하여 동시에 사용하는 경우가 그리 많지 않으므로
이 부분은그리 큰 문제는 되지 않을 듯 하다.
그러나 굳이 차선책을 쓴다면 TMOUT 이라는 옵션을 쓰는 방법이다.
이는 일반 PC 통신등에서 쓰이는 방법으로 일정 시간동안 키입력이 없을
경우 자동으로 접 속이 끊기는 것으로 기본적으로 TMOUT=200 정도로 잡아주면
200초동안 키입력이 없을 경우 자동으로 telnet 접속이 끊기게 된다.
system 계정등 적용이 되지 않기를 원하면 각 계정의 .bashrc 에 TMOUT=-1 이라
지정하면 된다.

모든 사용자가 쓸 수는 있되 읽을 수는 없도록 하게 하려면 권한에 주의한다.
권한설정은  -rwx----w- 1 system system 17 Apr 9 10:28 www32
정도면 되겠다.

저장되는 디렉토리이름을 ... 으로 한 이유는 여러분도 잘 알 것이므로 별도로 언급하
지 않 겠다. 그럼, 이제 사용자들이 telnet 접속후 명령어를 타이핑 때마다 위 파일에
저장되도록 하는 것은 되었다.

그리고 system 및 root 등 특정아이디에 대해서 로그를 남기지 않으려면 해당
계정의 홈디렉토리에 있는 설정화일중 .bash_profile 에 다음을 추가해 주면 된다.
HISTFILE=/home/system/.bash_history 그러면 모든 이용자들은 지정된 하나의
파일에 저장이 되지만 특별히 지정한 사람은 별도로 지정한 하나의 파일이 우선순위가
있으므로 지정된 화일에 저장이 된다.

물론 위의 경로는 시스템에 따라 달라질 것이다.

그런데 위 로그 파일이 커지면 이것도 관리하기가 힘이 든다.
따라서 적당하게 rotate를 시킬 필요가 있으며 로그를 rotate 하는 툴인
logrotate 에 대해 알아보자.

(logrotate 에 대한 보다 자세한 설정은

http://kldp.org/KoreanDoc/Log_Admin-KLDP를 참고한다.)

/etc/logrotate.conf 의 하단에 다음의 줄을 첨가한다.


/.../www32 {
daily
rotate 4
errors system at tt.co.kr
}
이는 /... 에 www32 를 매일 rotate하는데 1일전 데이터는 www32.1 2일전
데이터는 www32.2 등으로 4일치를 저장하도록 한다는 뜻이다.
아울러 에러가 발생했을시에는 내용에 대해 system at tt.co.kr 로 통보를 하게 된다.

그럼 이제 로그를 적당하게 짜르는 것도 되었다.
마지막으로 위 로그를 각 서버에 저장되는 것이 아니라 로그서버에서 모
두 볼 수 있어야 한다.

물론 가장 좋은 방법은 위 .bash_history 파일을 직접 로그 서버에 저장되도록 하는
방법이 가장 좋겠으나 본인이 알기로는 /etc/syslog.conf 이외의 다른 type은 이
방법이 불가 하다고 알고 있다.

물론 NFS를 이용하면 쉽게 해결 가능하지만 NFS는 보안상 헛점이 있으
므로 다소 번거롭더라도 굳이 이 방법을 이용하고자 한다.

로그 서버에서

ncftpget -u system -p '********' www32.tt.co.kr . '/.../www32'

를 실행한다.

(***** 부분은 system 이라는 계정의 암호를 기입하면 된다.)

그러면 www32 서버에 접속하여 /.../www32를 자신의 로컬에 복사한다.
이는 expect 스크립트로도 구현가능하지만 간단한 파일이므로 그냥 간단히
ncftpget 으로 해결하였다.
ncftpget 이나 ncftpput 에 대한 명령어 및 사용법은 ncftpget 또는 ncftpput을
하면 설명을 볼수 있다.

마지막으로 위 명령어를 /etc/cron.daily 등에 설정을 하면 매일 자동으
로 위 작업을 하게 될것이다.

그러면 관리자는 로그서버에서 매일 일정한 시각에 위 파일을 검색함으로써 사용자
의 불필요한 명령어 입력등을 감시할 수 있다.

## 정리

위 부분은 www32에서 테스트 되었으므로 www32를 기본으로 정리하자면

1. /.../www32 파일 생성.
mkdir /...
touch /.../www32
chown system.system /.../www32
chmod 702 /.../www32

2. www32 의 /etc/profile 에 다음의 줄 추가

HISTFILE=/.../www32

TMOUT=200
echo "####################" >> /.../www32
echo "로그인 ID: $LOGNAME " >> /.../www32

3. /etc/logrotate.conf 의 하단에 다음의 줄을 추가..

/.../www32 {
daily
rotate 4
errors system at tt.co.kr
}


system , root 등 히스토리 파일에 첨가를 원치 않는 파일에 대한 설정을 한다.
각 계정의 .bashrc 에 TMOUT=-1
각 계정의 .bash_profile 에 HISTFILE=/home/system/.bash_history 등과
같이 지정.


4. 로그 서버에서 ncftpget 설정
ncftpget -u system -p '********' www32.tt.co.kr . '/.../www32'


5, 위 설정을 /etc/cron.daily 등에 설정.




/var/log/secure 등 secure 로그화일을 특정 서버에 저장하는법

클러스터링 시스템을 구성하는 경우 또는 우리처럼 서버가 많아질 경우 여러 서버로
로그가 나누어진다.

이럴 경우 중앙의 관리자용 서버로 로그를 집중시킬 수 있다.

1. 먼저 확인해야 할 것
/etc/services 에서 아래 port 가 open 되어 있는지 확인한다.
syslog 514/udp

로그를 만드는 쪽과 받는 쪽 두군데에서 다 필요하다.
이는 로그 메시지를 주고받는데 UDP 포트가 필요하기 때문이다.


2. 로그를 작성하는(보내는) 서버에서 필요한 설정. (backup2 서버라 지정)

/etc/syslog.conf

authpriv.* @backup3

이건 authpriv.* 에 해당하는 로그를 bakcup3 이라는 호스트로 보내는 것이다.
(미리 /etc/hosts 에 210.121.176.245 baclup3.tt.co.kr backup3 를 추가한다.)
@backup3 대신 ip 로 직접 지정을 하여도 될듯하다.
필요하다면 *.* 을 이용 전부를 다 보낼 수도 있다.
이러한 설정이 좋은 것은 로그 화일을 한 서버에서 확인할 수 있다는 이점
도 있지만 설사 시스템이 맛이 가더라도 원격 호스트에도 로그 파일이 남으므로 나중에
분석을 할 수 있다는 것이다.


3. 로그를 받는(저장하는) 서버에서 필요한 설정 (backup3 서버)
syslogd 대몬을 시작할때 추가 옵션이 필요하다.
레드햇의 경우 시작파일은 다음과 같은 형태이다.


먼저
/etc/rc.d/init.d/syslog stop 을 해서 데몬을 죽인후

여기서 대몬을 시작하는 옵션으로

/usr/sbin/syslogd -m 0 -r -h

이렇게 사용을 한다.

-m 0 : 기본설정되어있는것으로 변경하지 않아도 된다. 이건 지정한 분동안에
MARK 라고 로그파일에 기록을 한다. 0 이면 기록을 하지 않는 것이다.

-r : 인터넷 도메인 소켓을 이용해 네트웍에서 메시지를 받는 옵션
-h : 기본적으로 syslogd는 원격 호스트에서 받은 메시지를 로그 기록으로 전송하지
      않는 다. 이 옵션을 사용하여 원격 호스트에서 받은 로그파일을 전송한다.
     (전송이란 받은 쪽의 로그 파일에 기록한다고 생각하면 된다)

Writer profile
author image
-아랑 -

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우

Counter

· Total
: 4696798
· Today
: 868
· Yesterday
: 816