리눅스 설치와 패키지 관리
패키지 최소 설치
리눅스를 설치할 때 보안을 위해 고려해야 할 사항은 운영 체제의 사용 용도(웹 서버, 애플리케이션 서버, DB 서버등)에 맞게 필요한 패키지만 설치하는 것입니다.
예로 DB 전용 서버라면 Web Server 나 Samba 서버같은 사용하지 않는 패키지를 설치하지 않도록 해야 합니다.
FTP나 Samba, Bind 같이 사용하지 않는 서버 프로세스를 구동하는 것은 보안상 문제를 일으킬 수 있으며 운영체제 업그레이드나 패치가 힘들어 지며 재부팅시 오래 걸리는 문제가 있습니다.
특히 웹 서버나 메일 서버같이 DMZ 에 설치되는 서버는 최소 설치후 해당 패키지만 설치하는 것이 좋습니다.
같이 보기
패키지 매니저 사용
패키지를 설치할 때 source 를 다운 받아서 컴파일 해서 설치하는 것은 리눅스의 빌드 환경을 이해할 수 있고 최신 버전의 패키지를 사용할 수 있다는 장점이 있지만 버그나 보안 패치를 적용하기 어렵고 특히 서버의 대수가 늘어나면 많은 시간이 소요되는 단점이 있습니다.
새로운 패키지가 필요하거나 높은 버전의 패키지가 필요하다면 외부 저장소에서 먼저 찾아보는 것을 권장합니다.
저장소를 찾을 때는 제조사에서 직접 제공하는 저장소가 있는지 확인한 후에 없을 경우 3rd party 저장소를 찾는 것을 권장합니다.
예로 nginx 나 MySQL 은 RHEL/CentOS 와 Ubuntu용 저장소를 제공합니다.
RHEL/CentOS 는 다음 저장소가 유명합니다.
Ubuntu는 PPA - Personal Package Archives 에서 패키지를 설치하면 됩니다.
같이 보기
미사용 패키지 삭제
이미 설치해서 사용중인 시스템이라면 사용하지 않는 패키지를 삭제하는 것이 좋으며 다음 명령어로 현재 설치된 패키지의 목록을 확인할 수 있습니다.
RHEL/CentOS
yum list installed
Ubuntu
apt --installed list
특히 운영 시스템은 보안을 위해서 컴파일러등의 개발 도구를 삭제하는 것이 좋습니다.
RHEL/CentOS
yum groupremove "Development tools"
Ubuntu
sudo apt-get purge gcc g++ gdb
X Windows 삭제
이미 설치되어 운영을 하고 있는 서버라면 X-Windows 가 설치되어 있는지 확인하고 설치되어 있다면 삭제하는 게 좋습니다.
X-Windows 는 용량이 크고 의존성 있는 패키지가 많으므로 잦은 업데이트가 발생하게 되며 XDM 은 보안상 문제가 발생할 수 있습니다.
만약 X-Windows 가 없으면 명령어를 입력하지 못하는 운영자라면 계속 같이 일하는 것을 고민해 보기 바랍니다.
X-Windows 가 설치되어 있다면 먼저 telinit 3 명령어로 런 레벨을 3으로 변경한 후에 삭제해야 합니다.
우분투 서버는 X Windows 를 포함하고 있지 않으며 CentOS 에서는 다음 명령어로 X-Windows 패키지를 삭제할 수 있습니다.
yum groupremove "X Window System"
같이 보기
구동 프로세스 최소화
부팅시 자동 구동되는 데몬 프로세스중 사용하지 않는 프로세스는 자동 구동을 끄는 것이 좋습니다.
배포판 및 버전마다 자동 구동 프로세스 관리 방법이 다르므로 아래 내용을 참고해서 사용하는 배포판에 맞게 적용하십시요.
RHEL/CentOS 6
RHEL/CentOS 6 에서는 chkconfig 명령으로 서비스를 제어할 수 있습니다.
# chkconfig --list
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off
cgconfig 0:off 1:off 2:off 3:off 4:off 5:off 6:off
cgred 0:off 1:off 2:off 3:off 4:off 5:off 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
exim 0:off 1:off 2:on 3:on 4:on 5:on 6:off
0:off 1:off 2:on 3:on 4:on 5:on 6:off 의 의미는 run level 이 0, 1 일때는 구동되지 않고 2,3,4,5 일때는 구동된다는 의미입니다.
자동 시작을 끄려면 chkconfig 명령어 뒤에 서비스 명을 입력하고 off 옵션을 주면 됩니다.
chkconfig mysqld off
RHEL/CentOS 7, Ubutun 15+
RHEL/CentOS 7 과 ubunt 15, 16 은 systemd 관리 명령어인 systemctl 를 사용하여 서비스 목록을 확인할 수 있습니다.
# systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
dev-hugepages.mount static
dev-mqueue.mount static
proc-fs-nfsd.mount static
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
tmp.mount masked
var-lib-nfs-rpc_pipefs.mount static
brandbot.path disabled
systemd-ask-password-console.path static
systemd-ask-password-wall.path static
session-1.scope static
session-3.scope static
arp-ethers.service disabled
auditd.service enabled
불필요한 서비스는 systemctl disable 서비스명 을 사용하여 자동 시작을 중지할 수 있으며 활성화할 경우 disable 대신 enable 을 사용하면 됩니다.
예로 다음 명령어는 mariadb 서비스를 자동 실행하지 않습니다.
systemctl disable mariadb
특정 서비스의 자동 실행 여부는 systemctl is-enabled 서비스명 을 사용하면 되며 다음 명령어는 nginx 웹 서버의 자동 실행 여부를 출력합니다.
> systemctl is-enabled nginx
disabled
Ubutun 14
우분투 14.04 는 sysv-rc-conf 명령어로 프로세스를 확인할 수 있습니다
$ sudo sysv-rc-conf --list
apparmor S:on
beanstalkd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
blackfire-ag 0:off 1:off 2:on 3:on 4:on 5:on 6:off
console-setu
cron
cryptdisks
cryptdisks-e 0:on 6:on S:on
자동 실행 여부는 sudo update-rc.d SERVICENAME defaults 를 사용하면 되며 다음은 nginx 를 부팅시 자동 실행하도록 설정합니다.
sudo update-rc.d nginx defaults
Adding system startup for /etc/init.d/nginx ...
/etc/rc0.d/K20nginx -> ../init.d/nginx
/etc/rc1.d/K20nginx -> ../init.d/nginx
/etc/rc6.d/K20nginx -> ../init.d/nginx
/etc/rc2.d/S20nginx -> ../init.d/nginx
/etc/rc3.d/S20nginx -> ../init.d/nginx
/etc/rc4.d/S20nginx -> ../init.d/nginx
/etc/rc5.d/S20nginx -> ../init.d/nginx
자동 실행 제외는 sudo update-rc.d -f SERVICENAME remove 를 사용하면 되며 다음은 nginx 를 자동 실행에서 제외합니다.
sudo update-rc.d -f nginx remove
Removing any system startup links for /etc/init.d/nginx ...
/etc/rc0.d/K20nginx
/etc/rc1.d/K20nginx
/etc/rc2.d/S20nginx
/etc/rc3.d/S20nginx
/etc/rc4.d/S20nginx
/etc/rc5.d/S20nginx
/etc/rc6.d/K20nginx
시스템을 최신 상태로 유지
패키지 관리자를 사용하여 시스템을 상시 업데이트하여 최신 상태로 유지해야 보안 취약점을 통한 공격에 대응할 수 있습니다.
RHEL은 yum 으로 시스템을 최신 상태로 유지할 수 있습니다.
yum update
우분투는 아래 명령으로 패키지를 업데이트 할 수 있습니다.
apt-get update
apt-get upgrade