📄 2025.11.25 (Day 22) [Linux 시스템 관리: 권한 통제, 쉘 기초 및 Vi]#
1. 핵심 개념 정리 (Concepts & Theory)#
| # | 핵심 개념 | 간결한 설명 | 실무/보안 관점에서의 중요성 |
|---|
| 1 | 사용자 계정 파일 시스템 | 사용자 계정 정보는 /etc/passwd에 기본 정보(UID, GID, 홈 디렉터리, 쉘)가, 암호화된 비밀번호는 /etc/shadow 파일에 안전하게 분리되어 저장됩니다. | 계정 정보의 무결성 및 비밀번호 보호의 핵심입니다. 특히 /etc/shadow의 권한(읽기 전용) 관리는 시스템 보안의 기본입니다. |
| 2 | SetUID / Sticky Bit | **SetUID (8진수 4000)**는 실행 중 파일 소유자 권한으로 동작하게 하며, **Sticky Bit (8진수 1000)**는 디렉터리 내 파일 삭제 권한을 소유자에게만 부여합니다. | SetUID는 /usr/bin/passwd 등 필수 명령에 사용되지만, 공격자에 의한 권한 상승의 주요 통로가 됩니다. Sticky Bit는 /tmp 디렉터리 보호에 필수적입니다. |
| 3 | Umask와 권한 계산 | umask 명령어는 새로 생성될 파일에 **기본적으로 부여하지 않을 권한(마스크)**을 정의합니다. 파일의 기본 권한(666)과 디렉터리의 기본 권한(777)에서 Umask 값을 제외하는 방식으로 최종 권한이 결정됩니다. | 시스템에 **보안 기준(Policy)**을 일괄 적용하며, 기본 권한을 최소화하는 방어적 설정에 사용됩니다. |
| 4 | 쉘 변수와 환경 상속 | 지역 변수는 선언된 쉘 내에서만 유효하며, export 명령어를 통해 설정된 환경 변수는 자식 쉘(Subshell)을 포함하여 자식 프로세스까지 상속됩니다. | PATH와 같은 환경 변수는 명령어 검색 경로를 결정하며, 변수 관리를 통해 사용자의 시스템 접근 환경을 통제합니다. |
2. 실습 코드 & 응용 (Practice & Code Walkthrough)#
(A) 핵심 명령어/함수 실습#
- 계정 관리:
useradd -m testuser, usermod -aG sudo testuser를 통해 계정 생성 및 추가 그룹(sudo) 지정. passwd -l과 passwd -u를 사용하여 계정 잠금/해제 기능 실습. - 권한 제어:
chmod 755 (숫자 모드) 및 chmod u+s file (심볼릭 모드)를 사용하여 파일 권한을 설정. chown과 chgrp를 통해 파일의 소유자 및 그룹을 변경. - 시스템 전환:
su - root를 사용하여 root의 환경 변수를 포함하여 root 계정으로 전환. sudo command는 현재 사용자 비밀번호로 일시적 root 권한을 빌려 명령어 실행. - 쉘 변수:
NAME="Alice"; export NAME 명령을 통해 환경 변수 상속을 확인하고, alias를 사용하여 복잡한 명령어(rm -rf 등)를 간단한 별칭으로 지정.
# SetUID를 활용한 권한 획득 시나리오 구현 (일반 사용자 환경에서 root 권한 획득 위협 재현)
chmod 4755 /bin/ping7
# 특수 권한 및 파일 검색
find /usr/bin -user root -perm /4000 -ls 2>/dev/null
# Strict umask 적용 후 파일 생성 확인
umask 027
(B) 실습 결과 및 분석#
- 특수 권한 실증: SetUID가 설정된
ping7 실행 파일을 통해 일반 사용자가 일시적으로 root 권한을 획득하는 과정을 직접 확인하며, 이 권한이 악용될 경우의 심각성을 체감. - 권한과 파일 I/O: 파일에 대한 쓰기(w) 권한은
vi 에디터에서 save를 하거나 touch 명령어로 수정 시간을 변경하는 행위와 직결됨을 실습을 통해 명확히 이해했습니다. - 디렉터리 접근: 디렉터리에서 실행(x) 권한이 없으면
cd 명령어가 거부되어 해당 디렉터리 자체에 접근할 수 없음을 확인했습니다. - Subshell 상속: 지역 변수(
A=10)는 자식 쉘(bash)에서 출력되지 않지만, export된 환경 변수(export B=20)는 자식 쉘에서도 정상적으로 호출됨을 확인했습니다.
3. 실무/보안 관점 분석 (Insight & Scenario Mapping)#
| 분야 | 적용 시나리오 |
|---|
| SOC / 관제 | find / -perm /4000 명령어를 정기적으로 스크립트화하여 비정상적으로 생성된 SetUID 파일을 탐지하는 모니터링 로직을 구축. 또한 /var/log/auth.log를 모니터링하여 sudo 명령어 실행 기록 및 로그인 실패 횟수를 추적하여 무차별 대입 공격을 감지. |
| CERT / 사고 대응 | 시스템 침입 사고 시, debsums나 dpkg -V 명령을 사용하여 /bin/ls, /bin/cat 등 핵심 시스템 바이너리의 무결성을 검사. 공격자가 SetUID를 이용해 권한을 상승시켰을 가능성에 대비하여 해당 파일 목록을 우선적으로 분석합니다. |
| 시스템 운영 | /etc/sudoers 파일을 visudo로 편집하여 문법 오류를 방지하고, umask 값을 027 등으로 설정하여 모든 사용자가 생성하는 파일의 기본 권한을 읽기 전용 또는 소유자 전용으로 제한하는 정책을 적용하여 시스템의 기본 보안 수준을 강화합니다. |
4. 개인 인사이트 및 다음 단계 (Reflection & Next Steps)#
- 배운 점/느낀 점: 이번 학습을 통해 리눅스에서 보안은 곧 접근 통제라는 점을 깊이 이해했습니다. 특히 SetUID가 일반 사용자에게 필요한 기능을 제공하면서도 최대 보안 위협이 될 수 있다는 양면성을 확인했습니다. Shell 변수를 자유자재로 다루는 능력은 시스템 관리와 스크립트 작성 효율을 좌우하는 핵심 역량임을 깨달았습니다.
- 심화 방향: 다음 단계에서는 오늘 다루지 못한 표준 입출력(
0, 1, 2), 리다이렉션(>, 2>&1), 파이프(|) 기능을 집중적으로 학습할 계획입니다. 이들을 결합하여 대용량 로그 파일에서 원하는 정보를 추출하고 시스템 상태를 모니터링하는 고급 쉘 스크립팅 능력을 완성하는 데 집중할 것입니다.