Journey to Security 132

CentOS 7 환경에서 PHP로 데이터베이스 연동하기

1. PHP의 데이터베이스 연동 방식 PHP에서 데이터베이스(DBMS)에 접속하기 위해 사용하는 함수군은 크게 세 가지로 발전해 왔다.1️⃣ mysql_???() 함수 (구형 방식)과거에 사용되던 방식으로, 현재는 보안과 성능 문제로 인해 PHP 7.0 이상부터는 완전히 삭제되었다.mysql_connect(): DBMS 접속mysql_query(): 쿼리 실행mysql_num_rows(): 결과 행의 개수 확인2️⃣ mysqli_???() 함수 (개선된 방식)MySQL Improved의 약자로, MySQL 4.1.13 이상의 기능을 지원하기 위해 만들어졌다.객체지향 방식과 절차지향 방식을 모두 지원한다.객체지향 스타일: $mysqli = new mysqli(...) 형태로 사용.절차지향 스타일: mysq..

[Cisco IOS] 동적 라우팅 (3) OSPF 프로토콜과 Router ID 결정 우선순위

1. OSPF(Open Shortest Path First) 프로토콜이란?OSPF는 대표적인 링크 상태(Link-State) 라우팅 프로토콜로, 기업용 네트워크 환경에서 가장 널리 사용된다.각 라우터가 전체 네트워크의 지도를 그리듯 토폴로지 정보를 교환하고, SPF(Shortest Path First) 알고리즘을 통해 최적의 경로를 계산한다.동적 라우팅 프로토콜 비교 (RIP vs EIGRP vs OSPF)구분RIPEIGRPOSPF알고리즘Distance Vector (Bellman-Ford)Advanced Distance Vector (DUAL)Link-State (Dijkstra)메트릭(Metric)Hop Count (최대 15)대역폭, 지연시간, 신뢰도 등Cost (10^8 / 대역폭)수렴 속도느림매..

[Cisco IOS] 동적 라우팅 (2) EIGRP 프로토콜과 재분배(Redistribution)

1. EIGRP(Enhanced Interior Gateway Routing Protocol)란?EIGRP는 Cisco에서 개발한 Cisco 전용 하이브리드 라우팅 프로토콜이다.거리 벡터(Distance Vector) 알고리즘의 설정 용이성과 링크 상태(Link State) 알고리즘의 빠른 수렴 속도라는 장점을 모두 갖추고 있다.주요 특징DUAL(Diffusing Update Algorithm): 최적 경로(Successor)와 후속 경로(Feasible Successor)를 계산하여 링크 장애 시 즉시 우회 경로로 전환한다.AS(Autonomous System) 단위 운영: 동일한 AS 번호를 가진 라우터들끼리만 정보를 교환한다.부분 업데이트(Bounded Incremental Updates): 변화가..

[Cisco IOS]동적 라우팅 (1) RIP 프로토콜과 Passive-interface

1. RIP(Routing Information Protocol)이란?RIP는 가장 오래된 거리 벡터(Distance Vector) 라우팅 프로토콜이다.복잡한 계산보다는 '거리'와 '방향'만을 따지는 단순한 방식이 특징이다.RIP의 주요 특징경로 결정 기준 (Metric): 홉 카운트(Hop Count)를 사용한다. 거쳐가는 라우터의 개수만 센다. (최대 15개, 16개는 도달 불능)업데이트 주기: 30초마다 자신의 라우팅 테이블 전체를 인접 라우터에게 전송한다.전송 방식: * RIPv1: 브로드캐스트(255.255.255.255)RIPv2: 멀티캐스트(224.0.0.9)RIPv2 특징: 클래스리스(Classless) 지원, 멀티캐스트(224.0.0.9) 업데이트를 통해 효율성 향상 2. RIP 설정1..

[Cisco IOS]NAT/PAT(Port Address Translation)

1. NAT와 NAT-PAT🟢 NAT (Network Address Translation)NAT(Network Address Translation)는 사설 IP를 공인 IP로 변환하는 기술이다.주로 내부망에서 사용하는 사설 IP(Private IP) 주소를 인터넷 통신이 가능한 공인 IP(Public IP) 주소로 변환할 때 사용한다.이를 통해 내부 IP 주소를 외부에 숨김으로써 보안을 강화하고, 부족한 IPv4 주소 자원을 아낄 수 있다.🟢 NAT-PAT (Port Address Translation)PAT는 'Overload'라고도 불리는 기술로, 하나의 공인 IP에 여러 개의 사설 IP를 매핑하는 방식이다.여러 대의 PC가 하나의 공인 IP를 공유하되, 서로 다른 포트(Port) 번호를 사용하여..

