2012년 5월 19일 토요일

리눅스 보안 설정

1. 리눅스와 보안
리눅스는 UNIX를 모태로 하여 만들어진 운영체제이다. 유닉스에 비해 다양한 하드웨어의 지원, 강
력한 네트워크 기능, 무료 공개 소프트웨어등 여러가지 이점을 가지고 급속도로 보급되어가고 있다.
리눅스의 오픈 정책으로 인하여, 운영체제 커널에서부터 일반 사용자 프로그램까지 거의 모든 것이
공개되어 있다. 이러한 정책은 일반 PC에서도 서버로 사용할 수 있게 되었다. 하지만 소스의 공개
로 인하여 해커들이 쉽게 버그를 찾아내고 테스트할 수 있어 주요 공격 대상이 될 수도 있다. 보안
과 관련된 것은 리눅스뿐만아니라, 윈도우즈계열도 위험하기는 마찬가지이다. 오히려 리눅스는 많은
사람들의 테스트와 계속적인 버그 리포트로 보안관련된 모든 것들도 무료로 지원받을 수 있다. 그러
나, 리눅스는 서버관리자가 지속적인 관심을 가지고 업데이트도 하고, 보안에 관한 기본 설정 또한
할 수 있는 만큼 강화해야 한다.

2. 물리적보안 설정
보안에 있어 가장 큰 선결조건은 바로 물리적 보안이다. 아무리 소프트웨어적으로 보안을 철저히
했더라고 누구나 쉽게 접근이 가능하다면 소용이 없다. 일단 중요한 시스템이라면 관계자이외의
접근을 막아야 한다. 그 다음에 해야 될 것이 BIOS보안이다. 일단 CMOS SETUP에서 플로피디스크나
CD-ROM드라이브로의 부팅을 불가능하게 설정해야 되며 패스워드를 설정하여 시스템을 보호해야 한
다.

3. 불필요한 서비스의 제거
리눅스 설치후에 불필요한 서비스(예를 들면 서버전용으로 사용한다면 X 윈도우도 필요없다)를 찾
아 제거하는 것이 중요하다. 응용프로그램의 버그를 통한 해킹 시도도 빈번하므로 이러한 서비스들
만 제거하더라도 위험요소를 많이 줄일 수 있다.

4. 리눅스 파일과 보안 설정
(1) /etc/lilo.conf : 만약 리눅스가 부팅할 때 부트 프롬프트에서 'single, 'linux single', 'lin
ux -s'등으로 부팅하면 1인용 싱글 유저환경으로 들어가게 된다. 이 경우의
보안상의 문제는 시스템이 패스워드를 물어 보지 않는데 있다. 이런 상황을
막으려면 password를 설정해야 한다. /etc/lilo.conf파일안에 다음과 같이 두
라인을 설정한다.
password=1234
이렇게 설정하면 항시 암호를 물어보고, 1234라고 입력해야 한다. 이렇게 설정
하면 모든 레벨에서 암호를 입력해야 가능하다. 일반모드는 그대로 로그인하고
특정계층, 즉 /etc/inittab파일에서 기본설정된 런레벨이 아닌경우에만 암호를
묻도록 설정할 수도 있다. 이 경우에는 'restricted'라고 추가로 입력하면 된
다.
password=1234
restricted
또한, 이렇게 설정했을 경우에는 일반사용자들이 볼 수 없도록 이 파일의 권한
도 제한해야 된다.
(참고1) chattr(change attrib)
1) 설명: Red Hat리눅스에서 사용되는 ext2파일시스템에서만 사용되는 명령어로 루트사용자도
파일을 변경할 수 없도록 설정하는 명령어이다.
2) 사용법
chattr option filename
3) option: immnutable 욥션을 사용한다.
+i : 파일을 수정, 삭제, 이름의 변경과 링크도 만들 수 없도록 설정한다.
-i : 특수설정을 해제한다.
4) 특징
ㄱ. ls명령으로도 설정된 것이 나타나지 않는다.
ㄴ. 설정유무는 lsattr명령으로 확인해야 한다.
5) 사용예
ㄱ. [root@www /etc]# chattr +i /etc/lilo.conf
=> 불변하도록 설정한다.
ㄴ. [root@www /etc]# lsattr /etc/lilo.conf
---i-------- /etc/lilo.conf
=> chattr 명령이 설정되어 있음을 알 수 있다.
(2) /etc/securetty : 콘솔모드에서 root 사용자가 로그인할 수 있는 터미널창의 리스트를 나타낸
다. 사용자 로그인과 관련된 데몬이 login 프로그램이다. 이 login프로그램이
참조하는 파일이다. 만약 tty1 으로 root사용자의 로그인을 막으려면 그 항목
을 삭제하거나 맨앞에 '#'을 표시하면 된다. 참고로 telnet으로 root를 허가하
려면 이 파일을 삭제하거나 이 파일안에 pts/0 등을 적어주면 로그인이 가능하
다. 그러나, 절대 이러한 설정은 하면 안된다.
(3) /etc/fstab
1) 설명: /etc/fstab파일은 해당 파티션에 대한 정보를 담고 있는 파일이다. 이 파일을 이용하여
보안을 강화할 수 있다. 보통 /home과 /var파티션 등에 SUID 및 SGID의 파일을 제한한다.
2) fstab에서 보안과 관련된 옵션
- default: 다음과 같이 네가지의 기본값을 가지고 있다.
a. 부팅할 때 mount -a 명령으로 마운트할 수 있다.
b. 읽기 및 쓰기 파일시스템으로 마운트된다.(read-write)
c. setuid와 setgid를 사용할 수 있다. (suid)
d. 문자장치와 블록장치를 모두 지원한다.
- usrquota: 사용자의 용량을 제한하는 disk quota를 사용할 때 해당 파티션에 적는다.
- noquota: 해당파티션에서 사용자들의 quota를 설정하지 않는다.
- nosuid: 해당파티션에서 SUID나 SGID를 설정을 허용하지 않는다.
- nodev: 해당파티션에서 문자나 특별한 장치(디바이스)를 허용하지 않는다.
- noexec: 해당파티션에서 모든 실행 파일들을 실행할 수 없다.
- suid: 해당 파티션에서 SUID나 SGID의 사용을 허가한다.
- ro: 해당파티션을 읽기전용(read-only)으로 설정한다.
- rw: 해당파티션을 읽고 쓰기(read-write)모드로 설정한다.
3) 사용예
LABEL=/cache /cache ext3 defaults,nodev 1 2
LABEL=/home /home ext3 defaults,nosuid 1 2
LABEL=/tmp /tmp ext3 defaults,nosuid,noexec 1 2
4) 참고: 변경한 파일시스템 내용을 재부팅없이 mount하기
mount -o remount /home
(4) /etc/issue : 콘솔창으로 접속했을 때 메시지를 나타내주는 파일로 보통 리눅스에서는 커널의
버전의 출력되므로 커널버전의 유출을 막는다.
(5) /etc/issue.net : telnet등 원격으로 접속했을 때 메시지를 나타내주는 파일로 역시 커널의 버
전이 출력되므로 내용을 지우거나 변경하여 커널버젼의 유출을 막는다.
(참고2) /etc/issue와 /etc/issue.net의 설정
이 파일은 현재 리눅스에서는 재부팅하면 다시 리눅스 디스트리뷰더가 지정한 값이 들어가도록
/etc/rc.d/rc.local파일에 등록되어 있다. 따라서 현재 시스템에서 값을 변경하면 변경한 이후로
로그인한 사용자에게는 그 내용이 보이지만 만약 시스템을 재부팅하게 되면 다시 기본값이 되므로
계속적으로 그 값이 반영되도록 하려면 /etc/rc.d/rc.local파일에서 이 두 파일의 관련 부분을
삭제해야 한다.

