320x100
320x100

Chapter 6. 시스템 보안 및 관리

 

 

rsyslog : 로그 관리를 위한 패키지

 

/etc/rsyslog.conf : rsyslogd 데몬의 환경설정 파일

 

/etc/sysconfig/rsyslog : rsyslogd 데몬 실행 관련 옵션 설정

 

/sbin/rsyslogd : 실제 rsyslogd 데몬 실행 명령

 

/etc/rc.d/init.d/rsyslog : rsyslogd 데몬을 동작 시키는 스크립트. start, stop, restart 등의 인자값 사용

ex) /etc/rc.d/init.d/rsyslog stop

ex) service rsyslog restart

 

 

rsyslog.conf 구성

facility : 메시지를 발생시키는 프로그램의 유형

priority : 위험의 정도

action : 메시지를 보낼 목적지

 

 

facility

cron : 스케줄링 프로그램

auth / security : 로그인 등의 인증 프로그램

authpriv : ssh와 같은 인증이 필요한 프로그램

daemon : 텔넷, FTP와 같은 여러 데몬

kern : 커널

lpr : 프린트 유형의 프로그램

mail : 메일 시스템

mark : syslogd에 의해 만들어지는 날짜 유형

news : 뉴스 프로그램

syslog : syslog 프로그램

user : 사용자 프로세스

uucp : UNIX to UNIX Copy Protocol 시스템

local0 ~ local7 : 여분의 유형

* : 모든 faclity

 

 

priority

none : 지정한 faclity를 제외

debug : 프로그램을 디버깅 할 때 발생하는 메시지

info : 통계, 기본정보

notice : 특별한 주의는 필요하나 에러는 아닌 메시지

warning / warn : 주의가 필요한 메시지

error / err : 에러발생

crit : 급하지 않지만 시스템에 문제가 생기는 단계의 메시지

alert : 즉각적인 조정이 필요한 상황

emerg / panic : 모든 사용자들에게 전달해야할 위험한 상황

 

 

action

file : 지정한 파일에 로그 기록 (절대경로)

@host : UDP 기반으로 지정한 호스트에 전달

@@host : TCP 기반으로 지정한 호스트에 전달

user : 지정한 사용자가 로그인을 한 경우 해당 사용자의 터미널로 전달

* : 현재 로그인 되어있는 모든 사용자의 화면으로 전달

ex) mail.*;mail.!=info /var/log/maillog : info수준을 제외한 메일 관련 정보 기록

 

 

 

logrotate [option] config_file : 끝없이 커지는 로그 파일을 분할 하거나 압축하는 등의 관리

-f : 강제로 환경설정 파일을 읽어 실행 (--force)

 

/etc/logrotate.conf

daily / weekly / monthly / yearly : 로그파일 로테이트 주기

rotate n : 로테이트 최대 횟수

create : 로테이트 후 비어있는 로그 파일 생성

dateext : 로테이트 후 생성된 로그파일 제목에 해당 날짜 기록 여부

compress : 로테이트 후 생성된 로그파일에 대해 압축

include /etc/logrotate.d : /etc/logrotate.d 디렉터리 내 설정된 파일에 대해서도 로테이트를 적용

nomissingok : 로그파일이 존재하지 않는 경우 에러 메시지 출력

missingok : 로그파일이 존재하지 않아도 메시지 미출력

ex)

/var/log/wtmp {

monthly

create 0644 root utmp

minsize 1M

rotate 1

}

ex)

/var/log/httpd/access.log {

rotate 5

mail posein@gmail.com

size 100k

missingok

dateext

postrotate # 로그파일 로테이트 이후 실행할 명령어

/usr/bin/killall HUP httpd

endscript

}

 

 

 

/var/lib/logrotate.status : 각 로그별 로테이션된 날짜가 기록된 파일

 

/var/log/messages : 시스템에서 발생하는 표준 메시지가 기록되는 파일

 

/var/log/secure : 인증 기반 접속 관련 로그 기록 파일

 

/var/log/dmesg : 커널 부트 메시지 로그

 

