우분투 실전 명령어 | getent와 id로 계정/권한 빠르게 점검

언제 쓰는가

서버에서 계정이나 그룹이 꼬였는지 확인할 때 가장 먼저 쓰는 조합이다. 특히 LDAP 같은 외부 디렉터리 연동 환경에서는 /etc/passwd만 보면 놓치는 정보가 많아서 getent 확인이 필수다.

바로 쓰는 명령어

# 현재 사용자/권한 컨텍스트 빠르게 확인
whoami
id
groups

# 특정 사용자/그룹 조회 (로컬 + NSS 소스 포함)
getent passwd deploy
getent group docker

# UID 1000 사용자 역조회
getent passwd 1000
# 로그인 가능한 일반 사용자만 추려 보기 (예: bash/sh)
getent passwd | awk -F: '$7 ~ /(bash|sh)$/ {print $1, $3, $4, $7}'

# sudo 그룹 멤버 확인
getent group sudo | awk -F: '{print $1": "$4}'

핵심 옵션/패턴

  • id: 사용자 UID, GID, 보조 그룹을 한 번에 보여준다.
  • id -u username: 사용자 UID만 필요할 때 가장 안전하다.
  • id -Gn username: 그룹 이름만 공백 구분으로 출력해서 스크립트 처리에 편하다.
  • getent passwd username: NSS 기준으로 사용자 엔트리를 조회한다.
  • getent group groupname: 그룹 멤버 확인 시 /etc/group 직접 파싱보다 실수가 적다.
  • getent passwd UID: 숫자 UID로 계정을 역으로 찾을 수 있다.

명령 출력 예시

$ id deploy
uid=1002(deploy) gid=1002(deploy) groups=1002(deploy),27(sudo),999(docker)

$ getent group sudo
sudo:x:27:deploy,ops

$ getent passwd deploy
deploy:x:1002:1002:Deploy User:/home/deploy:/bin/bash

자주 하는 실수

  • /etc/passwd만 보고 계정이 없다고 판단하는 실수
    • NSS가 LDAP/SSSD를 보도록 설정된 서버에서는 getent로 확인해야 정확하다.
  • 그룹 반영 직후 권한 테스트를 바로 하는 실수
    • 이미 떠 있는 셸 세션은 새 그룹 정보를 못 받을 수 있다. 재로그인 또는 newgrp가 필요하다.
  • 스크립트에서 id 출력 전체를 문자열 비교하는 실수
    • 배포 환경마다 그룹 순서가 달라질 수 있으니 id -u, id -Gn처럼 목적형 옵션을 써야 한다.

검증 방법

# 1) 계정 존재 여부 확인
getent passwd deploy >/dev/null && echo "user ok" || echo "user missing"

# 2) sudo 그룹 포함 여부 확인
id -Gn deploy | tr ' ' '\n' | grep -qx sudo && echo "sudo member" || echo "not sudo"

# 3) 홈 디렉터리/셸 확인
getent passwd deploy | awk -F: '{print "home=" $6 ", shell=" $7}'

운영 팁

  • 권한 점검 스크립트는 getent + id 조합으로 작성해 두면 로컬 계정 서버와 디렉터리 연동 서버를 같이 커버할 수 있다.
  • 신규 계정 온보딩 체크리스트에 id -u, id -Gn, getent passwd를 고정 항목으로 넣어두면 장애를 크게 줄일 수 있다.
  • 운영 중 UID 충돌이 의심되면 getent passwd UID 조회를 먼저 돌려서 매핑 이상부터 확인하는 게 빠르다.

출처

  • man7
  • Ubuntu Manpages
  • GNU Coreutils Manual