(6) /etc/bashrc : 사용자의 파일생성 권한을 설정하는 umask를 지정하는 파일로 가능한 제한된 값
으로 조정한다. 주로 쓰이는 값은 022, 033이고, 가장 제한적인 값은 077이다.
(7) /etc/login.defs: 사용자 패스워드의 길이 등을 설정할 수 있는 파일이다. 이 파일의 항목중에
'PASS_MIN_LEN 5'의 값을 수정하여 패스워드의 최소길이를 늘이도록 한다.
(8) /etc/profile: root로 로그인한 관리자가 일정시간 동안 작업을 하지 않았을 경우에 접속이
끊기도록 설정한다.
'TMOUT=시간(초단위)'를 추가한다. 일반사용자는 '~/.bashrc'파일에 넣어 개인적
으로 설정할 수 있다.
(9) /etc/security/console.apps: 이 디렉토리에는 일반사용자가 콘솔을 통해 접근할 수 있는 명령
어가 들어있다. shutdown, reboot, halt등 시스템과 직접적으로
연관있는 명령어를 삭제한다.
(10) /etc/services: 접속포트와 관련있으므로 chattr명령을 사용하여 보호하도록 한다.
(11) /etc/pam.d/su: su(substitute user)명령을 지정한 사용자 이외에 할 수 없도록 설정한다.
다음과 같은 두 줄을 삽입한다.
예) auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
=> 이 설정은 su명령으로 root가 될 수 있는 사용자를 wheel이라는 그룹 사용자만 허용하도
록 설정한 것이다.
(12) /etc/inittab: crtl+alt+del키를 눌러도 셧다운이 되지 않도록 한다. 다음과 같은 항을 찾아
주석처리한다.
예)ca::ctrlaltdel:/sbin/shutdown -t3 -r now
(13) /etc/rc.d/init.d: 이 디렉토리에는 시스템이 부팅할 때 띄워야할 데몬관련 스크립트들이 위
치하고 있다. 퍼미션을 root권한자만이 읽고, 쓰고, 실행할 수 있는 상태로
설정한다.
(14) /etc/nologin: 이 파일을 생성하게 되면 root이외의 다른 사용자는 로그인을 할 수 없게 된다.
보통 이 파일안에는 일반사용자가 로그인시 거부될 때 나타나는 메시지가 기록
된다.
5. 기초 보안 설정
(1) 리눅스 설치시에 자동으로 생성되는 계정중에 사용하지 않는 계정은 없애도록 한다. lp, adm,
sync, shutdown, halt, news, uucp, operator, games, gopher, mail, ftp등이 해당된다. 또한
계정 삭제후에도 동일한 이름으로 그룹이 생성되어 있을 수도 있으니 /etc/group에서도 삭제
한다.
(2) root계정의 접속 시간 제한 설정
1) 설명: root로 로그인한 상태에서는 자리를 비우지 말아야 한다. 자리를 비우는 경우에는 로그
아웃을 하는 것이 좋다. 그러나 로그아웃을 잊는 경우가 있다. 일정시간뒤에 자동으로
로그아웃이 되게 설정해보자.
2) 방법
/etc/profile에 'TMOUT'라는 변수를 이용하여 설정할 수 있다. 기본 단위는 초이다.
(3) 리눅스 단일 사용자모드의 제한
1) 설명: 부팅시 'LILO:' 프롬프트에서 'linux single', 'linux 1'등을 입력하면 패스워드를 없이
부팅가능한 단일 사용자 모드로 부팅이 된다. 이 경우에는 루트패스워드를 바꿀 수 있는
상태가 된다. lilo를 이용하지 않고 이 모드의 접속시에 루트 패스워드를 입력하도록 설
정하자.
2) 방법: /etc/inittab파일에서 'id:5:initdefault:'항목 아래에 '--:S:wait:/sbin/sulogin'이라
고 입력한다. 그러면 리눅스 단일사용자 모드 부팅시에 패스워드를 물어본다.
(4) 섀도우 패스워드는 꼭 사용하도록 한다. 만약 섀도우 패스워드를 사용하지 않을 경우에는
pwconv명령을 사용하여 섀도우 패스워드를 사용하도록 한다.
(5) SUID, SGID가 설정되어 있는 프로그램을 찾아 관련없는 프로그램에서 set-bit를 제거한다.
예) find / -type f \( -perm -4000 -o -perm -2000 \) \-exec ls {} \;
chmod a-s [program]
(6) 쉘을 사용한 기록관리
1) 설명: bash에서는 자주 사용하는 명령이나 긴 명령들을 다시 사용하는 history기능을 지원
한다. 보통 ~/.bash_history에 사용자가 사용한 명령을 1000개 저장한다. 시스템자원을
아끼고 사용기록을 노출하지 않기 위해 bash가 명령을 조금만 저장하도록 설정하고, 로그
아웃할 경우에는 이 것을 지우도록 한다.
2) 사용법
ㄱ. /etc/profile에서 HISTSIZE의 값을 줄인다.
ㄴ. /etc/skel/.bash_logout파일에 다음과 같이 명령을 추가한다.
rm -f $HOME/.bash_history
(7) 프로세스, 메모리등 자원의 사용제한
1) 설명: 일반사용자들이 프로세스와 메모리 사용량을 제한하여 DOS(Denial Of Service attack)를
하지 못하게 한다.
2) 사용법
ㄱ. /etc/security/limits.conf에서 아래부분의 주석을 풀고 설정한다.
* soft core 0
* hard rss 10000
* hard nproc 20
=> root를 제외한 일반사용자들은 core파일을 생성하지 못하고, 메모리사용량은 10MB로
제한하고, 프로세스는 20개로 제한한다. *는 서버에 login하는 모든 사용자를 말한다.
ㄴ. /etc/pam.d/login파일에서 아래부분의 추가한다.
session required /lib/security/pam_limits.so
(8) su 명령어 제한하기
1) 설명: su 명령은 일반사용자가 root사용자로 전환할 수 있는 명령어이다. 이 명령어를 사용자
에 따라 제한할 수 있다.
2) 사용법
ㄱ. /bin/su 명령어의 퍼미션을 변경한다.
chmod 4750 /bin/su
=> 일반사용자에게는 어떠한 권한도 주지않고, 그룹에는 읽기와 실행권한을 부여한다.
ㄴ. /bin/su명령어의 사용자 그룹을 변경한다.
chgrp wheel su
=> su 실행파일의 그룹을 wheel이라는 그룹으로 변경한다.
ㄷ. su 명령을 사용할 사용자들을 wheel 그룹에 속하게 한다.
a. 방법 1: 그룹을 관리하는 파일은 /etc/group이다. 이 파일목록중에서 4번째필드가 추가로
해당 그룹을 사용자를 지정할 때 쓰는 필드이다.
wheel:x:10:root,posein
=> posein이라는 사용자를 wheel이라는 그룹으로 지정하였다.
b. 방법 2: usermod 명령을 사용하여 지정한다.
usermod -G wheel posein
ㄹ. xinetd 데몬을 다시 구동한다.
/etc/rc.d/init.d/xinetd restart

댓글 없음:

댓글 쓰기

국정원의 댓글 공작을 지탄합니다.

UPBIT is a South Korean company, and people died of suicide cause of coin investment.

 UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...