들어가기
리눅스 시스템을 사용하려면 반드시 계정이 필요합니다.
모든 로그인, 모든 작업은 결국 유저(user) 단위로 기록되고 제어됩니다.
이때 유저를 직접 하나하나 관리하기보다는,
그룹을 먼저 만들고 그 그룹에 유저를 소속시키는 방식이 훨씬 효율적입니다.
권한 관리 측면에서도 그렇고,
실제 운영 환경에서도 이 방식이 기본이 됩니다.
개인적으로는 유저 관리보다 그룹 관리가 더 중요하고, 더 단순하다고 느끼는 편입니다.
이 글에서는 그 흐름에 맞춰 그룹 → 유저 순서로 정리합니다.
GROUP
리눅스의 그룹 정보는 /etc/group 파일에 저장되어 있습니다.
bashcat /etc/group
이 파일은 한 줄이 하나의 그룹을 의미하며,
각 줄은 : 기준으로 4개의 컬럼으로 구성됩니다.
- 그룹 이름
- 그룹 비밀번호 (실제 사용하지 않음)
- GID (Group ID)
- 그룹 구성원 목록
형식은 아래와 같습니다.
plaingroup_name:x:GID:user1,user2,user3
groupadd : 그룹 생성
새로운 그룹을 생성할 때 사용하는 명령어입니다.
bash# sales라는 그룹을 생성
groupadd sales
# fin 이라는 그룹을 생성하고 GID를 2000으로 설정
groupadd -g 2000 fin
일반적으로 GID는 자동으로 할당되지만,
조직 정책이나 기존 시스템과의 연계를 위해
직접 지정해야 하는 경우도 종종 있습니다.
groupmod : 그룹 설정 변경
이미 존재하는 그룹의 설정을 변경할 때 사용합니다.
bash# sales 그룹의 GID를 3000으로 수정
groupmod -g 3000 sales
# fin 그룹의 이름을 oper로 변경
groupmod -n oper fin
운영 중인 시스템에서는
이미 사용 중인 GID를 변경하는 작업은 매우 신중해야 합니다.
파일 소유권과 직접적으로 연결되기 때문입니다.
groupdel : 그룹 삭제
그룹을 삭제할 때 사용합니다.
bash# oper 그룹을 삭제
groupdel oper
해당 그룹을 primary 그룹으로 사용하는 유저가 있다면 삭제되지 않습니다.
이 경우 먼저 유저의 그룹을 변경해야 합니다.
USER
유저 관련 정보는 여러 파일에 나뉘어 관리됩니다.
/etc/passwd: 계정 기본 정보/etc/shadow: 암호 및 만료 정책/etc/shells: 로그인 가능한 쉘 목록
/etc/passwd의 한 줄은 다음과 같은 구조를 가집니다.
plain계정명:암호:UID:GID:유저메모:홈디렉토리:로그인쉘
실제 암호는 /etc/shadow 파일에 해시 형태로 저장됩니다.
useradd : 유저 생성
새로운 계정을 생성하는 명령어입니다.
주요 옵션은 다음과 같습니다.
-u: UID 지정-c: 유저 메모(Comment)-r: 시스템 계정 생성 (UID 1~999)-s: 로그인 쉘 지정-g: primary 그룹 지정-G: secondary 그룹 지정-m: 홈 디렉토리 생성-d: 홈 디렉토리 경로 지정
bash# tom 이라는 계정을 생성
useradd tom
# user1을 생성하고 UID를 3001, 메모를 "New User"로 설정
useradd -u 3001 -c "New User" user1
# 시스템 계정 derek 생성
useradd -r -s /sbin/nologin -g sys -G sup1 derek
useradd -u 4989 -s /bin/csh -c "010-1111-2222" susan
useradd -r -s /sbin/nologin -g sales -G sshd,kvm,dbus -m -d /oracle ora
리눅스에는 primary 그룹과 secondary 그룹 개념이 있습니다.
-g: primary 그룹 (기본 소유 그룹)-G: secondary 그룹 (추가 소속 그룹)
파일 권한과 접근 제어를 이해하려면
이 구분은 반드시 알고 있어야 합니다.
usermod : 유저 설정 변경
이미 존재하는 유저의 설정을 변경할 때 사용합니다.
useradd에서 사용하던 옵션 대부분을 그대로 사용할 수 있습니다.
bash# susan의 UID를 3030으로 변경하고
# primary 그룹을 sales로, 로그인 쉘을 bash로 변경
usermod -u 3030 -g sales -s /bin/bash susan
secondary 그룹을 추가할 때는 -aG 옵션을 사용합니다.
bash# susan을 기존 그룹은 유지한 채 docker 그룹에 추가
usermod -aG docker susan
-a 옵션 없이 -G만 사용하면
기존 secondary 그룹이 모두 사라지므로 주의해야 합니다.
userdel : 유저 삭제
유저를 삭제할 때 사용하는 명령어입니다.
bash# tom은 홈디렉토리까지 삭제
userdel -r tom
# susan은 계정만 삭제, 홈디렉토리는 유지
userdel susan
운영 환경에서는
데이터 보존 여부를 반드시 확인한 후 삭제하는 것이 안전합니다.
특정 유저가 만든 파일 정리
계정은 삭제했지만,
파일 시스템에는 해당 UID를 가진 파일이 남아있는 경우가 많습니다.
bash# UID 1701이 소유한 파일 및 디렉토리 삭제
find / -uid 1701 -exec rm -rf {} +
소유자가 없는 파일(-nouser)을 처리하는 예시는 아래와 같습니다.
bash# 소유자가 없는 파일을 /tmp/backup 으로 이동
mkdir /tmp/backup
find / -nouser 2> /dev/null -exec mv {} /tmp/backup \;
이 작업은 반드시 신중하게 진행해야 합니다.
Shadow 파일과 비밀번호 정책
/etc/shadow 파일은
유저의 비밀번호와 만료 정책을 관리하는 핵심 파일입니다.
이 파일을 직접 수정하기보다는
chage 명령어를 사용하는 것이 일반적입니다.
bash# 현재 비밀번호/계정 만료 정책 확인
chage -l user
# 다음 로그인 시 비밀번호 변경 강제
chage -d 0 user
# 비밀번호 최소 사용 기간 7일
chage -m 7 user
# 비밀번호 최대 사용 기간 90일
chage -M 90 user
# 만료 7일 전 경고
chage -W 7 user
# 만료 후 14일 지나면 계정 비활성화
chage -I 14 user
# 계정 만료일 설정
chage -E 2026-12-31 user
shadow 파일의 각 필드는 다음 의미를 가집니다.
plainusername:password:lastchg:min:max:warn:inactive:expire:reserved
계정 생성 시 영향을 주는 설정 파일
/etc/login.defs
계정 관련 명령어의 기본 보안 정책을 정의합니다.
- login
- useradd
- passwd
이 파일은 PAM보다 하위 레벨에서
기본값의 기준이 됩니다.
bashPASS_MAX_DAYS 60
PASS_MIN_DAYS 10
UID_MIN 10000
GID_MIN 20000
/etc/default/useradd
useradd 명령어를 실행할 때
옵션을 주지 않으면 적용되는 기본값입니다.
bashINACTIVE=30
/etc/skel
새 계정을 생성할 때,
/etc/skel 디렉토리 안의 파일과 디렉토리가
사용자의 홈 디렉토리로 그대로 복사됩니다.
bashmkdir -p /etc/skel/Data
touch /etc/skel/manual.txt
useradd lunch
passwd lunch
chage -l lunch
초기 환경을 표준화할 때 매우 유용한 구조입니다.
마무리
유저와 그룹 관리는
리눅스 시스템 보안과 운영의 기본입니다.
명령어 자체는 단순하지만,
그 결과는 파일 권한, 접근 제어, 로그 기록까지 모두 연결됩니다.
이번 내용은 이후에 다룰
권한(permission), ACL, 보안 설정의 기반이 됩니다.
한 번에 다 외우려고 하기보다는,
직접 만들어보고, 바꿔보고, 지워보는 과정이 가장 확실한 학습 방법이라고 생각합니다.