운영체제

[전공 중간고사 정리] 운영체제 – 리눅스 사용자와 그룹

gamjadori 2026. 7. 28. 10:01
728x90

/etc/passwd — 사용자 기본 정보(7개 필드, 콜론으로 구분)
형식: 로그인ID : x : UID : GID : 설명 : 홈디렉터리 : 로그인셸
예시: alice:x:1001:1001:Alice Kim:/home/alice:/bin/bash

필드별 의미
① 로그인ID : 사용자 계정 이름, 최대 32자(실제 8자 권장)
② x : 비밀번호 자리, 실제 암호는 /etc/shadow에 보관
③ UID : 사용자 식별 번호, 0~999는 시스템 예약 / 1000~는 일반 사용자 / 0번=root
④ GID : 기본 그룹 번호, 상세 정보는 /etc/group에 있음
⑤ 설명 : 추가 정보(메모), 이름・연락처 등
⑥ 홈디렉터리 : 개인 폴더 경로, 보통 /home/사용자명
⑦ 로그인셸 : 사용하는 셸 프로그램, /bin/bash, /sbin/nologin 등

/etc/shadow — 비밀번호 보안 정보(9개 필드)
형식: 로그인ID : 암호화된PW : 최종변경일 : MIN : MAX : WARNING : INACTIVE : EXPIRE : Flag
암호 필드 형식: salt$hash값 (앞 숫자 = 해시방식: 1=MD5, 5=SHA-256, 6=SHA-512)

필드별 의미

• MIN : 비밀번호 변경 후 최소 유지 일수, 0 = 즉시 변경 가능
• MAX : 비밀번호 최대 유효 일수, 99999 = 만료 없음
• WARNING : 만료 며칠 전 경고할지, 7 = 7일 전부터 경고 메시지 표시
• INACTIVE : 만료 후 비활성화까지 유예기간, 10 = 10일 후 자동 비활성화
• EXPIRE : 계정 만료 날짜, 예: 2025-12-31

/etc/group — 그룹 정보(4개 필드)
형식: 그룹이름 : x : GID : 그룹멤버(쉼표 구분)
예시: developers:x:1500:alice,bob,carol

• /etc/passwd의 GID → 기본 그룹(Primary Group)
• /etc/group의 멤버 목록 → 2차 그룹(Secondary/Supplementary Group)

/etc/gshadow — 그룹 암호(리눅스 전용, 유닉스에는 없음)
형식: 그룹이름 : 그룹암호 : 관리자 : 그룹멤버

/etc/login.defs — 신규 계정 생성 기본값

• UID_MIN/UID_MAX : 1000~60000, 일반 사용자 UID 범위
• GID_MIN/GID_MAX : 1000~60000, 일반 그룹 GID 범위
• PASS_MAX_DAYS : 99999, 비밀번호 최대 유효기간(일수)
• PASS_MIN_DAYS : 0, 비밀번호 최소 유지 일수
• PASS_WARN_AGE : 7, 만료 전 경고 일수
• ENCRYPT_METHOD : SHA512, 암호화 방식
2. 사용자 관리 명령어

adduser vs useradd — 사용자 생성

• 방식 : adduser는 인터랙티브(대화형) / useradd는 비인터랙티브(옵션 직접 지정)
• 홈디렉터리 : adduser는 자동 생성 / useradd는 -m 옵션 줘야 생성됨
• 비밀번호 : adduser는 생성 중 바로 설정 / useradd는 passwd 명령으로 따로 설정
• 추천 상황 : adduser는 수동으로 계정 만들 때 / useradd는 스크립트・자동화

adduser 사용 예시
adduser alice                                        # 기본 생성(대화형)
adduser –uid 2001 alice                              # UID 직접 지정
adduser –home /home/alice –uid 2001 –gid 2100 alice

useradd 사용 예시
useradd -m -s /bin/bash alice     # -m: 홈 생성, -s: 셸 지정
passwd alice                       # 비밀번호 별도 설정 필수!