/var/log/maillog : 메일 관련 작업 기록 로그

 

/var/log/xferlog : FTP 접속 관련 로그

 

/var/log/cron : cron 관련 정보

 

/var/log/boot.log : 부팅시 발생되는 메시지 기록 로그

 

/var/log/lastlog : telnet이나 ssh를 통한 마지막 접속 기록 (lastlog)

 

/var/log/wtmp : 콘솔, telnet, ftp 등을 이용한 접속 기록, 시스템을 재부팅한 기록등의 로그 (last)

 

/var/log/btmp : 접속이 실패했을 경우의 로그 (lastb)

 

 

 

last [option] [사용자명] [tty n] : /var/log/wtmp 확인. 사용자의 로그인 정보 및 재부팅 정보 확인

-f 파일명 : 기본 로그 파일 외 다른 로그파일 기록 확인

-n 숫자 / -숫자 : 최근부터 숫자번 전까지의 로그

-t YYYMMDDHHMMSS : 지정한 시간 이전의 기록

-R : IP나 호스트명 미출력

-a : IP나 호스트명 맨 마지막 필드에 출력

-d : IP를 호스트명으로 변환하여 출력

-F : 로그인 및 로그아웃 시간 출력

-i : 접속한 호스트의 IP주소로만 출력

-w : 사용자의 전체 이름이나 전체 도메인 이름을 전부 출력

reboot : 재부팅 정보 출력

 

 

 

lastlog [option] : /var/log/lastlog 확인. 각 사용자가 마지막으로 로그인한 정보 확인

-u 사용자명 : 특정 사용자에 대한 정보 (--user)

-t 날짜수 : 지정한 날짜수 만큼의 기록 (--time)

-b 날짜수 : 지정한 날짜수 이전에 최종적으로 로그인한 사용자 정보 (--before)

 

 

lastb [option] [사용자명] : /var/log/btmp 확인. 로그인 실패 정보 확인

last 옵션과 동일

 

 

dmesg [option] : 커널 링 버퍼의 내용 출력 및 제어

-c : 메시지 출력 후 저장된 메시지 삭제

 

 

logger [option] [message] : /var/log/message에 기록. 명령행에서 로그 시스템에 메시지 전송.

-i : PID 기록

-f : 저장되는 파일명 지정

-t : 지정한 태그 기록

-s : 표준출력(모니터)에도 메시지 출력

 

 

sysctl [option] 변수

sysctl [option] 변수= : /proc/sys 내 리눅스 커널 제어 매개변수 제어.

-a / -A : 커널 매개변수와 값 모두 출력

-p : 환경변수 파일에 설정된 값 출력. 파일명 미지정시 /etc/sysctl.conf 내용 출력

-n : 특정 매개변수에 대한 값 출력

-w 변수=: 매개변수에 값 설정

ex) sysctl n net.ipov4.icmp_echo_ignore_all : /proc/sys/net/ipv4/icmp_echo_ignore_all 값 출력

 

 

 

/proc/sys/net/ipv4/의 설정 항목

icmp_echo_ignore_all : ping과 같은 ICMP vo킷에 대한 응답 여부 결정. 0=응답, 1=불응답

 

tcp_syncookies : SYN Flooding 방지. SYN 패킷의 도착빈도가 일정횟수보다 많을 때 거부

 

tcp_max_syn_backlog : SYN 요청의 처리한계(backlog) 설정

 

icmp_echo_ignore_broadcasts : 스머프 공격을 막기 위한 설정. 1=차단

 

tcp_fin_timeout : TCP 세션 종료 후 유지 시간 설정. 기본 60

 

tcp_keepalive_time : TCP 연결 상태 유지를 위한 시간 설정. 기본 7200

 

ip_forward : 하나에 서버에서 IP를 공유하는 포워딩 가능 여부. 1=포워딩 가능

 

ip_local_port_range : TCP UDP를 이용한 클라이언트 포트로 사용가능한 포트 범위 설정

 

tcp_timestamps : 외부 서버에서 날짜정보 확인 가능 여부. 0=불가능

 

