현대오토에버 모빌리티 sw 스쿨 3기 [클라우드]/LINUX

[Linux] 리눅스 사용자 및 그룹 관리 완벽 가이드 - useradd, usermod, passwd 실습

맹꽁이+ 2026. 1. 13. 16:16

리눅스 시스템에서 사용자그룹 관리시스템 보안과 자원 관리의 핵심입니다.

멀티유저 운영체제인 리눅스는 여러 사용자가 동시에 시스템을 사용할 수 있도록 설계되어 있으며, 각 사용자에게 적절한 권한과 자원을 할당하는 것이 시스템 관리자의 중요한 업무입니다!

 

이번 포스팅에서는 사용자 계정 생성부터 권한 관리, 그룹 관리, 그리고 실무에서 자주 사용되는 명령어들을 체계적으로 다룰 예정입니. /etc/passwd, /etc/shadow, /etc/group과 같은 핵심 설정 파일의 구조를 이해하고, useradd, usermod, groupadd 등의 명령어를 실습을 통해 익히려 합니다.

 

또한 패스워드 에이징, 디스크 쿼터 설정, sudo 권한 부여 등 실무에서 꼭 필요한 보안 설정 방법도 함께 알아보겠습니다. 이론과 실습을 병행하여 리눅스 시스템 관리 능력을 한 단계 높여보세요!

 

🐸이 글에서 배울 내용

  • 사용자 계정 관리 파일 구조 이해
  • 사용자 및 그룹 생성, 수정, 삭제
  • 패스워드 정책 및 보안 설정
  • sudo 권한 관리
  • 파일 소유권 및 디스크 쿼터 설정

 

 

1. 사용자 계정 관리 파일

/etc/passwd

🐸개요

  • 사용자 계정 정보가 저장된 기본 파일
  • 초기의 유닉스에서는 암호도 파일에 저장했으나 해킹 위험이 증가하면서 암호는 /etc/shadow 파일에 별도로 저장
  • root 계정으로 수정이 가능하지만 사용자 계정이 저장되는 중요한 파일이므로 함부로 수정하지 말고 사용자 계정의 추가, 삭제, 수정 등 변경 사항이 있을 때는 관련된 명령으로 변경하는 것이 권장됨

🐸파일 구조

로그인 ID:x:UID:GID:설명:홈 디렉터리:로그인 셸

ex) adam:x:1000:1000:adam:/home/adam:/bin/bash
  • 한 행에 사용자 한 명에 대한 정보가 기록됨
  • 콜론(:)으로 구분되는 일곱 개의 항목으로 구성
    • 로그인 ID
      • 32자까지 가능
      • 소문자, 대문자, 숫자, _, - 가능
      • 예외: -으로 시작하거나 로그인 ID 전체가 숫자면 X
      • 중복되는 이름 X
    • x: 초창기 유닉스 시스템에서 사용자 암호를 저장하던 위치로 지금은 무조건 x로 표기
    • UID
      • 사용자를 구분하기 위한 번호
      • 0~999번과 65534번은 시스템 사용자를 위한 UID
      • 시스템 사용자 계정은 시스템이 관리 업무를 위해 내부적으로 사용하려고 예약되어 있는 계정이므로 임의로 수정하면 안 됨
    • GID
      • 그룹을 구분하기 위한 번호
      • 사용자는 반드시 한 개 이상의 그룹에 소속되어야 함
      • 사용자의 기본 그룹은 사용자를 만들 때 정해지는데, 그룹을 지정하지 않으면 로그인 ID로 그룹을 생성해서 지정
      • 이 내용은 /etc/group에 저장
    • 설명: 적고 싶은 말
    • 홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로를 기록
    • 로그인 셸: 사용자의 로그인 셸

 

✅/etc/shadow

사용자 암호에 관한 정보를 별도로 관리하는 파일
/etc/passwd 파일은 누구나 읽을 수 있지만
/etc/shadow 파일의 경우 root 사용자만 읽고 쓸 수 있으며, shadow 그룹은 읽기만 가능

 

🐸파일 구조

