20210422 (목)
9:32 review
debug shell
[root@localhost ~]# systemctl start debug-shell.service
[root@localhost ~]# systemctl enable debug-shell.service
Created symlink from /etc/systemd/system/sysinit.target.wants/debug-shell.service to /usr/lib/systemd/system/debug-shell.service.
[root@localhost ~]#
디버그 쉘로 부팅이 가능하며, 로그인 없이 root의 권한으로 실행 가능.
보안상의 문제가 발생할 수 있으므로 특정 디버깅시에만 활성화하며, 사용 후 비활성화가 필수이다.
======================================
로그관리
관련 법규에 따라 정책 수립
전자상거래법, 거래정보 보관연한 등
systemd-jounald
커널, 부팅 프로세스 초기단계의 출력, 시작 및 실행 시 데몬의 stdin 및 stderr, syslog 이벤트를 포함하는 많은 리소스에서 이벤트 메시지를 수집한다.
그런다음 표준 형식으로 다시 구조화하고 구조화 및 인덱싱된 시스템 저널에 쓴다.
기본적으로 이 저널은 재부팅 후 유지되지 않는 파일 시스템에 저장된다.
하지만 rsyslog 서비스는 도착하는 대로 저널의 systemd-journald에서 받은 syslog 메시지를 읽는다.
그런 다은 syslog 이벤트를 처리하여 로그 파일에 기록하거나 자체 구성에 따라 다른 서비스에 전달한다.
rsyslog서비스는 /var/log에서 재부팅 시 지속되는 로그 파일에 syslog 메시지를 정렬하고 쓴다.
rsyslog 서비스는 각 메시지를 전송한 프로그램 유형을 기반으로 하는 특정 로그 파일 또는 기능 및 각 syslog 메시지의 우선 순위로 로그 메시지를 정렬한다.
syslog 메시지 파일 외에도 /var/log 디렉터리에는 시스템의 다른 서비스의 로그 파일이 포함되어 있다.
syslog (rsyslog)
journal log (systemd-journald)
syslog
유닉스, 리눅스에서 사용하는 기본 로그(init)
로그 저장 경로 : /var/log/
로그 저장 포맷 : text
Facility 와 Priority에 따라 선별적으로 저장됨.
/etc/rsyslog.conf
/var/log/messages : 대부분의 syslog 메시지 저장
/var/log/secure : 로그인 로그
/var/log/maillog : 메일 로그
/var/log/cron : 작업예약 로그
/var/log/boot.log : 부트 로그
Facility
kern : Kernel 관련 메시지
user : User Level 관련 메시지
mail : Mail 관련 메시지
daemon : 시스템 데몬 관련 메시지
auth : 인증과 관련된 메시지
syslog : Syslog가 생산하는 메시지
lpr (line printer) : Line Printer 관련 메시지
news : News 그룹관련 메시지
uucp : UUCP관련 메시지
cron : crond와 관련된 메시지
authpriv : 보안인증관련 메시지
ftp : FTP서비스 관련 메시지
local0-local7 : 사용자 정의 Facility (단, local7은 부팅 로그 기록용으로 사용)
Priority
code | 우선순위 | 심각도 |
0 | emerg | 시스템을 사용할 수 없음 |
1 | alert | 즉각적인 조치 필요 |
2 | crit | 심각한 상태 |
3 | err | 심각하지 않은 오류 상태 |
4 | warning | 경고 상태 |
5 | notice | 정상이지만 중요한 이벤트 |
6 | info | 정보 이벤트 |
7 | debug | 디버깅 수준의 메세지 |
rsyslog 의 rules
/etc/rsyslog.conf
facility.priority 형태로 사용
46 #### RULES ####
47
48 # Log all kernel messages to the console.
49 # Logging much else clutters up the screen.
50 #kern.* /dev/console
51
52 # Log anything (except mail) of level info or higher.
53 # Don't log private authentication messages!
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
→ 50 : kern.* 모든 대상을 저장
→ 54 : 단, info.mail authprive cron의 모든 메세지는 저장하지 않는다
56 # The authpriv file has restricted access.
57 authpriv.* /var/log/secure
58
59 # Log all the mail messages in one place.
60 mail.* -/var/log/maillog
61
62
63 # Log cron stuff
64 cron.* /var/log/cron
65
→ 57 : authprive의 모든 프라이어리티는 /var/log/secure에 기록
→ 60 : mail의 모든 프라이어리티는 /var/log/millo에 기록
→ 64 : cron의 모든 프라이어리티는 /var/log/cron에 기록
66 # Everybody gets emergency messages
67 *.emerg :omusrmsg:*
68
69 # Save news errors of level crit and higher in a special file.
70 uucp,news.crit /var/log/spooler
71
72 # Save boot messages also to boot.log
73 local7.* /var/log/boot.log
→ 67 : 모든 퍼실리티의 emerg는 :omusrmsg.*
→ uucp,news.crit 은 /var/log/spooler
→ 73 : local7.* 의 모든 내용은 /var/log/boot.log에 저장
============
authpriv 로그 테스트
아래와 같이 user가 root 사용자 로그인에 실패한 부분에 대한 기록이 남음. (tail -f 옵션을 통해 모니터링)
[root@localhost log]# tail -f /var/log/secure
Apr 22 11:58:44 localhost su: pam_unix(su-l:session): session opened for user user by root(uid=0)
Apr 22 12:00:03 localhost unix_chkpwd[5154]: password check failed for user (root)
Apr 22 12:00:03 localhost su: pam_unix(su-:auth): authentication failure; logname=root uid=1000 euid=0 tty=pts/1 ruser=user rhost= user=root
Apr 22 12:00:03 localhost su: pam_succeed_if(su-l:auth): requirement "uid >= 1000" not met by user "root"
============
logger 명령어
/etc/rsyslog.conf
authprive.warn /var/log/logtest_sec → rsyslog.conf 에 입력 후 테스트
[root@localhost log]# logger -p authpriv.warn "authpriv logtest"
[root@localhost log]# cat logtest_sec
Apr 22 12:14:57 localhost root: authpriv logtest
위와같이 logger 명령을 통해 메세지를 발생시킬 수 있다. (로그 테스트에 사용)
[root@localhost log]# systemctl restart rsyslog.service
로거가 정상적으로 적재될려면 rsyslog.service를 재시작한 후 테스트한다.
===========
journal log
systemd 시스템에서 추가된 로그 관리 방식
로그 저장 경로 : /run/log/journal/
로그 저장 포맷 : 바이너리
부팅 시 부터 모든 로그 기록
재부팅 시 로그가 사라짐 (설정 변경 가능)
일반사용자도 journalctl 가능하지만 특정 메시지가 표시되지 않도록 제한될 수 있다.
journalctl -p옵션
(rsyslog과 다름에 유의)
code | 스펠링 |
0 | emerg |
1 | alert |
2 | crit |
3 | err |
4 | warning |
5 | notice |
6 | info |
7 | debug |
[root@localhost log]# journalctl -p crit..err
크리티컬부터 에러 수준까지 출력
[root@localhost log]# journalctl -p err
이머전시부터 에러까지 출력
[root@localhost log]# journalctl -p 4
이머전시부터 워닝까지 출력
[root@localhost log]# journalctl -r → 최근일어난 이벤트부터 정렬하여 출력 -r옵션
[root@localhost log]# journalctl -n 5 → 지정된 숫자 5 만큼의 라인(로그 갯수)을 출력 -n옵션
[root@localhost log]# journalctl -f → 10만큼의 라인(로그 갯수)을 출력 -f옵션 ( tail -f 와 동일)
[root@localhost log]# journalctl --since --until "YYYY-MM-DD hh:mm:ss"
[root@localhost log]# journalctl --since "2021-04-22 11:09:00" -p err
[root@localhost log]# journalctl --until "2021-04-22 12:00:00" -p err
[root@localhost log]# journalctl --since "-1hour" -p notice
출력방식 지정
# journalctl -o OUTPUT_FORMAT
short: 간결한 형태(기본값)
verbose : 자세히 표시
json : JSON포맷으로 표시
PID로 지정하여 검색
[root@localhost log]# ps -ef |grep cron
root 1295 1 0 10:50 ? 00:00:01 /usr/sbin/crond -n
[root@localhost log]# journalctl _PID=1295
-- Logs begin at Thu 2021-04-22 10:49:08 KST, end at Thu 2021-04-22 15:01:37 KST. --
Apr 22 10:50:01 localhost.localdomain crond[1295]: (CRON) INFO (RANDOM_DELAY will be scale
Apr 22 12:23:01 localhost.localdomain crond[1295]: (mkdir) ERROR (getpwnam() failed)
명령어로 지정하여 검색
[root@localhost log]# journalctl _COMM=crond
-- Logs begin at Thu 2021-04-22 10:49:08 KST, end at Thu 2021-04-22 15:03:37 KST. --
Apr 22 10:50:01 localhost.localdomain crond[1295]: (CRON) INFO (RANDOM_DELAY will be scale
Apr 22 12:23:01 localhost.localdomain crond[1295]: (mkdir) ERROR (getpwnam() failed)
UID로 사용자 기준 검색
[root@localhost log]# journalctl _UID=1000
-- Logs begin at Thu 2021-04-22 10:49:08 KST, end at Thu 2021-04-22 15:06:04 KST. --
Apr 22 12:08:39 localhost.localdomain su[5552]: FAILED SU (to root) root on pts/1
Apr 22 12:11:39 localhost.localdomain su[5721]: pam_unix(su-l:auth): authentication failur
Apr 22 12:11:39 localhost.localdomain su[5721]: pam_succeed_if(su-l:auth): requirement "ui
Apr 22 12:11:41 localhost.localdomain su[5721]: FAILED SU (to root) root on pts/1
==========================
패키지 관리
RPM (Red Hat Package Management)
( ①httpd-③2.4.6-40.③el7.④centos.x86_64.rpm )
①패키지 이름②버전③Release(리눅스 배포판 버전 포함)④아키텍쳐
yum (Yellowdog Updater Modified)
RPM 패키지를 고수준으로 관리
저장소(Repository)를 사용하여 패키지를 다운로드 받아 설치
패키지 설치시 의존성을 고려하여 필요한 패키지를 같이 설치
기본적으로 네트워크 연결이 되어있어야 사용 가능함.