conf/all/accept_source_route : 라우팅 정보 노출 방지를 위한 설정. 0=차단

 

conf/all/rp_filter : 출발지 IP주소에 대한 조작 방지. 1=패킷에 대한 검사

 

conf/all/log_martians : 스푸핑 패킷과 리다이렉트된 패킷에 대한 기록 여부. 1=패킷기록

 

conf/all/accept_redirects : 라우팅 경로를 확인하는 redirect 관련 패킷 허가 여부. 0=불가능

 

conf/all/send_redirects : 서버에서 나가는 ICMP redirect패킷 허가 여부. 0=차단

 

/proc/sys/fs/file-max : 커널에서 최대로 사용가능한 파일 수 지정

 

 

 

openssh : openssh 서버와 클라이언트에 필요한 핵심 패키지. ssh-keygen 명령 포함

 

openssh-server : openssh 서버 관련 패키지. sshd, sftp서버 등 포함

 

openssh-client : openssh 클라이언트 관련 패키지. ssh, scp, sftp 등 포함

 

 

 

/etc/ssh/sshd_config 주요항목

Port 22 # ssh서버가 사용할 포트

#AddressFamily any # 접속하는 IP주소버전. inet=v4 / inet6=v6

#ListenAddress 0.0.0.0

#ListenAddress :: # sshd 데몬이 허가하는 주소를 설정하는 영역.

Protocol 2 # ssh 프로토콜의 버전 지정

HostKey /etc/ssh/ssh_host_key # SSH1의 호스트키 위치 지정

HostKey /etc/ssh/ssh_host_rsa_key # SSH2의 암호화 방식 (RSA, DSA 등 가능)

KeyRegenerationInterval 1h # 서버키 재생성 시간

ServerKeyBits 1024 # 서버키의 비트 수

SyslogFacility AUTHPRIV # syslogfacility 기록 설정

LogLevel INFO # 로그레벨. QUIET=무기록, FATAL=치명적, ERROE, VERBOSE

LoginGraceTime 2m # 유저가 로그인에 실패했을 경우 연결을 끊는 시간

PermitRootLogin yes # root 로그인 허용 여부

StrictModes yes # 로그인 허용 전 파일모드, 소유권 등 원격호스트 파일 체크 여부

MaxAuthTries 6 # 접속 재시도 최대 횟수

MaxSessions 10 # 네트워크 주소 당 최대 연결 가능 세션 수

RSAAuthentication yes # RSA 인증 사용 여부

PubkeyAuthentication yes # 공개키를 통한 인증 허가 여부

AuthorizedKeysFile .ssh/authorized_keys # 클라이언트에서 생성한 공개키를 저장할 파일경로

RhostsRSAAuthentication no # RSA 사용시 rhost/etc/hosts.equiv가 있을 경우 인증 가능 여부

HostbasedAuthentication no # rhost/etc/hosts.equiv를 이용한 접속시 공개키를 이용한 접속 허가

IgnoreUserKnownHosts yes # rhosthostbased 인증시 각 사용자의 .ssh/knownhost 무시 여부

IgnoreRhosts yes # rhosthostbased 인증시 .rhosts 파일 무시 여부

PasswordAuthentication yes # 패스워드를 이용한 인증 허용 여부

PermitEmptyPasswords no # 패스워드 인증시 비어있는 패스워드 허용 여부

#ChallengeResponseAuthentication no # ChallengeResponse 관련 인증 설정

 

#KerberosAuthentication no

#KerberosOrLocalPasswd yes

#KerberosTicketCleanup yes

#KerberosGetAFSToken no

#KerberosUseKuserok yes # kerberos 인증 관려 ㄴ설정

 

GSSAPIAuthenticiation yes

GSSAPICleanupCredentials yes # GSSAPI 인증 관련 설정

 

UsePAM yes # PAM을 통한 제어 설정 여부

#AllowTcpForwarding yes # TCP를 통한 포워딩 허가 여부

#GatewayPorts no # 포워딩된 포트에 대한 클라이언트 접속 허가 여부

