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 포함)을 쿼리합니다.
접근 모델과 소유권
각 인오드(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로 실행되는 프로세스는 그룹 멤버십을 무시하고 소유자 수준의 접근 권한을 갖습니다.
UID 범위:
- 0: root
- 1–999: 시스템 계정(데몬용, 로그인 불가)
- 1000+: 일반 사용자
- 65534: nobody
이 설정은 /etc/login.defs에서 정의됩니다.
시스템 계정은 로그인을 방지하기 위해 /usr/sbin/nologin 또는 /bin/false를 사용합니다:
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
아직 댓글이 없습니다.