RHEL 7에서 시스템 로그를 관리하는 방법 (구성, 회전 및 데이터베이스로 가져 오기)-5 부
RHEL 7 시스템을 안전하게 유지하려면 로그 파일을 검사하여 이러한 시스템에서 발생하는 모든 활동을 모니터링하는 방법을 알아야합니다. 따라서 비정상적이거나 잠재적으로 악의적 인 활동을 감지하고 시스템 문제 해결을 수행하거나 다른 적절한 조치를 취할 수 있습니다.

RHEL 7에서 rsyslogd 데몬은 시스템 로깅을 담당하고 /etc/rsyslog.conf (이 파일은 모든 시스템 로그의 기본 위치를 지정 함) 및 /etc/rsyslog.d 내부 파일 (있는 경우)에서 구성을 읽습니다.
Rsyslogd 구성
rsyslog.conf를 빠르게 검사하면 시작하는 데 도움이 될 것입니다. 이 파일은 모듈 (rsyslog가 모듈 식 설계를 따르기 때문에), 전역 지시문 (rsyslogd 데몬의 전역 속성을 설정하는 데 사용됨) 및 규칙의 세 가지 주요 섹션으로 나뉩니다. 짐작 하시겠지만이 마지막 섹션은 기록되거나 표시되는 항목 (선택 자라고도 함)과 위치를 나타내며이 기사 전체에서 중점적으로 다룰 것입니다.
rsyslog.conf의 일반적인 행은 다음과 같습니다.

위의 이미지에서 선택기는 하나 이상의 Facility : Priority 쌍으로 구성되어 있음을 알 수 있습니다. 여기서 Facility는 메시지 유형을 설명합니다 (RFC 3164의 섹션 4.1.1 참조). rsyslog) 및 Priority는 심각도를 나타내며 다음과 같은 자명 한 단어 중 하나 일 수 있습니다.
- debug
- info
- notice
- warning
- err
- crit
- alert
- emerg
우선 순위 자체는 아니지만 키워드 none은 주어진 시설에서 우선 순위가 없음을 의미합니다.
참고 : 주어진 우선 순위는 이러한 우선 순위 이상의 모든 메시지가 기록되어야 함을 나타냅니다. 따라서 위 예의 행은 rsyslogd 데몬이 mail, authpriv 및 cron 서비스에 속한 메시지를 제외하고 우선 순위 정보 이상의 모든 메시지 (시설에 관계없이)를 기록하도록 지시합니다 (이 시설에서 오는 메시지는 고려되지 않습니다). )을/var/log/messages로 변경합니다.
콜론 기호를 사용하여 여러 시설을 그룹화하여 모든 시설에 동일한 우선 순위를 적용 할 수도 있습니다. "따라서 라인 :
*.info;mail.none;authpriv.none;cron.none /var/log/messages
다음과 같이 다시 작성할 수 있습니다.
*.info;mail,authpriv,cron.none /var/log/messages
즉, 기능 mail, authpriv 및 cron이 그룹화되고 키워드 none이 세 가지에 적용됩니다.
모든 데몬 메시지를 /var/log/tecmint.log에 기록하려면 rsyslog.conf 또는 /etc/rsyslog.d 내부의 별도 파일 (관리하기 쉬운)에 다음 줄을 추가해야합니다.
daemon.* /var/log/tecmint.log
데몬을 다시 시작해 보겠습니다 (서비스 이름이 d로 끝나지 않음).
# systemctl restart rsyslog
두 개의 임의 데몬을 다시 시작하기 전과 후에 사용자 정의 로그의 내용을 확인합니다.

자습 연습으로 시설과 우선 순위를 가지고 놀면서 기존 로그 파일에 추가 메시지를 기록하거나 이전 예에서와 같이 새 메시지를 생성하는 것이 좋습니다.
Logrotate를 사용하여 로그 회전
로그 파일이 끝없이 커지는 것을 방지하기 위해 logrotate 유틸리티를 사용하여 로그를 회전, 압축, 제거 및 메일로 보내므로 많은 수의 로그 파일을 생성하는 시스템을 쉽게 관리 할 수 있습니다.
Logrotate는 매일 cron 작업 (/etc/cron.daily/logrotate)으로 실행되며 /etc/logrotate.conf 및 /etc/logrotate.d에있는 파일 (있는 경우)에서 구성을 읽습니다.
rsyslog의 경우와 마찬가지로 주 파일에 특정 서비스에 대한 설정을 포함 할 수있는 경우에도 각 서비스에 대해 별도의 구성 파일을 생성하면 설정을 더 잘 구성하는 데 도움이됩니다.
일반적인 logrotate.conf를 살펴 보겠습니다.

