Linux에서의 보안 기초
1. Linux 보안 원칙
Linux에서의 보안은 우선 "권한 최소화" 전략과 신뢰할 수 있는 액세스 제어가 기본이야. Linux를 마치 다층적인 방어를 가진 성과 같다고 생각해 봐. 안쪽으로 들어갈수록 점점 더 많은 검사가 이루어져. 그런데 우선 시스템 보안을 지탱하는 세 가지 기본 원칙을 알아보자.
액세스 권한 분리: 사용자, 그룹, root
Linux의 안정성과 보안의 비밀은 엄격한 액세스 권한 분리에 있어. 시스템에는 세 가지 유형의 객체가 있어:
- 사용자 (users): 개별 계정이야. 가족 파티에서 각자 자기만의 입장권을 가진 거랑 비슷해.
- 그룹 (groups): 사용자들의 모임. 어떤 작업은 그룹 전체가 공유할 수 있는 입장권이 있어 — 예를 들어 "할머니 사진" 폴더에 액세스하는 거처럼.
- Root: 모든 권한을 가진 슈퍼유저야. Root는 Linux 세계의 슈퍼맨 같은 존재야. 뭐든지 할 수 있지. 근데 슈퍼파워 만큼 책임도 커.
Linux는 이 모델을 사용해서 파일, 애플리케이션, 시스템 기능에 대한 접근을 제한해. 혹시라도 침입자가 일반 사용자로 시스템에 들어오더라도, 커널이나 중요한 파일에는 손을 댈 수 없어.
권한 최소화
root 접근권을 아무한테나 막 주지 마. 직원들 모두가 금고 열쇠를 가지고 있다면, 누군가 분명히 잃어버릴 거야. Linux에서는 이런 규칙이 있어: 사용자에게 반드시 필요한 권한만 제공하라는 거야.
주요 보안 위협
- 바이러스: 맞아, Linux도 완벽하게 보호된 건 아니야. 하지만 시스템 구조 덕분에 바이러스는 여기서 좀 더 드물어.
- 네트워크 공격: SSH 해킹, DDoS 공격, DNS 스푸핑 같은 것들.
- 소프트웨어 취약점: 오래된 패키지와 보안이 취약한 라이브러리는 해커들에게 문을 열어줄 수 있어.
2. 위협 예방
이제 Linux 서버가 계속해서 신뢰할 수 있게 동작하고, 해커들의 도구가 되지 않도록 중요한 단계를 알아보자.
시스템 정기 업데이트
실제 예제: 시스템 업데이트는 마치 안티바이러스 업데이트랑 똑같아. 없으면 가장 현대적인 보호도 새로운 위협에 대해 무용지물이 될 수 있어. 명령어:
sudo apt update && sudo apt upgrade
를 통해 Linux를 최상의 상태로 유지할 수 있어.
중요 파일에 대한 접근 제어
남의 눈에 띄면 안 되는 파일들도 있어. 예를 들어, /etc/sudoers
파일은 관리자 권한이 있는 사용자의 리스트를 담고 있어. 이 파일은 visudo
를 통해서만 편집해야 하는데, 이는 실수로 오류를 일으키는 것을 방지해.
root 접근 제한
root가 강력한 건 알겠지만, 과도하게 사용해서는 안 돼. 보통 사용자 계정으로 작업하고 필요할 때 sudo
를 사용해서 일시적으로 권한을 얻는 게 좋아.
3. 보안 도구
Linux에서 보안을 위해 어떤 도구들이 도움이 될까? 내장된 것과 외부 솔루션들을 살펴보자.
내장 메커니즘
- firewalld와 iptables: 네트워크 트래픽 관리를 위한 방화벽. 어렵게 들리지만, 같이 파헤쳐 보자!
- SELinux (Security-Enhanced Linux): 어떤 프로세스가 파일에 접근할 권리가 있는지 확인하는 특별한 추가 기능이야.
- ACL (Access Control Lists): 표준 접근 권한의 확장 버전이야.
외부 도구
- Lynis: 보안 감사 도구.
- OpenSCAP: 시스템이 보안 표준을 준수하는지 확인하는 도구 세트.
비밀번호 정책 설정
비밀번호 얼마나 복잡해... 어, 말하지 마! 차라리 바로 신뢰할 수 있는 비밀번호 정책을 세우는 게 나아. 비밀번호 최소 길이와 복잡성은 PAM을 사용해 설정할 수 있어.
sudo nano /etc/security/pwquality.conf
파라미터 예시:
minlen = 12
minclass = 3
4. 실습 예제: 기본 보안 설정
이제 준비를 해보자! 테스트 시스템에 간단한 보안 정책을 설정해 볼 거야.
사용자 등록
관리자와 일반 사용자 두 명을 만들어 보자.
sudo adduser admin
sudo adduser user1
sudo usermod -aG sudo admin
이제 admin
은 관리자 권한을 가지고, user1
은 권한이 없어.
중요 파일에 대한 접근 제어
Nginx 설정 파일에 대한 접근을 제한해 보자:
sudo chmod 600 /etc/nginx/nginx.conf
방화벽 설정하기
서버를 보호하기 위해 ufw
(Uncomplicated Firewall)를 설치하고 설정해 보자:
sudo apt install ufw
sudo ufw enable
SSH와 HTTP 트래픽만 허용하자:
sudo ufw allow 22
sudo ufw allow 80
검사를 활성화하자:
sudo ufw status
5. 일반적인 실수들
보안에 관한 얘기를 할 때, 뭐를 해야 할지 아는 것뿐만 아니라, 뭐를 피해야 할지 이해하는 것도 중요해.
실수 1: root 계정으로 작업하기
많은 초보자들이 귀찮아서 root 계정으로 작업하곤 해. 이건 위험해: 작은 실수나 해킹이라도 시스템에 치명적일 수 있어.
실수 2: 업데이트되지 않은 패키지들
어느 관리자 말로는 이렇게 말했다: "좋은 서버는 업데이트된 서버뿐이다". 오래된 소프트웨어는 공격하기에 딱 좋은 표적이야.
실수 3: 안전하지 않은 비밀번호
"password123"은 가장 인기 있는 비밀번호 중 하나야. 그런 비밀번호를 사용하는 사람이 되지는 마.
6. 실용적인 사용: 왜 필요할까?
Linux 보안 설정은 직장에서뿐만 아니라 면접에서도 유용해. 방화벽, SELinux, 접근 권한 설정의 기본을 아는 건 고용주들에게 좋은 인상을 줄 수 있어. 예를 들어, 회사 서버를 DDoS 공격으로부터 보호하거나 프로젝트 공동 작업에 필요한 권한을 설정하는 것도 가능해질 거야.
개발자로서 시스템 보안을 신경 쓰는 건 네 코드가 경쟁사로 유출되는 걸 막고, 고객 데이터가 안전하게 유지된다는 걸 의미해. 이건 단순히 하바롭스크식 편집증이 아니라, 현대 산업의 진짜 요구야.
GO TO FULL VERSION