대부분의 OS, 프로그램은 로그를 남겨 장애시 원인 분석에 이용하게 된다.

리눅스, 특히 CentOS7 에서는 rsyslog라는 로그 시스템이 다양한 로그를 남긴다.

또한 로그가 계속 쌓이면 파일 사이즈가 비대해져 디스크 공간 부족이 생길 수 있고, 파일을 열어 분석하는 작업도 쉽지 않기에, logrotate라는 프로그램이 쌓인 로그를 파일로 분할하고, 오래된 로그 파일을 삭제하는 등의 작업을 한다.

 

rsyslog

시스템의 다양한 로그를 남긴다

1. 로그 파일 저장 위치 : /var/log/ 디렉토리 하위에 저장

2. 주요 로그파일

로그파일 설명
messages 인증, 메일, cron을 제외한 대부분의 로그가 기록되는 파일
secure 인증, 즉 보안 관련 로그가 저장되는 파일
maillog 메일 관련 모든 로그가 저장되는 파일
cron cron 관련 모든 로그가 저장되는 파일
spooler uucp, news의 심각한 로그가 저장되는 파일
boot.log 부팅 메시지가 저장된 로그 파일

3. rsyslog 운영

rsyslog 시작

# systemctl start rsyslog

rsyslog 재시작

# systemctl restart rsyslog

rsyslog 종료

# systemctl stop rsyslog

rsyslog 상태확인

# systemctl status rsyslog

 

logrotate (로그로테이트)

쌓인 로그를 파일로 분할하고, 오래된 로그 파일을 삭제하는 등의 작업을 하여 로그를 관리한다.

파일을 어떻게 분할할지, 어떤 주기로 로테이트 시킬지 등은 logrotate 설정에서 가능하다.

1. logrotate 설정 : /etc/logrotate.conf

2. logrotate 설정파일 보기/수정하기

아래 명령어로 설정파일을 열어보고, 수정 후 저장하면 된다.

# vi /etc/logrotate.conf

logrotate.conf 내용 예

: 매주 로테이트, 최대 4개의 과거 로그 보관, 로그 파일 사이즈가 10M 이상이 되면 로테이트, 로그파일 압축 보관하는 예이다.

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

size 10M

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

3. logrotate 실행

기본 실행

logrotate는 crond 데몬에 의해 매일 실행된다.

실행되는 파일 위치 : /etc/cron.daily/logrotate

 

직접 실행

설정 변경 후 바로 적용시키는 방법이다.

# logrotate -f /etc/logrotate.conf

리눅스에서 메모리 사용량을 보는 명령어들.

1. free

# free

실행 예

