Linux 사용자 계정 관리 - 계정 조회, 비밀번호 변경 및 그룹 관리

📋 사용자 계정 목록 조회

1. /etc/passwd 파일 확인

가장 기본적인 방법으로 모든 사용자 계정 정보가 저장된 파일을 직접 확인합니다.

cat /etc/passwd

출력 형식:

username:x:UID:GID:comment:home_directory:shell

예시:

root:x:0:0:root:/root:/bin/bash
dongwoo:x:1000:1000:Dongwoo Yang:/home/dongwoo:/bin/bash

2. 일반 사용자만 조회

UID가 1000 이상인 일반 사용자만 필터링하여 조회:

awk -F: '$3 >= 1000 {print $1}' /etc/passwd

또는:

getent passwd | awk -F: '$3 >= 1000 {print $1}'

3. 로그인 가능한 사용자만 조회

실제 쉘이 할당된 사용자만 확인:

grep -v '/nologin\|/false' /etc/passwd

또는:

cat /etc/passwd | grep -E '/bin/(bash|sh|zsh)$'

4. 사용자 목록만 간단히 조회

사용자 이름만 출력:

cut -d: -f1 /etc/passwd

5. 현재 로그인한 사용자 확인

# 현재 로그인한 사용자들
who

# 더 자세한 정보
w

# 현재 사용자만
whoami

6. getent 명령 사용

# 모든 사용자 정보
getent passwd

# 특정 사용자 정보
getent passwd username

🔑 사용자 비밀번호 변경

1. 자신의 비밀번호 변경

passwd

실행 과정:

Changing password for dongwoo.
Current password: [현재 비밀번호 입력]
New password: [새 비밀번호 입력]
Retype new password: [새 비밀번호 재입력]
passwd: password updated successfully

2. 다른 사용자의 비밀번호 변경 (root 권한 필요)

sudo passwd username

예시:

sudo passwd dongwoo

root 권한으로 변경할 때는 현재 비밀번호를 물어보지 않습니다.

3. 비밀번호 정책 확인

# 비밀번호 만료 정보 확인
sudo chage -l username

# 출력 예시:
# Last password change : Feb 12, 2026
# Password expires : never
# Password inactive : never
# Account expires : never
# Minimum number of days between password change : 0
# Maximum number of days between password change : 99999

4. 비밀번호 만료 설정

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

# 비밀번호 만료 기간 설정 (90일)
sudo chage -M 90 username

# 최소 변경 주기 설정 (1일)
sudo chage -m 1 username

5. 비밀번호 잠금/잠금 해제

# 계정 잠금 (비밀번호 무효화)
sudo passwd -l username

# 계정 잠금 해제
sudo passwd -u username

# 잠금 상태 확인
sudo passwd -S username

출력 예시:

username PS 2026-02-12 0 99999 7 -1 (Password set, SHA512 crypt.)
username LK 2026-02-12 0 99999 7 -1 (Password locked.)

6. 비밀번호 없이 계정 생성

# 비밀번호 없는 계정 생성 (비활성화 상태)
sudo useradd -m username

# 나중에 비밀번호 설정
sudo passwd username

비밀번호 정책 관리

1. PAM을 통한 비밀번호 복잡도 설정

/etc/pam.d/common-password 또는 /etc/pam.d/system-auth 파일 수정:

sudo vi /etc/pam.d/common-password

설정 예시:

# 최소 길이 12자, 최소 1개의 대문자, 소문자, 숫자, 특수문자 포함
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

2. /etc/login.defs 설정

sudo vi /etc/login.defs

주요 설정:

PASS_MAX_DAYS   90      # 비밀번호 최대 사용 기간
PASS_MIN_DAYS 1 # 비밀번호 최소 변경 주기
PASS_MIN_LEN 8 # 비밀번호 최소 길이
PASS_WARN_AGE 7 # 만료 경고 기간

사용자 그룹 관리

1. 그룹 목록 조회

모든 그룹 확인:

# /etc/group 파일 확인
cat /etc/group

# getent 사용
getent group

출력 형식:

groupname:x:GID:user1,user2,user3

예시:

sudo:x:27:dongwoo,admin
docker:x:999:dongwoo
developers:x:1001:dongwoo,john,jane

특정 그룹 정보 확인:

getent group groupname

2. 사용자가 속한 그룹 확인

현재 사용자의 그룹:

groups

특정 사용자의 그룹:

groups username

# 또는 더 자세한 정보
id username

출력 예시:

$ id dongwoo
uid=1000(dongwoo) gid=1000(dongwoo) groups=1000(dongwoo),27(sudo),999(docker),1001(developers)

3. 사용자의 주 그룹(Primary Group) 변경

주 그룹 변경:

sudo usermod -g groupname username

예시:

# dongwoo의 주 그룹을 developers로 변경
sudo usermod -g developers dongwoo

주의: 주 그룹은 사용자가 파일을 생성할 때 기본적으로 적용되는 그룹입니다.

4. 사용자를 보조 그룹(Secondary Group)에 추가

보조 그룹에 추가 (기존 그룹 유지):

sudo usermod -aG groupname username

중요: -aG 옵션을 사용해야 기존 그룹이 유지됩니다. -G만 사용하면 기존 보조 그룹이 모두 제거됩니다!

예시:

# dongwoo를 docker 그룹에 추가
sudo usermod -aG docker dongwoo

# 여러 그룹에 동시에 추가
sudo usermod -aG docker,sudo,developers dongwoo

5. 사용자를 그룹에서 제거

특정 그룹에서 사용자 제거:

sudo gpasswd -d username groupname

예시:

# dongwoo를 docker 그룹에서 제거
sudo gpasswd -d dongwoo docker

모든 보조 그룹에서 제거:

