📄 2025.11.25 (Day 22) - Linux 시스템 관리: 권한 통제, 쉘 기초 및 Vi
1. 핵심 개념 정리
| # | 핵심 개념 | 간결한 설명 | 실무/보안 관점에서의 중요성 |
|---|---|---|---|
| 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. 실습 내용
(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 등)를 간단한 별칭으로 지정
(B) 핵심 실습 명령어 예시
SetUID를 활용한 권한 획득 시나리오 (일반 사용자 환경에서 root 권한 획득 위협 재현):
- chmod 4755 /bin/ping7 : SetUID 비트 설정
- find /usr/bin -user root -perm /4000 -ls 2>/dev/null : 특수 권한 파일 목록 검색
- umask 027 : Strict umask 적용 후 파일 생성 확인
(C) 실습 결과 및 분석
- 특수 권한 실증 : SetUID가 설정된 ping7 실행 파일을 통해 일반 사용자가 일시적으로 root 권한을 획득하는 과정을 직접 확인하며, 이 권한이 악용될 경우의 심각성을 체감
- 권한과 파일 I/O : 파일에 대한 쓰기(w) 권한은 vi 에디터에서 save를 하거나 touch 명령어로 수정 시간을 변경하는 행위와 직결됨
- 디렉터리 접근 : 디렉터리에서 실행(x) 권한이 없으면 cd 명령어가 거부되어 해당 디렉터리 자체에 접근할 수 없음을 확인
- Subshell 상속 : 지역 변수(A=10)는 자식 쉘(bash)에서 출력되지 않지만, export된 환경 변수(export B=20)는 자식 쉘에서도 정상 호출됨을 확인
3. 실무/보안 관점 분석
| 분야 | 적용 시나리오 |
|---|---|
| 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. 개인 인사이트 및 다음 단계
- 배운 점/느낀 점 : 이번 학습을 통해 리눅스에서 보안은 곧 접근 통제라는 점을 깊이 이해했습니다. 특히 SetUID 가 일반 사용자에게 필요한 기능을 제공하면서도 최대 보안 위협이 될 수 있다는 양면성을 확인했습니다. Shell 변수를 자유자재로 다루는 능력은 시스템 관리와 스크립트 작성 효율을 좌우하는 핵심 역량임을 깨달았습니다.
- 심화 방향 : 다음 단계에서는 오늘 다루지 못한 표준 입출력(0, 1, 2), 리다이렉션( > , 2>&1), 파이프( | ) 기능을 집중적으로 학습할 계획입니다. 이들을 결합하여 대용량 로그 파일에서 원하는 정보를 추출하고 시스템 상태를 모니터링하는 고급 쉘 스크립팅 능력을 완성하는 데 집중할 것입니다.