사용자 관리

Linux 시스템 사용자와 그룹의 생성, 수정, 삭제 및 관리 완벽 가이드


Linux 시스템 사용자와 그룹의 생성, 수정, 삭제 및 관리 완벽 가이드

목표: 사용자 계정 체계를 설계하고 관리할 수 있는 수준


👤 사용자 계정 기초

사용자 ID (UID) 체계

UID 범위사용자 유형예시
0root (슈퍼유저)root
1-999시스템 계정daemon, bin, www-data
1000+일반 사용자user, john, alice
65534nobody (권한 없음)nobody

주요 설정 파일

/etc/passwd — 사용자 기본 정보

username:password:UID:GID:GECOS:home_directory:shell

예시:

john:x:1000:1000:John Doe:/home/john:/bin/bash

필드 설명:

필드의미예시
1사용자명john
2비밀번호 (x = /etc/shadow 사용)x
3UID1000
4GID (기본 그룹)1000
5GECOS (전체 이름/설명)John Doe
6홈 디렉토리/home/john
7기본 셸/bin/bash

/etc/shadow — 비밀번호 및 계정 정책

username:password_hash:last_change:min:max:warn:inactive:expire:reserved

예시:

john:$6$rounds=5000$salt$hash...:19000:0:99999:7:::

필드 설명:

필드의미예시
1사용자명john
2비밀번호 해시$6$… (SHA-512)
3마지막 변경일 (1970.1.1 기준)19000
4최소 사용일 (변경 후)0
5최대 사용일 (변경 필요)99999
6경고 기간 (만료 전)7
7비활성 기간(비어있음)
8계정 만료일(비어있음)
9예약(비어있음)

/etc/group — 그룹 정보

groupname:password:GID:member_list

예시:

devteam:x:1001:john,alice,bob

🛠️ 사용자 관리 명령어

useradd — 사용자 생성

# 기본 생성
useradd username

# 홈 디렉토리 생성
useradd -m username

# 특정 셸 지정
useradd -m -s /bin/bash username

# 특정 UID 지정
useradd -u 1500 username

# 특정 그룹 지정
useradd -g devteam username

# 보조 그룹 추가
useradd -G sudo,docker username

# 설명 추가
useradd -c "John Doe" username

# 계정 만료일 설정
useradd -e 2026-12-31 username

# 완전한 예시
useradd -m -s /bin/bash -u 1500 -g devteam -G sudo,docker -c "John Doe" john

주요 옵션:

옵션의미
-m홈 디렉토리 생성
-s기본 셸 지정
-uUID 지정
-g기본 그룹 지정 (GID 또는 그룹명)
-G보조 그룹 지정 (쉼표 구분)
-c설명 (GECOS 필드)
-e계정 만료일 (YYYY-MM-DD)
-f비활성 기간 (일)
-d홈 디렉토리 경로 지정
-M홈 디렉토리 생성 안함
-N기본 그룹 자동 생성 안함
-r시스템 계정 생성 (UID 1-999)

usermod — 사용자 수정

# 사용자명 변경
usermod -l newname oldname

# 홈 디렉토리 변경
usermod -d /new/home -m username

# 셸 변경
usermod -s /bin/zsh username

# 그룹 변경
usermod -g newgroup username

# 보조 그룹 추가 (기존 그룹 유지)
usermod -aG docker username

# 보조 그룹 교체 (주의!)
usermod -G sudo,docker username

# 설명 변경
usermod -c "New Description" username

# UID 변경 (파일 소유권도 함께 변경)
usermod -u 2000 username
find / -user 1000 -exec chown 2000 {} \;

# 계정 잠금
usermod -L username

# 계정 잠금 해제
usermod -U username

# 계정 만료일 설정
usermod -e 2026-12-31 username

주의사항:

  • -G 옵션은 보조 그룹을 교체함 (기존 그룹 제거)
  • 기존 그룹에 추가하려면 반드시 -aG 사용
  • UID 변경 시 파일 소유권도 함께 변경해야 함

userdel — 사용자 삭제

# 기본 삭제 (홈 디렉토리 유지)
userdel username

# 홈 디렉토리와 메일 스풀 함께 삭제
userdel -r username

# 강제 삭제 (로그인 중인 사용자도)
userdel -f username

passwd — 비밀번호 관리

# 자신의 비밀번호 변경
passwd

# root가 다른 사용자 비밀번호 변경
passwd username

# 비밀번호 잠금
passwd -l username

# 비밀번호 잠금 해제
passwd -u username

# 비밀번호 상태 확인
passwd -S username

# 비밀번호 즉시 만료 (다음 로그인 시 변경 강제)
passwd -e username

# 최소 사용일 설정
passwd -n 7 username

# 최대 사용일 설정
passwd -x 90 username

# 경고 기간 설정
passwd -w 7 username

👥 그룹 관리

groupadd — 그룹 생성

# 기본 생성
groupadd groupname

# 특정 GID 지정
groupadd -g 1500 groupname

# 시스템 그룹 생성
groupadd -r groupname

groupmod — 그룹 수정

# 그룹명 변경
groupmod -n newname oldname

# GID 변경
groupmod -g 2000 groupname

groupdel — 그룹 삭제

groupdel groupname

주의: 기본 그룹으로 사용 중이면 삭제 불가

gpasswd — 그룹 비밀번호 및 관리

# 그룹 관리자 설정
gpasswd -A username groupname

# 그룹 멤버 추가
gpasswd -a username groupname

# 그룹 멤버 제거
gpasswd -d username groupname

