본문 바로가기

자격증/리눅스 마스터 1급

Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(2) | 시스템 보안 및 관리

I. 시스템 보안 및 관리


시스템 보안 관리

1) 사용자 접근 관리

*물리적 접근 관리
-BIOS 접근 제한 플로피 부트 옵션 사용 X
-부트로더의 접근 제한 grup에서 패스워드 설정 [ hiddenmenu에 "password --md5 $1$ays2I$QbESw/YAowoujitf5iGpW/" 가 들어가 있다.]
(LILO사용 시엔 password와 restricted 명령어 / GRUB사용 시엔 password 명령어)
-터미널 접근 제한▶ xlock: X윈도우 화면을 잠금 / vlock: 하나 이상의 세션(가상 콘솔)을 잠글 때 사용 / nologin: root를 제외한 다른 사용자 접근 차단


일반 사용자 접근 관리
-사용하지 않는 계정은 삭제한다.
-로컬 계정과 네트워크계정은 동일한 사용자일 경우 동일한 계정을 사용하도록 한다.
-여러 사용자가 공유하는 계정은 만들면 안된다.
-시스템의 성격 및 사용자의 권한에 따라 접근할 수 있는 명령어에 대한 제한을 고려해야한다.

루트 권한 사용자시 실수 방지
-rm명령어 사용 시 확인 옵션을 사용
-삭제할 경우 가능하면 절대경로 이용
-PATH에 "." 포함되지 않도록 주의
-rsh, rexec, rlogin 등과 같은 명령어는 보안에 취약하므로 사용 금지
-root 권한으로 작업 시 작업 전에 대한 작업에 대한 확인 필요



네트워크 접근 관리

TCP Wrapper
-네트워크 호스트들에 대한 접근제어를 한다.
-/etc/hosts.allow 파일에는 접근을 허용할 서비스와 IP주소를 기록한다.
-/etc/hosts.deny 파일에는 denyALL을 설정하고 꼭 필요한 접근만 /etc/hosts.allow 파일에 기록하는 것이 더 나은 보안을 제공한다.
-시스템 이름이나 도메인 이름보다 IP주소를 사용할 것을 권고한다.


iptables

커널에서 직접 처리하도록 커널의 모듈화된 형태로 동작한다.




수퍼유저 접근관리

root 직접 접속 차단: 대부분의 배포판에선 root 직접 접속을 허용 하므로 차단해야될 필요성이 있다.

#PermitRootLogin yes //변경전

PermitRootLogin no //변경후




2) 사용자 인증 관리

*패스워드 관리


관리 원칙

-패스워드는 개인별로 발급한다.

-패스워드는 타인에게 공지해서는 안된다.

-패스워드는 12자리 이상으로 설정한다.(반드시 영문자, 특수문자, 숫자를 혼합 사용)

-패스워드를 지정시 사전적인 단어등의 유추 가능한 것으로 하면 안된다.

-변경시에는 3자 이상 변경되어야 하며 이전 패스워드에서 유추가 불가능해야 한다.



*쉐도우 패스워드 사용

-보안에 취약한 /etc/passwd 파일 대신 /etc/shadow 파일에 패스워드가 암호화되어 저장되며, root 사용자만 접근이 가능하다.

-/etc/shadow 파일은 사용자의 암호와 관련된 정보만을 가지고 있으며, 현재 배포판 대부분 기본적으로 쉐도우 패스워드를 제공한다.



*PAM(Pluggable Authentiction Modules) 인증 모듈

-리눅스 배포판에서 사용자 인증의 핵심이다.

-사용자 정보의 저장 방법과 관계없이 모든 프로그램이 투명하게 사용자를 인증하게 하여 혼잡함을 제거

-pam 구성 파일은 /etc/pam.d 디렉터리에 저장

-모듈 디자인으로 인해 사용자 인증 방법에 대해 확실한 통제를 할 수 있도록 한다.

-가장 큰 장점은 유동성


PAM의 기능

-특정 서비스에 대한 사용자(그룹)들의 허가/거부 목록 파일을 만든다.

-사용자 패스워드 길이를 제한한다.


※구성 토큰에 대해서는 뒤에서 자세히



*SELinux

