셸 스크립트 기초와 환경 설정
스크립트 파일의 첫 번째 줄에 위치하는 #!/bin/bash는 인터프리터 지정 라인으로, 해당 스크립트가 Bash 셸을 사용하여 실행되어야 함을 의미합니다. 대부분의 리눅스 환경에서는 생략해도 문제가 없지만, 이식성을 고려할 경우 명시하는 것이 안전합니다.
환경 변수는 전역 수준에서 /etc/profile, 사용자별로는 ~/.bash_profile 또는 ~/.bashrc에 정의됩니다. 변경된 설정을 즉시 적용하려면 source ~/.bashrc 또는 축약형인 . ~/.bashrc를 사용하세요.
명령어 실행과 별칭 관리
스크립트를 실행하는 방법은 두 가지입니다:
- 실행 권한 부여 후 경로로 직접 실행:
chmod +x script.sh && ./script.sh - Bash 인터프리터로 호출:
bash script.sh— 이 방식은 권한 없이도 실행 가능하며, 보안 테스트 시 유용합니다.
자주 사용하는 긴 명령어는 alias로 단축할 수 있습니다. 예: alias ll='ls -alF'. 현재 설정된 별칭은 alias 명령어로 확인하고, unalias ll로 제거할 수 있습니다. 별칭은 기본 명령어보다 우선 순위가 높으므로 이름 충돌에 주의해야 합니다.
입출력 제어와 파이프라인
결과 출력 방향을 조정하는 리다이렉션 기능:
>: 출력을 파일로 덮어쓰기 (기존 내용 삭제)>>: 출력을 파일 끝에 추가<: 파일 내용을 입력으로 사용<<EOF: 여러 줄 입력을 EOF까지 수집 (예:cat <<END > output.txt)
예제:
cat <<DATA > info.txt
Name: John Doe
Email: john@example.com
DATA
파일 및 디렉터리 조작
tar을 이용한 압축/해제:
- 압축:
tar -czvf archive.tar.gz /path/to/files - 해제:
tar -xzvf archive.tar.gz
옵션 중 -f는 반드시 마지막에 와야 하며, 바로 뒤에 파일명이 따라와야 합니다. 확장자는 일반적으로 .tar.gz 또는 .tgz를 사용합니다.
grep은 텍스트 필터링에 필수적입니다:
grep "root" /etc/passwd: 특정 문자열 검색grep -i "error": 대소문자 무시grep -v "^#": 주석 줄 제외 (^#는 줄 시작의 # 의미)
다중 조건 처리 예:
grep -v "^#" config.conf | grep -v "^$" > clean.conf
이 명령은 주석과 빈 줄을 모두 제거합니다.
시스템 정보 조회
하드웨어 및 시스템 상태 확인 명령어:
- CPU 정보:
cat /proc/cpuinfo또는lscpu - 메모리 정보:
cat /proc/meminfo또는free -h - 디스크 사용량:
du -sh /directory, 전체 마운트 정보:df -h - 네트워크 인터페이스:
ip a또는ifconfig
프로세스 및 서비스 관리
실행 중인 프로세스 보기:
ps aux --forest
--forest 옵션은 계층 구조를 트리 형태로 표시하여 부모-자식 관계를 쉽게 파악할 수 있게 해줍니다.
프로세스 종료 명령:
kill PID: 특정 프로세스 ID 종료pkill process_name: 이름 기반 종료 (정규 표현식 지원)killall service_name: 동일 이름의 모든 프로세스 종료 (주의 필요)
서비스 자동 시작 비활성화:
systemctl disable firewalld.service
사용자 및 권한 관리
사용자 생성과 삭제:
- 생성:
useradd username - 삭제 및 홈 디렉터리 포함 제거:
userdel -r username
권한은 세 가지 범주로 나뉩니다:
- 소유자 (User)
- 그룹 (Group)
- 기타 (Others)
각각의 읽기(r=4), 쓰기(w=2), 실행(x=1) 권한은 숫자로 표현 가능합니다. 예: chmod 755 file.sh → 소유자: rwx(7), 그룹: rx(5), 기타: rx(5).
소유자 변경:
chown user:group filenamechgrp groupname filename
보안 강화 도구
파일에 특수 속성을 부여하는 chattr:
chattr +i file: 수정/삭제 불가 (immutable)chattr +a file: append 전용 (로그 파일 보호에 적합)
설정된 속성은 lsattr filename으로 확인합니다.
네트워크 보안 및 방화벽
Iptables를 활용한 공격 대응 전략:
- SYN Flood 대응:
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP - SSH 브루트 포스 방지:
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name sshbrute iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name sshbrute -j DROP - ICMP 공격 제한:
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/m -j ACCEPT
시간 및 로케일 설정
NTP를 통한 시간 동기화:
ntpdate -u time.pool.org
한글 깨짐 문제 해결을 위한 로케일 설정:
export LANG=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8
영문 환경일 경우 en_US.UTF-8을 사용합니다. 설정 파일은 /etc/locale.conf 또는 /etc/environment에 저장합니다.
원격 파일 전송
scp를 이용한 안전한 파일 복사:
- 로컬 → 원격:
scp local.txt user@host:/remote/path/ - 원격 → 로컬:
scp user@host:/remote/file.txt ./
wget은 HTTP/HTTPS 다운로드에 사용됩니다:
wget https://example.com/file.zip
-r 옵션은 재귀 다운로드를 활성화합니다.
편집기 Vim 기본 사용법
Vim은 모드 기반 편집기로, 다음 명령어들이 자주 사용됩니다:
- 줄 번호 표시:
:set nu - 문서 시작/끝 이동:
gg/G - 복사/삭제/붙여넣기:
yy,dd,p - 검색:
/pattern(아래로),?pattern(위로) - 치환:
:10,20s/old/new/g(10~20행 내에서 전역 치환)