초기 보안 설정 및 사용자 관리
작성자 정보
- 테스트 작성
- 작성일
컨텐츠 정보
- 9 조회
- 목록
본문
우분투 서버 초기 설정의 중요성
새로운 우분투 서버를 설치한 직후 초기 보안 설정을 적용하는 것은 서버를 무단 접근, 악성 공격, 데이터 유출 등 잠재적 위협으로부터 보호하기 위한 가장 기본적이면서도 필수적인 과정입니다. 기본 설치 상태의 서버는 흔히 알려진 취약점이나 기본 설정값을 가지고 있어, 이를 방치할 경우 스캐닝 봇이나 자동화된 공격에 쉽게 노출될 수 있습니다. 초기 단계에서 강력한 보안 기반을 마련하는 것은 서버의 장기적인 안정성과 신뢰성을 보장하는 핵심 요소입니다. 이는 마치 건물을 짓기 전에 튼튼한 기초를 다지는 것과 같으며, 추후 발생할 수 있는 보안 사고의 위험을 현저히 줄이고, 보다 안전하게 서비스를 운영할 수 있도록 돕습니다. 초기 설정의 미흡함은 대규모 보안 사고로 이어질 수 있으므로, 서버 관리자는 이 과정에 충분한 시간과 주의를 기울여야 합니다.
안전한 서버 관리를 위한 기본 원칙
안전한 서버 관리는 단순히 몇 가지 도구를 사용하는 것을 넘어, 일련의 핵심 원칙을 꾸준히 적용하는 것을 의미합니다. 첫째, '최소 권한의 원칙'을 따라 각 사용자 및 서비스에 필요한 최소한의 권한만을 부여해야 합니다. 둘째, 운영 체제와 모든 설치된 소프트웨어를 정기적으로 업데이트하여 알려진 보안 취약점을 제거해야 합니다. 셋째, 강력한 인증 방법을 사용하고, 특히 원격 접속에는 비밀번호 대신 SSH 키 기반 인증을 적극적으로 활용해야 합니다. 넷째, 서버에서 불필요하게 실행되는 서비스나 열려 있는 포트가 없는지 확인하고, 최소화하여 공격 표면을 줄여야 합니다. 다섯째, 시스템 로그를 지속적으로 모니터링하여 의심스러운 활동이나 침입 시도를 조기에 탐지하고 대응해야 합니다. 이와 같은 원칙들은 서버의 보안 수준을 전반적으로 향상시키는 데 기여합니다.
루트 계정 사용 제한 및 새로운 사용자 생성
우분투 서버에서 root 계정은 시스템의 모든 권한을 가지는 최고 관리자 계정입니다. 이 계정을 일상적인 작업에 직접 사용하는 것은 매우 위험합니다. 실수로 치명적인 명령을 실행하거나, root 계정 정보가 유출될 경우 시스템 전체가 심각한 위협에 노출될 수 있기 때문입니다. 따라서 서버 설치 후 가장 먼저 해야 할 일은 root 계정의 직접적인 사용을 제한하고, 일반 관리용 새 사용자를 생성하는 것입니다. 새 사용자는 adduser [사용자명] 명령을 통해 생성할 수 있습니다. 예를 들어, adduser adminuser와 같이 명령을 실행하고 비밀번호 및 기타 정보를 설정합니다. 이렇게 생성된 사용자에게는 필요한 경우에만 관리자 권한을 사용할 수 있도록 sudo 권한을 부여하는 것이 일반적이며, 이는 보안 위험을 최소화하면서도 서버를 효율적으로 관리하는 데 필수적인 단계입니다.
sudo 권한 설정 및 활용
sudo (superuser do)는 일반 사용자가 특정 명령어를 루트 권한으로 실행할 수 있도록 허용하는 매우 유용한 도구입니다. root 계정을 직접 사용하는 위험을 줄이면서도 시스템 관리 작업을 안전하게 수행할 수 있게 해줍니다. 앞서 생성한 새 관리용 사용자에게 sudo 권한을 부여하려면, 해당 사용자를 sudo 그룹에 추가해야 합니다. 이 작업은 usermod -aG sudo [사용자명] 명령으로 수행할 수 있습니다. 예를 들어, usermod -aG sudo adminuser와 같이 실행합니다. 이제 adminuser는 sudo 명령을 접두사로 사용하여 관리자 권한이 필요한 명령을 실행할 수 있습니다. sudo를 통해 명령을 실행할 때는 사용자 자신의 비밀번호를 입력해야 하므로, 루트 비밀번호 노출 없이 보안을 유지할 수 있습니다. 또한, sudo 사용 기록은 /var/log/auth.log에 기록되어 감사 추적에도 매우 유용합니다.
SSH 보안 강화: 포트 변경 및 비밀번호 비활성화
SSH(Secure Shell)는 서버에 원격으로 안전하게 접속하기 위한 필수적인 프로토콜이지만, 기본 설정은 무차별 대입 공격(Brute-force attack)에 취약할 수 있습니다. SSH 보안을 강화하는 첫 단계는 기본 포트 22번을 잘 알려지지 않은 다른 포트 번호(예: 1024~65535 범위 내의 임의의 숫자)로 변경하는 것입니다. 이를 위해 /etc/ssh/sshd_config 파일을 편집하여 Port 22 줄을 찾아 원하는 번호로 변경하고, SSH 서비스를 재시작(sudo systemctl restart sshd)해야 합니다. 더 중요한 강화 조치는 비밀번호 인증을 비활성화하고 SSH 키 기반 인증만 허용하는 것입니다. PasswordAuthentication yes 설정을 no로 변경하면 비밀번호 추측 공격을 원천적으로 차단할 수 있습니다. 이러한 설정 변경은 SSH 키 기반 인증과 함께 사용될 때 서버의 원격 접속 보안을 극대화할 수 있습니다.
SSH 키 기반 인증 설정 및 사용법
SSH 키 기반 인증은 비밀번호 인증보다 훨씬 강력하고 안전한 원격 접속 방법입니다. 이는 공개 키(Public Key)와 비공개 키(Private Key) 한 쌍을 사용합니다. 사용자는 자신의 로컬 컴퓨터에서 ssh-keygen 명령을 통해 이 키 쌍을 생성합니다. 생성된 공개 키는 서버의 접속을 허용할 사용자 계정의 ~/.ssh/authorized_keys 파일에 저장되고, 비공개 키는 사용자의 로컬 컴퓨터에 안전하게 보관됩니다. 서버에 공개 키를 복사하는 가장 편리한 방법은 ssh-copy-id [사용자명]@[서버 IP 주소] 명령을 사용하는 것입니다. 이 명령은 공개 키를 자동으로 서버에 복사하고 올바른 권한을 설정해 줍니다. 키 기반 인증이 설정되면, 사용자는 비공개 키를 이용하여 비밀번호 입력 없이 서버에 접속할 수 있으며, 이는 앞서 설명한 비밀번호 인증 비활성화와 결합하여 무단 접근 시도를 효과적으로 방지합니다.