-미 국가 보안국이 오픈 소스커뮤니티에 릴리즈한 Linux의 보안 강화 버전으로서 리눅스 보안 모듈 구조체를 이용해 리눅스 커널에 의무 접근 제어를 구현

-전체적인 보안성을 향상시키기 위해 머신에 적용하는 보안 정책/모듈의 집합체


3가지 모드

Enforcing: SELinux를 활성화시키고 SELinux 정책을 시행

Permissive: 정책을 시행하는 대신 경고만 출력

Disabled: SELinux 정책을 로드X. SELinux 정책을 완전히 비활성화


2가지 레벨

Targeted: 대상으로 삼은 프로세스를 보호

Mls: 다중 레벨 보안(Multi Level Security) 보호 상태

(SELinux 설정(활성화) 상태 확인 ▶ getenforce)

(SELinux 각종 상태 확인 ▶ sestatus)



3) 서비스 관리

*시스템 서비스 관리


chkconfig: 서비스에 대한 부분 관리 명령어

 # chkconfig -h // 명령어 사용법 

 # chkconfig --list (데몬명) // 부팅시 전체(특정) 서비스 상태 보기  

 # chkconfig --del [데몬명] //서비스 삭제

 # chkconfig --add [데몬명] //서비스 추가 


ntsysv: chkconfig 보다 훨씬 관리가 수월함




*xinetd 서비스 관리


xinetd의 기능

-접근제어(Tcp_wrapper 지원, 호스트별 접근 승인/차단 및 시간당 접속수 및 접속수 제어, 시간대별 접속 제한, IP별로 다른 서비스 제공)

-DoS 공격 방어 가능

-syslog를 이용하지 않고 서비스에도 독립적인 로깅 시스템을 생성할 수 있음

-포워딩 기능(포트포워딩, IP포워딩)

-IPv6 지원

-※방화벽 우회기능은 제공X


설치

# yum install xinetd


설치 경로

[/etc/rc.d/init.d/xinetd] - 실행 스크립트

[/etc/sysconfig/xinetd] - xinetd데몬에 대한 설정

[/etc/xinetd.conf] - xinetd이 서비스 설정파일

[/etc/xinetd.d/] -  개별 서비스 별로 파일 생성 후 서비스별 설정

[/usr/sbin/xinetd] - xinetd 데몬

[/var/run/xinetd.pid] - xinetd의 pid가 저장


서비스 실행 종료

# /etc/rc.d/init.d/xinetd [start|restart|stop] or service xinetd [start|restart|stop]


xinetd 설정: /etc/xinetd.d/ 아래에 설정

 옵션

 내용 

 disable 

 서비스를 비활성화 시킬지 여부 (yes=비활성화)

 port 

 사용하는 포트 번호

 socket_type 

 서비스 소켓의 타입

 wait 

 yes이면, xinetd 가 요청된 한 daemon 이 끝날 때까지 다른 요청을 받지 않음

 only_from 

 접근 가능 호스트 (위에선 192.168.1.1만 가능)

 user

 데몬의 uid 설정

 server 

 서비스 데몬이 위치하는 파일시스템 경로

 server_args 

 서비스 데몬 호출시 같이 전달할 인수 




4) 파일 및 파일시스템 보안

*파일시스템 설정 원칙

-SetUID/SetGID를 사용자의 홈 디렉터리에 사용하지 않아야한다.

-NFS를 제공하는 경우, /etc/exportfs에서 외부에서 접속할 수 있는 호스트들을 제한하며 옵션을 이용해 권한을 최소한으로 유지한다.[읽기전용]

-사용자의 파일생성 umask를 가능한 제한된 값으로 조정한다.

-모든 사용자의 접속 기록을 가지고 있는 /var/log/wtmp, utmp 로그이다. 여기엔 644권한을 부여해야 한다.

-보호되어야 할 파일을 위해서 특수 비트인 변경 불가 비트(Immutable Bit)를 사용할 수 있다.


-SetUID/SetGID는 잠재적인 보안 위험 요소를 안고 있어서 철저히 감시되어야 한다.

 # find / -type f \(-perm -04000 -o -perm -0200\)