[root@xxx ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1014548      727124       63300       29336      224124       37804
Swap:       4194300     4038808      155492

2. top

# top -n1 | grep Mem

실행 예

[root@xxx ~]# top -n1 | grep Mem
KiB Mem :  1014548 total,    89956 free,   727076 used,   197516 buff/cache
KiB Swap:  4194300 total,   154628 free,  4039672 used.    51492 avail Mem

3. meminfo

# cat /proc/meminfo | grep Mem

실행 예

[root@xxx ~]# cat /proc/meminfo | grep Mem
MemTotal:        1014548 kB
MemFree:           78344 kB
MemAvailable:      51884 kB

4. 메모리 사용량 많은 순 프로세스 보기 (상위 10개)

# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm --sort -rss | head -n 11

실행 예

[root@xxx ~]# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm --sort -rss | head -n 11
USER       PID  PPID   RSS  SIZE    VSZ %MEM %CPU     TIME COMMAND
mysql    10516 23044 143008 1758848 1846496 14.0 1.7 05:34:29 mysqld
apache    5283 21714 74816 426328 1144364  7.3 0.5 01:09:07 httpd
apache   22804 21714 74288 422436 1140472  7.3 0.3 00:40:52 httpd
apache   13757 21714 72580 285308 899728  7.1 0.7 00:52:34 httpd
apache   29439 21714 72260 152552 870560  7.1 0.3 00:07:30 httpd
apache   31022 21714 71752 254996 973004  7.0 0.7 00:48:15 httpd
apache   20054 21714 70388 386368 1104376  6.9 0.6 01:06:43 httpd
apache   20619 21714 69824 320396 934816  6.8 0.6 00:57:03 httpd
apache   19557 21714 69468 224524 836812  6.8 0.8 00:47:03 httpd
apache    8839 21714 64728 177964 893840  6.3 0.9 00:39:52 httpd

User Account Control(UAC)란,

Windows 운영체제의 보안 요소이다.

UAC는 관리자 권한이 없는 사용자가, 사용자 계정 변경이나/로그오프나/RunAs를 사용하지 않고도 관리자 권한의 작업을 하는 것을 허용한다.

UAC Enabled 된 프로그램을 설치하거나 실행하기

일부 프로그램의 설치나 실행 시 administrator access token을 필요로 하기에, 운영체제는 사용자에게 동의를 구하는 창(Consent Prompt)을 띄운다. 사용자가 동의를 하면 어드민 계정으로 전환할 필요 없이 해당 프로그램을 설치/실행할 수 있도록 한다.

어드민 권한이 필요한 작업들

  • 프린터나 특정 하드웨어 설치
  • 특정 어플리케이션 설치
    (어드민 권한을 필요로 하는 어플리케이션이나, "C:\Program Files" 등 어드민 권한이 필요한 영역에 어플리케이션을 설치하는 경우)
  • 어드민 권한을 필요로 하는 어플리케이션 실행
  • 시스템 시간 변경
  • legacy 어플리케이션 실행

인스톨러 만들 때 UAC 설정하기

인스톨러 자체의 실행 권한 설정

NSIS 스크립트로 인스톨러를 만드는 경우, RequestExecutionLevel 로 UAC 레벨을 설정해 줄 수 있다.

RequestExecutionLevel admin # 어드민 권한 필요 - 실행 시 UAC 동의 창이 뜸
RequestExecutionLevel user  # 어드민 권한 필요 없음 - 실행 시 UAC 동의 창 뜨지 않음

인스톨(설치) 과정에서 필요한 실행 권한

인스톨러는 user 권한으로 만들었다 하더라도, 사용자가 어드민 권한이 필요한 위치에 프로그램을 설치하려고 하면(C:\Program Files 등) 어드민 권한이 필요하다. 그냥 실행하면 인스톨러는 실행 되나, 파일 복사 등 설치가 되지 않는다.

  • 이떄는, user 권한의 인스톨러를 RunAs를 사용해 어드민 권한으로 실행 하거나
  • 인스톨러 자체를 admin 권한이 필요하도록 만들고, 어드민 권한이 필요 없는 위치에 설치할 경우 RunAsInvoker를 통해 UAC 동의 창을 띄우지 않도록 할 수 있다.

관련 문제 : 레지스트리

프로그램에서 레지스트리에 값을 쓰거나 읽는 경우, HKLM 또는 HKCU를 이용한다. 이 때 어느 레지스트리를 사용하는가에 따라 필요한 사용자 권한이 달라진다. 

  • HKLM(HKEY_LOCAL_MACHINE) : 모든 유저에게 적용되는 레지스트리 => 어드민 권한 필요
  • HKCU(HKEY_CURRENT_USER) : 현재 사용자에게만 적용되는 레지스트리 => 사용자 권한 필요

따라서, 인스톨러의 실행 권한에 따라 사용하는 레지스트리도 맞춰 주어야 정상 동작 할 수 있다.

비정상 동작 예:

  • 프로그램은 유저 권한으로 만들어서 사용자 권한으로 실행 했는데, 레지스트리는 HKLM을 사용하면 레지스트리 값을 제대로 못 쓰거나/읽을 수 있다.
  • 프로그램은 어드민 권한으로 만들어서 모든 사용자 용으로 설치했는데, 레지스트리는 HKCU를 사용하면, 설치한 사용자 외의 사용자 계정으로 로그인해서 프로그램 실행 시 레지스트리 값을 정상적으로 읽어오지 못할 수 있다.

UAC가 적용되는 윈도우 버전

Windows 10, Windows 7, Windows 8, Windows Vista, Windows XP

+ Recent posts