개요
Linux에서 그룹은 파일과 자원에 대한 접근 권한을 효율적으로 관리하는 단위입니다. 개별 사용자마다 권한을 주기보다 그룹에 권한을 설정하면 관리가 쉬워집니다. 새 사용자를 만들면 보통 사용자 이름과 동일한 기본(primary) 그룹이 자동으로 생성됩니다. 또한 보조(secondary) 그룹에 사용자를 추가해 추가 권한을 부여할 수 있습니다.
이 문서는 다음을 다룹니다:
- 자주 쓰는 명령어와 예시
- 각 방법의 장단점과 언제 실패하는지
- 운영자와 감사자를 위한 체크리스트 및 SOP
- 보안 강화 및 검증 방법
기본 개념 한 줄 정의
- 그룹(group): 파일/디렉터리에 적용할 수 있는 권한 집합을 가진 사용자 집단.
- 기본 그룹(primary group): 계정 생성 시 자동으로 지정되는 그룹.
- 보조 그룹(secondary groups): 추가 권한을 위해 사용자가 속할 수 있는 다른 그룹들.
groups 명령으로 사용자 그룹 확인하기
groups
는 GNU coreutils에 포함되며 대부분의 시스템에 기본 설치되어 있습니다. 사용법은 간단합니다.
groups [username]
- 인자를 주지 않으면 현재 로그인한 사용자의 그룹을 출력합니다.
- username을 지정하면 해당 사용자가 속한 모든 그룹을 출력합니다.
예:
groups
또는
groups linuxuser
출력 예시는 linuxuser
가 기본 그룹 linuxuser
와 몇 개의 보조 그룹에 속해 있음을 보여줍니다.
중요: groups
는 이름 기반으로 결과를 출력합니다. 네트워크 인증(예: LDAP)이 설정된 환경에서도 시스템이 올바르게 구성되어 있다면 정상 동작합니다.
id 명령으로 상세 정보 확인하기
id
는 사용자 ID(UID), 그룹 ID(GID), 그리고 사용자가 속한 그룹을 보여줍니다. 숫자 ID와 이름을 다른 옵션으로 확인할 수 있습니다.
id -G linuxuser # 숫자 GID 목록
id -Gn linuxuser # 그룹 이름 목록
id # 현재 사용자 UID/GID/그룹 출력
-G
는 그룹의 숫자 ID를 출력합니다.-n
을 추가하면 숫자 대신 사람 읽기 좋은 이름을 출력합니다.
id
는 사용자 계정의 완전한 아이덴티티를 빠르게 확인할 때 유용합니다.
/etc/group 파일 직접 확인하기
시스템의 로컬 그룹 정보는 /etc/group
파일에 저장됩니다. 각 줄은 다음 형식입니다:
group_name:password:group_id:user_list
- group_name: 그룹 이름
- password: 일반적으로 비어있거나 x로 표시됨
- group_id: GID(숫자형)
- user_list: 쉼표로 구분된 사용자 목록(보조 그룹 멤버)
파일 전체를 보려면:
cat /etc/group
그러나 파일이 길면 수동 검색이 어렵습니다. 특정 사용자를 찾으려면 grep
을 사용하세요.
grep -w linuxuser /etc/group
위의 -w
옵션은 정확한 단어 매칭을 보장합니다.
주의: 네트워크 기반 인증(LDAP/NIS 등)을 사용하는 시스템에서는 /etc/group
만 확인해서는 완전한 결과를 얻지 못할 수 있습니다. 이 경우 다음 섹션의 getent
를 사용하세요.
getent 명령으로 시스템 데이터베이스에서 조회하기
getent
는 /etc/passwd
, /etc/group
뿐 아니라 네트워크 인증을 통해 제공되는 데이터베이스에서 정보를 조회합니다. 따라서 LDAP/NIS 등과 함께 사용할 때 더 신뢰할 수 있습니다.
getent group
또는 특정 사용자 관련 그룹만 찾으려면:
getent group | grep -w linuxuser
이 방법은 중앙 인증 서버와 통합된 환경에서 로컬 파일과 원격 정보를 모두 포함해 정확한 결과를 제공합니다.
언제 어떤 방법을 써야 하나? — 선택 가이드
- 로컬 단일 서버이고 단순 조회만 필요하면
groups
나id
가 빠릅니다. - 네트워크 인증(예: LDAP)을 사용하는 환경에서는
getent
가 권장됩니다. - 시스템 수준 파일(
/etc/group
)을 직접 편집하거나 백업/점검하려면 해당 파일을 확인하세요. - 스크립트에서 자동화하려면
id -Gn user
로 그룹 이름을 안전하게 얻어 파싱하기 쉽습니다.
중요: 어떤 명령은 캐시된 정보나 인증 지연으로 인해 즉시 최신 정보를 반영하지 못할 수 있습니다. 중앙 인증 서버 변경 후에는 캐시를 플러시하거나 충분한 시간을 주어 동기화 상태를 확인하세요.
대안 및 관련 명령어
- 그룹에 사용자를 추가하려면
usermod -aG group user
를 사용합니다. (관리자 권한 필요)
sudo usermod -aG sudo alice
- 그룹 생성/삭제:
groupadd
,groupdel
. - 계정과 그룹 관련 전체 정보를 얻으려면
getent passwd username
과getent group groupname
을 조합합니다.
실패 사례와 대처법
- LDAP/NIS 환경에서 결과가 보이지 않을 때:
getent
가 제대로 동작하는지 확인하고, NSS 설정(/etc/nsswitch.conf
)에서group
항목이 올바르게 구성되었는지 점검하세요. - 캐시 문제: SSSD나 nscd 같은 서비스가 있다면 해당 서비스를 재시작하거나 캐시를 플러시하세요.
- 권한 문제로
/etc/group
를 읽지 못할 때: 루트 권한으로 확인하세요.
운영자(관리자)/감사자 체크리스트
관리자 체크리스트:
- 사용자의 기본 그룹이 계정 생성 정책과 일치하는지 확인
- 중요 그룹(sudo, admin 등)의 멤버십을 정기적으로 검토
- 중앙 인증과 로컬 파일 간 불일치 여부 점검
- 변경 로그(누가 언제 그룹을 변경했는지)를 기록
감사자 체크리스트:
- 보안 그룹의 멤버가 최소 권한 원칙을 따르는지 확인
- 그룹 기반 권한 부여의 주기적 검토 일정 수립
- 의심스러운 권한 상승 이벤트 검사
표준 운영 절차(SOP): 사용자 그룹 확인
- 목표 사용자 확인: 어떤 사용자에 대해 검증할지 결정합니다.
- 로컬 확인:
id username
또는groups username
실행. - 중앙 인증 확인:
getent group | grep -w username
실행. - /etc/group 파일 검토(필요 시):
grep -w username /etc/group
. - 차이점 기록: 로컬 vs 중앙의 불일치가 있으면 로그와 함께 기록.
- 문제 해결: NSS 설정, SSSD/nscd 상태, LDAP 서버 연결 상태 확인.
- 보고: 변경 또는 이슈가 있으면 티켓 발행.
검증 및 테스트 케이스
- TC1: 로컬 사용자에 대해
groups
가 기본 그룹과 보조 그룹을 올바르게 반환하는지 확인. - TC2: LDAP 계정을 가진 사용자에 대해
getent group
이 중앙 그룹 멤버십을 반환하는지 확인. - TC3:
id -Gn user
결과가 스크립트 파싱 규칙에 부합하는지 검증.
각 테스트는 정상/오류 케이스(예: 사용자 없음, 네트워크 실패)를 포함해야 합니다.
보안 강화 권장사항
- 중요한 그룹(예: sudo, wheel)의 멤버십을 최소로 유지하세요.
- 그룹 변경은 중앙 로그(예: syslog, SIEM)에 기록되도록 설정하세요.
- LDAP 등 중앙 인증을 사용할 때는 전송 보안(LDAPS, StartTLS)을 적용하세요.
- 자동화된 스크립트는 최소 권한으로 실행하고 변경 작업 시 다단계 검증을 추가하세요.
마이그레이션/호환성 팁
- 로컬 /etc 방식에서 LDAP로 이전할 때는 먼저 NSS와 PAM 설정이 올바른지 테스트하세요.
- 혼합 환경에서는
getent
로 전체 환경을 조회해 불일치 항목을 찾아야 합니다.
간단한 용어집
- UID: 사용자 식별자(숫자).
- GID: 그룹 식별자(숫자).
- NSS: Name Service Switch, 시스템이 사용자/그룹 정보를 어디서 조회할지 결정.
요약
groups
,id
,/etc/group
,getent
는 각기 장점이 있습니다. 환경(로컬 vs 중앙 인증)에 따라 적절한 도구를 사용하세요.- 운영자는 정기적인 멤버십 검토와 변경 로그를 유지해야 합니다.
- 문제 발생 시 NSS 설정, 캐시 서비스(SSSD/nscd), 네트워크 인증 상태를 우선 점검하세요.
중요: 사용자 및 그룹 정보를 변경할 때는 변경 전후의 상태를 기록하고, 권한 상승이 발생하지 않도록 주의하세요.