본문 바로가기

Server/Linux

리눅스 기본 보안원칙

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

(1) 꼭 필요한 프로그램들만 설치 하고 사용자들의 접근을 최대한 제한

(2) 서버 운영 관련 프로그램들을 자주 업데이트

(3) 사용자에 대해 정확한 정보를 파악하라.

(4) 시스템 보안의 목표

- 정보의 비밀성 : 비인가자 및 불법 사용자로부터 비밀자료의 누출 방지를 보장

- 정보의 무결성 : 자료의 변경, 삭제, 생성, 파괴 등으로 부터 보호

- 정보의 가용성 : 적시 적소에서 정보에 접근 가능하고, 사용할 수 있는 상태 확보

- 서비스 기록성 : 서비스에 관한 로그파일 기록 및 감시

- 부인 봉쇄 : 부인 할 수 없는 증거의 확보

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

1. 기본적인 컴파일러 속성을 root만 사용할 수 있도록 퍼미션 변경

# chmod 100 /usr/bin/gcc /usr/bin/g++

# chattr +i /usr/bin/gcc /usr/bin/g++

-> 컴파일러는 root만 실행, 일반유저가 파일을 수정/복사/삭제 안됨.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

2. 주요 환경 설정파일 압축 보관

# tar -cvzf etc.tgz /etc

# tar -cvzf named.tgz /var/named

# tar -cvzf qmail.tgz /var/qmail

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

3. 홈디렉토리 파티션과 백업 디스크를 준비한다.

# df -h

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

4. 런레벨별 시작스크립트 활성화 상황을 분석하고 재정의 한다

# chkconfig --list

# ntsysv

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

5. ssh 원격 접속 서비스 보안

# vi /etc/ssh/sshd.conf

-> PermitRootLogin no 로 변경

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

6. proftpd 서버에서의 chroot 적용 및 root 접속 제한하기

# vi /usr/local/server/proftpd/etc/proftpd.conf

-> DefaultRoot ~!wheel

-> RootLogin off

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

7. su 명령어는 wheel 그룹 사용자만 실행 권한 부여하기

# chown root.wheel /bin/su

# chmod 4750 /bin/su

# chattr +i /bin/su

# vi /etc/group

-> wheel:x:10:root,kim,(..추가하고 싶은 유저)

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

8. 사용자 관련 명령어 파일속성 변경금지 설정

# chmod 750 /usr/sbin/useradd /usr/bin/top /sbin/fdisk /sbin/mkfs* /sbin/fsck*

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

9. root 소유의 SetUID, SetGID 파일 검색 후 퍼미션 조정하기

# find / -user root -perm -4000 -print

굳이 root로 실행 될 필요없는 ping,ping6 퍼미션을 100으로 변경

# chmod 100 /bin/ping /bin/ping6

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

10. 기본 시스템 정보 오픈 파일들 점검

- /etc/issue : 콘솔로 로그인 시도시 보여주는 메시지 설정파일(telnet)

- /etc/issue.net : 원격에서 로그인 시도시 보여주는 메시지 설정파일(telnet)

- /etc/redhat-release : 원격에서 로그인 시도시에 리눅스 배포판 정보를 보여주는 메시지(telnet)

- /etc/motd : 로그인을 성공한 다음 보여주는 메시지 (telnet,ssh)

--> 내용을 빈파일로 만들거나 다른 문자로 변경하도록 한다.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

11. /etc/sysctl.conf와 /proc파일 시스템 설정

(1) icmp ping 값에 응답하지 않게 하기

# sysctl -w net.ipv4.icmp_echo_ignore_all=1

(2) 커널 버전 및 운영체제 이름 알아보기

# cat /proc/sys/kernel/osrelease

# cat /proc/sys/kernel/ostype

(3) 특정 네트워크의 브로드캐스트 주소를 대상으로 하는 ping 테스트 막기

# sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1

(4) tcp 연결 세션 유지시간(기본값 60[초])

# cat /proc/sys/net/ipv4/tcp_fin_timeout