UFW를 이용한 방화벽 설정
UFW(Uncomplicated Firewall)는 우분투에서 iptables 규칙을 쉽고 직관적으로 관리할 수 있도록 돕는 사용자 친화적인 방화벽 관리 도구입니다. 서버에 불필요한 포트가 열려 있는 것은 잠재적인 보안 취약점을 제공하므로, UFW를 사용하여 네트워크 접근을 제한하는 것이 중요합니다. 기본적인 UFW 설정 절차는 다음과 같습니다. 먼저, sudo ufw enable 명령으로 방화벽을 활성화합니다. 그 다음, 필요한 서비스 포트만 명시적으로 허용해야 합니다. 예를 들어, SSH (변경된 포트 번호), HTTP (80번), HTTPS (443번) 등을 sudo ufw allow [포트번호/서비스명] 명령으로 허용할 수 있습니다. 기본적으로 sudo ufw default deny incoming 명령은 명시적으로 허용되지 않은 모든 인바운드 트래픽을 차단하여 서버를 보호합니다. UFW를 통해 불필요한 네트워크 접근을 막음으로써 서버의 공격 노출 면적을 최소화할 수 있습니다.

자동 업데이트 및 보안 패치 관리
운영 체제와 설치된 소프트웨어의 보안 취약점은 지속적으로 발견되며, 이를 악용하는 공격 또한 끊이지 않습니다. 따라서 서버의 보안을 유지하기 위해 정기적인 업데이트와 보안 패치 관리는 필수적입니다. 우분투는 unattended-upgrades 패키지를 통해 중요한 보안 업데이트를 자동으로 설치하도록 설정할 수 있습니다. 이 패키지를 설치하려면 sudo apt install unattended-upgrades 명령을 사용합니다. 설치 후 /etc/apt/apt.conf.d/50unattended-upgrades 파일을 편집하여 자동 업데이트 설정을 조정할 수 있습니다. 이 기능을 활성화하면 수동으로 업데이트를 확인하고 적용하는 번거로움을 줄이면서도, 서버가 최신 보안 상태를 유지하도록 도와줍니다. 그러나 커널 업데이트와 같이 중요한 변경 사항은 재부팅이 필요할 수 있으므로, 주기적인 수동 확인과 계획된 재부팅 일정을 수립하는 것도 중요합니다.
시스템 로그 모니터링의 중요성
시스템 로그는 서버에서 발생하는 모든 활동에 대한 상세한 기록이며, 보안 관점에서 매우 중요한 정보원입니다. 로그 파일을 꾸준히 분석하면 잠재적인 침입 시도, 시스템 오류, 비정상적인 사용자 활동 등을 조기에 탐지하고 대응할 수 있습니다. 예를 들어, /var/log/auth.log 파일은 로그인 시도, sudo 명령어 사용 내역 등 인증 관련 정보를 담고 있으며, /var/log/syslog는 일반적인 시스템 메시지를 기록합니다. journalctl 명령은 systemd 기반 시스템에서 통합된 로그를 확인하는 데 유용합니다. 정기적인 로그 검토는 물론, Fail2Ban과 같은 로그 분석 도구를 사용하여 로그에서 이상 징후를 자동으로 감지하고, 이에 따라 특정 IP 주소를 차단하는 등 능동적으로 대응하는 시스템을 구축하는 것이 효과적입니다. 로그는 서버의 건강 상태를 파악하고 보안 사고를 예방하는 데 필수적인 진단 도구입니다.
강력한 비밀번호 정책 적용
여전히 비밀번호 인증을 사용하는 계정(예: SSH가 아닌 다른 서비스)이 있다면, 강력한 비밀번호 정책을 적용하는 것이 필수적입니다. 취약한 비밀번호는 무차별 대입 공격이나 사전 공격의 주요 대상이 되어 서버 보안을 위협합니다. 강력한 비밀번호는 최소 12자 이상, 대문자, 소문자, 숫자, 특수문자를 조합하여 복잡하게 구성되어야 합니다. 또한, 주기적인 비밀번호 변경을 강제하고, 이전에 사용했던 비밀번호의 재사용을 금지하는 정책을 도입하는 것이 좋습니다. 우분투에서는 PAM(Pluggable Authentication Modules) 모듈 중 하나인 pam_pwquality를 사용하여 비밀번호 복잡성 요구 사항을 설정할 수 있습니다. /etc/pam.d/common-password 파일을 수정하여 최소 길이, 문자 종류 제한 등을 적용할 수 있으며, 이는 사용자에게 안전한 비밀번호 생성을 강제하여 전반적인 시스템 보안을 강화하는 데 기여합니다.
그룹 및 파일 권한 관리
우분투 서버에서 파일 및 디렉터리 권한 관리는 '최소 권한의 원칙'을 구현하는 핵심 요소입니다. 각 파일과 디렉터리에는 소유자(User), 그룹(Group), 그리고 다른 사용자(Others)에 대한 읽기(Read), 쓰기(Write), 실행(Execute) 권한이 부여됩니다. ls -l 명령으로 현재 권한을 확인할 수 있으며, chmod 명령으로 권한을 변경하고, chown 명령으로 소유자 및 그룹을 변경할 수 있습니다. 예를 들어, 중요한 설정 파일은 루트만 읽고 쓸 수 있도록 chmod 600으로 설정하거나, 웹 서버의 특정 디렉터리는 www-data 그룹에 쓰기 권한을 부여하여 웹 애플리케이션이 파일 업로드를 처리할 수 있도록 할 수 있습니다. 불필요하게 넓은 권한은 보안 취약점을 만들어 공격자가 시스템에 접근하거나 변경할 수 있는 경로를 제공할 수 있으므로, 각 리소스에 필요한 최소한의 권한만을 신중하게 부여해야 합니다.
실제 서비스 환경에서의 보안 설정 예시
실제 서비스 환경, 예를 들어 웹 서버를 운영하는 경우 초기 보안 설정은 다음과 같이 통합적으로 적용될 수 있습니다. 먼저, 서버 설치 후 루트 계정 사용을 제한하고 sudo 권한을 가진 일반 관리자 계정을 생성합니다. SSH 접속은 기본 포트 22번을 변경하고, 비밀번호 인증을 비활성화하며, 강력한 SSH 키 기반 인증만을 허용하도록 설정합니다. UFW 방화벽을 활성화하여 SSH (새로운 포트), HTTP (80), HTTPS (443) 포트만 허용하고 나머지 모든 인바운드 트래픽은 차단합니다. 웹 서버(Nginx 또는 Apache)는 별도의 시스템 사용자(www-data 등)로 실행하고, 웹 서비스 관련 파일 및 디렉터리에는 해당 사용자 및 그룹에 필요한 최소한의 권한만 부여합니다. unattended-upgrades를 통해 보안 패치를 자동화하고, Fail2Ban으로 SSH 무차별 대입 공격을 자동으로 차단하며, 정기적으로 시스템 로그를 모니터링하여 이상 징후를 감지합니다. 이 모든 조치들이 결합되어 다층적인 보안 환경을 구축하고, 잠재적인 위협으로부터 서비스를 보호합니다.
관련자료
-
이전
-
다음