Linux 사용자 관리 가이드

Linux 사용자 관리 가이드입니다. passwd, shadow, group 구조, groupadd, useradd, chage, 서비스 계정, 계정 삭제 전 점검을 정리했습니다.

Linux 사용자 관리 가이드

Linux 사용자 관리는 단순히 계정을 하나 만드는 작업이 아니라 /etc/passwd, /etc/shadow, /etc/group, 홈 디렉터리, 기본 쉘, 패스워드 만료 정책을 함께 관리하는 작업이다. 운영 서버에서는 개인 계정, 서비스 계정, 임시 점검 계정을 구분하고 UID/GID와 보조 그룹을 명확히 잡아야 권한 사고를 줄일 수 있다.

사용자 정보 파일 구조

/etc/passwd에는 계정의 기본 식별 정보가 저장된다. 비밀번호 해시는 일반 사용자가 읽을 수 없는 /etc/shadow로 분리되어 있고, 그룹 정보는 /etc/group에서 관리된다. 직접 편집해야 한다면 vipw, vigr처럼 잠금 처리를 해주는 도구를 쓰는 편이 안전하다.

sudo getent passwd trainee
sudo getent group developers
sudo passwd -S trainee
sudo chage -l trainee
account:password-field:UID:GID:comment:home-directory:shell
trainee:x:1001:1001:Training User:/home/trainee:/bin/bash

그룹 먼저 설계하기

파일 권한을 개인에게 직접 주기 시작하면 운영 중 권한 정리가 어려워진다. 같은 업무를 하는 사용자는 그룹으로 묶고, 디렉터리 소유권을 그룹 기준으로 부여하는 방식이 유지보수에 유리하다.

sudo groupadd developers
sudo getent group developers

sudo mkdir -p /srv/project
sudo chown root:developers /srv/project
sudo chmod 2775 /srv/project
ls -ld /srv/project

chmod 2775의 앞자리 2는 setgid bit다. 이 디렉터리 아래에 새로 만들어지는 파일과 디렉터리가 가능한 한 developers 그룹을 상속하도록 만든다.

사용자 생성과 보조 그룹 지정

일반 로그인 계정은 홈 디렉터리와 쉘을 명시하고, 필요한 보조 그룹만 추가한다. 운영 중 기존 사용자를 그룹에 추가할 때는 usermod -aG처럼 -a를 빼지 않는 것이 중요하다. -a 없이 -G만 쓰면 기존 보조 그룹 목록이 대체될 수 있다.

sudo useradd -m -s /bin/bash -c "Training User" -G developers trainee
sudo passwd trainee

id trainee
getent passwd trainee
sudo ls -la /home/trainee
sudo usermod -aG wheel trainee
id trainee

계정 만료와 비밀번호 정책

/etc/login.defs는 신규 계정 생성 시 사용할 기본 범위를 잡고, 개별 계정의 만료 정책은 chage로 확인하거나 조정한다. 임시 작업 계정은 종료일을 먼저 잡아두면 방치 위험을 줄일 수 있다.

grep -E '^(UID_MIN|UID_MAX|GID_MIN|GID_MAX|PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE)' /etc/login.defs

sudo chage -M 90 -m 1 -W 14 trainee
sudo chage -E 2026-12-31 trainee
sudo chage -l trainee

새 정책을 적용할 때는 기존 계정에 자동 반영되지 않는 항목이 많다. 계정 생성 기본값은 useradd -D로 확인하고, 기존 사용자는 chage, usermod로 별도 정리한다.

useradd -D
sudo useradd -D -s /bin/bash
sudo useradd -D -b /home

서비스 계정과 로그인 차단

데몬 실행용 계정은 사람이 로그인하지 않는 계정으로 만든다. 배포판에 따라 시스템 계정 UID 범위가 다르므로 useradd -r 결과를 확인하고, 쉘은 /sbin/nologin 또는 /usr/sbin/nologin 중 시스템에 있는 경로를 사용한다.

command -v nologin || ls /sbin/nologin /usr/sbin/nologin 2>/dev/null

sudo useradd -r -s /sbin/nologin -M appsvc
id appsvc
getent passwd appsvc

삭제 전 점검

계정을 지울 때는 해당 사용자가 소유한 파일, crontab, 실행 중인 프로세스를 먼저 확인한다. userdel -r은 홈 디렉터리와 메일 스풀까지 제거하므로, 필요한 자료 백업 여부를 확인한 뒤 실행한다.

pgrep -u trainee -a || true
sudo crontab -u trainee -l 2>/dev/null || true
sudo find / -xdev -user trainee -ls 2>/dev/null | head

sudo userdel -r trainee
getent passwd trainee || echo "trainee account removed"

운영 기준

  • 권한은 개인보다 그룹 단위로 부여한다.
  • 서비스 계정은 로그인 쉘과 홈 디렉터리 필요성을 별도로 판단한다.
  • 임시 계정은 생성 시점에 만료일을 지정한다.
  • 사용자/그룹 파일을 직접 편집해야 한다면 vipw, vigr를 사용한다.
  • 퇴사자나 종료된 작업 계정은 프로세스, crontab, 소유 파일까지 확인한 뒤 잠금 또는 삭제한다.

관련 링크: useradd(8), chage(1), passwd(5)

BGM EVER