I. 시스템 보안 및 관리
iptables
커널에서 직접 처리하도록 커널의 모듈화된 형태로 동작한다.
root 직접 접속 차단: 대부분의 배포판에선 root 직접 접속을 허용 하므로 차단해야될 필요성이 있다.
#PermitRootLogin yes //변경전
PermitRootLogin no //변경후
*패스워드 관리
관리 원칙
-패스워드는 개인별로 발급한다.
-패스워드는 타인에게 공지해서는 안된다.
-패스워드는 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)
chkconfig: 서비스에 대한 부분 관리 명령어
# chkconfig -h // 명령어 사용법 |
# chkconfig --list (데몬명) // 부팅시 전체(특정) 서비스 상태 보기 |
# chkconfig --del [데몬명] //서비스 삭제 |
# chkconfig --add [데몬명] //서비스 추가 |
ntsysv: chkconfig 보다 훨씬 관리가 수월함
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 | 서비스 데몬 호출시 같이 전달할 인수 |
*파일시스템 설정 원칙
-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
-파일의 권한 변경 전 해당 파일의 권한 변경이 반드시 필요한지 한번더 확인한다.
-데이터 공유 영역의 경우 파티션을 생성하여 관리자외에는 읽기 권한만 부여하고, 데이터 기록은 관리자만이 한다.
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 | 특정 메일 프로그램의 위치 지정 |
정책 파일 구성요소 |
설명 |
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를 실행시켰을때 바뀐 파일 검사 |
'자격증 > 리눅스 마스터 1급' 카테고리의 다른 글
Part3) 네트워크 및 서비스의 활용 - 네트워크 서비스 | 웹 관련 서비스 (0) | 2018.03.07 |
---|---|
Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(3) | 시스템 백업 (0) | 2018.03.06 |
Part2) 리눅스 시스템 관리 -시스템 보안 및 관리(1) | 시스템 분석 (0) | 2018.03.05 |
Part2) 리눅스 시스템 관리 - 장치 관리 | 장치의 설치 및 관리 (0) | 2018.02.28 |
Part2) 리눅스 시스템 관리 - 일반 운영 관리(3) | 프로세스 관리, S/W설치 및 관리 (0) | 2018.02.22 |