-누구나 쓸수 있는 파일이나 디렉터리를 추가적으로 생성하면 안된다.

  # find / -perm -1000|-0007 -ls

-소유자가 없는 파일이 존재시 침해의 흔적일 수도 있다.

  # find / -nouser -o -nogroup -print

-rhosts관련 파일은 없는지 확인해야 한다.

  # find /home -name .rhosts -print

-파일의 권한 변경 전 해당 파일의 권한 변경이 반드시 필요한지 한번더 확인한다.

-데이터 공유 영역의 경우 파티션을 생성하여 관리자외에는 읽기 권한만 부여하고, 데이터 기록은 관리자만이 한다.



5) 시스템 보안

*시스템 설치에서 서버접속까지의 보안관리

  1. 시스템을 설치 후 바로 패치를 진행한다.

  2. 설치 시 파티션을 구성한다.

  3. 불필요한 서비스를 제거한다. [퍼미션 변경 ▶ 소유자 root변경 ▶ xinetd의 disable yes로 변경 ▶ "chattr -i 파일명" 명령어로 root만의 권한 부여]

  4. 실행되는 서비스들에 대해서는 로깅(logging)해야 한다

  5. 서버 접속시 안전해야 한다. (SSH, TCP_wrapper)

  6. iptables (커널 내부 모듈 형태로 ipv4 패킷의 필터링을 위해 만들어짐)




6) 시스템 보안 관련 유틸리티 및 명령어


*SSH(Secure Shell)


SSH의 기능

-두 호스트 간 공개키 기반의 암호화 기법으로 통신을 암호화한다.

-패킷을 암호화하여 패킷을 전송한다.

-Secure ID, s/key, Kerberos, TLS를 지원한다.

-X11Forwaring을 지원한다.

-RSA 공개키/개인키 방식을 지원한다. [※TSA방식 X]

-SSH1: 공개 프로그램 / SSH2: 비상업적인 경우에만 자유


SSH 로그인

# ssh -l bjkim gate.bjkim.com //gate.bjkim.com에 계정이름 bjkim으로 로그인


인증키 만들기

# ssh-keygen // 암호화 알고리즘을 선택할 수 도 있다.

/*키가 지정될 위치와 이름을 적으면 생성*/


퍼블릭 키(Public Key)사용하기 - 공개키를 서버에 복사

# scp ~/.ssh/id_ras.pub bjkim@gate.bjkim.com:.ssh/authorized_keys


인증키를 메모리에 상주시키기[ssh-add와 ssh-agent]

-처음 한번 만 인증키 암호를 입력하면 다음 접속할 때마다 인증키 암호를 입력하지 않는 방법으로, 사용을 편리하게 해준다.

# eval $(ssh-agent) [Enter]

Agent pid 31823

# ssh-add

Identity added: /home/bjkim/.ssh/id_rsa (/home/bjkim/.ssh/id_rsa)


ssh를 이용한 파일 복사 - scp

# scp dump bjkim@gate.bjkim.com:. //파일 dump를 gate.bjkim.com의 계정이름 bjkim의 홈디렉터리로 복사

/* ~/.ssh/config파일에 위 계정을 넣어 설정했다면 보다 편리하게 사용할수도 있다. */


ssh 터널링

-ssh 접속을 다른 프로그램이 사용할 수 있도록 포트포워딩해주는 것을 말한다. (암호화 접속을 사용하지 않는 네트워크접속을 보다 안전하게 해줌)

프로토콜 예시: SOCKS


설정파일 - ~/.ssh/config (전체사용자 기본 설정: /etc/ssh/ssh_config)

-Host 지시자를 사용해 접속할 서버마다 다른 옵션을 사용할 수 있다.



*PAM(Pluggable Authentiction Modules)


