becool

20210422 (목) 본문

linux

20210422 (목)

gusalstm 2021. 4. 22. 16:20
반응형

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)를 사용하여 패키지를 다운로드 받아 설치

 패키지 설치시 의존성을 고려하여 필요한 패키지를 같이 설치

 기본적으로 네트워크 연결이 되어있어야 사용 가능함.

 

 

 

 

 

 

 

 

 

 

728x90

'linux' 카테고리의 다른 글

20210426 (월)  (0) 2021.04.26
20210423 (금)  (0) 2021.04.23
20210421 (수)  (0) 2021.04.21
20210420 (화)  (0) 2021.04.20
20210419 (월)  (0) 2021.04.19
Comments