passwd — 비밀번호 설정 & 패스워드 에이징
passwd alice                                    # alice 비밀번호 설정/변경
passwd -x 60 -n 3 -w 7 alice

-x 60: MAX(최대 60일) -n 3: MIN(최소 3일) -w 7: WARNING(7일전 경고)

chage — 패스워드 에이징 전담 명령어

• -l : 현재 설정 목록 확인, 예) chage -l alice
• -m : 최소 변경 일수(MIN), 예) chage -m 3 alice
• -M : 최대 유효 일수(MAX), 예) chage -M 60 alice
• -W : 경고 일수(WARNING), 예) chage -W 7 alice
• -I : 유예기간(INACTIVE), 예) chage -I 10 alice
• -E : 계정 만료일(EXPIRE), 예) chage -E 2025-12-31 alice

한 번에 모든 옵션 적용 가능

chage -m 3 -M 60 -W 7 -I 10 -E 2025-12-31 alice

usermod — 기존 사용자 속성 변경
usermod -l newname oldname          # 사용자 이름 변경(홈디렉터리는 자동 변경 안됨!)
usermod -d /home/newhome -m alice   # 홈디렉터리 변경 + 파일 이동(-m)
usermod -g devgroup alice           # 기본 그룹(primary) 변경
usermod -aG docker,git alice        # 보조 그룹 추가(-a 없으면 기존 그룹 삭제됨!)
usermod -s /sbin/nologin ftpuser    # 로그인 차단(셸을 nologin으로)
usermod -u 1111 alice               # UID 변경
usermod -e 2025-12-31 alice         # 계정 만료일 설정

주의: -aG 옵션! -a 없이 -G만 쓰면 기존 보조 그룹이 모두 삭제됨. 반드시 -a 함께 사용!

userdel / deluser — 사용자 삭제

• userdel alice : 계정만 삭제(홈디렉터리 남음)
• userdel -r alice : 홈디렉터리 + 메일 디렉터리까지 함께 삭제
• userdel -f alice : 로그인 중이어도 강제 삭제
• deluser –remove-home alice : 계정 + 홈디렉터리 삭제
• deluser –remove-all-files –group alice : 모든 파일 + 그룹도 삭제
3. 그룹 관리 명령어

참고: 사용자는 기본 그룹(Primary) 1개 + 여러 개의 보조 그룹(Secondary)에 소속 가능

groups                     # 현재 사용자가 속한 그룹 목록 출력
addgroup developers        # 인터랙티브, GID 자동 할당
groupadd -g 1500 developers # GID 직접 지정하여 그룹 생성
groupmod -n devteam developers  # 그룹 이름 변경(developers → devteam)
groupmod -g 1501 devteam   # 그룹 GID 변경
groupdel testers           # 그룹 삭제(기본 그룹인 사용자 없어야 함)

gpasswd — 그룹 암호 및 멤버 관리
gpasswd -a alice devs      # alice를 devs 그룹에 추가
gpasswd -d alice devs      # alice를 devs 그룹에서 제거
gpasswd -A bob devs        # bob을 devs 그룹 관리자로 지정(/etc/gshadow 3번째 필드에 기록)

4. su / sudo — 권한 전환

권장: 일상 작업에는 sudo 명령을 사용하는 것이 가장 안전

명령어별 비교

• sudo 명령 : 권한은 명령 실행 시만 root, 홈 디렉터리는 사용자 홈, PATH는 사용자용, 안전성 최고
• sudo -i : root, /root, root용, 완전한 root 환경
• sudo su : root, /root, 혼합될 수 있음, 간편하지만 혼합
• sudo -s : root, /home/user, 사용자용, 상대적으로 낮음
• su - : root, /root, root용, root 비밀번호 필요

su - root         # 전환(root 비밀번호 필요)
sudo su           # 현재 사용자 비밀번호로 root 전환

/etc/sudoers — sudo 권한 설정 파일
주의: 반드시 “sudo visudo” 명령으로 편집! 잘못 수정하면 sudo가 완전히 불능 상태가 됨

모든 명령 허용

