본문 바로가기
Linux

리눅스 과정 10일차

by Mostlove 2025. 2. 28.
728x90
반응형

📌 Linux 사용자 관리 파일 요약 (/etc/passwd, /etc/shadow, /etc/group)

1. /etc/passwd (사용자 정보)

  • 사용자 ID, 홈 디렉터리, 기본 쉘 등 기본적인 사용자 정보를 저장하는 파일
  • 구조: 사용자명:x:UID:GID:사용자 설명:홈 디렉터리:기본 쉘
    • 예: centos:x:500:500::/home/centos:/bin/bash
  • x: 패스워드는 /etc/shadow 파일에서 관리됨 (보안 목적)

🔹 중요 사항

설정 의미
x /etc/shadow에서 패스워드 관리
* 패스워드 없음 → 로그인 불가
/sbin/nologin or /bin/false 로그인 불가 (FTP, 시스템 계정 등에 사용)
빈칸(공백) 패스워드 없이 로그인 가능 → 보안상 위험!

2. /etc/shadow (암호화된 패스워드 관리)

  • /etc/passwd에 x로 표시된 패스워드를 해시화하여 보관하는 파일
  • 구조: 사용자명:암호화된 패스워드:패스워드 변경 정보 등
    • 예: centos:$6$XQLzic8C$5CQ9OMD/uBf.1HCouZQAa1:14281:0:99999:7:::

🔹 필드 설명

필드 내용
$6$ 암호화 방식 (SHA512) ($1$ = MD5, $5$ = SHA256)
!! 로그인 불가 (비활성화된 계정)
* 패스워드 없음
salt 해시를 강화하기 위한 추가 보안 문자열
14281 마지막 패스워드 변경 날짜 (1970-01-01 이후 경과 일수)
0 패스워드 변경 제한 (0이면 제한 없음)
99999 패스워드 유효기간 (99999일 = 무제한)
7 패스워드 만료 7일 전 경고
:: 계정 잠금 관련 필드 (비워두면 기본 설정 유지)

3. /etc/group (그룹 정보)

  • 사용자가 속한 그룹 정보를 저장하는 파일
  • 구조: 그룹명:패스워드(대부분 x):GID:그룹에 속한 사용자 목록
    • 예: wheel:x:10:centos,admin
  • 특정 사용자의 그룹 확인
    groups centos

    사용자를 그룹에 추가하는 법

    sudo usermod -aG 추가할_그룹 사용자이름

    ✅ 예제 (centos 사용자를 docker 그룹에 추가)

    sudo usermod -aG docker centos

🔎 정리

  1. /etc/passwd: 사용자 계정 정보 (x는 패스워드가 /etc/shadow에 저장됨)
  2. /etc/shadow: 암호화된 패스워드 및 보안 설정 관리 (!!가 있으면 로그인 불가)
  3. /etc/group: 사용자 그룹 관리

⚠ 보안 주의사항

  • /etc/passwd에서 x 대신 공백이면 패스워드 없이 로그인 가능 → 보안상 매우 위험!
  • /etc/shadow에서 **!!**이면 로그인 불가
  • /etc/passwd에서 기본 쉘을 /sbin/nologin 또는 /bin/false로 변경하면 로그인 차단 가능

✅ 보안 설정 추천

  1. 패스워드 없는 계정 확인
    sudo awk -F: '($2 == "") {print $1}' /etc/shadow
  2. root 계정 원격 로그인 차단
    sudo nano /etc/ssh/sshd_config # 아래 설정 변경 PermitRootLogin no
    sudo systemctl restart sshd
  3. 만료된 계정 확인
    sudo chage -l centos
  4. 패스워드 변경
    sudo passwd centos
     

📌 pwunconv란?

pwunconv 명령어는 암호화된 패스워드를 /etc/shadow에서 /etc/passwd로 되돌리는 명령어입니다.
즉, Shadow Password 시스템을 비활성화(해제) 하는 역할을 합니다.

✅ /etc/shadow에 저장된 암호화된 비밀번호를 /etc/passwd 파일로 다시 이동
보안상 위험! (/etc/passwd는 누구나 읽을 수 있기 때문)
✅ 일반적으로 사용하지 않는 것이 좋음

📌 해시와 크랙, 무결성 개념 요약