# 그룹 비밀번호 설정
gpasswd groupname

🔍 사용자 정보 확인

id — 사용자 ID 정보

id                          # 현재 사용자
id username                 # 특정 사용자
id -u                       # UID만
id -g                       # GID만
id -G                       # 모든 그룹 ID
id -un                      # 사용자명만
id -gn                      # 기본 그룹명만

whoami / who / w — 로그인 정보

whoami                      # 현재 사용자명
who                         # 로그인한 사용자 목록
who -a                      # 상세 정보
w                           # 로그인 사용자 + 현재 작업
last                        # 최근 로그인 기록
last username               # 특정 사용자 로그인 기록
lastb                       # 실패한 로그인 시도

finger — 사용자 정보 (설치 필요)

apt-get install finger      # Debian/Ubuntu
yum install finger          # RHEL/CentOS

finger username             # 사용자 상세 정보

🔄 사용자 환경 설정

홈 디렉토리 구조

/home/username/
├── .bashrc              # Bash 설정 (대화형 셸)
├── .bash_profile        # Bash 설정 (로그인 셸)
├── .bash_logout         # 로그아웃 시 실행
├── .profile             # 범용 셸 설정
├── .zshrc               # Zsh 설정
├── .vimrc               # Vim 설정
├── .ssh/                # SSH 키 및 설정
│   ├── authorized_keys
│   ├── id_rsa
│   └── known_hosts
├── .config/             # XDG 설정 디렉토리
└── .local/              # 사용자 로컬 데이터

스켈레톤 파일 (/etc/skel)

새 사용자 생성 시 복사되는 기본 파일들

# skel 디렉토리 확인
ls -la /etc/skel/

# skel 파일 수정 (새 사용자에게 적용)
cp custom-config /etc/skel/.config/

로그인 셸 vs 비로그인 셸

로그인 셸:

  • SSH 접속, 콘솔 로그인
  • 실행 순서: /etc/profile~/.bash_profile~/.bashrc

비로그인 셸 (대화형):

  • 터미널 에뮬레이터
  • 실행: ~/.bashrc

비대화형:

  • 스크립트 실행
  • 환경변수 상속만

🛡️ 계정 보안

계정 잠금 정책

# 실패한 로그인 횟수 제한 (PAM 설정)
# /etc/pam.d/common-auth (Debian/Ubuntu)
# /etc/pam.d/system-auth (RHEL/CentOS)

auth required pam_tally2.so deny=5 unlock_time=900

# 계정 잠금 상태 확인
pam_tally2 --user=username

# 계정 잠금 해제
pam_tally2 --user=username --reset

세션 타임아웃 설정

# /etc/profile 또는 ~/.bashrc
export TMOUT=600            # 10분 비활성 시 자동 로그아웃

# SSH 세션 타임아웃
# /etc/ssh/sshd_config
ClientAliveInterval 300
ClientAliveCountMax 2

비밀번호 정책

# /etc/login.defs 수정
PASS_MAX_DAYS   90          # 최대 사용일
PASS_MIN_DAYS   7           # 최소 사용일
PASS_MIN_LEN    12          # 최소 길이
PASS_WARN_AGE   7           # 만료 경고일

# PAM 비밀번호 복잡성 (libpam-pwquality)
# /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

📝 실전 예시

웹 개발팀 계정 설정

#!/bin/bash
# create_dev_user.sh

USERNAME=$1
FULLNAME=$2

# 그룹 생성 (없으면)
getent group devteam >/dev/null || groupadd devteam
getent group docker >/dev/null || groupadd docker

# 사용자 생성
useradd -m -s /bin/bash -g devteam -G docker,sudo -c "$FULLNAME" $USERNAME

# 비밀번호 설정 (임시 비밀번호)
passwd $USERNAME

# 홈 디렉토리 권한 설정
chmod 700 /home/$USERNAME

# 개발 도구 설정 복사
cp -r /etc/skel/dev-configs/* /home/$USERNAME/
chown -R $USERNAME:devteam /home/$USERNAME/

echo "User $USERNAME created successfully!"
echo "Groups: devteam, docker, sudo"

사용자 일괄 생성

#!/bin/bash
# bulk_create_users.sh

while IFS=',' read -r username fullname; do
    useradd -m -s /bin/bash -c "$fullname" "$username"
    echo "$username:TempPass123!" | chpasswd
    chage -d 0 "$username"  # 다음 로그인 시 비밀번호 변경 강제
done < users.csv

퇴사자 계정 처리

#!/bin/bash
# disable_user.sh

USERNAME=$1

# 1. 계정 잠금
usermod -L $USERNAME

# 2. SSH 접근 차단
echo "DenyUsers $USERNAME" >> /etc/ssh/sshd_config
systemctl reload sshd

# 3. 홈 디렉토리 백업
tar czf /backup/users/${USERNAME}_$(date +%Y%m%d).tar.gz /home/$USERNAME/

# 4. 프로세스 종료
pkill -u $USERNAME

# 5. (30일 후) 계정 삭제
# userdel -r $USERNAME

echo "User $USERNAME has been disabled"

🔗 관련 노트

  • 01-02-파일-권한-관리 — 권한 상세 가이드
  • 01-03-사용자-관리 — 권한 위임
  • 01-03-사용자-관리 — Pluggable Authentication Modules
  • 02-04-네트워크-설정 — SSH 키 관리
  • 03-03-보안-하드닝 — 보안 강화

마지막 업데이트: 2026-06-01