Linux 시스템 관리 핵심 명령어 및 보안 설정 가이드

셸 스크립트 기초와 환경 설정

스크립트 파일의 첫 번째 줄에 위치하는 #!/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 filename
  • chgrp 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행 내에서 전역 치환)

태그: bash linux Shell Security iptables

6월 16일 00:55에 게시됨