위의 예에서 logrotate는/var/loh/wtmp에 대해 다음 작업을 수행합니다. 한 달에 한 번만 회전을 시도하지만 파일 크기가 1MB 이상인 경우에만 권한이 설정된 새 로그 파일을 만듭니다. "0664 및 사용자 루트 및 그룹 utmp에 소유권이 부여되었습니다. "다음으로 rotate 지시문에 지정된대로 하나의 아카이브 된 로그 만 유지합니다.

이제 /etc/logrotate.d/httpd에있는 또 다른 예를 살펴 보겠습니다.

man 페이지 (man logrotate 및 man logrotate.conf)에서 logrotate 설정에 대한 자세한 내용을 읽을 수 있습니다. 두 파일 모두 읽기 편의를 위해이 기사와 함께 PDF 형식으로 제공됩니다.
시스템 엔지니어로서 별도의 파티션/논리 볼륨에/var가 있는지 여부에 따라 로그를 저장할 기간과 형식을 결정하는 것은 거의 사용자에게 달려 있습니다. 그렇지 않으면 저장 공간을 절약하기 위해 오래된 로그를 제거하는 것이 좋습니다. 반면에 회사 또는 고객의 내부 정책에 따라 향후 보안 감사를 위해 여러 로그를 보관해야 할 수도 있습니다.
물론 로그 검사 (grep 및 정규식과 같은 도구를 사용하더라도)는 다소 지루한 작업이 될 수 있습니다. 이러한 이유로 rsyslog를 사용하면 데이터베이스로 내보낼 수 있습니다 (OTB 지원 RDBMS에는 MySQL, MariaDB, PostgreSQL 및 Oracle이 포함됩니다.
자습서의이 섹션에서는 로그가 관리되는 동일한 RHEL 7 상자에 MariaDB 서버와 클라이언트를 이미 설치했다고 가정합니다.
# yum update && yum install mariadb mariadb-server mariadb-client rsyslog-mysql # systemctl enable mariadb && systemctl start mariadb
그런 다음 mysql_secure_installation
유틸리티를 사용하여 루트 사용자 및 기타 보안 고려 사항에 대한 비밀번호를 설정하십시오.

참고 : MariaDB 루트 사용자를 사용하여 데이터베이스에 로그 메시지를 삽입하지 않으려면 그렇게하도록 다른 사용자 계정을 구성 할 수 있습니다. 이를 수행하는 방법을 설명하는 것은이 튜토리얼의 범위를 벗어나지 만 MariaDB 지식 기반에서 자세히 설명합니다. 이 자습서에서는 단순성을 위해 루트 계정을 사용합니다.
다음으로 GitHub에서 createDB.sql 스크립트를 다운로드하고 데이터베이스 서버로 가져옵니다.
# mysql -u root -p < createDB.sql

마지막으로 /etc/rsyslog.conf에 다음 행을 추가하십시오.
$ModLoad ommysql $ActionOmmysqlServerPort 3306 *.* :ommysql:localhost,Syslog,root,YourPasswordHere
rsyslog 및 데이터베이스 서버를 다시 시작하십시오.
# systemctl restart rsyslog # systemctl restart mariadb
이제 로그를 수정하는 몇 가지 작업 (예 : 서비스 중지 및 시작)을 수행 한 다음 DB 서버에 로그하고 표준 SQL 명령을 사용하여 로그를 표시하고 검색합니다.
USE Syslog; SELECT ReceivedAt, Message FROM SystemEvents;

요약
이 기사에서는 시스템 로깅을 설정하는 방법, 로그를 회전하는 방법,보다 쉬운 검색을 위해 메시지를 데이터베이스로 리디렉션하는 방법에 대해 설명했습니다. 이러한 기술이 RHCE 시험을 준비 할 때와 일상적인 업무에도 도움이되기를 바랍니다.
언제나 그렇듯이 귀하의 의견은 환영받는 것 이상입니다. 아래 양식을 사용하여 저희에게 연락하십시오.