sudo usermod -G "" username

6. 새 그룹 생성 및 삭제

새 그룹 생성:

sudo groupadd groupname

# 특정 GID로 그룹 생성
sudo groupadd -g 1500 developers

그룹 삭제:

sudo groupdel groupname

그룹 이름 변경:

sudo groupmod -n newname oldname

7. 그룹 즉시 적용

그룹 변경 후 즉시 적용하려면:

방법 1: 새로운 쉘 시작

newgrp groupname

방법 2: 재로그인

# 현재 세션 종료 후 재로그인
exit

방법 3: su 명령 사용

su - username

8. 실무 예제

웹 개발자 계정 설정:

# 1. developers 그룹 생성
sudo groupadd developers

# 2. www-data 그룹에 사용자 추가 (웹 서버 파일 접근)
sudo usermod -aG www-data,developers dongwoo

# 3. 확인
groups dongwoo
id dongwoo

Docker 사용 권한 부여:

# 1. docker 그룹에 사용자 추가
sudo usermod -aG docker dongwoo

# 2. 즉시 적용 (재로그인 대신)
newgrp docker

# 3. 확인
docker ps

프로젝트별 그룹 관리:

# 1. 프로젝트 그룹 생성
sudo groupadd project-alpha

# 2. 팀원들 추가
sudo usermod -aG project-alpha dongwoo
sudo usermod -aG project-alpha john
sudo usermod -aG project-alpha jane

# 3. 프로젝트 디렉토리 생성 및 권한 설정
sudo mkdir -p /var/projects/alpha
sudo chgrp project-alpha /var/projects/alpha
sudo chmod 770 /var/projects/alpha

# 4. setgid 비트 설정 (새 파일도 그룹 소유)
sudo chmod g+s /var/projects/alpha

# 5. 확인
ls -ld /var/projects/alpha

출력 예시:

drwxrws--- 2 root project-alpha 4096 Feb 12 10:00 /var/projects/alpha

9. 그룹 권한 확인

파일/디렉토리의 그룹 소유권 확인:

ls -l filename
ls -ld directoryname

특정 그룹이 소유한 파일 찾기:

find /path -group groupname

특정 사용자의 모든 파일 찾기:

find /path -user username

10. 주요 시스템 그룹

Ubuntu/Debian:

  • sudo: sudo 권한을 가진 사용자
  • adm: 시스템 로그 읽기 권한
  • www-data: 웹 서버 그룹
  • docker: Docker 사용 권한
  • dialout: 시리얼 포트 접근
  • plugdev: USB 장치 접근
  • lxd: LXD 컨테이너 관리

RHEL/CentOS:

  • wheel: sudo 권한을 가진 사용자
  • apache: 웹 서버 그룹
  • nginx: Nginx 웹 서버
  • docker: Docker 사용 권한

11. 그룹 관리 주의사항

1. -G와 -aG의 차이

# 위험! 기존 보조 그룹이 모두 제거됨
sudo usermod -G docker dongwoo

# 안전! 기존 그룹 유지하고 추가
sudo usermod -aG docker dongwoo

2. 그룹 변경 후 재로그인

그룹 변경사항은 새로운 로그인 세션에만 적용됩니다. 현재 세션에서는 newgrp 명령을 사용하거나 재로그인이 필요합니다.

3. 주 그룹 변경 시 주의

주 그룹을 변경하면 사용자가 생성하는 새 파일의 그룹 소유권이 변경됩니다.

4. 시스템 그룹 삭제 금지

시스템이 사용하는 그룹(예: root, daemon, sys 등)은 절대 삭제하면 안 됩니다.

보안 팁

1. 강력한 비밀번호 생성

# 랜덤 비밀번호 생성 (16자)
openssl rand -base64 16

# 또는
pwgen 16 1

2. sudo 권한 확인

# sudo 권한이 있는 사용자 확인
getent group sudo
getent group wheel # RHEL/CentOS

# 특정 사용자의 sudo 권한 확인
sudo -l -U username

3. 사용자 활동 감사

# 마지막 로그인 기록
lastlog

# 로그인 기록
last

# 실패한 로그인 시도
sudo lastb

실무 예제

새 사용자 생성 및 초기 비밀번호 설정

# 1. 사용자 생성
sudo useradd -m -s /bin/bash newuser

# 2. 비밀번호 설정
sudo passwd newuser

# 3. 초기 로그인 시 비밀번호 변경 강제
sudo passwd -e newuser

# 4. sudo 권한 부여 (필요한 경우)
sudo usermod -aG sudo newuser # Ubuntu/Debian
# 또는
sudo usermod -aG wheel newuser # RHEL/CentOS

휴면 계정 관리

# 30일 이상 로그인하지 않은 계정 찾기
sudo lastlog -b 30

# 계정 비활성화
sudo usermod -L -e 1 username

# 계정 재활성화
sudo usermod -U -e '' username

대량 사용자 비밀번호 변경

# 파일에서 사용자 목록 읽어서 비밀번호 만료 설정
while read user; do
sudo passwd -e "$user"
done < users.txt

주의사항

  1. root 계정 관리: root 계정의 직접 로그인을 비활성화하고 sudo를 통한 권한 상승을 권장합니다.

  2. 비밀번호 복잡도: 조직의 보안 정책에 맞는 비밀번호 정책을 설정하세요.

  3. 정기 감사: 주기적으로 사용자 계정 목록을 검토하고 불필요한 계정은 삭제하세요.

  4. 백업: 사용자 계정 변경 전 /etc/passwd, /etc/shadow, /etc/group 파일을 백업하세요.

sudo cp /etc/passwd /etc/passwd.bak
sudo cp /etc/shadow /etc/shadow.bak
sudo cp /etc/group /etc/group.bak
Share