X11Forwarding yes # 원격에서 X11 포워딩 허용 여부. yesxhost보다 안전하게 접속

#X11DisplayOffset 10 # X11포워딩 시 디스플레이 번호

#X11UseLocalhost yes # X11 포워딩시 localhost 관련 설정

#PrintMotd yes # SSH 로그인시 /etc/motf 파일 내용 출력 여부

#PrintLastLog yes # 로그인시 지난번 로그인 기록 출력 여부

#TCPKeepAlive yes # 클라이언트 접속 체크 설정

#UseLogin no # 로그인 세션 사용 여부

#UsePrivilegeSeparation # 네트워크 트래픽 발생시 자식 프로세스에 의한 권한 분리 여부

#PermitUserEnvironment no # 사용자 홈 디렉터리의 environment= 옵션 사용 여부

#Compression delayed # 압축허가 여부

#ClientAliveInterval 0 # 클라이언트로부터 수신되는 데이터가 없을시 서버가 보내는 시간

#ClientAliveCountMax 3 # 클라이언트에게 전달하는 메시지 횟수

#UseDNS yes # 클라이언트의 호스트 주소를 IP주소로 해석 여부

#PidFile /var/run/sshd.pid # ssh 데몬의 PID 기록

#Banner none # 로그인전 출력하는 메시지

Subsystem sftp /usr/libexec/openssh/sftp-server # sftp 사용설정

 

 

 

ssh [option] 호스트명or주소

ssh 계정명@호스트명

ssh 호스트명 명령

-l : 다른 계정으로 접속시 사용

-p : ssh 포트가 22번이 아닐 경우

 

 

 

ssh-keygen [option] : SSH 접속시 인증키를 이용한 접속. 클라이언트에서 비밀키와 공개키 생성 후 서버로 전송

-t : 사용할 압호화 알고리즘 지정. RSA, DSA 등 사용 가능

인증키 생성시 id_rsaid_rsa_pub 파일이 생성. 서버의 .ssh/authorized_keys에 공개키 파일 복사

원격지에 .ssh 디렉터리 생성후 scp를 이용해 공개키 복사

 

 

 

PAM (Pluggable Authentication Module)

: 사용자 인증 및 서비스에 대한 모듈화된 접근 제어 방법

: 소프트웨어 개발과 안전한 권한 부여 및 인증체계를 분리하기 위한 목적

: 특정 서비스에 대한 사용자들의 허가 목록 파일, 거부 목록 파일, 사용자의 패스워드 길이 제한 등

/lib/security : PAM 위치파일. 동적 로드를 위해 .so 파일형태로 존재

/etc/pam.d : PAM을 이용하는 서비스들이 설정된 파일

/etc/pam.d/other : 특별히 지정되지 않는 서비스에 대한 인증

 

 

 

PAM 설정 파일 구성

type : PAM에 어떤 타입의 인증이 사용될 것인지 알려주는 항목

control : PAM에 대한 통제를 담당

module_name : 사용하는 모듈명에 대한 명기

module-arguments : 지정한 모듈이 사용하는 인수 기입

 

 

 

PAM type

account : 해당 서비스에 대한 사용자의 접근 허용 여부. 패스워드 기간 만료 여부 검사

auth : 기본적인 패스워드 인증 외 생체인증과 같은 다른 인증 방식

password : 인증방법 변경시 패스워드 인증후 변경

session : 사용자가 인증받기 전후의 해야할 것에 대한 정의

 

 

 

PAM control

requisite : 모듈 인증 실패시 즉시 거부

required : 인증 거부 전 다른 모듈들을 요구하고 실패할 경우 인증 거부

sufficient : 이전 요청의 인증 실패라도 이 모듈에 의한 인증 성공시 승인

optional : 인증 성공 여부 보다 모듈이 응용프로그램에게 주는 결과로 결정

include : 모듈명 대신 다른 PAM 관련 서비스를 통한 인증이 성공해야 승인

 

 

 

PAM 주요 모듈

pam_securetty.so : root으로 접속할 경우 /etc/securetty 파일에 기록된 터미널에서만 허용. /etc/pam.d/login, /etc/pam.d/remote