해시(Hash)란?

  • 평문(원본 텍스트)을 일방향 함수를 통해 고정된 길이의 값으로 변환하는 것
  • 해시된 값(해시 출력)은 절대로 원본으로 복구할 수 없음
  • 같은 해시 알고리즘을 사용해도, 다른 평문이 같은 해시 값을 가질 수도 있음 (해시 충돌)

해시 크랙(Crack)이란?

  • 다양한 평문을 미리 해시한 후, 특정 해시값과 비교하여 일치하는 평문을 찾는 과정
  • 해시를 크랙하는 방법:
    1. Brute Force (무차별 대입 공격) → 가능한 모든 조합을 시도
    2. Dictionary Attack (사전 공격) → 흔한 비밀번호 리스트를 활용
    3. Rainbow Table (레인보우 테이블) → 해시 값을 미리 계산하여 저장한 데이터베이스

레인보우 테이블(Rainbow Table)이란?

  • 여러 개의 해시 값을 체인(chain) 구조로 묶어 저장한 것
  • 미리 계산된 해시 값을 빠르게 검색하여 특정 해시 값과 매칭되는 평문을 찾음
  • **솔트(Salt)**가 적용된 해시는 레인보우 테이블 공격이 효과 없음

해시(Hash) vs 암호화(Encryption)

개념  설명
해시(Hash) 원본 데이터의 무결성(Integrity) 보장 (검증용)
암호화(Encryption) 원본 데이터를 숨기는 것 (복호화 가능)

📌 Linux 사용자 및 시스템 관리 요약

1. 시스템 부팅 관련 파일

파일 역할
/etc/rc.local 시스템 부팅 직전 실행할 스크립트 설정
/etc/fstab 부팅 시 자동 마운트할 저장장치 설정
/etc/grub(2).conf 부팅 설정 및 커널 선택 관련 설정
/etc/inittab 시스템 런레벨(runlevel) 설정

2. 사용자 생성 및 속성 관리

 

파일  역할
/etc/default/useradd 사용자 생성 시 기본 속성 (홈 디렉터리, 기본 쉘 등) 설정
/etc/skel/ 새 사용자의 홈 디렉터리에 복사될 기본 파일 설정
/etc/login.defs 패스워드 관련 정책 설정

사용자 정보 확인 파일

파일 역할
/etc/passwd 사용자 계정 정보 (UID, GID, 홈 디렉터리, 기본 쉘 등)
/etc/shadow 사용자 패스워드 정보 (암호화된 패스워드, 패스워드 만료 설정 등)
/etc/group 그룹 정보 (그룹명, GID, 속한 사용자 목록)

3. 패스워드 관리 명령어

명령어 설명
passwd 사용자 특정 사용자의 패스워드 변경
passwd -l 사용자 사용자의 패스워드를 잠금 (로그인 불가)
passwd -u 사용자 사용자의 패스워드 잠금 해제
chpasswd 여러 사용자의 패스워드를 일괄 변경
chage -M 15 -E 2025-02-29 사용자 15일마다 패스워드 변경, 2025년 2월 29일 만료
pwunconv /etc/shadow에 저장된 패스워드를 /etc/passwd로 이동 (보안 취약!)

로그인 제한 방법

 

방법 설명
/etc/passwd에서 /bin/bash → /bin/false 또는 /sbin/nologin 변경 로그인 불가
/etc/passwd에서 x → * 변경 로그인 불가
/etc/shadow에서 해시된 패스워드를 !!로 변경 로그인 불가

4. 사용자 관리 명령어

명령어 설명
useradd 사용자 새 사용자 추가
userdel 사용자 사용자 삭제
userdel -r 사용자 사용자와 홈 디렉터리 삭제
usermod -aG 그룹 사용자 사용자를 특정 그룹에 추가
usermod -g 그룹 사용자 사용자의 기본 그룹 변경
usermod -d 새_홈디렉터리 -m 사용자 사용자의 홈 디렉터리 변경 및 기존 데이터 이동
usermod -s /bin/bash 사용자 사용자의 기본 쉘 변경

5. 사용자 전환 (su, sudo)

사용자 전환 명령어

명령어 설정
su - 사용자 해당 사용자로 완전히 전환 (패스워드 입력 필요)
su -c '명령어' root 권한으로 단일 명령어 실행 (root 패스워드 필요)
sudo 명령어 root 권한으로 일시적으로 실행 (사용자 패스워드 입력)
sudo su root 계정으로 전환 (Ubuntu에서 기본적으로 사용)