로그인 ID:암호(패스워드):최종 변경일:MIN:MAX:WARNING:INACTIVE:EXPIRE:Flag
  • 로그인 ID
  • 암호(패스워드)
    • 일방향 암호화되어 저장
    • 이 항목에 내용이 없으면 암호가 지정되지 않은 계정아며 시스템 계정은 *
  • 최종 변경일
    • 마지막으로 변경한 날짜
    • 이 날짜는 일반적인 연월일 형태로 기록되는 것이 아니라 유닉스의 전통을 따라 1970년 1월 1일을 기준으로 날 수를 기록
  • MIN
    • 암호를 사용할 수 있는 최소 기간
    • 3이면 암호 변경 후 최소한 3일은 그 암호를 그대로 사용해야 함
  • MAX
    • 암호를 사용할 수 있는 최대 기간
    • MAX가 30이면 암호를 30일 동안만 사용할 수 있음
    • 30일이 지나기 전에 암호를 변경해야 하고 이 기간이 지나면 새로운 암호를 입력하게 함
  • WARNING
    • 암호가 만료되기 전에 경고를 시작하는 날 수
    • 7이면 암호가 만료되기 7일 전부터 로그인할 때 경고 메시지가 나타남
  • INACTIVE
    • 암호가 만료된 후에도 이 항목에 지정한 날 수 동안은 로그인이 가능
    • 10이면 암호가 만료된 후에도 10일 동안은 로그인이 가능
    • 이 기간 동안 암호를 변경해야 하며 이 기간이 지나면 계정이 잠겨버리는 데,  이럴 경우 관리자에게 문의해야만 해결할 수 있음
  • EXPIRE
    • 사용자 계정이 만료되는 날
    • 이 날짜가 지나면 해당 계정으로 로그인할 수 없음
    • 1970년 1월 1일을 기준으로 한 날 수
  • Flag: 향후 사용할 목적으로 비워둔 항목

 

✅/etc/login.defs 

  • 사용자 계정의 설정과 관련된 기본값을 정의한 파일

🐸파일 내용

🔻의미
    ▪️항목 → 기본 값


🔻기본 메일 디렉터리
    ▪️MAIL_DIR → /var/mail

🔻패스워드 에이징
    ▪️PASS_MAX_DAYS → 99999
    ▪️PASS_MIN_DAYS → 0
    ▪️PASS_WARN_DAYS → 7

🔻사용자 계정의 UID 범위
    ▪️UID_MIN, UID_MAX → 1000 ~ 60000

🔻시스템 계정의 UID 범위
    ▪️SYS_UID_MIN, SYS_UID_MAX → 100 ~ 999

🔻사용자 계정의 GID 범위
    ▪️GID_MIN, GID_MAX → 1000 ~ 60000

🔻시스템 계정의 GID 범위
    ▪️SYS_GID_MIN, SYS_GID_MAX → 100 ~ 999

🔻홈 디렉터리 생성 여부
    ▪️DEFAULT_HOME → yes

🔻umask 값 설정
    ▪️UMASK → 022

🔻사용자 계정 삭제 시 그룹 삭제 여부
    ▪️USERGROUPS_ENAB → yes

🔻암호화 기법
    ▪️ENCRYPT_METHOD → SHA512

 

✅/etc/group

  • 그룹의 정보를 저장한 파일

🐸파일 구조

그룹 이름:x:GID:그룹 멤버
  • 그룹 이름: 그룹의 이름
  • x
    • 그룹 패스워드
    • 내가 원래 속하지 않은 그룹으로 잠깐 전환할 때 필요한 비밀번호
    • 보안을 위해 별도 파일(/etc/gshadow)에 암호화해서 저장
  • GID
    • 그룹을 식별하는 번호
    • 1000~60000은 사용자 정의 그룹의 GID로 사용
  • 그룹 멤버
    • 그룹에 속한 멤버들의 사용자 계정 이름으로 쉼표를 넣어 사용자를 구분
    • 사용자의 2차 그룹을 나타냄

2. 사용자 계정 생성

✅useradd

🐸기본 형식

useradd [옵션] [로그인 ID]

 

🐸옵션

🔻-u uid: UID를 지정
🔻 -o: UID의 중복을 허용
🔻 -g gid: 기본 그룹의 GID를 지정
🔻 -G gid: 2차 그룹의 GID를 지정
🔻 -d 디렉터리이름: 홈 디렉터리를 지정
🔻 -s 셸: 기본 셸을 지정
🔻 -c 설명: 사용자의 이름 등 부가적인 설명을 지정
🔻 -D: 기본 값을 설정하거나 출력
🔻 -e 유효 기간: EXPIRE 항목을 설정(YYYY-MM-DD).
🔻 -f 비활성 일수: INACTIVE 항목을 설정
🔻 -k 디렉터리: 계정 생성 시 복사할 초기 파일이나 디렉터리를 설정해 놓은 디렉터리를 지정

 

 

🐸옵션 없이 생성

# /etc/passwd 파일에 user2 계정이 추가되는데 홈 디렉토리가 생성되지 않고 기본 셸은 본 셸로 지정됨
sudo useradd user2

# passwd 파일(계정 정보) 확인
tail -1 /etc/passwd
# → user2:x:1001:1001::/home/user2:/bin/sh

# shadow 파일(비밀번호) 확인
sudo tail -1 /etc/shadow
# → user2:!:20357:0:99999:7:::
# 비밀번호를 설정하지 않아서 !으로 보임

