리눅스 운영에 대해서 학습한 내용을 정리한 글
목차
리눅스
우분투?
1. 패키지 설치
1.1. 패키지
패키지 : 특정 소프트웨어를 설치 가능한 형태로 묶어 압축 해 둔 소프트웨어 형태 (compressed file archive)
패키지 형태 : .dep .rpm
패키지 관리 도구 : apt (Advanced Package Tool)
1.1.1. 패키지의 필요성
“리눅스의 다양한 운영체제에서는, 내가 원하는 프로그램(소프트웨어)을 실행하기 위해서는,
해당 소스코드를 해당 환경에서 컴파일 하여야 한다.”
→ 배포판 환경에 맞추어 미리 빌드한 실행파일을 압축
1.1.2. 패키지 시스템 구조
패키지 관리자 명령어를 통해 패키지를 다운받으면 그 패키지에 의존하는 Dependent 패키지도 같이 깔리는 형식
- apt
- dpkg
1.2. 패키지 유틸리티
1.2.1. 패키지 관리자 - - apt (Advanced Package Tool)
apt 기본 설치/검색 명령어
• apt update : 리포지토리 내용 가져오기
• apt list : 리포지토리 패키지 목록 출력 (로컬 캐쉬)
• apt list --installed : 설치된 패키지 목록 출력
• apt list --upgradable : 업그레이드(업데이트) 가능한 목록 출력
• apt search <keyword> : 리포지토리 검색 (로컬 캐쉬)
• apt show <pkg-name> : 패키지 정보 표시
apt 기본 관리 (설치/삭제) 명령어
• apt install : 리포지토리 내의 패키지 설치
• apt remove : 설치된 패키지 삭제 (설정 유지)
• apt purge : 설치된 패키지 삭제 + 설정파일 삭제
• apt autoremove : 더 이상 사용되지 않는 패키지 삭제 (버전 업그레이드로 인한 더 이상 참조되지 않는 dependent 패키지 파일들 삭제)
• apt upgrade : 패키지 업그레이드(업데이트)
※ 또다른 패키지 관리자 유형
• 패키지 파일 확장자 .deb 또는 .dpkg 를 이용한 설치
• dpkg
dpkg 를 이용한 유틸리티 다운로드, 설치, 삭제
• dpkg -i <pkg> : install
• dpkg -r <pkg> : remove
• dpkg -P <pkg> : purge
• dpkg -l : list installed
2. 웹 서버 구축하기
2.1. 리눅스 디렉토리 구조
/(루트)
최상의 디렉토리인 루트 디렉토리를 의미하며, 리눅스의 모든 디렉토리들의 시작점이다. 즉, 모든 디렉토리들을 절대경로로 표기할 때에 이 디렉토리로부터 시작해야 한다.
/bin
기본적인 명령어가 저장된 디렉토리. 즉, 리눅스 시스템사용에 있어 가장 기본적이라고 할 수 있는 mv, cp, rm 등과 같은 명령어들이 이 디렉토리에 존재하며 root 사용자와 일반사용자가 함께 사용할 수 있는 명령어 디렉토리이다.
/boot
리눅스 부트로더(Boot Loader)가 존재하는 디렉토리. 즉, GRUB 과 같은 부트로더에 관한 파일들(grub.conf 등)이 이 디렉토리에 존재한다.
/dev
시스템 디바이스(device)파일을 저장하고 있는 디렉토리. 즉, 하드디스크 장치파일 /dev/sda, CD-ROM 장치파일 /dev/cdrom 등과 같은 장치파일들이 존재하는 디렉토리이다.
/etc
시스템의 거의 모든 설정파일이 존재하는 디렉토리. /etc/sysconfig(시스템 제어판용 설정파일), /etc/passwd(사용자관리 설정파일), /etc/named.conf(DNS 설정파일) 등과 같은 파일들이 존재한다.
/home
사용자의 홈디렉토리, useradd 명령어로 새로운 사용자를 생성하면 대부분 사용자의 ID와 동일한 이름의 디렉토리가 자동으로 생성됨.
/lib
커널모듈파일과 라이브러리파일 즉, 커널이 필요로하는 커널모듈파일들과 프로그램(C, C++ 등)에 필요한 각종 라이브러리 파일들이 존재하는 디렉토리.
/media
DVD, CD-ROM, USB 등과 같은 탈부착이 가능한 장치들의 마운트포인트로 사용되는 디렉토리.
/mnt
/media 디렉토리와 비슷한 용도로 탈부착이 가능한 장치들에 대하여 일시적인 마운트포인트로 사용하는 디렉토리.
/proc
일명 "가상파일시스템" 이라고 하는 곳으로 현재 메모리에 존재하는 모든 작업들이 파일형태로 존재하는 곳이다. 디스크상에 실제 존재하는 것이 아니라 메모리상에 존재하기 때문에 가상파일시스템이라고 부른다. 실제 운용상태를 정확하게 파악할 수 있는 중요한 정보를 제공하며 여기에 존재하는 파일들 가운데 현재 실행중인 커널(kernel)의 옵션 값을 즉시 변경할 수 있는 파라미터파일들이 있기 때문에 시스템 운용에 있어 매우 중요한 의미를 가진다.
/root
시스템 최고관리자인 root 사용자의 개인 홈디렉토리.
/sbin
ifconfig, e2fsck, ethtool, halt 등과 같이 주로 시스템 관리자들이 사용하는 시스템관리자용 명령어를 저장하고 있는 디렉토리.
/tmp
일명 "공용디렉토리" . 시스템을 사용하는 모든 사용자들이 공동으로 사용하는 디렉토리. mysql 에서 사용하는 mysql.sock 등과 같은 소켓파일, 또는 아파치에서 사용하는 세션파일등이 생성되기도 한다. 웹해킹에 사용되기도 해서 주의를 요망.
/usr
시스템이 아닌 일반사용자들이 주로 사용하는 디렉토리. 즉, c++, chsh, cpp, crontab, du, find등과 같이 일반사용자들용 명령어들은 /usr/bin 에 위치한다.
/var
시스템운용중에 생성되었다가 삭제되는 데이터를 일시적으로 저장하기 위한 디렉토리. 거의 모든 시스템로그파일은 /var/log 에 저장되고, DNS 의 zone 설정파일은 /var/named 에 저장되고, 메일파일은 /var/spool/mail 에 저장되며, 크론설정파일은 /var/spool/cron 디렉토리에 각각 저장됨.
3. 사용자 모니터링
3.1. 접속 모니터링 도구 : users, who, w
ⓐ. users
현재 접속한 사용자 목록
ⓑ. who
현재 접속한 사용자 목록과, 터미널 번호, 접속 시간 및 접속 장소
ⓒ. w
시스템 정보, 현재 접속한 사용자 목록, 터미널 번호, 접속장소, 접속 시간, 자원 소모량 및 하는 행위
3.2. 접속 로그 및 접속 실패 로그 : last, lastb
ⓐ. last : 최근 접속 로그
• last (/var/log/wtmp - 바이너리 로그 파일)
• last [username]
• last reboot
ⓑ. lastb : 최근 접속 실패 로그
• lastb (/var/log/btmp - 바이너리 로그 파일)
• lastb [username]
3.3. 권한 로그 및 시스템 로그
3.3.1. 인증 로그를 통한 감사 추적 - login, sudo 등 인증 및 권한상승 요청 등
인증 로그 확인
• /var/log/auth.log
• cat /var/log/auth.log | grep <my-filter>
• tail -F /var/log/auth.log | grep cron
• tail -F /var/log/auth.log | grep sudo
3.3.2. 사용자의 다양한 명령어 로그 살펴보기 - history
사용자 명령어 기록 확인
• history
사용자 명령어 기록 활용
- history 10 : 최근 10개 명령어
- ! <number> : 해당 명령어 재실행
사용자 명령어 기록 로그
• .bash_history : 내 로그
• /home/<user>/.bash_history : 타 사용자의 로그
3.3.3. 다양한 시스템 로그 살펴보기 - /var/log/*
시스템 로그들 확인
• ls -al /var/log
데몬 서비스 (또는 응용 소프트웨어) 로그 확인
• cat /var/log/syslog
• cat /var/log/syslog | grep “xxxxx”
• cat /var/log/boot.log
커널 로그 확인
• cat /var/log/kern.log
로그 로테이션 확인
• /var/log/xxxx.log
• /var/log/xxxx.log.1
• /var/log/xxxx.log.2.gz
• /etc/logrotate.d/*
4. 프로세스 모니터링
4.1. 프로세스 확인(ps - process status)
프로세스 살펴 보기
• ps a
프로세스 상태 코드
코드설명 (영어)설명 (한국어)DRSTWXZ
코드 | ||
D | Uninterruptible sleep (usually IO) | 깨울 수 없는 잠 (보통 IO) |
R | Running or runnable (on run queue) | 실행중 또는 실행가능 (실행 큐에 있음) |
S | Interruptible sleep (waiting for an event to complete) | 깨울 수 있는 잠 |
T | Stopped, either by a job control signal or because it is being traced. | 중지됨 (작업 제어 신호를 받거나 트레이싱 때문에) |
Z | Defunct ("zombie") process, terminated but not reaped by its parent. | 좀비 프로세스 종료되었으나 부모 프로세스에 의해 수습되지 않음 |
• < : high priority
• N : log priority
• L : pages locked into memory
• s : session leader
• l : multi-threaded
• + : foreground process group
4.1.1. 백그라운드 프로세스 실행 및 관리 (jobs)
백그라운드로 프로세스 실행하기
• & : 해당 명령어를 background 로 실행
백그라운드 프로세스 확인
• jobs : 백그라운드 프로세스 확인
백그라운드/포어그라운드 프로세스 전환 및 관리
• fg <%job#> : 해당 job# 를 foreground 로 전환
• ctrl+z : 해당 foreground job 을 중단 (suspend(Stopped))
• bg <%job#> : 해당 job 을 background 로 전환
• kill <%job#> : 해다 job 을 종료 (Terminate)
프로세스의 시간
- 프로세스의 동작 방식에 따른 측정 시간
4.1.2. 프로세스 디버깅을 위한 주요 명령어
모든 프로세스 살펴보기
• ps ax
• ps axu
프로세스 트리 살펴보기
• ps -ejH
• ps axjf
root 권한으로 실행중인 모든 프로세스 확인
• ps -U root -u root u : -U = real UID, -u = effective UID
내 권한으로 실행중인 모든 프로세스 확인
• ps -xu
내가 원하는 필드만 출력
• ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
• ps -aN --format cmd,pid,user,ppid
모든 프로세스 살펴보기
• top
• top -d 1 : 1초마다 갱신
• top -b : 배치 모드 (로깅 모드)
top 도움말
• shift + p : CPU 사용률 내림차순
• shift + m : MEM 사용률 내림차순
• shift + t : 프로세스 시간 순 내림차순
• f 및 space : 프로세스 컬럼 선택 (s 를 통한 sort, q를 통한 종료)
• 1 : CPU 별 (또는 통합)
4.1.2.1. strace를 통한 시스템 콜 조회
시스템 콜 호출 디버깅
• strace -p <pid> : 시스템 콜에 대한 요청임으로 root 권한 필요
4.1.2.2. proc 파일 시스템을 통한 프로세스 디버깅
특수(special) 파일 시스템, proc
• /proc/<pid>/
• 예시) yes > /dev/null & : 해당 프로세스가 9416 이라고 가정
• cat /proc/9416/cmdline
• cat /proc/9416/environ
• cat /proc/9416/status
• cat /proc/9416/maps
• ls -l /proc/9416/fdinfo
• ls -l /proc/9416/fd
5. 네트워크 모니터링
5.1. 시스템 내 열려있는 포트 확인 : netstat
- 사용법
- netstat <OPTION>
- -a : 모든 소켓 정보
- -r : 라우팅 정보 출력
- -n : 호스트명 대신 IP 주소를 출력
- -i : 모든 네트워크 인터페이스 정보 출력
- -s : 프로토콜별 네트워크 통계
- -p : 해당 소켓과 관련된 프로세스 표시
- netstat <OPTION>
- 사용예
- 라우팅 테이블 확인
- netstat -rn
- 인터페이스 통계 표시
- netstat -i
- 모든 소켓과 프로세스 표시
- netstat -anp
- 열려있는 TCP 소켓 확인
- netstat -ant | grep LISTEN
- 라우팅 테이블 확인
5.2. tcpdump를 통한 패킷 캡쳐 및 분석
사용법
- tcpdump -i <nic>
주요 옵션
• -n : no resolve ip (hostname)
• -nn : no resolve ip & port
• -e : show ethernet
• -x : hex decimal raw data
• -X : hex decimal raw data with ASCII text
• -v : verbose (패킷 상세 정보 표시)
• -w : write (파일로 저장: 예, test.pcap)
• -c : count (패킷 표시/저장 개수 제한)
• port <#> : port number (예, port 80)
• host <ip> : src/dst ip address (예, 192.168.56.1)
• src <ip> : src ip address
• dst <ip> : dst ip address
• src <ip> and port <#> : source ip and port
• net <ip/cidr> : network address (예, 192.168.56.0/24)
5.3. 그 외 네트워크 도구
인터페이스 설정
• ifconfig
• netplan : /etc/netplan 디렉토리 내 인터페이스 설정
네트워크/라우팅 설정
• ip
• route
• arp
분석/진단 도구
• ping
• trace
'IT > 리눅스' 카테고리의 다른 글
[리눅스] 리눅스 기초 내용 정리(리눅스의 기초, 가상 머신에서 구동) (0) | 2023.03.28 |
---|---|
[리눅스] 기초 내용 정리 (명령어, 원격 터미널, 사용자) (0) | 2023.03.28 |
댓글