홈으로 돌아가기

Linux 사용자 UID GID 그룹 관리

Linux에서 UID/GID에 의한 사용자 식별, 접근 모델, /etc/passwd shadow group 파일 분석 기사. 진단 및 계정 관리를 위한 id getent useradd vipw 명령어 소개.

Linux 사용자 관리: UID 그룹 useradd
Advertisement 728x90

Linux 사용자 및 그룹 관리: UID, GID, 계정 제어

Linux 커널은 숫자 기반 식별자—UID와 GID를 사용합니다. 사용자 이름은 /etc/passwd에 저장된 인간이 읽을 수 있는 별칭일 뿐입니다. 프로세스와 파일은 이 숫자에 연결되므로, 원래의 UID를 유지하지 않고 사용자 이름만 변경하면 리소스 접근 권한을 잃게 됩니다.

현재 사용자 확인:

id
# uid=1001(deployer) gid=1001(deployer) groups=1001(deployer),27(sudo),998(docker)

id -u  # UID만 출력
whoami # 사용자 이름만 출력
getent passwd deployer

getent는 직접 파일을 읽는 것과 달리 NSS 모듈(예: LDAP 포함)을 쿼리합니다.

Google AdInline article slot

접근 모델과 소유권

각 인오드(inode)는 소유자(UID)와 그룹(GID)을 저장합니다. 커널은 다음 순서로 권한을 확인합니다: 프로세스의 UID/GID → 소유자? → 그룹? → 기타 사용자. 첫 번째 일치 항목이 접근 권한을 결정합니다.

예시:

ls -la /var/log/nginx/
# -rw-r----- 1 www-data adm 187234 Mar 26 10:41 access.log

소유자는 www-data, 그룹은 adm입니다. www-data로 실행되는 프로세스는 그룹 멤버십을 무시하고 소유자 수준의 접근 권한을 갖습니다.

Google AdInline article slot

UID 범위:

  • 0: root
  • 1–999: 시스템 계정(데몬용, 로그인 불가)
  • 1000+: 일반 사용자
  • 65534: nobody

이 설정은 /etc/login.defs에서 정의됩니다.

시스템 계정은 로그인을 방지하기 위해 /usr/sbin/nologin 또는 /bin/false를 사용합니다:

Google AdInline article slot
awk -F: '$3 < 1000 && $3 > 0 {print $1, $3, $7}' /etc/passwd

그룹: 공유 접근 권한

기본 그룹(GID는 /etc/passwd에 있음)은 새 파일에 적용됩니다. 보조 그룹은 /etc/group에 나열됩니다.

멤버십 확인:

groups  # 현재 그룹 확인
getent group docker  # 그룹 구성원 확인
docker:x:998:deployer,ci

그룹은 접근 제어를 간편하게 만듭니다. 예를 들어, docker 그룹에 사용자를 추가하면 sudo 없이도 도커 소켓에 접근할 수 있습니다.

구성 파일

/etc/passwd (모든 사용자가 읽을 수 있음):

deployer:x:1001:1001:Deploy Bot,,:/home/deployer:/bin/bash

필드: 사용자 이름 | 비밀번호 자리표시자(x) | UID | GID | GECOS | 홈 디렉터리 | 쉘.

/etc/shadow (root 전용): SHA-512 또는 yescrypt 해시, 비밀번호 만료 설정 포함.

deployer:$6$rounds=5000$xPwF...$kE9...hash...:19800:0:99999:7:::

/etc/group:

docker:x:998:deployer,ci-bot

안전한 편집 명령어:

vipw    # 잠금 상태로 passwd 편집
vigr    # group 편집
pwck    # 구성 검증

사용자 생성 및 구성

useradd 명령어를 주요 옵션과 함께 사용하세요:

| 옵션 | 설명 |

|--------|-------------|

| -m | 홈 디렉터리 생성 |

| -s | 기본 쉘 설정 |

| -G | 보조 그룹 추가 |

| -r | 시스템 계정 |

| -u | UID 지정 |

예시:

useradd -m -s /bin/bash -G sudo,docker ivan
useradd -r -s /usr/sbin/nologin ci-bot

passwd ivan  # 비밀번호 설정
chpasswd <<< 'ivan:secret'
passwd -e ivan  # 다음 로그인 시 비밀번호 재설정 강제

useradd -m/etc/skel에서 파일을 복사하고 홈 디렉터리의 소유권을 설정합니다.

umask는 0666(파일) 또는 0777(디렉터리)에서 값을 빼줍니다. 기본값: 0022.

환경 및 템플릿

/etc/skel은 새 사용자 홈 디렉터리의 템플릿을 보관합니다: .bashrc, .profile 등.

전역 설정:

  • /etc/default/useradd: useradd의 기본값
  • /etc/profile.d/*.sh: 로그인 시 실행되는 환경 스크립트
  • /etc/login.defs: umask, UID 범위 설정

핵심 요약:

  • UID는 사용자 이름이 아니라 접근 권한을 결정합니다.
  • NSS 인식 쿼리를 위해 cat /etc/passwd 대신 getent를 사용하세요.
  • 그룹은 권한 위임의 핵심 메커니즘입니다.
  • 항상 vipw 또는 vigr를 통해 구성 파일을 편집하세요.
  • 시스템 계정은 /usr/sbin/nologin 또는 /bin/false를 사용하고, UID는 1000 미만이어야 합니다.

— Editorial Team

Advertisement 728x90

다음 읽기