sudo 설정

  • /etc/sudoers 파일에서 특정 사용자에게 sudo 권한 부여
  • %wheel (CentOS) 또는 %sudo (Ubuntu) 그룹에 사용자를 추가하면 sudo 사용 가능

Ubuntu에서 su root가 기본적으로 안 되는 이유

  • Ubuntu는 설치 시 root 패스워드를 설정하지 않음
  • sudo su를 사용해야 root로 전환 가능
  • passwd root 명령으로 root 패스워드를 설정하면 su root 사용 가능

6. 사용자 권한 및 접근 제어

일반 사용자의 제한 사항

  • 다른 사용자의 홈 디렉터리에 접근할 수 없음
  • root는 모든 사용자의 홈 디렉터리에 접근 가능

sudo 사용자는 어떻게 동작하는가?

  • sudo를 처음 실행할 때 사용자 패스워드를 입력
  • 이후 5분 동안 추가 패스워드 입력 없이 sudo 사용 가능

📌 PAM(Pluggable Authentication Module) 

1. PAM이란?

PAM (Pluggable Authentication Module)

  • Linux에서 인증(Authentication) 시스템을 모듈화하여 관리하는 프레임워크
  • /etc/pam.d/ 디렉터리에 존재하는 각 서비스별 설정 파일을 통해 인증을 관리

PAM의 장점

  1. 중앙 집중식 인증 관리 → 개별 서비스(예: SSH, Cron 등)의 설정보다 PAM이 우선 적용
  2. 보안 강화 → 시스템 전체에 일관된 인증 정책 적용 가능
  3. 설정 오류 감소 → 모든 인증을 /etc/pam.d/에서 관리하여 설정 실수를 줄일 수 있음

2. PAM 설정 파일 구조 (/etc/pam.d/)

ls /etc/pam.d/

🔹 출력 예시

atd crond cups login passwd setup smtp sshd su sudo ...

각 서비스별 PAM 설정 파일 예시

  • /etc/pam.d/sshd → SSH 로그인 인증 관리
  • /etc/pam.d/su → su 명령어 실행 시 인증 설정
  • /etc/pam.d/sudo → sudo 사용 시 인증 방식 설정
  • /etc/pam.d/passwd → passwd 명령어 실행 시 패스워드 정책 관리

3. PAM의 적용 방식

PAM을 사용하면 개별 서비스 설정 파일(예: /etc/ssh/sshd_config, /etc/crontab)에서 직접 인증 설정을 하지 않아도 PAM 설정이 시스템 전체에 우선 적용됨.

예제: SSH 인증 설정 (/etc/pam.d/sshd)

auth required pam_unix.so auth required pam_tally2.so deny=3 unlock_time=300

🔹 의미

  1. pam_unix.so → 기본 Linux 패스워드 인증 사용
  2. pam_tally2.so → 로그인 실패 3회 시 계정 잠금, 5분 후 해제

📌 즉, PAM에서 SSH 인증을 설정하면 /etc/ssh/sshd_config의 인증 정책보다 우선 적용됨!


🔎 결론

  • PAM(Pluggable Authentication Module) → Linux의 인증 시스템을 중앙에서 통합 관리
  • /etc/pam.d/ 디렉터리에 각 서비스별 인증 설정 파일 존재
  • 개별 서비스 설정보다 PAM 설정이 우선 적용되므로 보안 강화 및 설정 효율 증가
  • 예를 들어 SSH의 인증 정책을 /etc/ssh/sshd_config보다 /etc/pam.d/sshd에서 우선 관리

즉, PAM을 사용하면 시스템 전체의 인증 정책을 중앙에서 관리할 수 있어 보안이 강화됨!

📌 사용자와 그룹 관리 명령어 

1. 주요 명령어 정리

명령어 설정
finger 현재 로그인한 사용자 정보 확인
id [사용자명] 사용자 UID, GID, 그룹 정보 조회
groups [사용자명] 사용자가 속한 그룹 목록 확인
getent /etc/nsswitch.conf에 정의된 데이터베이스에서 사용자, 그룹 등의 정보 조회

2. 명령어별 상세 설명

🔹 finger (로그인 사용자 정보 확인)

  • 현재 로그인한 사용자 정보(이름, 로그인 시간, 터미널 정보 등)를 출력
  • 예제: 
     
    Login Name Tty Idle Login Time Office user1 User One pts/0 00:10 Feb 28 10:15
  •  
    finger
  • 특정 사용자의 정보를 보고 싶다면:
     
    finger user1

