리눅스 시스템에서 사용자와 그룹 관리는 시스템 보안과 자원 관리의 핵심입니다.
멀티유저 운영체제인 리눅스는 여러 사용자가 동시에 시스템을 사용할 수 있도록 설계되어 있으며, 각 사용자에게 적절한 권한과 자원을 할당하는 것이 시스템 관리자의 중요한 업무입니다!
이번 포스팅에서는 사용자 계정 생성부터 권한 관리, 그룹 관리, 그리고 실무에서 자주 사용되는 명령어들을 체계적으로 다룰 예정입니. /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에 저장
- 설명: 적고 싶은 말
- 홈 디렉터리: 사용자 계정에 할당된 홈 디렉터리의 절대 경로를 기록
- 로그인 셸: 사용자의 로그인 셸
- 로그인 ID
✅/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가 설정되어 있는 경우
- su 명령을 사용하여 다른 계정으로 전환한 경우
✅사용자 확인 명령
- 사용자의 로그인 정보 확인 명령: 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
'현대오토에버 모빌리티 sw 스쿨 3기 [클라우드] > LINUX' 카테고리의 다른 글
| 리눅스/우분투 네트워크 설정 가이드 - IP, nmcli, netplan (2) | 2026.01.14 |
|---|