pam_lisfile.so : 임의의 파일에 대한 서비스 허가 및 거부 방법 제공. /etc/pam.d/vsftpd

pam_nologin.so : /etc/nologin 파일 존재시 root만 로그인 가능. 대부분의 로그인 관련 서비스에 설정

pam_deny.so : 접근을 무조건 거부. other, system-auth에 사용

pam_cracklib.so : 패스워드를 설정한 정책과 비교 및 검사. password-auth, system-auth에서 사용

pam_wheel.so : root 권한을 얻을 수 있는 사용자를 wheel이라는 그룹으로 묶어서 사용하도록 지원. su관련

pam_rootok.so : root이 암호 입력없이 해당 서비스에 대한 접근 허용. su, chsh 등에 사용

 

 

 

visudo : /etc/sudoers 편집 명령어

 

 

sudo : 일반 사용자가 root 권한 획득을 위해 사용. /etc/sudoers에 설정된 유저만 사용가능

/etc/sudoers : sudo의 환경설정 파일. 사용자에게 부여할 root 권한 명령 지정

ㆍ사용자 접속한_=명령어_경로

ex) posein localhost=/usr/sbin/useradd, /user/bin/passwd

 

 

 

lsattr [option] [파일명] : 파일에 설정된 속성 확인

-R : 하위 디렉터리까지 확인

-a : .으로 시작되는 숨김 파일과 디렉터리까지 확인

 

 

 

chattr [option] mode 파일명 : 파일의 속성 변경. root 사용자만 가능

-R : 하위 디렉터리까지 변경

 

 

chattr mode : +, =을 사용하여 속성 부여

A : 파일 수정시 atime은 수정하지 않음

a : 해당 파일에 추가만 가능 하도록 설정

d : dump로 백업 불가

i : 해당 파일의 변경, 삭제, 파일 추가, 링크파일 생성 등 불가

S : 파일 변경 시 디스크 동기화 발생

e : 디스크 블록에 매핑하기 위해 확장된 파일임을 표시

ex) chattr +a /ver/log/messages : /var/log/messages파일을 삭제 불가능하고 추가만 가능 하도록 설정

acl (Access Control List) : 파일이나 디렉터리에 대한 접근 권한을 제어하는 시스템

 

 

 

getfacl [option] [파일명] : 파일이나 디렉터리에 설정된 접근 권한 리스트 확인

-d : 접근권한 리스트의 기본 값 출력

 

 

 

setfacl [option] [파일명] : 파일이나 디렉터리에 접근 권한 리스트를 설정. root 권한 필요

-m : 권한 지정 및 수정 (--modify)

-x : 권한 삭제 (--remove)

-R : 하위 디렉터리 및 파일까지 변경 (--recursive)

-b : 권한 및 mask 등 모든 권한 삭제 (--remove-all)

ex) setfacl m u:posein hi.txt : posein 유저에 대한 권한 삭제

ex) setfacl R m g:terran:rwx terran/ : terran 그룹에 속한 사용자들의 terran 디렉터리에 대한 rwx 권한을 하위까지 부여

 

 

 

nmap (network mapper) : 네트워크 탐지 도구 및 보안 스캐너. 서비스 중인 포트를 스캔하여 출력

ex) nmap O p 1-65535 localhost : 로컬 호스트의 운영체제와 포트번호 1번부터 65535번까지 열린 포트 점검

 

 

전체백업 : 특정 디스크나 파티션에 대한 전체적인 백업

증분백업 : 정해진 시간을 기준으로 그 이후 변경된 데이터만 백업

차등백업 : 마지막 백업 이후 변경된 모든 데이터 백업

 

 

 

전체백업/복원

tar cvfp home.tar /home : home디렉터리에 대한 퍼미션을 유지하면서 .tar로 백업

tar xvf home.tar : 복원

 

 

 

증분백업/복원

tar g list cvfp home1.tar /home : -g(증분백업). list라는 파일의 내용을 토대로 증분백업 시도

tar xvf home1.tar C