설정파일 위치: /etc/pam.d/아래 서비스명 형태로 생성, /etc/pam.conf 파일에 설정


 구성 토큰 

 의미 

 module-type

 어떤 형태로 인증할 것인지 4가지 형식을 정의 

 auth

 인증 방식 [1. 패스워드 인증 방식, 2. 자격 증명 방식]

 account

 인증이 아닌 계정관리를 수행하는 모듈

 session 

 인증 전후에 필요한 작업들을 지정[홈 디렉터리 마운트/언마운트, 로그인/로그아웃 사용자에게 제공 서비스에 대한 제한]

 password 

 사용자가 그들의 인증을 변경하기 위한 방법을 제공

 control-flag 

 성공 또는 실패 결과에 따라 어떻게 반응할지 결정

 required

 해당 인증이 성공하기 위해선 지시된 모듈타입의 성공이 필수적

 requisite

 모듈을 이용하는 인증이 실패한 경우 인증을 거부하기 위해 사용

 sufficent 

 이전에 인증된 모듈이 모두 실패하더라도 해당 모듈만 성공한다면 인증이 성공

 optional  

 인증 결과의 결정 여부

 module-path 

 동적으로 로드될 오브젝트 파일의 위치 및 파일명

 arguments 

 로드되는 오브젝트에 전달되는 인수를 지정 



*sudo

-시스템 관리자가 사용자로 하여금 정상적으로 "Root 권한"을 가지고 프로그램들을 실행 할 수 있게 하도록 허용해주는 것

-사용자를 관리할 때, 사용자 관리에 필요한 일부 명령어만 "Root 권한"으로 사용가능하게 설정


sudo 설정 편집 명령어: visudo



*tripwire

-시스템에 존재하는 파일들에 대해 DB를 구축후 생성된 DB와 비교하여 추가, 삭제 또는 변제된 파일이 있는지 점검하고 레포팅 하는 무결성 검사도구이다.

-MD5, SHA, CRC-32 등의 다양한 해시 함수를 제공한다.

-파일들에 대한 DB를 만들어 불법적인 외부 침입자에 의한 파일 변조 여부를 판별할 수 있다.(침입자가 파일 바꿔치기해도 알기 쉬움)

-기본적으로 /etc/tripwire 디렉터리에 설치된다.


설치

# yum install tripwire


tripwire 설정 파일

/etc/tripwire/twcfg.txt ▶ 설치를 위한 환경 설정 파일

/etc/tripwire/twpol.txt ▶ 정책 파일

/etc/tripwire/twinstall.sh ▶ 설치 스크립트 2.4부터 tripwire-setup-keyfiles 명령어로 변경


키 생성과 정책을 생성

1

 #tripwire-setup-keyfiles

 /* Passphrase(키생성 문자열) 입력 */

2

 site passphrase 이용하여 정책파일 완성  

3

 #/usr/sbin/tripwire --init //tripwire 데이터베이스 초기화


tripwire 사용하기

 무결성 검사하기 

 # /usr/sbin/tripwire --check 

 데이터베이스 갱신 

 # /usr/sbin/tripwire --update

 # /usr/sbin/tripwire -m u 

 정책파일 갱신 

 # /usr/sbin/tripwire --update-policy /etc/tripwire/policyfile.txt

 # /usr/sbin/tripwire -m p /etc/tripwire/policyfile.txt 

 정책파일 생성

 # /usr/sbin/tripwire --create-polfile /etc/tripwire/newpol.txt 


tripwire 환경설정 및 정책 설정 방법 - twcfg.txt 파일 설정

 

 변수명

 설명 

 POLFILE 

 정책 파일의 위치 지정

 기본설정: /etc/tripwire/tw.pol 

 DBFILE 

 데이터베이스 파일의 위치지정

 기본설정: /etc/tripwire/$(HOSTNAME).twd 

 REPORTFILE 

 실행 후 생성된 결과 파일 위치 지정

 기본설정: /var/lib/report/$(HOSTNAME)-$(DATE).twr 

 SITEKEYFILE 

 site keyfile 위치 지정

 기본설정: /etc/tripewire/site.key 

 LOCALKEYFILE 

 local keyfile 위치 지정

 기본설정: /etc/tripwire/$(HOSTNAME)-local.key 

 EDITOR 

 사용하고자하는 편집기의 위치

 기본설정: /bin/vi

 LATEPROMPTION 

 tripwire가 마지막에 패스워드를 요구하도록 설정

 기본설정: false

 SYSLOGREPORTING

 true 설정 시 각종 update를 syslog에 알림

 기본설정: true 

 LOOSEDIRECTORYCHECKING

 디렉터리 변경사항 있는지 출력

 기본설정: false

 REPORITLEVEL

 tripwire -preint-report 명령으로 report를 출력할 때의 레벨로 0~4까지의 레포트 레벨이 있음

 기본설정: 3 

 MAILNOVIOLATIONS 

 무결성 검사시 아무런 변화가 없을때에도 이메일 경고를 할지 나타냄

 기본설정: true 

 EMAILREPORTLEVEL 

 email report level로 0~4

 기본설정: 3 

 MAILMETHOD 

 이메일 경고를 위해 사용할 protocol 명시

 기본설정: SENDMAIL 

 MAILPRORAM 

 특정 메일 프로그램의 위치 지정
 기본설정: /usr/sbin/sendmail -oi -t 