alice ALL=(ALL:ALL) ALL

특정 명령만 허용

bob ALL=(ALL) /sbin/reboot, /usr/bin/apt update

비밀번호 없이 sudo 가능(보안상 주의!)

alice ALL=(ALL) NOPASSWD: ALL

그룹 단위 설정(% 기호 = 그룹)

%sudo ALL=(ALL:ALL) ALL

alice에게 sudo 권한 부여

usermod -aG sudo alice

5. 사용자 정보 확인 명령어

id alice
→ uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo),999(docker)
→ UID, GID, 소속 그룹 한눈에 확인

getent passwd alice
→ alice:x:1001:1001:Alice Kim:/home/alice:/bin/bash
→ 홈디렉터리, 셸 등 상세 확인

chage -l alice   # 패스워드 에이징 설정 전체 확인
who               # 현재 로그인한 사용자(터미널, 접속 시간)
w                 # 로그인 사용자 + 현재 하고 있는 작업, CPU 사용
last              # 로그인 기록(/var/log/wtmp 파일 기반)

whoami vs who am i — 헷갈리는 두 명령어!

• whoami : EUID(유효 사용자) 출력, su로 전환했다면 전환된 사용자 출력(현재 실행 권한)
• who am i : UID(실제 사용자) 출력, 원래 로그인한 사용자 출력(su로 전환해도 변하지 않음)
• id : UID + GID + 그룹 전체, 가장 상세한 정보 출력

참고: tty = 물리적/로컬 터미널(콘솔 직접 접속) / pts = 가상/원격 터미널(SSH, GUI 터미널 앱)

6. 파일 소유권 변경 — chown / chgrp

chown alice file.txt              # 소유자만 alice로 변경
chown alice:devs file.txt         # 소유자를 alice, 그룹을 devs로 동시 변경
chown -R alice:devs /home/project/  # 디렉터리 하위 전체 재귀 변경
chgrp devs file.txt               # 그룹만 devs로 변경(소유자 유지)
chgrp -R devs /home/project/      # 하위 디렉터리 포함 전체 그룹 변경

7. 환경 설정 파일

로그인 셸 vs 비로그인 셸

• 로그인 셸 : 시작 방식은 SSH, TTY, Ctrl+Alt+F3 / 실행 파일은 /etc/profile → ~/.bash_profile → ~/.profile / 주요 목적은 PATH 등 전체 환경 설정
• 비로그인 셸 : 시작 방식은 GUI 터미널 열기, bash 실행 / 실행 파일은 ~/.bashrc만 실행 / 주요 목적은 alias 등 작업 편의 설정

사용자 환경설정 파일(홈 디렉터리의 숨김 파일)

• ~/.profile : 로그인 셸, PATH 추가・환경변수 설정
• ~/.bashrc : 비로그인 셸(터미널 열 때마다), alias・프롬프트 커스텀・환경변수
• ~/.bash_profile : 로그인 셸(RHEL/CentOS 계열), ~/.bashrc를 호출하도록 설정
• ~/.bash_history : 항상, 명령어 기록 저장(기본 1000줄)
• ~/.bash_logout : 로그인 셸 종료 시, 정리 작업・로그 기록

시스템 환경설정 파일(/etc/ 아래, 모든 사용자에게 적용)

