리눅스 사용자 계정 설정 및 보안 취약점
리눅스 운영체제에서 사용자 계정 관리는 시스템 보안의 중요한 부분입니다.
제대로 설정하지 않으면 외부의 공격이나 내부의 비인가 접근에 노출될 수 있습니다.
이번 글에서는 리눅스 사용자 계정 관리와 관련된 설정 방법, 보안 강화 방안, 그리고 계정 관리에서 발생할 수 있는 취약점에 대해 상세히 알아보겠습니다.
1. 리눅스 사용자 계정 설정
리눅스에서는 각 사용자마다 고유한 계정이 필요하며, 계정마다 파일 접근 권한, 시스템 리소스 사용 권한 등이 부여됩니다.
root 사용자는 시스템의 모든 권한을 가지고 있으며, 다른 일반 사용자들은 제한된 권한을 가집니다.
1-1. 사용자 계정 생성 및 삭제
사용자 생성:
새로운 사용자를 생성하려면 useradd 또는 adduser 명령어를 사용합니다.
adduser는 사용하기 더 쉬운 형태의 스크립트로, 사용자 생성 후 필요한 정보들을 순차적으로 입력할 수 있습니다.
- 사용자 계정 생성 명령어:
sudo adduser newuser
이 명령어는 newuser라는 이름의 새 계정을 생성합니다.
이후 비밀번호 설정, 홈 디렉토리 생성, 기본 쉘 지정 등의 과정이 자동으로 이루어집니다.
사용자 삭제:
사용자를 삭제하려면 userdel 명령어를 사용합니다.
- 사용자 계정 삭제 명령어:
sudo userdel newuser
홈 디렉토리와 함께 계정을 완전히 삭제하려면 -r 옵션을 사용합니다.
sudo userdel -r newuser
1-2. 사용자 비밀번호 설정 및 관리
비밀번호 설정:
사용자 계정을 생성한 후에는 강력한 비밀번호를 설정하는 것이 필수적입니다. 비밀번호를 설정하려면 passwd 명령어를 사용합니다.
- 비밀번호 설정 명령어:
sudo passwd newuser
비밀번호는 최소 8자 이상, 숫자, 대소문자, 특수 문자를 포함하여 복잡한 형태로 설정하는 것이 좋습니다.
비밀번호 정책 설정:
비밀번호의 복잡도와 만료 기간을 설정하기 위해 /etc/login.defs 파일과 /etc/pam.d/common-password 파일을 수정할 수 있습니다.
- /etc/login.defs에서 최소 비밀번호 길이, 만료 기간 등을 설정
PASS_MAX_DAYS 90 # 비밀번호 최대 사용 기간 (90일) PASS_MIN_DAYS 7 # 비밀번호 변경 간 최소 일수 (7일) PASS_MIN_LEN 8 # 비밀번호 최소 길이 (8자) PASS_WARN_AGE 7 # 비밀번호 만료 경고 (7일 전)
- PAM(Pluggable Authentication Modules) 설정에서 비밀번호 복잡도 적용
sudo nano /etc/pam.d/common-password
아래와 같은 옵션을 추가하여 복잡한 비밀번호를 요구할 수 있습니다.
password requisite pam_pwquality.so retry=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
이 설정은 최소 8자 길이의 비밀번호를 요구하며, 대문자(ucredit), 소문자(lcredit), 숫자(dcredit), 특수문자(ocredit)를 각각 하나 이상 포함해야 합니다.
2. 사용자 계정 보안 설정
사용자 계정에 대한 보안 설정은 시스템 전체 보안에 큰 영향을 미칩니다. 다음은 사용자 계정 보안을 강화하기 위한 중요한 설정들입니다.
2-1. root 계정 접근 제한
리눅스 시스템에서 root 계정은 모든 시스템 권한을 가지고 있기 때문에, 가능한 한 직접적으로 root 계정으로 로그인하는 것은 피해야 합니다. 대신 sudo 명령어를 통해 필요한 경우에만 root 권한을 일시적으로 사용하는 것이 안전합니다.
root 로그인 비활성화:
root 계정으로 직접 로그인을 비활성화하려면 /etc/ssh/sshd_config 파일을 수정해야 합니다.
- root 로그인 비활성화 설정:
sudo nano /etc/ssh/sshd_config
PermitRootLogin no
# ssh 재시작
sudo systemctl restart sshd
2-2. sudo 사용자를 통한 권한 관리
리눅스에서는 일반 사용자에게 sudo 명령어를 통해 root 권한을 부여할 수 있습니다.
sudo는 로그를 남기고, 필요한 순간에만 권한을 사용할 수 있어 보안 측면에서 매우 유리합니다.
sudo 사용자 추가:
sudo 그룹에 사용자를 추가하려면 아래 명령어를 사용합니다.
# newuser에게 sudo 권한 부여
sudo usermod -aG sudo newuser
sudoers 파일 수정
더 세밀한 권한 설정이 필요할 때는 sudoers 파일을 편집하여 사용자나 그룹별로 명령어 실행을 허용하거나 제한할 수 있습니다.
sudo visudo
newuser ALL=(ALL) NOPASSWD: /usr/bin/apt-get
이 설정은 newuser가 비밀번호 입력 없이 apt-get 명령어를 실행할 수 있도록 합니다.
3. 사용자 계정 관리에서 발생할 수 있는 보안 취약점
사용자 계정을 잘못 관리하면 외부 공격자에게 시스템이 노출되거나 내부 사용자의 악의적인 행위가 발생할 수 있습니다.
다음은 주요한 보안 취약점과 이를 방지하는 방법입니다.
3-1. 취약한 비밀번호
- 취약점: 약한 비밀번호는 시스템에 대한 무차별 대입 공격(브루트 포스 공격)에 취약할 수 있습니다.
- 해결 방법: 강력한 비밀번호 정책을 설정하고, 주기적으로 비밀번호를 변경하도록 강제해야 합니다. 이를 위해 /etc/login.defs와 PAM 설정을 사용합니다.
3-2. 비활성 계정 관리 미흡
- 취약점: 더 이상 사용되지 않는 계정이 활성화되어 있는 경우, 해당 계정을 통해 시스템에 침입할 수 있습니다.
- 해결 방법: 주기적으로 사용자 계정을 점검하고, 비활성 계정이나 사용하지 않는 계정을 잠그거나 삭제해야 합니다.
sudo usermod -L username # 사용자 계정 잠금 sudo userdel username # 사용자 계정 삭제
3-3. 권한 남용
- 취약점: 잘못된 설정으로 인해 일반 사용자에게 root 권한이 과도하게 부여되면, 시스템 파일을 삭제하거나 중요한 설정을 변경할 수 있습니다.
- 해결 방법: sudoers 파일을 통해 필요한 권한만 부여하고, root 권한을 남용하지 않도록 주의해야 합니다. 또한, sudo 명령어 사용 내역을 주기적으로 모니터링해야 합니다.
sudo grep "sudo" /var/log/auth.log # sudo 사용 내역 확인
3-4. SSH 설정 미흡
- 취약점: SSH 설정이 미흡할 경우 외부 공격자가 쉽게 시스템에 접근할 수 있습니다. 특히, root 계정으로 직접 로그인할 수 있도록 설정된 경우 보안에 큰 위협이 됩니다.
- 해결 방법: root 계정 로그인을 비활성화하고, 가능한 한 공개 키 기반 인증을 사용하도록 설정합니다.
SSH 공개 키 기반 인증 설정:
1) 공개 키 생성
ssh-keygen -t rsa
2) 생성된 공개 키를 서버에 추가
ssh-copy-id username@server_ip
3) sshd_config에서 비밀번호 로그인 비활성화
PasswordAuthentication no
'IT 기술 > 보안' 카테고리의 다른 글
[보안] 리눅스 서버 백신 (3) | 2024.09.30 |
---|---|
[보안] Threat Hunting (0) | 2024.06.18 |
[보안] SSRF, Blind SSRF (0) | 2024.06.12 |