정책 파일의 구성 - twpol.txt

 정책 파일 구성요소 

 설명 

 Rules

 정책 파일의 기본 구성요소로 무결성 검사시 시스템의 객체에 대해 모니터할 Properity를 명시해 주는것 

 Stop points 

 무결성 검사시 스캔하지 않을 시스템의 객체 명시 

 Attributs 

 이메일을 보내거나 Recursion을 조정하는 규칙 

 Directive

 하나의 정책 파일을 네트워크 서버에서 사용할 경우 

 Variable

 관리자가 편리하게 정보를 바꾸도록 설정 



tripwire 활용

 무결성 검사

 # tripwire --check  

 테스트 모드

 # tripwire --test --email admin@test.com

 twprint로 출력

 # twprint --print-dbfile > db.txt 

 정책파일 생성

 # /usr/sbin/tripwire --create-polfile /etc/tripwire/newpol.txt 



*cops(Computer Oracle and Password System)

-리눅스 시스템에 대한 보안 감시 활동을 위한 프로그램이다.

-보안 문제에 대하여 점검 후 알려 주기만 하지 고쳐주지는 않는다.

-시스템 보안 수준을 수동적으로 조절한다.

-root사용자 이외에도 사용가능하다.


COPS의 기능

-파일, 디렉터리 및 장치에 대한 퍼미션 점검

-SUID 파일 점검

-시스템 파일, 디렉터리 소유권과 퍼미션 변화 점검

-/etc/passwd, /etc/group 내용 점검

-/etc/hosts.equiv. ~/.rhosts 파일 점검

-/etc/rc.*, /etc/rc*.d/*, cron 파일 점검

-anonymous ftp 점검


cops의 실행

 # ./cops //cops 실행 

 실행결과로 호스트명과 같은 디렉터리가 생기고, 해당 디렉터리에 "year_month_day"형식으로 파일이 생긴다. 


cops의 실행 파일들

 이름

 내용 

 root.chk 

 루트 사용자가 프로그램 사용 시참조되는 파일에 대한 쓰기가능성 조사 

 dev.chk 

 중요한 디바이스 파일에 대한 퍼미션을 조사 

 group.chk 

 /etc/group에 대하여 중복된 그룹이름, 알파벳 같은 그룹명 조사 

 home.chk 

 사용자들의 홈디렉터리의 writability를 검사 

 rc.chk 

 /etc/rc.* 파일에 대하여 writability를 검사 

 passwd.chk 

 /etc/passwd 파엘에 대하여 중복된 ID, 패스워드가 없는 ID, UID=0이지만 루트가 아닌 사용자 등을 검사

 pass.chk 

 login name과 같은 패스워드 계정을 찾아냄 

 user.chk 

 사용자 홈 디렉터리에 있는 중요한 startup 파일들의 writability를 검사 

 cron.chk 

 cron 디렉터리안에 있는 파일들에 대하여 writability를 검사 

 misc.chk

 /etc/motd의 writability나 /etc/inetd.conf 에 의해 구동되는 데몬의 writability를 검사 

 is_able.chk 

 is_able.lst에 있는 파일등의 writability를 검사 

 crc.chk 

 CRC_list에 있는 파일들의 write/read-ability를 검사 

 bug.chk 

 알려진 버그들과 시스템에 있는 파일들을 비교 

 suid.chk 

 setuid나 setgid 파일들을 찾아 list로 저장한 다음 나중에 cops를 실행시켰을때 바뀐 파일 검사