passwd --stdin 옵션을 활용한 비밀번호 변경 자동화

리눅스 시스템 관리 과정에서 대량의 사용자 계정을 생성하거나 비밀번호를 일괄적으로 변경해야 할 때가 있다.이때 passwd 명령어의 --stdin 옵션을 활용하면 인터렉티브한 입력 과정 없이 파이프와 스크립트만으로 자동화 처리가 가능하다. 1. --stdin 옵션 이해하기일반적으로 passwd 명령어를 실행하면 비밀번호를 두 번 입력하는 대화형(Interactive) 과정을 거친다.하지만 --stdin 옵션을 사용하면 표준 입력(Standard Input)을 통해 비밀번호를 전달받을 수 있다.주로 파이프(|)와 함께 사용하며, 셸 스크립트 내에서 자동화 처리를 할 때 필수적인 옵션이다. 2. 기본적인 사용법먼저 --stdin 옵션을 사용하여 수동으로 비밀번호를 입력하는 방식이다.명령어를 실행하면 비밀번호..

리눅스 명령어는 어떤 파일을 참조할까? strace로 파일 접근 추적하기

리눅스 시스템을 관리하다 보면 특정 명령어가 어떤 설정 파일을 읽는지, 혹은 어떤 로그 파일을 참조하는지 궁금할 때가 있다.소스 코드를 뒤져보지 않고도 이를 알아낼 수 있는 방법이 바로 strace를 활용하는 것이다. 1. 왜 strace를 사용하는가?리눅스의 모든 프로세스는 파일을 열거나 네트워크를 사용하는 등 커널의 도움이 필요할 때 시스템 콜(System Call)을 호출한다.strace는 이 신호를 가로채서 화면에 뿌려주는 도구다.특히 "프로그램이 실행될 때 어떤 파일을 읽으려다 실패했는가?"를 찾는 트러블슈팅에 유용하다. 2. 2> /dev/stdoutstrace를 단순히 실행하면 분석 내용이 너무 길어서 원하는 정보를 찾기 힘들다.이때 다음과 같은 조합을 사용한다.strace [명령어] 2>..

압축/아카이브 관련 명령어

파일 압축은 gzip, bzip2, xz, zip이 있다.그 중에서도 gzip, bzip2, xz를 많이 사용한다.1. gzip1️⃣ gzip 파일1 파일2 ... : 파일을 압축한다. 압축을 하면 원본 파일을 압축하고 원본파일을 삭제한다.gzip으로 압축하면 파일명.gz으로 생성된다.압축을 해제하려면 -d 옵션을 사용한다.gzip --help로 사용법 확인. /usr/bin/ls와 /usr/bin/mv 파일을 현재 디렉터리로 복사한다.[linuxadmin@www ~]$ cp /usr/bin/ls .[linuxadmin@www ~]$ cp /usr/bin/mv .또는 아래와 같은 방법으로 한 번에 복사할 수 있다.[linuxadmin@www ~]$ cp /usr/bin/{ls,mv} . [linuxadm..

사용자/그룹/로그인 관련 명령어

1. who : 로그인 사용자시스템에 로그인한 사용자를 확인로그파일 중에서 /var/run/utmp 파일을 참조사용자가 로그인을 할 때 /var/run/utmp 파일에 정보가 기록된다. [linuxadmin@localhost ~]$ ll /var/run/utmp -rw-rw-r--. 1 root utmp 2304 3월 19 14:10 /var/run/utmp [linuxadmin@localhost ~]$ strace -bash: strace: 명령어를 찾을 수 없음 [linuxadmin@localhost ~]$ sudo dnf -y install strace[linuxadmin@localhost ~]$ strace who 2> /dev/stdout | grep var [linuxadmin@localh..

C 소스 패치파일 만들기

[linuxadmin@localhost ~]$ vi hello_old.c#include int main() { printf("Hello\n"); return 0;}[linuxadmin@localhost ~]$ vi hello_new.c#include int main() { printf("Hello, World!\n"); return 0;} 패치 파일로 만든다.[linuxadmin@localhost ~]$ diff -u hello_old.c hello_new.c > myprogram.patch [linuxadmin@localhost ~]$ sudo dnf -y install gcc 패치 명령어 사용을 위해 패키지 설치[linuxadmin@localhost ~]$ sudo dnf -y..