📌 추가 사항:

  • finger 명령어가 없으면 패키지를 설치해야 함:
     
    sudo apt install finger # Ubuntu/Debian sudo yum install finger # CentOS/RHEL

🔹 id (사용자의 UID, GID, 그룹 정보 조회)

  • 특정 사용자의 UID(User ID), GID(Group ID), 그룹 정보를 확인하는 명령어
  • 예제:
     
    id user1
     
    uid=1001(user1) gid=1001(user1) groups=1001(user1),27(sudo),1002(docker)
  • 출력 설명:
    • uid=1001(user1) → user1의 UID는 1001
    • gid=1001(user1) → user1의 기본 그룹 GID는 1001
    • groups=1001(user1),27(sudo),1002(docker) → user1이 속한 그룹 목록

🔹 groups (사용자가 속한 그룹 확인)

  • 현재 사용자가 속한 그룹 확인:
     
    groups
     
    user1 sudo docker
  • 특정 사용자의 그룹 확인:
     
    groups user1
     
    user1 : user1 sudo docker

🔹 getent (엔트리 정보 조회)

  • Linux 시스템에서 사용자, 그룹, 호스트 등의 정보를 /etc/nsswitch.conf 설정에 따라 조회하는 명령어
  • 예제:
     
    user1:x:1001:1001::/home/user1:/bin/bash
    → /etc/passwd 파일에서 user1의 정보를 조회
     
    getent passwd user1
  • 모든 사용자 목록 조회 (/etc/passwd 파일 기반)
     
    getent passwd
  • 특정 그룹 정보 조회 (/etc/group 파일 기반)
     
    sudo:x:27:user1,user2
     
    getent group sudo

📌 추가 사항:

  • getent는 /etc/nsswitch.conf 설정에 따라 로컬 파일뿐만 아니라 네트워크 인증 시스템(NIS, LDAP 등)에서도 정보를 조회할 수 있음.
  • /etc/passwd는 로컬 사용자 계정 관리,
    도메인 환경에서는 NIS(Network Information Service) 같은 시스템이 중앙에서 사용자 인증을 관리할 수 있음.

3. GUI를 통한 사용자 및 그룹 관리

GNOME 환경에서는 GUI를 사용하여 사용자 및 그룹을 쉽게 관리 가능

  • gnome-control-center users 실행 (GNOME Desktop 환경)
  • system-config-users 패키지를 설치하면 GUI 기반 사용자 관리 가능 (CentOS)
  • Ubuntu에서는 "설정(Settings) → 사용자(Users)" 에서 관리 가능

🔎 결론

  1. finger, id, groups, getent → 사용자 및 그룹 정보 조회 명령어
  2. getent는 /etc/nsswitch.conf를 기반으로 로컬 + 네트워크 인증 정보 조회 가능
  3. /etc/passwd는 로컬 계정 정보 저장, NIS(Network Information Service)는 네트워크 계정 관리
  4. GUI 환경에서도 사용자 및 그룹 관리 가능 (gnome-control-center users)

즉, getent는 로컬뿐만 아니라 네트워크 인증 서비스에서도 사용자 정보를 조회할 수 있어 더욱 강력한 명령어! 

📌 프로세스 관리 및 우선순위 설정 명령어 

1. 프로세스 확인 명령어

명령어 설명
ps 현재 실행 중인 프로세스 목록 출력 (ps aux 또는 ps -ef 사용)
pstree 프로세스 간 종속 관계를 트리 구조로 출력 (pstree -p → PID 포함)
top CPU, RAM, Swap 사용량을 실시간으로 모니터링 (top -d 5 → 5초마다 갱신)
pmap 특정 PID의 메모리 사용 정보를 출력 (pmap <PID>)
fuser 특정 파일/포트를 사용 중인 프로세스 확인 (fuser -v /path/to/file)

🔹 ps (프로세스 목록 확인)

  • 기본 사용법:
     
    ps aux # BSD 스타일 ps -ef # UNIX 스타일
    실행 중인 모든 프로세스를 사용자, CPU 점유율, 메모리 사용량 등과 함께 출력

🔹 pstree (프로세스 트리 구조 출력)

  • 부모-자식 관계를 한눈에 확인 가능
  • 예제:
     
    pstree -p
     
    systemd(1)─┬─sshd(789)───bash(1024)───top(1056) ├─cron(900) ├─cupsd(850)
    → -p 옵션을 사용하면 각 프로세스의 PID도 출력

