Table of Contents
서버 OS 로 잘알려진 Unix 나 Windows 혹은 Linux 중, 어떤것을 선택한다 하더라도
주어진 기본 세팅값을 그대로 사용한다면 여러가지 문제점들이 존재합니다.
예를들어 사용하지 않는 어플리케이션이 서버 데몬으로 떠있으면 불필요한 자원낭비가 될것입니다. 예) nfsd, sendmail, portmap 등.
그리고 Linux 의 경우 소스가 공개되어 있기 때문에 해커가 공격할수 있는 여지가 존재합니다. 잠재적인 취약점을 가지고 있는 프로그램이나 데몬은 사용하지 않는것이 좋습니다.
경량화의 취지를 짧게 요약하자면 다음과 같습니다.
예를들어 사용하지 않는 어플리케이션이 서버 데몬으로 떠있으면 불필요한 자원낭비가 될것입니다. 예) nfsd, sendmail, portmap 등.
그리고 Linux 의 경우 소스가 공개되어 있기 때문에 해커가 공격할수 있는 여지가 존재합니다. 잠재적인 취약점을 가지고 있는 프로그램이나 데몬은 사용하지 않는것이 좋습니다.
경량화의 취지를 짧게 요약하자면 다음과 같습니다.
- 시스템 보안성 향상
- 서버 자원확보
-
하드웨어
하드웨어는 크게 상관이 없습니다. Linux 설치가 가능한 PC 급 이상이면 무리없이 돌아갑니다.
-
소프트웨어
Redhat 기반 Linux(5.8 or 6.3)를 기반으로 설명합니다. RHES, CeontOS 에서 이상없이 작동되는것을 확인하였습니다.
최근의 Linux OS 패키지는 level 5(GUI 모드)가 기본으로 세팅되어 출시됩니다.
그러나 Oracle Installer 처럼 X11 이 꼭 필요한 서비스가 아니라면
굳이 무거운 X11 을 사용할 이유가 없습니다.
다음과 같이 runlevel 5 에서 runlevel 3(Full multi user mode)로 변경합니다.
다음과 같이 runlevel 5 에서 runlevel 3(Full multi user mode)로 변경합니다.
[root@ ~]# vi /etc/inittab
#id 값이 5로 되어있다면 3으로 변경합니다 id:3:initdefault:변경한 다음 init 명령을 이용하여 runlevel 3으로 변경하거나, reboot 을 실행하여 재부팅 합니다.
[root@ ~]# init 3
ntsysv 를 이용하여 불필요한 서비스는 내립니다.
필자는 crond, network, sshd, syslog 4개의 서비스를 제외하고 모두
uncheck 하였습니다.
(주: WAS 나 Solr 같은 Java 를 사용하는 일반적인 서버는 위 4개의 서비스로 충분하지만,
서비스 성격이 다른 서버의 경우 시스템 관리자와 협의후 이용여부를 결정하시기 바랍니다)
[root@ ~]# ntsysv
[*] crond [*] network [*] sshd [*] sysloglevel3 디렉토리에 제대로 적용되었는지 확인
[root@ ~]# ls -l /etc/rc.d/rc3.d/
lrwxrwxrwx root root S10network -> ../init.d/network lrwxrwxrwx root root S12syslog -> ../init.d/syslog lrwxrwxrwx root root S55sshd -> ../init.d/sshd lrwxrwxrwx root root S90crond -> ../init.d/crond lrwxrwxrwx root root S99local -> ../rc.local체크한 서비스의 파일들이 symbolic link 생성된것을 확인할수 있습니다. S** 로 시작하는 파일들은 S00, S01 이런식으로 순차적으로 네이밍 되는데 이것의 의미는 주어진 번호 순으로 해당 서비스를 실행한다는 의미입니다.
어플리케이션 관리 유저를 생성하고 패스워드를 지정합니다.
[root@ ~]# adduser sysadm01 [root@ ~]# passwd sysadm01cron 사용권한 등록
[root@ ~]# echo sysadm01 >> /etc/cron.allow
관리 해야할 서버가 소수라면 위에서 서술한것 처럼 각각의 step 을 밟아 셋업할 수
있지만 작업해야할 클러스터 수가 많다면 서버 세팅에 걸리는 시간이 만만치 않을 것입니다.
위에서 열거한 모든 step 을 실행하는 shell script 를 작성하여 각각의 클러스터에서 한번에 끝내도록 합니다.
주의: 아래의 script 를 실행하면 시스템 reboot 을 실행합니다.작업중인 프로세스가 있다면 저장을 한 이후에 실행하거나 혹은 원격지에 서버가 있는 경우 시스템에 다른 문제가 생겨 booting 이 안될경우 시스템관리자에게 연락을 취하시기 바랍니다.
[root@ ~]# cat /root/vHostSetup_root.sh
주의: 아래의 script 를 실행하면 시스템 reboot 을 실행합니다.작업중인 프로세스가 있다면 저장을 한 이후에 실행하거나 혹은 원격지에 서버가 있는 경우 시스템에 다른 문제가 생겨 booting 이 안될경우 시스템관리자에게 연락을 취하시기 바랍니다.
#!/bin/sh # Usage : vHostSetup_root.sh [enter] # Normal Machine # Author: Jinho Lee # Include Aliases and Functions if [ -f ~/.bashrc ]; then source ~/.bashrc fi if [ -f ~/.bash_profile ]; then source ~/.bash_profile fi #어플리케이션 관리 유저 APP_USER=sysadm01 #유저 패스워드 PASSWD=yourPassword optimizeService() { #필요없는 OS 서비스를 모두 내려서 자원 확보 및 보안처리 INIT_DIR=/etc/rc.d/init.d RUN_DIR=/etc/rc.d/rc3.d if [ ! -d $RUN_DIR ]; then echo "$RUN_DIR does not exists. exiting." exit 1 fi cd $RUN_DIR rm -f ./S* ln -s $INIT_DIR/network ./S10network ln -s $INIT_DIR/syslog ./S12syslog ln -s $INIT_DIR/sshd ./S15sshd ln -s $INIT_DIR/crond ./S30crond ln -s /etc/rc.d/rc.local ./S99local } addAppUser() { #작업폴더 설정 DATA_DIR=/data001 #User 생성 및 패스워드 설정 user_exist=$(grep $APP_USER /etc/passwd) if [ $? -ne '0' ]; then adduser $APP_USER fi echo $PASSWD | passwd $APP_USER --stdin #폴더생성 및 권한 세팅 if [ ! -d $DATA_DIR ];then mkdir $DATA_DIR chown $APP_USER $DATA_DIR fi #관리유저 cronjob 설정 if [ ! -f /etc/cron.allow ]; then echo 'root' > /etc/cron.allow fi cron_user=$(grep $APP_USER /etc/cron.allow) if [ $? -ne '0' ];then echo $APP_USER >> /etc/cron.allow fi } changeRunlevel() { run_line=$(grep 'id:3' /etc/inittab) if [ $? -ne '0' ]; then cp /etc/inittab /tmp cat /tmp/inittab | sed 's/id:5/id:3/' > /etc/inittab rm -f /tmp/initab echo "/etc/inittab has been changed." fi } #OS 서비스 최적화 optimizeService #일반 관리 유저 및 디렉토리 생성 addAppUser #runlevel 변경 changeRunlevel #reboot reboot