증분/차분 백업 참조 : https://m.blog.naver.com/PostView.nhn?blogId=baraem2005&logNo=20169325640&proxyReferer=https:%2F%2Fwww.google.com%2F

 

 

 

cpio (copy input to output)

: 대량의 백업 및 장치파일이나 네트워크 파일등에 대한 백업 가능. 손상된 부분을 제외한 백업 가능.

: 백업본의 크기가 작으나, 증분백업 불가

 

[셸 명령어 | ] cpio option > 파일명

cpio option < 파일명

-o : 표준 출력으로 보내어 사용 (--create)

-i : 표준 입력으로 백업 자료를 불러올 때 (--extract)

-v : 과정 출력 (--verbose)

-c : 아카이브 포맷 형식을 new SVR4 ~~로 지정

-d : 필요할 경우 디렉터리 생성 (--make-directories)

-t : 내용만 확인할 때 사용 (--list)

-F : 표준 입출력 전환 기호 대신 파일명 지정 (--file=파일명)

-B : 입출력 블록 사이즈 조절 (512~5120byte)

-H 포맷 : 아카이브 폼맷 형식 지정. bin, newc, crc(--format 포맷)

 

 

 

dump / restore

: 파일들이 아닌 파일 시스템 전체를 백업

: 전체백업과 증분 백업 지원

: 0~9단계 (0=전체백업 / 나머지=부분백업)

: /etc/fstab 파일을 참조하여 백업

: yum install dump를를 통한 설치 필요

: ext 파일 시스템 계열만 지원

 

 

dump option 파일명 백업대상

-0~9 : 레벨

-f : 백업할 매체나 파일명 기재

-u : dump 작업 후 /etc/dumpdates 파일에 관련 정보 기록

ex) dump 0u f backup.dump /dev/sda7

 

 

restore option 백업파일명

-i : 대화식으로 복구할 파일 선택 후 복원

-f : 백업할 매체나 파일명 기재

-r : 전체 복원시 사용. 파일 시스템의 및 마운트 필요

 

 

dd(data dumper) : 파티션이나 디스크 단위 백업. 간편하나 시간소요

ex) dd if=/dev/sda1 of=/dev/sdb1 bs=1k : 블록사이즈를 1kb 단위로 하여 /dev/sda1/dev/sdb1으로 백업

 

 

 

rsync(remote synchronous)

: 네트워크로 연결된 원격지의 파일들 동기화

: 링크된 파일이나 디바이스 파일 복사 가능.

: 그룹을 포함한 소유권 및 허가권 유지한 복사 가능

: GNU tar과 유사한 옵션 사용. 특정 부분만 백업 가능

: sshrsh를 이용한 전송가능. root권한 불필요

: 익명 사용자 및 인증된 사용자 지원. 미러링에 이상적

: 내부 파이프 라인을 통한 빠른 전송

: 로컬 시스템 백업시 별다른 서버 설정 없이 사용가능

 

 

 

rsync [option] 출발지 목적지

-r : 하위 디렉터리까지 (--recursive)

-l : 심볼릭 링크 보존 (--links)

-L : 심볼릭 링크가 참조하는 파일 복사 (--copy-links)

-p : 퍼미션 보존 (--perms)

-t : 타임스탬프 보존 (--times)

-g : 그룹 소유권 보존 (--group)

-o : 소유권 보존 (root, --owner)

-D : 디바이스 파일 보존 (root)

-H : 하드링크 보존 (--hard-links)

-a : 모든 옵션 사용 (-rlptgoD, --archive)

-v : 진행상황 출력 (--verbose)

-u : 업데이트된 내용만 전송 (--update)

-z : 전송할 때 압축 (--compress)

-b : 동일한 백업파일 존재시 ~을 붙이고 생성 (--backup)

-e : 원격지에서 사용할 셸 명령어 기재 (--rsh=명령어)

--progress : 명령이 실행되는 동안의 전송상황 정보 출력

--delete : 송신측에 없는 파일이 수신측에 존재할 경우 삭제

 

 

300x250
728x90