🔹 top (실시간 프로세스 모니터링)

  • 실행 후 기본 단축키:
    • Space → 화면 갱신
    • k → 특정 프로세스 종료 (PID 입력 후 엔터)
    • i → Idle 및 좀비 프로세스 숨기기
    • d → 갱신 주기 변경 (기본값: 3초)
  • 특정 프로세스 종료:⚠ 주의:
    • Xorg 같은 그래픽 프로세스를 종료하면 GUI가 멈출 수 있음!
  • k 1234 # PID 1234 프로세스 종료

2. 프로세스 종료 및 제어 명령어

명령어 설명
kill <PID> 특정 PID를 종료
killall <프로세스명> 특정 프로세스명을 가진 모든 프로세스 종료
pkill <프로세스명> killall과 유사하지만, 패턴 매칭 가능
skill <옵션> <프로세스명> 명령어 기반으로 프로세스를 제어 (예: skill -STOP firefox)

kill 옵션 (시그널)

옵션 설명
-1 (SIGHUP) 프로세스 재실행 (설정 파일 다시 로드)
-9 (SIGKILL) 즉시 종료 (강제 종료)
-15 (SIGTERM) 정상 종료 (기본값)
-19 (SIGSTOP) 프로세스 일시 정지
-CONT 일시 정지된 프로세스 다시 실행

🔹 예제

kill -9 1234 # PID 1234 프로세스를 강제 종료 killall -15 firefox # 모든 firefox 프로세스를 정상 종료 pkill apache # apache 관련 모든 프로세스 종료 skill -STOP 5678 # PID 5678 프로세스를 일시 정지

3. 프로세스 우선순위 설정 (nice & renice)

명령어 설명
nice 새로운 프로세스를 특정 우선순위로 실행
renice 실행 중인 프로세스의 우선순위 변경

우선순위 값 (-20 = 최고, 19 = 최저, 기본값 10)

  • 높은 우선순위 (-n -10) → CPU 점유율 증가
  • 낮은 우선순위 (-n 15) → CPU 사용량 제한

🔹 새로운 프로세스를 우선순위 -15로 실행

nice -n -15 tar xvfz linux-4.2.tar.gz

🔹 실행 중인 프로세스(PID 1234)의 우선순위 변경

renice -10 -p 1234

🔹 특정 사용자(user1)의 모든 프로세스 우선순위 변경

renice +5 -u user1

📌 추가 설정:

  • /etc/security/limits.conf 파일에서 nice 값을 조정 가능
  • 일반 사용자는 기본값보다 낮은 우선순위(높은 성능)로 변경 불가 (root만 가능)

🔎 결론

  1. 프로세스 확인
    • ps aux → 현재 실행 중인 프로세스 조회
    • pstree -p → 트리 형태로 부모-자식 관계 확인
    • top → 실시간 프로세스 모니터링 (k로 종료 가능)
  2. 프로세스 종료
    • kill <PID> → 특정 프로세스 종료
    • killall <프로세스명> / pkill <프로세스명> → 특정 프로세스명으로 전체 종료
    • skill -STOP <PID> → 프로세스 일시 정지
  3. 프로세스 우선순위 조정
    • nice -n -15 명령어 → 높은 우선순위로 실행
    • renice -10 -p <PID> → 실행 중인 프로세스 우선순위 변경

즉, top과 kill을 조합하면 실시간으로 CPU 사용량을 확인하고 문제 프로세스를 쉽게 종료할 수 있음! 

📌 메모리 관리 & 백그라운드 작업 명령어

1. 메모리 관리 명령어 (free, sync)

메모리는 시스템에서 중요한 요소이지만, 오래 사용하면 캐시 메모리가 불필요하게 쌓여 성능 저하 가능

  • free → 메모리 사용량 확인
  • sync → 메모리 버퍼 데이터를 디스크에 저장

🔹 free (메모리 사용량 확인)

free -h

🔹 출력 예시:

total used free shared buff/cache available Mem: 16Gi 5Gi 3Gi 1Gi 8Gi 9Gi Swap: 2Gi 1Gi 1Gi
  • total → 총 메모리
  • used → 사용 중인 메모리
  • free → 사용 가능한 메모리
  • buff/cache → 캐시된 메모리 (사용 가능하지만 현재 캐시로 잡혀 있음)

📌 캐시 메모리 정리 (메모리 확보)