# 암호 설정
sudo passwd user2

# 기본 설정 확인
useradd -D

# 파일 내용 확인
cat /etc/default/useradd

 

 

🐸기본값 수정

  • 파일을 직접 수정하는 것보다는 명령으로 수정하는 것을 권장
# EXPIRE 값 수정
sudo useradd -D -e 2025-12-31

 

 

✅/etc/skel 디렉토리

사용자 계정을 생성할 때, 모든 사용자에게 똑같이 제공하고 싶은 파일이 있으면 이 디렉토리에 미리 넣어두어야 함

ls -a /etc/skel

 

🐸옵션을 지정하여 사용자 계정 생성

sudo useradd -s /bin/bash -m -d /home/user3 -u 2000 -g 1000 -G 3 user3

 


3. 사용자 계정 수정

✅usermod

🐸기본 형식

usermod [옵션] [로그인 ID]

 

 

🐸옵션

🔻-u uid: UID를 수정
🔻 -o: UID의 중복을 허용
🔻 -g gid: 기본 그룹을 수정
🔻 -G gid: 2차 그룹을 수정
🔻 -d 디렉터리이름: 홈 디렉터리를 수정
🔻 -s 셸: 기본 셸을 수정
🔻 -c 설명: 사용자의 이름 등 부가적인 설명을 수정
🔻 -f inactive: 계정 비활성화(INACTIVE) 날짜를 수정
🔻 -e expire
: 계정 만료(EXPIRE) 날짜를 수정
🔻 -l
: 계정 이름을 변경

 

🐸user3의 홈 디렉토리 변경

sudo usermod -d /home/user31 user3

 

🐸패스워드 에이징 수

항목 useradd, usermod, passwd 명령 chage 명령
MIN passwd –n 날수 chage -m
MAX passwd –x 날수 chage -M
WARNING passwd –w 날수 chage -W
INACTIVE useradd –f 날수
usermod –f 날수
chage -U
EXPIRE useradd –e 날짜(YYYY-MM-DD)
usermod –e 날짜(YYYY-MM-DD)
chage -E

 

#기본 명령으로 MIN, MAX, WARNING 설정
sudo passwd -n 3 -x 100 -w 5 user3

#chage 명령으로 패스워드 에이징 변경
sudo chage -m 2 -M 200 -W 5 -I 100 -E 2026-12-31 user3

# 확인
sudo grep user3 /etc/shadow

 


 

4. 그룹 생성

✅groupadd

🐸형식

groupadd [옵션] [그룹명]

 

🐸옵션

🔻 -g gid: 그룹의 GID를 지정
🔻 -o: GID의 중복을 허용

 

✅addgroup

🐸형식

addgroup [옵션] [그룹명]

 

🐸옵션

🔻 -gid GID: 그룹의 GID를 지정

 


5. 그룹 정보 수정

✅groupmod

🐸형식

groupmod [옵션] [그룹명]

 

🐸옵션

🔻 -g gid: 그룹의 GID를 수정
🔻 -o
: GID의 중복을 허용
🔻 -n 그룹명
: 그룹명을 다른 이름으로 변경

 


 

6. 그룹 삭제

✅groupdel


 

7. 그룹 암호 설정과 유저 추가

✅gpasswd

🐸형식

gpasswd [옵션] [그룹명]

 

🐸옵션

🔻 -a 사용자 계정: 사용자 계정을 그룹에 추가
🔻 -d 사용자 계정
: 사용자 계정을 그룹에서 삭제
🔻 -r
: 그룹 암호를 삭제

 

🐸실습

# gtest1 그룹 생성
sudo groupadd gtest1

# test1, test2 사용자 생성
sudo useradd test1
sudo useradd test2

# test1을 gtest1 그룹에 추가
sudo gpasswd -a test1 gtest1

# test2를 gtest1 그룹에 추가
sudo gpasswd -a test2 gtest1

# 확인
grep gtest1 /etc/group

 


8. 사용자 정보 관리 명령

✅UID와 EUID

  • UID는 실제 UID로 RUID라고도 함
  • EUID는 현재 명령을 수행하는 주체인 유효 사용자의 UID
  • UID와 EUID가 달라지는 두 가지 경우
    • su 명령을 사용하여 다른 계정으로 전환한 경우
      • 로그인 한 ID가 UID가 되고 계정을 전환한 경우의 EUID는 전환된 계정의 UID
    • setuid가 설정되어 있는 경우

✅사용자 확인 명령

  • 사용자의 로그인 정보 확인 명령: who

🐸형식

who [옵션]

 

🐸옵션