• /etc/profile : 모든 사용자 로그인 셸 공통 설정, /etc/profile.d/*.sh도 실행
• /etc/bash.bashrc : 모든 사용자 비로그인 셸 공통 설정
• /etc/environment : 모든 세션의 기본 환경변수 설정
• /etc/profile.d/*.sh : 패키지별 환경 설정 스크립트 모음

~/.bashrc 작성 및 적용 예시

alias 설정(자주 쓰는 명령어 단축)

alias ll=“ls -alF”
alias c=“clear”
alias ..=“cd ..”

환경 변수 설정

export EDITOR=vim
export PATH=”PATH”

프롬프트 커스터마이징

PS1=”\u@\h:\w$ “

\u = 사용자명 \h = 호스트명 \w = 현재 경로 $ = $(일반)/#(root)

수정 후 즉시 적용하는 방법

source ~/.bashrc 또는 . ~/.bashrc

8. 정규표현식(Regular Expression, regex)
• 텍스트에서 패턴을 찾거나 대체하기 위한 도구
• 리눅스의 grep, awk, sed, find, vi 등에서 사용

기호별 의미

• . : 임의의 한 문자, 예) a.c → abc, acc, a7c
• • : 앞 문자 0회 이상 반복, 예) ab* → a, ab, abb, abbb
• • : 앞 문자 1회 이상 반복, 예) ab+ → ab, abb(a 혼자는 안됨)
• ? : 앞 문자 0 or 1회, 예) ab? → a, ab
• [] : 문자 집합 중 하나, 예) [abc] → a, b, 또는 c
• [^] : NOT 문자 집합, 예) [^0-9] → 숫자가 아닌 문자
• {n} : 정확히 n번 반복, 예) [0-9]{4} → 숫자 4자리
• ^ : 문자열 시작, 예) ^root → root로 시작하는 줄
• $ : 문자열 끝, 예) bash$ → bash로 끝나는 줄

bash로 끝나는 로그인 셸을 가진 사용자만 출력

awk -F: ‘/’ /etc/passwd

UID가 정확히 4자리인 사용자만 필터링

awk -F: ‘/’ /etc/passwd

사용자 이름이 a 또는 b로 시작하는 사용자

awk -F: ‘$1 ~ /^[ab]/ { print $1 }’ /etc/passwd

9. 시험 핵심 정리 ⭐

파일 관련 단골 출제

• /etc/passwd : 7개 필드, UID 1000번부터 일반 사용자, 실제 암호는 /etc/shadow에
• /etc/shadow : 암호화된 비밀번호 + 패스워드 에이징 정보(MIN/MAX/WARNING/INACTIVE/EXPIRE)
• /etc/group : 그룹 정보, 여기 멤버 목록이 보조 그룹(2차 그룹)
• /etc/gshadow : 그룹 암호 파일, 유닉스에는 없고 리눅스에만 있음
• shadow 암호 형식 : Salt$Hash값(6=SHA-512가 가장 안전)

사용자 명령어 핵심 비교

• adduser = 인터랙티브(대화형), 홈디렉터리 자동 생성
• useradd = 비인터랙티브, 옵션 지정 필요, -m 옵션으로 홈 생성
• userdel -r = 홈디렉터리까지 함께 삭제
• usermod -aG = 보조 그룹 추가(-a 반드시 필요! 없으면 기존 그룹 삭제)
• passwd -x/-n/-w = MAX/MIN/WARNING 설정
• chage -M/-m/-W/-I/-E = 패스워드 에이징 전담 명령(chage -l로 조회)

권한 전환 관련

• sudo 명령 = 현재 사용자 비밀번호, 명령 실행 시만 권한 부여, 가장 안전
• su - = root 비밀번호 필요, 완전한 root 환경으로 전환
• visudo = sudoers 편집 전용 명령(직접 vi로 열면 위험!)
• whoami = EUID 출력(현재 실행 권한의 사용자)
• who am i = UID 출력(원래 로그인한 사용자, su 전환 후에도 변하지 않음)

환경설정 파일

• 로그인 셸 → ~/.profile, ~/.bash_profile 실행
• 비로그인 셸(터미널 열 때) → ~/.bashrc만 실행
• 변경 후 즉시 적용 → source ~/.bashrc 또는 . ~/.bashrc
• 시스템 전체 설정 → /etc/profile(로그인), /etc/bash.bashrc(비로그인)

정규표현식 자주 나오는 패턴

• ^bash = bash로 시작하는 줄 / bash$ = bash로 끝나는 줄
• [0-9]{4} = 숫자 정확히 4자리 / [a-z]+ = 소문자 1개 이상
• [^abc] = a, b, c가 아닌 모든 문자
• awk -F: = 콜론(:)을 구분자로 /etc/passwd 파싱할 때 자주 사용