(5) tcp keep alive 시간 : TCP 연결상태를 유지하는 시간을 설정 (기본값 :7200[초])

# sysctl -w net.ipv4.tcp_keepalive_time=1200

(6) 서버내에서의 로컬 포트 범위를 지정하고 있는 파일

# cat /proc/sys/net/ipv4/ip_local_port_range

(7) ip포워딩을 지정하는 파일 (기본값:0)

# cat /proc/sys/net/ipv4/ip_forward

(8) 서버의 날짜 정보를 외부의 네트워크로 부터 막기 (0이면 못가져감)

# cat /proc/sys/net/ipv4/tcp_timestamps

(9) SYN Flooding 공격막기 (백로그큐 늘려주기 or tcp_syncookies를 1로 바꿔줌)

# cat /proc/sys/net/ipv4/tcp_max_syn_backlog

(10) ICMP redirect의 변조된 accept 패킷 차단 (0이면 패킷 차단)

# cat /proc/sys/net/ipv4/conf/default/accept_redirects

# sysctl -w net.ipv4.conf.default.accept_redirects=0

(11) DOS공격의 소스 서버로 사용을 차단 (IP 스푸핑 방지=1)

# cat /proc/sys/net/ipv4/conf/default/rp_filter

(12) 스푸핑 패킷에 로그 생성 (기본값=0, 로그 남김=1)

# cat /proc/sys/net/ipv4/conf/default/log_martians

(13) source route 패킷허용 막기 (0이면 막기 설정)

# cat /proc/sys/net/ipv4/conf/default/accept_source_route

(14) 커널에서 사용할 수 있는 최대 파일의 수 설정

# cat /proc/sys/fs/file-max

(15) CPU 정보 보기

# cat /proc/cpuinfo

(16) 서버 메모리 정보 보기

# cat /proc/meminfo

(17) 서버 디바이스 장치 알아보기

# cat /proc/devices

(18) 커널에서 인식할 수 있는 파일시스템 알아보기

# cat /proc/filesystems

(19) 현재 사용되고 있는 메모리 번지값 알아보기

# cat /proc/iomem

(20) 서버에 장착된 입출력 포트들의 번지값 알아보기

# cat /proc/ioports

(21) 서버의 평균 부하율 알아보기

# cat /proc/loadavg

(22) 커널에 로드되어 있는 모듈들 알아보기

# cat /proc/modules

(23) 현재 리눅스 시스템에 마운트된 장치 디바이스 정보 알아보기

# cat /proc/mounts

(24) 파티션 정보 알아보기

# cat /proc/partitions

(25) 커널 버전 알아보기

# cat /proc/version

(26) 장치들의 IRQ 값 알아보기

# cat /proc/interrupts

--> 재부팅시에도 적용이 되도록 하려면 /etc/sysctl.conf 파일에 정의해 주면 됨.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

12. 시작 프로그램의 수동 등록

# cat /etc/rc.d/rc.local

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

13. 서버의 표준시간 설정

# rdate -s time.bora.net && clock -w

# date && clock

# crontab -e

00 01 * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

14. SetUID, SetGID, StickyBit

- 4xxx : SetUID 퍼미션 부여

- 2xxx : SetGID 퍼미션 부여

- 1xxx : Stickybit 퍼미션 부여

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

15. 파일 검색을 위한 find 명령어 사용

(1) 지정한 날짜 이후에 변경된 적이 있는 파일 찾기

# find / -used 2 -exec ls -l {} \;

(2) 지정된 파일보다 이후에 생성된 파일 검색

# find / -newer /root/test.txt -exec ls -l {} \;

(3) root 소유의 SetUID 파일 검색

# find / -user root -perm -4000 -print

(4) 리눅스 서버내의 백도어 파일 검색

# find /dev -type f -exec ls -l {} \;

(5) 서버 내부의 .rhost 파일 검색

# find / -name .rhosts -exec ls -l {} \;

(6) 서버 내부의 .bash_history 파일 모두 검색 확인

# find / -name .bash_history -exec ls -l {} \;