sudo sync; sudo echo 3 > /proc/sys/vm/drop_caches

⚠ 주의: 캐시 정리는 자주 하지 않는 것이 좋음! (시스템 성능 저하 가능)


🔹 sync (메모리 버퍼 데이터를 디스크에 저장)

  • 디스크에 쓰이지 않은 데이터를 강제로 저장
  • 파일 시스템 충돌 방지, 데이터 손실 예방
  • 사용법:
     
    sync

sync + drop_caches 조합 사용 (캐시 메모리 정리)

sync; echo 3 | sudo tee /proc/sys/vm/drop_caches

디스크에 저장되지 않은 데이터를 먼저 sync로 저장하고, 캐시를 정리하여 메모리 확보


2. 백그라운드 작업 & 프로세스 제어 명령어

백그라운드에서 실행하면 터미널이 닫혀도 작업이 계속 실행됨

  • & → 백그라운드 실행
  • jobs → 현재 백그라운드 작업 확인
  • fg %job_id → 백그라운드 작업을 다시 포그라운드로 이동
  • bg %job_id → 백그라운드에서 멈춘 작업을 다시 실행
  • disown → 백그라운드 작업을 쉘에서 분리 (터미널 종료해도 작업 유지)

🔹 백그라운드 실행 (&)

tar -cvf backup.tar /home/user &

tar 명령어를 백그라운드에서 실행 (터미널을 닫아도 실행 유지)


🔹 현재 백그라운드 작업 확인 (jobs)

jobs

🔹 출력 예시:

[1]+ Running tar -cvf backup.tar /home/user & [2]- Stopped vim file.txt

➡ [1]+ → 현재 실행 중인 첫 번째 백그라운드 작업
➡ [2]- → 두 번째 작업이 Stopped(일시 정지) 상태

📌 옵션

  • jobs -p → 백그라운드 작업의 PID만 출력
  • jobs -r → 실행 중인 작업만 출력
  • jobs -s → 일시 정지된 작업만 출력

🔹 백그라운드 작업 재개 (bg)

  • 일시 정지된 작업을 다시 백그라운드에서 실행
 
bg %2

➡ [2]번 작업(정지된 vim file.txt)을 다시 실행


🔹 포그라운드로 이동 (fg)

  • 특정 백그라운드 작업을 다시 포그라운드로 실행
 
fg %1

➡ [1]번 작업을 포그라운드로 이동


🔹 터미널 종료 후에도 작업 유지 (disown)

disown -h %1

➡ [1]번 작업을 쉘과 분리하여 터미널이 닫혀도 실행 유지


🔎 결론

  1. 메모리 관리
    • free -h → 메모리 사용량 확인
    • sync → 메모리 버퍼 데이터를 디스크에 저장
    • sync; echo 3 > /proc/sys/vm/drop_caches → 캐시 메모리 정리 (주의해서 사용!)
  2. 백그라운드 작업 제어
    • 명령어 & → 백그라운드 실행
    • jobs → 백그라운드 작업 확인
    • fg %번호 → 백그라운드 작업을 포그라운드로 이동
    • bg %번호 → 정지된 작업을 다시 실행
    • disown -h %번호 → 작업을 쉘에서 분리 (터미널 종료해도 유지)

즉, sync는 데이터 보호를 위한 필수 명령어, disown을 활용하면 터미널 종료 후에도 작업이 유지됨! 

📌 시스템 사용자 정보 확인 명령어

1. 주요 명령어 정리

명령어  설명
who 현재 로그인한 사용자 정보 조회
w 로그인한 사용자 + 실행 중인 프로세스 확인
users 현재 로그인한 사용자 목록 출력
whoami 현재 사용자의 계정명 출력
last 로그인 성공 기록 (/var/log/wtmp 사용)
lastb 로그인 실패 기록 (/var/log/btmp 사용)

로그인 기록 관련 파일

파일  설명
/var/log/wtmp 로그인 성공 기록 저장 (last 명령어 사용)
/var/log/btmp 로그인 실패 기록 저장 (lastb 명령어 사용)
/var/run/utmp 현재 로그인 사용자 정보 (who, w, users, finger 사용)

2. 명령어별 상세 설명

🔹 who (현재 로그인한 사용자 정보 확인)

who

🔹 출력 예시:

