리눅스를 처음 접하는 많은 분들이 가장 먼저 부딪히는 벽이 바로 ‘계정 관리’입니다. 사용자 계정을 어떻게 만들고, 권한은 어떻게 부여하며, 보안은 어떻게 유지할까요? 이번 포스트에서는 리눅스 계정 관리의 모든 것을 실전 예제와 함께 알기 쉽게 설명해드려 보고자 합니다.
1. 리눅스 계정의 기본 개념
리눅스는 다중 사용자 시스템으로, 여러 사용자가 동시에 시스템을 사용할 수 있습니다. 이를 가능하게 하는 것이 바로 ‘계정’ 시스템입니다.
계정 유형
리눅스에는 크게 세 가지 유형의 계정이 있습니다:
- 루트(root) 계정: 시스템의 모든 권한을 가진 관리자 계정으로, UID(User ID)가 0입니다.
- 시스템 계정: 시스템 서비스를 위한 계정으로, 일반적으로 UID가 1-999 사이입니다.
- 일반 사용자 계정: 실제 사용자를 위한 계정으로, 보통 UID가 1000부터 시작합니다.
중요 파일들
리눅스 계정 정보는 주로 다음 파일들에 저장됩니다:
/etc/passwd
: 사용자 계정 정보/etc/shadow
: 암호화된 비밀번호 정보/etc/group
: 그룹 정보/etc/gshadow
: 그룹 비밀번호 정보
💡 TIP:
/etc/passwd
파일은 누구나 읽을 수 있지만,/etc/shadow
파일은 보안을 위해 root 사용자만 접근할 수 있습니다.
# /etc/passwd 파일 형식 예시
username:x:1000:1000:Full Name:/home/username:/bin/bash
각 필드는 콜론(:)으로 구분되며 의미는 다음과 같습니다:
- 사용자명
- 비밀번호 플래그 (실제 비밀번호는 /etc/shadow에 저장)
- UID (User ID)
- GID (Group ID)
- 사용자 정보 (Full Name 등)
- 홈 디렉토리
- 기본 셸
2. 사용자 계정 생성하기
계정 생성은 시스템 관리의 기본 작업입니다. 다양한 방법으로 사용자 계정을 만들 수 있습니다.
useradd 명령어 사용하기
useradd
명령어는 새 계정을 만드는 가장 기본적인 방법입니다.
# 기본 옵션으로 사용자 생성
sudo useradd newuser
# 홈 디렉토리 자동 생성 옵션 추가
sudo useradd -m newuser
# 모든 옵션을 지정하여 사용자 생성
sudo useradd -m -d /home/custom-home -s /bin/bash -c "Full Name" -g users newuser
주요 옵션:
-m
: 홈 디렉토리 자동 생성-d
: 홈 디렉토리 경로 지정-s
: 기본 셸 지정-c
: 사용자 정보 지정-g
: 기본 그룹 지정-G
: 추가 그룹 지정
adduser 명령어 사용하기
adduser
는 useradd
보다 더 사용자 친화적인 명령어로, 대화형으로 계정을 생성합니다.
sudo adduser newuser
이 명령어를 실행하면 비밀번호, 사용자 정보 등을 단계별로 입력하라는 프롬프트가 나타납니다.
🔥 실전 팁: 실무에서는
adduser
가 더 편리하지만, 자동화 스크립트에서는useradd
가 더 적합합니다.
비밀번호 설정하기
새 계정을 만든 후에는 비밀번호를 설정해야 합니다.
sudo passwd newuser
3. 그룹 관리하기
그룹은 여러 사용자에게 공통 권한을 부여하는 편리한 방법입니다.
그룹 생성하기
# 새 그룹 생성
sudo groupadd developers
# GID를 지정하여 그룹 생성
sudo groupadd -g 1500 developers
사용자를 그룹에 추가하기
# 기존 사용자를 그룹에 추가 (기존 그룹 유지)
sudo usermod -a -G developers username
# 사용자의 기본 그룹 변경
sudo usermod -g developers username
그룹 확인하기
# 사용자가 속한 그룹 확인
groups username
# 그룹의 모든 멤버 확인
getent group developers
4. 사용자 계정 관리 및 수정
계정을 생성한 후에도 다양한 속성을 변경할 수 있습니다.
사용자 정보 수정하기
# 사용자 계정 정보 수정
sudo usermod -c "New Full Name" username
# 홈 디렉토리 변경
sudo usermod -d /new/home/dir -m username
# 로그인 셸 변경
sudo usermod -s /bin/zsh username
계정 잠금 및 해제
# 계정 잠금
sudo passwd -l username
# 계정 잠금 해제
sudo passwd -u username
계정 만료 설정
# 계정 만료일 설정
sudo usermod -e 2023-12-31 username
# 비밀번호 만료 설정
sudo chage -M 90 username # 90일 후 비밀번호 만료
계정 삭제하기
# 사용자 계정만 삭제 (홈 디렉토리 유지)
sudo userdel username
# 사용자 계정과 홈 디렉토리 함께 삭제
sudo userdel -r username
⚠️ 주의:
-r
옵션을 사용하면 사용자의 모든 파일이 삭제됩니다. 중요한 데이터는 미리 백업하세요!
5. 권한 설정하기
리눅스의 파일 시스템 권한은 매우 중요한 보안 요소입니다.
기본 권한 개념
리눅스의 권한은 세 가지 유형으로 나뉩니다:
- r (read): 읽기 권한
- w (write): 쓰기 권한
- x (execute): 실행 권한
그리고 세 가지 대상에 대해 설정됩니다:
- u (user): 파일 소유자
- g (group): 파일 그룹
- o (others): 기타 사용자
chmod로 권한 변경하기
# 심볼릭 모드 사용
sudo chmod u+x script.sh # 소유자에게 실행 권한 추가
sudo chmod g-w file.txt # 그룹에서 쓰기 권한 제거
sudo chmod o=r file.txt # 기타 사용자에게 읽기 권한만 부여
# 숫자 모드 사용 (4=읽기, 2=쓰기, 1=실행)
sudo chmod 755 script.sh # rwxr-xr-x
sudo chmod 644 file.txt # rw-r--r--
chown으로 소유권 변경하기
# 파일 소유자 변경
sudo chown username file.txt
# 파일 소유자와 그룹 동시에 변경
sudo chown username:groupname file.txt
# 디렉토리와 그 안의 모든 파일 소유권 변경
sudo chown -R username:groupname /path/to/directory
6. 계정 보안 강화하기
계정 보안은 시스템 전체 보안의 기초입니다.
강력한 비밀번호 정책 설정
# PAM 모듈을 통한 비밀번호 정책 설정
sudo apt install libpam-pwquality # Debian/Ubuntu
sudo vi /etc/security/pwquality.conf
주요 설정:
minlen = 12 # 최소 길이
minclass = 3 # 최소 문자 클래스 (대문자, 소문자, 숫자, 특수문자)
retry = 3 # 재시도 횟수
enforce_for_root # root에게도 적용
sudo 권한 관리
# visudo로 sudo 설정 편집
sudo visudo
예시 설정:
# 특정 명령만 sudo 실행 허용
username ALL=(ALL) /bin/systemctl restart apache2
# 비밀번호 없이 sudo 허용
username ALL=(ALL) NOPASSWD: ALL
# 특정 그룹에 sudo 권한 부여
%developers ALL=(ALL) ALL
SSH 키 기반 인증 설정
비밀번호보다 더 안전한 SSH 키 인증 방식:
# 로컬 머신에서 SSH 키 생성
ssh-keygen -t ed25519 -C "your_email@example.com"
# 공개 키를 서버에 복사
ssh-copy-id username@server-ip
# 또는 수동으로 복사
cat ~/.ssh/id_ed25519.pub | ssh username@server-ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
SSH 서버 설정 보안 강화:
sudo vi /etc/ssh/sshd_config
권장 설정:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
7. 계정 관련 트러블슈팅 (비밀번호 재설정, 홈 디렉토리 권한 설정, 로그인 실패 진단)
계정 관리 과정에서 흔히 발생하는 문제와 해결 방법입니다.
비밀번호 분실 시 재설정
- 복구 모드로 부팅
- root 파일 시스템 마운트
mount -o remount,rw /
- 비밀번호 재설정
passwd username
홈 디렉토리 권한 문제 해결
# 홈 디렉토리 권한 복구
sudo chmod 750 /home/username
sudo chown -R username:username /home/username
로그인 실패 문제 진단
로그인 실패 시 확인할 로그 파일:
sudo tail -f /var/log/auth.log # Debian/Ubuntu
sudo tail -f /var/log/secure # RHEL/CentOS
UID/GID 충돌 문제 확인:
grep ":1000:" /etc/passwd