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