user1 pts/0 2025-02-28 10:30 (192.168.1.100) user2 pts/1 2025-02-28 11:15 (192.168.1.101)
  • user1, user2 → 현재 로그인한 사용자
  • pts/0, pts/1 → 터미널 유형 (GUI 에뮬레이터 터미널)
  • (192.168.1.100) → 원격 접속한 IP 주소

추가 옵션

who -a # 시스템 전체 로그인 정보 표시

🔹 w (로그인 사용자 + 실행 중인 프로세스 확인)

w

🔹 출력 예시:

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT user1 pts/0 192.168.1.100 10:30 1:20 0.05s 0.01s bash user2 pts/1 192.168.1.101 11:15 0:00 0.02s 0.02s sshd
  • IDLE → 사용자가 입력 없이 대기한 시간
  • JCPU → 해당 터미널에서 실행된 전체 CPU 사용 시간
  • PCPU → 현재 실행 중인 프로세스의 CPU 사용 시간
  • WHAT → 실행 중인 명령어

🔹 users (현재 로그인한 사용자 목록 확인)

users

🔹 출력 예시:

user1 user2

현재 로그인한 사용자만 간단하게 표시


🔹 whoami (현재 로그인한 사용자 확인)

whoami

🔹 출력 예시:

user1

현재 로그인한 사용자의 계정명 출력

root 권한 확인

whoami
id -u

➡ 출력이 0이면 root 계정


🔹 last (로그인 성공 기록 확인)

last

🔹 출력 예시:

user1 pts/0 192.168.1.100 Tue Feb 28 10:30 still logged in user2 pts/1 192.168.1.101 Mon Feb 27 14:15 - 15:00 (00:45) reboot system boot 6.1.0-17-amd64 Tue Feb 28 09:00 still running
  • user1, user2 → 로그인한 사용자
  • 192.168.1.100 → 로그인한 IP 주소
  • still logged in → 현재 로그인 중
  • reboot → 시스템 재부팅 기록

마지막 10개의 로그인 기록만 출력

last -n 10

특정 사용자(user1)의 로그인 기록 확인

last user1

🔹 lastb (로그인 실패 기록 확인)

sudo lastb

🔹 출력 예시:

root tty1 Mon Feb 26 09:15 - 09:16 (00:01) user1 ssh:notty 192.168.1.102 Sun Feb 25 20:30 - 20:31 (00:01)
  • ssh:notty → 원격 로그인 실패
  • 192.168.1.102 → 로그인 실패를 시도한 IP 주소

로그인 실패 기록 삭제

sudo truncate -s 0 /var/log/btmp

3. 로그인 기록 관련 파일 (wtmp, btmp, utmp)

파일 설명
/var/log/wtmp 로그인 성공 기록 저장 (last 사용)
/var/log/btmp 로그인 실패 기록 저장 (lastb 사용)
/var/run/utmp 현재 로그인 사용자 정보 저장 (who, w, users, finger 사용)

로그 파일을 직접 읽을 경우 깨져 보일 수 있음 → strings 사용

strings /var/log/wtmp | less # 로그인 기록 확인 strings /var/log/btmp | less # 로그인 실패 기록 확인

로그 파일 초기화 (보안 목적)

sudo truncate -s 0 /var/log/wtmp # 로그인 기록 삭제 sudo truncate -s 0 /var/log/btmp # 로그인 실패 기록 삭제

🔎 결론

  1. 현재 로그인한 사용자 확인
    • who → 로그인한 사용자 확인
    • w → 로그인 사용자 + 실행 중인 프로세스 확인
    • users → 로그인 사용자 목록 출력
    • whoami → 현재 사용자의 계정명 출력
  2. 로그인 기록 조회
    • last → 로그인 성공 기록 (/var/log/wtmp)
    • lastb → 로그인 실패 기록 (/var/log/btmp)
  3. 로그 기록 관련 파일
    • /var/log/wtmp → 로그인 성공 기록 저장
    • /var/log/btmp → 로그인 실패 기록 저장
    • /var/run/utmp → 현재 로그인 사용자 정보 저장

즉, last와 lastb를 활용하면 로그인 시도 및 보안 위험을 쉽게 파악할 수 있음! 🚀

반응형

'Linux' 카테고리의 다른 글

리눅스 과정 12일차  (1) 2025.03.05
리눅스 과정 11일차  (1) 2025.03.04
리눅스 과정 8일차  (0) 2025.02.27
리눅스 과정 7일차  (0) 2025.02.26
리눅스 과정6일차  (0) 2025.02.26