🔻 -q: 사용자명만 출력
🔻-H
: 출력 항목의 제목도 함께 출력
🔻-b
: 마지막으로 재부팅한 날짜와 시간을 출력
🔻-m
: 현재 사용자 계정의 정보를 출력
🔻-r
: 현재 런레벨을 출력

 

🐸 현재 로그인한 제목과 함께 사용자 조회

who -H

# NAME  LINE       TIME            COMMENT
# adam pts/0 2025-09-30 00:14 (192.168.202.181)

 

  • pts/0은 가상 터미널 telnet이나 ssh로 접속했을 때

 

🐸특정 사용자의 로그인 정보 확인 명령: w

w [사용자명]
  • ID를 생략하면 현재 사용자 로그인 정보를 출력

 

🐸last

  • 사용자명과 로그인한 시간, 로그아웃한 시간, 터미널 번호나 IP 주소를 출력

 

🐸UID와 EUID 확인 명령

  • whoami, who am i, id 명령

 

🐸소속 그룹 확인 명령

groups [계정명]

 

 

9. root 권한 사용

✅root 권한을 사용하는 방법

  • su 명령을 사용해서 root 계정으로 전환해서 사용
    • 권장하지 X
    • 일반 사용자가 모든 시스템 관리 권한을 소유하기 때문에 위험
  • sudo 명령으로 제한적인 권한 부여를 해서 사용하는 방법

 

✅sudo 권한 설정

  • 일반 사용자가 sudo 명령으로 root 권한을 실행하려면 특정 권한을 부여받아야 함
  • 권한은 /etc/sudoers 파일에 설정해야 하는데 이 파일은 root 계정으로만 수정할 수 있음
  • /etc/sudoers 파일은 vi도 편집할 수 있지만 visudo 명령을 사용해 수정할 것을 권장
  • visudo 명령은 파일을 수정한 후 문법이 맞는지 확인하고 저장

🐸설정 형식

계정 ALL=명령어절대경로 나열

 

🐸모든 권한 부여

  • 리눅스 설치한 후 만든 계정에서 sudo 명령이 안 되면 이 파일을 수정하면 됩니다.
adam ALL=(ALL) ALL
adam ALL=/usr/sbin/useradd, /usr/sbin/userdel...

 

✅passwd 명령

  • 사용자 계정의 암호를 수정하는 명령
  • 암호를 잠그면 로그인 할 수 없는데 로그인 중에 암호를 잠그게 되면 sudo 명령은 사용할 수 없지만 로그인한 세션에는 영향이 없음

🐸형식

passwd [옵션] [사용자 계정]

 

🐸옵션

🔻 -l 사용자 계정: 지정한 계정의 암호를 잠금
🔻 -u 사용자 계정
: 암호 잠금을 해제
🔻-d 사용자 계정
: 지정한 계정의 암호를 삭제

 

 

10. 파일의 소유자와 소유자 그룹 변경

✅chown

  • 파일과 디렉토리의 소유자 와 소유 그룹을 변경하는 명령

🐸형식

chown [옵션] [사용자 계정] [파일명/디렉터리명]

 

🐸옵션

🔻 -R: 서브 디렉터리의 소유자와 소유 그룹도 변경

 

🐸실습 - 유저 생성 및 비밀번호 변경

sudo adduser user1

#계정 변경 가능
su user1

#계정 잠금
sudo passwd -l user1

#계정이 잠겨서 로그인 되지 않음
sudo passwd -l user1

#로그인 가능
su user1

#디렉터리를 생성한 후 소유권 변경
mkdir linux_ex

cd linux_ex

mkdir usermanagement

cd usermanagement

mkdir temp

cp /etc/hosts .
cp /etc/services temp

#소유자 확인
ls -l

#hosts 파일의 소유자를 user1으로 변경
sudo shown user1 hosts

 

✅chgrp

  • 파일의 소유자 그룹을 변경

🐸형식

chgrp [옵션] [사용자 계정] [파일명/디렉터리명]

 


 

11. 디스크 사용량 설정

✅개요

  • 리눅스에서는 사용자에게 디스크용량을 제한하거나 생성할 수 있는 파일의 개수를 제한하는 명령이 존재
  • 하드 리미트와 소프트 리미트
    • 하드리미트: 사용자가 절대로 넘을 수 없는 최대치를 명시한 값
    • 소프트리미트: 일정 시간 내에는 넘을 수 있는 한계치, 시간이 지나면 소프트 리미트도 하드 리미트 값이 적용

✅패키지 설치: quota

 

  • 디스크 공간 확인 : df -h
  • 사용자 생성: sudo useradd -m -d /home/qtest1 qtest1

✅파티션 확인

sudo fdisk -l

✅쿼터 속성 설정

sudo vi /etc/fstab

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

24444 알고리즘 수업 - 너비 우선 탐색 1