(7) 소유자가 없는 파일 or 소유그룹이 없는 무적 파일 검색

# find / -nouser -o -nogroup -print

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

16. root 관리자 명령어와 일반 사용자 명령어 실행 경로(PATH) 설정

(1) root 관리자의 id와 실행파일 경로 PATH 보기

# id

# echo $PATH

(2) 유저의 id와 실행파일 경로 PATH 보기

# id

# echo $PATH

# cat .bash_profile

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

17. 파일속성 설정으로 리눅스 파일 변형 막기(chattr, lsattr)

- chattr [-RV] [-v 설정버전] [+- 설정모드] [대상파일들]

- lsattr [-RVadv] [대상파일들]

- i 속성: 안지워짐 , a속성 : 추가만 가능

(예)

# touch test1.txt

# chattr +i test1.txt

# lsattr test1.txt

# rm test1.txt -> 안지워짐

# chattr -i test1.txt

# rm test1.txt -> 지워짐

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

18. TCP Wrapper를 이용한 호스트 접근제어 (/etc/hosts.deny, /etc/host.allow)

- TCP 기반 서비스들의 모니터링과 필터링을 TCP Wrapper를 통하여 설정 가능.

- xinetd 수퍼데몬으로 관리하는 서비스 데몬만 제어가 가능함.

- standalone 방식으로 서비스하는 데몬은 TCP Wrapper로 접근 제어가 불가능.

- /etc/hosts.deny 파일 적용후 /etc/hosts.allow 적용

- 대부분의 방화벽 설정은 tcp wrapper를 사용하지 않고 패킷 제한방법인 iptables를 사용함.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

19. nmap 보안스캐너 사용하기

(예)

# nmap -v -sT -O localhost

# nmap -sV localhost <-- 포트 서비스 버전까지 나옴

# nmap -sU -sV localhost <-- UDP 사용포트 스캔

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

20. 보안 쉘접속을 위한 ssh 쉘접속 사용

# vi /etc/ssh/sshd_config

(1) 원격에서의 root로 접속을 제한하기 위해서는

PermitRootLogin no

(2) ssh 접속을 특정 유저에게만 오픈하고자 한다면

AllowUsers linux lug

(3) 서비스 포트 변경

Port 22222

(4) 서비스 포트 변경 후 접속시

# ssh linux@127.0.0.1 -p 22222

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

21. portsentry를 이용한 실시간 포트 스캔 방어

- portsentry는 실시간으로 메모리에 상주에 있으면서 포트스캔을 탐지하고 대응하는 프로그램.

- 비정상적인 방법으로 스캔하면 감지하여 자동으로 /etc/hosts.deny파일에 ip추가하여 차단함

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

22. chkrootkit을 이용한 rootkit 탐지 (http://www.chkrootkit.org)

# wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz

# make sense

# ./chkrootkit <- rootkit 감염여부 검사

# ./chkproc -v <- ps명령으로 PID가 보이지 않는 프로세스들을 검출

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

23. rootkithunter 설치 및 사용법

- 백도어나 루트킷을 검출하며, 루트킷이 사용하는 파일 및 숨김파일의 존재여부를 판별해 준다.

# ./installer.sh --install

# rkhunter --update

# rkhunter -c

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

24. OSSEC 유틸리티 (http://www.ossec.net)

- chkrootkit 프로그램과 다르게 시스템상 데몬으로 동작하면서 지속적으로 시스템의 주요파일 및

로그들을 확인하고, 외부공격에 대해 바로 대응 할 수 있는 유틸리티

- 관리자에게 실시간으로 메일을 발송한다.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

25. iptables를 이용한 방화벽 설정하기 (http://www.netfilter.org)

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

'Server > Linux' 카테고리의 다른 글

CentOS SELINUX 비활성화 설정  (0) 2011.12.28
CentOS 설치후 네트워크 설정  (0) 2011.12.28
grep 명령어로 kill  (0) 2011.11.27
grub vga modes  (0) 2011.09.23
리눅스 네트워크 설정 .  (0) 2011.09.23