<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>soobeen-jeong.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 07 Jul 2023 09:03:27 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>soobeen-jeong.log</title>
            <url>https://velog.velcdn.com/images/soobeen-jeong/profile/42ee2d13-f988-4a06-b351-126fc60a2c90/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. soobeen-jeong.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/soobeen-jeong" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[kubernetes document 읽기]]></title>
            <link>https://velog.io/@soobeen-jeong/kubernetes-%EB%AC%B8%EC%84%9C-%EC%8A%A4%ED%84%B0%EB%94%94-1</link>
            <guid>https://velog.io/@soobeen-jeong/kubernetes-%EB%AC%B8%EC%84%9C-%EC%8A%A4%ED%84%B0%EB%94%94-1</guid>
            <pubDate>Fri, 07 Jul 2023 09:03:27 GMT</pubDate>
            <description><![CDATA[<h1 id="시작하기">시작하기</h1>
<h3 id="프로덕션-환경상용">프로덕션 환경(상용)</h3>
<p>####프로덕션 고려사항
가용성: control과 worker 노드 분리
스케일링: 필요한 만큼 용량(capacity)
보안 및 접근 관리
서버리스
관리형 컨트롤 플레인
관리형 워커 노드
통합성</p>
<h4 id="프로덕션-클러스터-구성">프로덕션 클러스터 구성</h4>
<p><strong>컨트롤 플레인</strong>
배포 도구 선택:kubeadm, kops, kubespray, 컨테이너 런타임
인증서 관리: PKI 인증서 및 요구 조건 확인
apiserver 로드벨런서 구성(외부 로드벨런서 생성하기)
etcd 서비스 분리 및 백업: 추가 실행, etcd 데이터베이스 벡업(etcd 클러스터 운영, 고가용성 etcd 생성)
다중 컨트롤 플레인 시스템 구성:최대 3대 머신 실행
다중 영역 확장
구동 중 기능 관리</p>
<p><strong>워커 노드</strong>
노드 구성 및 검증
클러스터에 노드 추가
노드 스케일링
노드 자동 스케일링
노드 health 체크 구성</p>
<h4 id="프로덕션-사용자-관리">프로덕션 사용자 관리</h4>
<p>인증: apiserver를 이용하여 사용자 인증 가능
인가: RBAC(역할 기반 접근 제어), ABAC(속성 기반 접근 제어) 둘 중 하나 선택</p>
<h4 id="컨테이너-런타임">컨테이너 런타임</h4>
<p>파드가 노드에서 실행될 수 있도록 클러스터의 각 노드에 컨테이너 런타임을 설치
kubelet과 컨테이너 런타임이 cgroup 드라이버(cgroupfs, systemd)를 사용해야 한다
containerd
CRI-O
도커 엔진
미란티스 컨테이너 런타임</p>
<h3 id="설치-방법">설치 방법</h3>
<h4 id="kubeadm으로-클러스터-구성하기">kubeadm으로 클러스터 구성하기</h4>
<p>필수 포트 확인
컨테이너 런타임 설치
kubeadm, kubelet 및 kubectl 설치 
cgroup 드라이버 구성
kubeadm API로 컴포넌트 사용자 정의하기
ClusterConfiguration의 플래그로 컨트롤 플레인 사용자 정의하기</p>
<h4 id="kops로-쿠버네티스-설치하기">kOps로 쿠버네티스 설치하기</h4>
<p>클러스터 구축(AWS에 클러스터 생성)</p>
<h4 id="kubespray로-쿠버네티스-설치하기">Kubespray로 쿠버네티스 설치하기</h4>
<p>클러스터 생성하기
클러스터 스케일링하기
클러스터 업그레이드 하기</p>
<h1 id="개념">개념</h1>
<h3 id="쿠버네티스란-무엇인가">쿠버네티스란 무엇인가?</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/7c744197-7b58-46f0-a162-7b0b1b05df16/image.png" alt="">
쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼
<em>쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래</em>
<strong>전통적인 배포 시대:</strong> 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생
<strong>가상화된 배포 시대:</strong> 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행, 가상화를 통해 일련의 물리 리소스를 폐기 가능한(disposable) 가상 머신으로 구성된 클러스터로 만들 수 있음
<strong>컨테이너 개발 시대:</strong> 컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유
기민한 애플리케이션 생성과 배포
지속적인 개발, 통합 및 배포
가시성(observability)
개발, 테스팅 및 운영 환경에 걸친 일관성
클라우드 및 OS 배포판 간 이식성
애플리케이션 중심 관리
느슨하게 커플되고, 분산되고, 유연하며, 자유로운 마이크로서비스</p>
<h3 id="클러스터-아키텍처">클러스터 아키텍처</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/90e18eef-1be5-41eb-89bb-75cf69c13352/image.png" alt=""></p>
<h4 id="노드">노드</h4>
<p>쿠버네티스는 컨테이너를 파드내에 배치하고 노드 에서 실행함으로 워크로드를 구동한다. </p>
<h4 id="관리">관리</h4>
<p>API 서버에 노드를 추가하는 두가지 주요 방법이 있다.
1.노드의 kubelet으로 컨트롤 플레인에 자체 등록
2.사용자(또는 다른 사용자)가 노드 오브젝트를 수동으로 추가</p>
<h4 id="노드-이름-고유성">노드 이름 고유성</h4>
<p>이름은 노드를 식별한다. 두 노드는 동시에 같은 이름을 가질 수 없다. 쿠버네티스는 또한 같은 이름의 리소스가 동일한 객체라고 가정한다. 
수동 노드 관리
kubectl을 사용해서 노드 오브젝트를 생성하고 수정할 수 있다.</p>
<h4 id="노드-상태">노드 상태</h4>
<p>노드의 상태는 다음의 정보를 포함한다.
주소
컨디션
용량과 할당가능
정보</p>
<h4 id="하트비트">하트비트</h4>
<p>쿠버네티스 노드가 보내는 하트비트는 클러스터가 개별 노드가 가용한지를 판단할 수 있도록 도움을 주고, 장애가 발견된 경우 조치를 할 수 있게한다.
노드에는 두 가지 형태의 하트비트가 있다.
노드의 .status에 대한 업데이트
kube-node-lease 네임스페이스 내의 리스(Lease) 오브젝트. 각 노드는 연관된 리스 오브젝트를 갖는다.</p>
<p>컨트롤 플레인-노드 간 통신</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS Solutions Architect - Associate Certification 정리]]></title>
            <link>https://velog.io/@soobeen-jeong/AWS-Solutions-Architect-Associate-Certification-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@soobeen-jeong/AWS-Solutions-Architect-Associate-Certification-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 22 Feb 2023 06:58:13 GMT</pubDate>
            <description><![CDATA[<ol>
<li>Network = <strong>VPC (Virtual Private Cloud)</strong>
네트워크 구축할 때 사용
VPC로 구축하고 서브네팅으로 나눠 구성</li>
</ol>
<ol start="2">
<li>Server = <strong>EC2 (Elastic Compute Cloud)</strong>
가상서버</li>
</ol>
<ol start="3">
<li>Firewall = <strong>Secirity group</strong>
인터넷에서 서버로의 접속 차단, 허용</li>
</ol>
<ol start="4">
<li>L4 = <strong>ELB (Elastic Load balancer)</strong>
서버 이중화 장비 </li>
</ol>
<ol start="5">
<li>DNS = <strong>ROUTE 53</strong>
도메인을 관리하는 서비스
글로벌 이중화 서비스가 되도록 GSLB기능도 제공</li>
</ol>
<ol start="6">
<li>DB = <strong>RDS (관계형 데이터 베이스 서비스 Mysql, Oracle)와 NoSQL</strong></li>
</ol>
<ol start="7">
<li>Storage = <strong>S3 (Simple Storage Service) = 오브젝트 스토리지</strong>
동영상, 이미지, MP3와 같은 콘텐츠 저장 서비스</li>
</ol>
<ol start="8">
<li>CDN (Contents Delivery Network) = <strong>CloudFront, 파일/이미지 서비스</strong>
사용자가 컨텐츠를 빠르게 접속할 수 있도록 해주는 서비스</li>
</ol>
<ol start="9">
<li>EBS (Elastic Block Store) = <strong>저장 장치, 하드 디스크</strong>
보통 DB디스크로 사용</li>
</ol>
<ol start="10">
<li>AMI (Amazon Machine Image) = <strong>OS, 리눅스와 윈도 운영체제의 서버 이미지</strong></li>
</ol>
<ol start="11">
<li><strong>Public IP</strong> → 변경되는 공인 IP
외부에서 접속 가능하나 AWS 인스턴스 시작할 때 임의 IP로 할당. 변경이 되는 IP
인터넷 서비스 목적이라면 변경이 되지 않는 EIP를 할당받아 사용</li>
</ol>
<ol start="12">
<li><strong>Elastic IP (EIP)</strong> = Public IP, 한번 할당되면 변하지 않는 공인 IP
고정 공인 IP
인터넷 서비스할 때 EIP를 사용
DNS에 매칭</li>
</ol>
<ol start="13">
<li>Router = <strong>인터넷 게이트웨이(IGW)</strong>
인터넷으로 나가기 위한 통로
VPC는 폐쇄된 네트워크인데 외부와 통신하기 위해
인터넷 게이트웨이(IGW)를 통해 통신</li>
</ol>
<ol start="14">
<li>전용선 = <strong>디렉트 커넥트</strong></li>
</ol>
<ol start="15">
<li>리즌 = *<em>나라 *</em>
Region, 서울리전, 도쿄리전, 일반적으로 나라라고 보면 됨.</li>
</ol>
<ol start="16">
<li>가용영역 =** IDC**
Availability Zone, 서울IDC, 부산 IDC</li>
</ol>
<p>※ VPC 내부서비스와 외부 서비스
VPC 내부 위치 서비스 : <strong>EC2</strong>
VPC 외부 위치 서비스 : <strong>S3, DynamoDB</strong></p>
<p>국가에 속한 서비스와 전체적으로 적용되는 Global 서비스 구분</p>
<p>Global 서비스(리즌에 속하지 않는 서비스)</p>
<p>= <strong>IAM(계정관리), CloudFront(CDN), Route 53(DNS)</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[VPN(Virtual Private Network)과 VPC(Virtual Private Cloud) 개념]]></title>
            <link>https://velog.io/@soobeen-jeong/VPNVirtual-Private-Network%EA%B3%BC-VPCVirtual-Private-Cloud-%EA%B0%9C%EB%85%90</link>
            <guid>https://velog.io/@soobeen-jeong/VPNVirtual-Private-Network%EA%B3%BC-VPCVirtual-Private-Cloud-%EA%B0%9C%EB%85%90</guid>
            <pubDate>Wed, 22 Feb 2023 06:50:55 GMT</pubDate>
            <description><![CDATA[<h2 id="vpn이란">VPN이란?</h2>
<p>VPN (Virtual Private Network) 서비스의 약자로, public(인터넷) 망을 통해서 회사의 private network 망에 연결하게 해주는 서비스
VPN은 실제 사설망이 아닌 가상의 사설망
회사의 네트워크 구성에서 직원 간 네트워크를 분리하고 싶다면 가상의 망 VPN을 사용하면 됨</p>
<h2 id="vpc란">VPC란?</h2>
<p>VPC는 Virtual Private Cloud의 약자로 아마존 클라우드 내에서 private ip를 사용하는 일종의 가상 private network 망을 만들어줄 수 있게 해주는 서비스
하나의 VPC는 하나의 Region내에서만 생성이 가능
즉 VPC를 두개 이상의 region에 걸쳐서 사용이 불가능
VPC가 없다면 인스턴스들이 거미줄처럼 연결되어 복잡한 형태로 되지만
만약 VPC가 적용되면 VPC별 네트워크 구성할 수 있고 설정을 줄 수 있다.
VPC 구축을 위해 사설아이피대역에 맞추어 구축해야 함
VPC에서 사용하는 사설 아이피 대역</p>
<ul>
<li><p>10.0.0.0 ~ 10.255.255.255(10/8 prefix)</p>
</li>
<li><p>172.16.0.0 ~ 172.31.255.255(182.16/12 prefix)</p>
</li>
<li><p>192.168.0.0 ~ 192.168.255.255(192.168/16 prefix)</p>
</li>
</ul>
<h2 id="subnet이란">Subnet이란?</h2>
<p>하나의 region 내에서 여러개의 AZ에 걸쳐서 생성이 가능 
VPC안에 여러개의 subnet을 생성할 수 있는데, 하나의 subnet은 VPC안에서 하나의 AZ에만 생성이 가능
서브넷은 VPC를 잘게 쪼개는 과정
VPC 안에 있는 VPC보다 더 작은 단위이므로 아이피 범위가 더 작게됨
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/919c6a02-7988-412b-b703-d83f52e77192/image.png" alt=""></p>
<h2 id="route-table이란">Route Table이란?</h2>
<p>각 subnet에는 default로 subnet과 밖을 연결해주는 router가 생성되고, 이 router는 route table을 가짐. 대상 ip address에 routing 경로를 정의하는 것으로 subnet에서 밖으로 나가는 outbound traffic에 대한 routing 경로를 의미
이 route table은 AWS 콘솔에서 설정이 가능하고, routing 경로는 target의 타입에 따라서, 크게 세가지로 분리 가능</p>
<ul>
<li><p>Local : VPC 내의 다른 subnet으로 traffic을 routing </p>
</li>
<li><p>Internet gateway : internet gateway를 통해서, 외부 인터넷으로 traffic을 routing </p>
</li>
<li><p>Virtual private gateway : 관리자가 임의로 정의한 destination으로 traffic을 routing</p>
</li>
</ul>
<p>네트워크 요청이 발생하면 데이터가 라우터로 감
라우터란, 목적지이고 라우팅데이블이란 목적지에 대한 이정표
인터넷게이트웨이는 VPC와 인터넷을 연결해주는 하나의 관문</p>
<h2 id="security-group이란">Security Group이란?</h2>
<p>Security Group은 VPC 안에서 일종의 방화벽 처럼 사용
VPC 가 아니더라도 Security Group은 AWS에서 필수적으로 사용되는데, Security 그룹은 inboud 또는 outbound traffic에 대해서 port 별로 접근을 제어할 수 있는 기능을 제공 마치 방화벽과 같은 기능을 하는 서비스</p>
<p>NAT 게이트웨이는 프라이빗 서브넷이 인터넷과 통신하기 위한 아웃바운드 인스턴스
퍼블릭 서브넷사 동작하는 NAT 게이트웨이는 프라이빗 서브넷에
외부로 요청하는 아웃바운드 트래픽을 받아 인터넷게이트웨이와 연결</p>
<h2 id="natnetwork-address-translation란">NAT(Network Address Translation)란?</h2>
<p>NAT 게이트웨이는 NAT(Network Address Translation, 네트워크 주소 변환) 서비스
프라이빗 서브넷의 인스턴스가 VPC 외부의 서비스에 연결할 수 있지만 외부 서비스에서 이러한 인스턴스와의 연결을 시작할 수 없도록 NAT 게이트웨이를 사용</p>
<p>즉, 외부 서비스에서 프라이빗 서브넷의 인스턴스로 접근할 수 없게 하되, 프라이빗 서브넷의 인스턴스에서는 외부 서비스로 접근할 수 있게 해주는 서비스 </p>
<h2 id="cidr사이더란">CIDR(사이더)란?</h2>
<p>CIDR(Classless Inter-Domain Routing)는 클래스 없는 도메인 간 라우팅 기법으로 1993부터 도입되기 시작한 IP 주소 할당법이다. 사이더는 기존의 IP 주소 할당 방식이었던 네트워크 클래스를 대체하였고 사이더를 사용함으로써 IP주소의 영역을 여러 네트워크로 나눌 때 기존방식에 비해 유연성이 증가하게 되었다. 사이더의 표기법은 서브넷 마스크의 표기법과 동일하다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/10d65b59-44aa-4565-8e21-ef7460dd918e/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[AWS 간단 실습] bastion 서버 만들기]]></title>
            <link>https://velog.io/@soobeen-jeong/AWS-%EA%B0%84%EB%8B%A8-%EC%8B%A4%EC%8A%B5-bastion-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@soobeen-jeong/AWS-%EA%B0%84%EB%8B%A8-%EC%8B%A4%EC%8A%B5-bastion-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Tue, 21 Feb 2023 07:55:32 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/9725e75d-5ea1-4bf5-b120-4987de0a90f2/image.png" alt=""></p>
<blockquote>
<p>배스천 호스트(Bastion Host)란 침입 차단 소프트웨어가 설치되어 내부와 외부 네트워크 사이에서 일종의 게이트 역할을 수행하는 호스트
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/be65ef44-a806-425a-b665-732910847c4c/image.png" alt=""></p>
</blockquote>
<p><strong>배스천 호스트</strong>는 내부 네트웍과 외부 네트웍 사이에 위치하는 게이트웨이이다. 보안대책의 일환으로 사용되는 배스천 호스트는, 내부 네트웍을 겨냥한 공격에 대해 방어하도록 설계되었다. 네트웍의 복잡도와 구성에 따라 다르지만, 단일 배스천 호스트 그 자체로서 방어를 할 수도 있으며, 또는 다른 방호 계층과 함께 대형 보안 시스템의 일부가 되기도 한다. 배스천 호스트는 접근 제어 기능과 더불어 게이트웨이로서 가상 서버(Proxy Server)의 설치, 인증, 로그 등을 담당한다. 그만큼 위험에 노출되는 경우가 많기 때문에, 배스천 호스트는 네트워크 보안상 가장 중요한 방화벽 호스트이다. 특히 내부 네트워크 전체의 보안을 담당하기 때문에 관리자의 감시 및 정기적인 점검이 뒷받침되어야 한다. IT 보안 기업에서 제공하는 방화벽 솔루션은 이러한 배스천 호스트를 제공하는 것이 대부분이다.</p>
<p>많은 가게에서 이용하는 Point of Sale(POS) 시스템 운영을 예시로, 만약 배스천 호스트가 없는 경우 외부 네트워크에서 공격을 받아 패스워드가 탈취 당한다면 내부 네트워크인 POS Server에 접근이 가능해진다. 반면 배스천 호스트를 운영하고 있다면 외부 네트워크의 패스워드가 탈취 당하더라도 POS Server까지는 접근할 수 없다.</p>
<h2 id="배스천-호스트-생성-aws-setting">배스천 호스트 생성 AWS setting</h2>
<p>VPC
서브넷 생성 (public 2개, private 2개)
라우팅 테이블 생성 (public 1개, private 2개)
인터넷 게이트웨이 생성</p>
<p>보안그룹<br>public 인바운드 규칙 생성
private  인바운드 규칙 생성(ssh &gt; bastion private  ip 지정)</p>
<p>인스턴스
bastion 서버 생성(EIP 활성화)
private 서버 생성</p>
<p>public EC2(bastion) 접속 후 private EC2 접속
키페어 bastion 서버 복사 (scp [키페어] [계정]@[ip]:[복사할경로])
ssh 키페어 [계정]@private ip 접속</p>
<h2 id="bastion-host-best-practice">Bastion Host Best Practice</h2>
<p>기본적으로, Bastion Host와 Private 인스턴스는 SSH 접근 인증에 개인 키를 사용한다.</p>
<p>Bastion Host 에서 다른 인스턴스로 연결하는 경우에도 개인 키를 필요로 하는데, 여기에는 크게 2 가지 방법이 있다.</p>
<blockquote>
</blockquote>
<p>Bastion Host에 사용자 Local PC의 개인키를 복사하는 것
Bastion Host에서 SSH agent forwarding 을 사용하는 것</p>
<h2 id="advantages--disadvantages-of-bastion-host">Advantages &amp; Disadvantages of Bastion Host</h2>
<p><strong>장점</strong></p>
<p>단일 로그인 포인트를 설정하고 관리하기 때문에 방화벽 설계를 단순화 할 수 있다.
네트워크 사용에 관련한 로그를 한 곳에서 관리할 수 있다.
중소규모의 팀에서 매우 유용하게 사용할 수 있다.</p>
<p><strong>단점</strong></p>
<p>이 방법은 오직 SSH 프로토콜만을 이용하기 때문에 HTTP와 같은 어플리케이션 서비스에 사용할 수 없다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CentOS] FTP]]></title>
            <link>https://velog.io/@soobeen-jeong/CentOS-FTP</link>
            <guid>https://velog.io/@soobeen-jeong/CentOS-FTP</guid>
            <pubDate>Mon, 20 Feb 2023 07:17:34 GMT</pubDate>
            <description><![CDATA[<h2 id="sftp">SFTP</h2>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/d79db209-18af-473f-80cf-c0b29ed7f6a8/image.png" alt=""></p>
<h3 id="sftp-server-설정">SFTP Server 설정</h3>
<h3 id="etcsshsshd_config-설정">/etc/ssh/sshd_config 설정</h3>
<p>vi /etc/ssh/sshd_config</p>
<pre><code>#PasswordAuthentication no -&gt; 주석처리
PasswordAuthentication yes -&gt; 주석제거
쉘 접근 불가능한 계정 생성</code></pre><pre><code>useradd -s /sbin/nologin test01</code></pre><p>암호설정</p>
<pre><code>passwd test01</code></pre><h3 id="chroot-설정">Chroot 설정</h3>
<pre><code>vi /etc/ssh/sshd_config</code></pre><pre><code>#Subsystem sftp /usr/libexec/openssh/sftp-serve -&gt; 주석 처리
Subsystem sftp internal-sftp
Match Group sftpuser01
ChrootDirectory /%u
ForceCommand internal-sftp</code></pre><p>sftp /home/sftuser02/upload 해당 경로에 업/다운로드 되도록 설정
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/baf43434-b4f5-475c-b3fb-51ea93ff0495/image.png" alt=""></p>
<h4 id="사용자-그룹이-sftpusers-인-경우-chroot-적용">사용자 그룹이 sftpusers 인 경우 chroot 적용</h4>
<blockquote>
<p>vi /etc/ssh/sshd_config
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp -f local2 -l INFO<br>/* 일반 유저의 sftp logging 설정. local2를 설정한 이유는 secure 파일에 저장하기 위함. */
Match Group sftpusers  SFTP 사용자와 일치하는 그룹
        ChrootDirectory %h ChrootDirectory 지시어는 SFTP 사용자(chroot 감옥)의 루트 디렉터리를 지정하는 데 사용
ChrootDirectory를 이용해서 쉘접속에서 접근할 수 있는 최상위 디렉토리를 제한하는 것은 불가능<br>ChrootDirectory 구문에서 계정의 홈디렉토리 경로는 %h로 대체</p>
</blockquote>
<h4 id="경로-지정">경로 지정</h4>
<blockquote>
<p>%h - 홈 디렉토리
%u - 인증된 사용자의 사용자 이름 지정
%% - % 기호를 이스케이프 처리</p>
</blockquote>
<h4 id="match">Match</h4>
<blockquote>
<p>User - 사용자 계정
Group - 사용자 그룹
LocalPort - 접근 포트</p>
</blockquote>
<p>X11Forwarding no   X11 전달이 허용되는지 여부를 지정
X11 전달이 활성화되면 sshd 프록시 디스플레이가 와일드 카드 주소를 수신하도록 구성된 경우 서버 및 클라이언트 디스플레이에 대한 추가 노출이 있을 수 있다
        AllowTcpForwarding no    TCP 전달이 허용되는지 여부를 지정
TCP 전달을 비활성화해도 사용자는 항상 자신의 전달자를 설치할 수 있으므로 셸 액세스가 거부되지 않는 한 보안이 향상되지 않는다</p>
<p>ForceCommand internal-sftp -l INFO<br>/* chroot에서 사용할 ForceCommand에서는 -f 옵션이 적용되지 않음. 디폴트로 secure 파일에 저장 됨. */</p>
<blockquote>
<p>systemctl restart sshd</p>
</blockquote>
<p>chroot를 적용하려면 chroot가 적용된 디렉터리의 소유자는 root가 되야만 하고, 가상의 root 디렉터리가 되는 
/home/test/daegam 의 퍼미션은 755로만 설정이 되야한다. 그 외의 설정은 접속이 되지 않는 상황이 된다.</p>
<h2 id="vsftp">vsFTP</h2>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/0b9b0359-ad07-496b-a38b-86e632de5834/image.png" alt=""></p>
<h3 id="vsftp-server-설정">vsFTP Server 설정</h3>
<h3 id="vsftp-설치">vsFTP 설치</h3>
<pre><code>yum -y install vsftpd</code></pre><h3 id="vsftp-설정">vsFTP 설정</h3>
<pre><code>vi /etc/vsftpd/vsftpd.conf</code></pre><pre><code>anonymous_enable=YES # anonymous_enable=NO 로 바꿈
chroot_local_user=YES # 주석 제거</code></pre><pre><code>pasv_enable=YES
pasv_min_port=50001
pasv_max_port=50005
allow_writeable_chroot=YES
FTP 계정생성 및 홈디렉토리 지정하여 생성</code></pre><pre><code>useradd -s /sbin/nologin -d /ftp/upload -m admin01</code></pre><p>암호설정</p>
<pre><code>passwd admin01</code></pre><p>FTP 디렉토리 소유자 변경</p>
<pre><code>chown admin01:admin01 /ftp/upload</code></pre><p>권한부여</p>
<pre><code>chmod 700 /ftp/upload</code></pre><p>nologin 유저 FTP접속을 위해 유효한 shell로 등록</p>
<pre><code>echo &quot;/sbin/nologin&quot; &gt;&gt; /etc/shells</code></pre><p>데몬시작</p>
<pre><code>systemctl start vsftpd</code></pre><p>데몬 활성화</p>
<pre><code>systemctl enable vsftpd</code></pre><h2 id="vsftp-client-설정">vsFTP Client 설정</h2>
<h3 id="ftp-클라이언트-설치">FTP 클라이언트 설치</h3>
<pre><code>yum install ftp -y</code></pre><h3 id="ftp-접속">FTP 접속</h3>
<pre><code>ftp Server</code></pre><p>파일 다운로드</p>
<pre><code>get Filename</code></pre><p>파일업로드</p>
<pre><code>put Filename Filename</code></pre><p>파일이름을 정의하지 않고 절대경로로 입력하면 오류</p>
<p>dir 경로로 업로드 설정
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/d03a8549-0df3-4a42-a552-d7bae4785d5b/image.jpg" alt=""></p>
<p>FTP 설정</p>
<p>vsFTP</p>
<p>sFTP</p>
<p>vsftp에서 500 OOPS: cannot change directory 오류가 나올 때</p>
<p>vim /etc/vsftpd/chroot_list </p>
<p>admin01</p>
<p>vsftpd 실행 오류 발생 시</p>
<pre><code>service vsftpd start</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[리눅스 권한체계와 절대경로, 상대경로]]></title>
            <link>https://velog.io/@soobeen-jeong/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B6%8C%ED%95%9C%EC%B2%B4%EA%B3%84%EC%99%80-%EC%A0%88%EB%8C%80%EA%B2%BD%EB%A1%9C-%EC%83%81%EB%8C%80%EA%B2%BD%EB%A1%9C</link>
            <guid>https://velog.io/@soobeen-jeong/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B6%8C%ED%95%9C%EC%B2%B4%EA%B3%84%EC%99%80-%EC%A0%88%EB%8C%80%EA%B2%BD%EB%A1%9C-%EC%83%81%EB%8C%80%EA%B2%BD%EB%A1%9C</guid>
            <pubDate>Mon, 20 Feb 2023 05:19:46 GMT</pubDate>
            <description><![CDATA[<h2 id="리눅스-권한체계">※리눅스 권한체계</h2>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/b75a65c2-9687-49a5-953a-271129c8b3d7/image.png" alt=""></p>
<h3 id="허가권-permisstion">허가권 (permisstion)</h3>
<p>r (읽기, 4): 디렉터리 목록 확인 권한
w (쓰기, 2): 디렉터리 안에서 파일을 생성, 삭제할 수 있는 권한
x (실행, 1): 디렉터리의 경로 변경, 디렉터리 안에 있는 항목을 읽을 수 있는 권한</p>
<p>0 : 접근 권한 없음 (---)</p>
<p>1 : 실행 가능      (--x)</p>
<p>2 : 쓰기 가능      (-w-)</p>
<p>3 : 쓰기,실행 가능 (-wx)</p>
<p>4 : 읽기 가능      (r--)</p>
<p>5 : 읽기,실행 가능 (r-x)</p>
<p>6 : 읽기,쓰기 가능 (rw-)</p>
<p>7 : 모든 접근 가능 (rwx)</p>
<h3 id="허가권permission-관리-명령어">허가권(permission) 관리 명령어</h3>
<p>chmod    파일의 허가권 변경
unmask    개체가 생성될 때 부여되는 기본 permission 설정
setuid    일시적으로 소유자의 권한으로 파일을 실행함
setgid    일시적으로 소속그룹의 권한으로 파일을 실행함
sticky bit    모든 권한 할당(단, 삭제는 소유주만 가능함)</p>
<h2 id="소유권-ownership">소유권 (ownership)</h2>
<p>가장 맨 앞:
d로 시작하면 디렉토리, 하이픈 시작하면 파일
첫번째:
소유자 또는 사용자
두번째:
그룹
세번째:
소유자와 그룹에 해당이 안되는 사용자</p>
<h3 id="소유권ownership-관리-명령어">소유권(ownership) 관리 명령어</h3>
<p>chown    파일의 소유권 변경
chgrp    파일의 소속그룹 소유권 변경</p>
<h2 id="상대-경로와-절대-경로">※상대 경로와 절대 경로</h2>
<p>리눅스에서 디렉터리와 파일들의 관계를 형상화하면 트리(tree) 구조 형태를 띄고 있음
모든 디렉터리 경로는 /(루트) 로 부터 시작하여 / 하위에 위치</p>
<h3 id="절대경로">절대경로</h3>
<p>절대 경로란 특정한 파일의 경로를 표현할 때 / (루트 디렉터리) 부터 시작하는 경로</p>
<h3 id="상대경로">상대경로</h3>
<p>상대 경로란 특정한 파일의 경로를 표현할 때 현재 사용자가 접근해 있는 현재 경로를 기준으로 시작하는 경로</p>
<h3 id="리눅스-경로-표기">리눅스 경로 표기</h3>
<p>. : 현재 접근해 있는 디렉터리를 의미
.. : 부모(상위) 디렉터리를 의미
~ : 현재 리눅스에 접속해 있는 계정의 홈 디렉터리를 의미</p>
<h3 id="리눅스-경로-표기-예시">리눅스 경로 표기 예시</h3>
<p>./ee.jpg : 현재 경로의 ee.jpg 파일. 절대경로로 표기하면 /opt/aaa/window/window/ee.jpg
../../bbb : 상위 디렉터리의 상위 디렉터리에 있는 bbb 디렉터리 /opt/bbb
~ : ~가 의미하는것은 현재 계정의 홈 디렉터리 이므로 접속한 계정에 따라 경로가 달라짐.
root 계정인 경우 /root를 의미</p>
<h3 id="특수-권한">특수 권한</h3>
<ul>
<li><p>일반적인 권한과는 조금 다른 특수한 권한</p>
<p>SetUID:other가 파일을 실행할 때 소유자의 권한으로 접근할 수 있게 해주는 권한 (실행이 x가 아닌 s로 나타남)</p>
<ul>
<li>chmod 4xxx [파일이름] 또는 chmod u+s [파일이름]</li>
</ul>
<p>SetGID: other가 파일을 실행할 때 관리 그룹의 권한으로 접근할 수 있게 해주는 권한 (실행이 x가 아닌 s로 나타남)</p>
<ul>
<li>chmod 2xxx [파일이름] 또는 chmod g+s [파일이름]</li>
</ul>
<p>StickyBit: 디렉토리를 마치 자유게시판처럼 사용할 수 있게 해주는 권한일반적으로 /tmp 디렉토리에 부여 (실행이 x가 아닌 t로 나타남)</p>
<ul>
<li>chmod 1xxxx [파일이름] 또는 chmod o+t [파일이름]
스티키 비트(1000)가 설정된 디렉터리는 누구나 파일을 만들수 있지만 자신의 소유가 아닌 파일은 삭제할 수 없습니다. 
즉 일종의 공유 디렉터리라고 볼수 있는데 sticky bit 가 붙은 가장 유명한 사례는 
유닉스의 임시 파일을 쓰는 디렉터리인 /tmp 입니다.</li>
</ul>
</li>
</ul>
<p>디렉터리에 스티키 비트를 붙일 때 누구나 읽고, 쓰고, 실행할 수 있도록 777 권한을 줘야 함</p>
<h3 id="실습">실습</h3>
<p>SetUID, SetGID 권한 변경 명령
 chmod 4777 test
 test : -rwsrwxrwx.</p>
<p> chmod 2777 test
 test : -rwxrwsrwx.</p>
<p> chmod 1777 test
 test : -rwxrwxrwt</p>
<p> find / -perm -4000 &gt; /jhj/setuid_file_list (4000이 포함된 파일을 찾기 위해 앞에 - 붙이기)</p>
<h3 id="sticky-bit-실습">Sticky Bit 실습</h3>
<p> chmod 777 dir1, chmod 1777 dir2 두 디렉토리의 차이점</p>
<ol>
<li><p>dir1에서는 사용자끼리 소유물의 권리가 없음</p>
</li>
<li><p>dir2에서는 사용자끼리 소유물의 권리가 있음</p>
<p>x 권한이 있으면 s(소문자)  //rws rwx rwx
x 권한이 없으면 S(대문자) //rwS rwx rwx</p>
<p>절대경로 ex) www/css/style.css
상대경로 ex) ../css/style.css
./*  :현재경로 이후의 모든 디렉토리, 파일들
../* :상위경로 이후의 모든 디렉토리, 파일들</p>
</li>
</ol>
<h3 id="umask">※umask</h3>
<p>umask 000
새 폴더: 777
새 파일: 666</p>
<p>umask 001
새 폴더: 776
새 파일: 666</p>
<p>umask 022
새 폴더: 755
새 파일: 644</p>
<h3 id="chown--r-옵션">chown -R 옵션</h3>
<p>-R: 경로와 그 하위 파일들을 모두 변경한다.</p>
<p>~/../BAE  BAE 상대경로</p>
<p>cd ~ home
cd - 이전 경로로 이동</p>
<p>cd / 최상위 디렉토리로 이동</p>
<p>rwsrwxrwx
rwSrwxrwx</p>
<p>rwsrwxrwx == 4777 x 권한이 있으면 s(소문자)
rwSrwxrwx == 4677 x 권한이 없으면 S(대문자)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[CentOS] sshd 설정 파일 /etc/ssh/sshd_config 살펴보기]]></title>
            <link>https://velog.io/@soobeen-jeong/CentOS-sshd-%EC%84%A4%EC%A0%95-%ED%8C%8C%EC%9D%BC-etcsshsshdconfig-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0</link>
            <guid>https://velog.io/@soobeen-jeong/CentOS-sshd-%EC%84%A4%EC%A0%95-%ED%8C%8C%EC%9D%BC-etcsshsshdconfig-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0</guid>
            <pubDate>Mon, 20 Feb 2023 05:12:57 GMT</pubDate>
            <description><![CDATA[<p>ec2인스턴스 생성해 AWS 접속
OS &gt; red hat 7.9 버전
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/f0caf1c9-f569-49ab-85c6-9f0bbe6eddf9/image.png" alt=""></p>
<pre><code>vi /etc/ssh/sshd_config</code></pre><p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/4b992501-aecb-40f1-bda6-51e925c99f33/image.png" alt=""></p>
<p>BastionHost Config</p>
<ul>
<li>root login 설정(sshd)<pre><code>PermitRootLogin yes
#PermitRootLogin no
</code></pre></li>
</ul>
<p>#생략</p>
<p>PasswordAuthentication yes
#PasswordAuthentication no</p>
<p>ChallengeResponseAuthentication yes
#ChallengeResponseAuthentication no</p>
<pre><code>
### sshd_config 파일 주요 설정

port 22

- ssh가 사용할 기본 포트 지정

Allowusers user1 root

- 로그인 허락할 계정을 기록

- user1과 root 두 계정에게만 로그인 허용

Protocol 2

- openssh는 프로토콜 버전을 원하는 대로 선택

ListenAddress 0.0.0.0

- sshd 데몬이 통신가능한 주소

- 0.0.0.0은 모든 네트워크

HostKey for protocol version 1
HostKey /etc/ssh/ssh_host-key 

KeyRegenerationInterval 3600 --&gt;protocol 1 사용안함

- 서버의 키는 한번 접속 이뤄진 뒤 자동적으로 다시 만듦
다시 만드는 목적은 나중에 호스트의 세션에 있는 키를 캡처해서
암호를 해독하거나 훔친 키를 사용하지 못하도록 하기 위함

- 값이 0이면 키는 다시 만들어지지 않는다. 기본값은 3600최다.

ServerKeyBits 1024

- 서버 키에서 어느정도의 비트수를 사용할지 정의

- 최소값은 512, 디폴트 값 768

#Autentication:
LoginGraceTime 600

- 유저의 로그인이 성공적으로 이루어지지 않았을 때 이 시간 후에
서버가 연결을 끊는 시간이다.

- 값이 0이면 제한 시간이 없다. 기본값 600초

- PermitEmptyPasswords no

패스워드 인증을 할 때 서버가 비어있는 패스워드를 인정하는 것

- PermitRootLogin  yes

root 로그인 허용여부를 결정하는 것

- PasswordAuthentication  yes

패스워드 인증을 허용

- ChallengeResponseAuthentication  yes

Challenge-Response 인증을 허용할지 여부 설정

no인 경우 mfa 인증 불가 


### sudo설정

sudo 권한 부여
Allow root to run any commands anywhere

패스워드가 없이 sudo 권한 부여
 Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

특정명령어 enable
(example 1)
someuser ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

(example 2)
someuser (host)=(runUser:[runGroup]) option:

someuser는 (host)에서 (command)를 [runGroup]의 runUser의 권한으로 시행 가능함

### 로그 설정
SSH LogLevel설정

vi /etc/ssh/sshd_config

</code></pre><p>LogLevel DEBUG3</p>
<pre><code>sshd 재시작
</code></pre><p>systemctl restart sshd</p>
<pre><code>
SCP Log 출력
</code></pre><p>tail - 1000f /var/log/secure | egrep “accepted|scp|Connection”</p>
<pre><code>

로그 파일 생성</code></pre><p>vi /etc/logrotate.d/secure</p>
<pre><code></code></pre><p>#추가
/var/log/secure
{
weekly #주단위
rotate 260 #260주로 적재
compress #압축활성화
missingok #로그파일이 없어도 에러처리X
create 600 root root #권한설정
dateext #YYYYMMDD확장자 추가
sharedscripts #pre/postrotate한번만실행
postrotate #순환작업 후 실행할 작업 설정
     /bin/kill -HUP <code>cat /var/run/syslogd.pid 2&gt; /dev/null</code> 2&gt; /dev/null || true
endscript
}</p>
<pre><code>
prerotate / endscript:  순환작업 전 실행할 작업 설정
postrotate / endscript: 순환작업 후 실행할 작업 설정

ostrotate #순환작업 후 실행할 작업 설정
     /bin/kill -HUP cat /var/run/syslogd.pid 2&gt; /dev/null 2&gt; /dev/null || true
     # SIGHUP 을 syslogd 로 보내 모든 오류 메시지를 버리고 성공하면 true를 반환
endscript

![](https://velog.velcdn.com/images/soobeen-jeong/post/ce482761-319f-4d8e-9085-e7dfc142da43/image.png)

### crontab 추가
crontab -e
*　　　      *　　　　    *　　　　　　 *　　　　　　  *          &lt;username&gt; command(s)
분(0-59)　　시간(0-23)　　일(1-31)　　월(1-12)　　　요일(0-7)

</code></pre><p>crontab -e </p>
<pre><code>

* 0 * * *       /usr/sbin/logrotate /etc/logrotate.conf


### 로그주기설정
vi /etc/logrotate.conf
</code></pre><p>monthly #monthly로 수정</p>
<p>/var/log/*{
missingok
monthly
create 0600 root utmp
rotate 12
}</p>
<p>systemctl restart rsyslog</p>
<pre><code>


### selinux 해제</code></pre><p>vi /etc/selinux/config</p>
<pre><code></code></pre><p>#SELINUX=enforcing
SELINUX=disabled</p>
<pre><code>reboot (or # setenforce 0)

### Google Authenticator 설치
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum -y install google-authenticator
![](https://velog.velcdn.com/images/soobeen-jeong/post/ab5f7e06-462b-4de0-964a-3c0cb7c7a476/image.png)




### 첫 로그인 시 MFA 강제 설정 script
vi /etc/profile.d/mfa.sh

</code></pre><p>if [ ! -e ~/.google_authenticator ]  &amp;&amp;  [ $USER != &quot;root&quot; ]; then
google-authenticator --time-based --disallow-reuse --force --rate-limit=3 --rate-time=30 --window-size=3
echo
echo &quot;Save the generated emergency scratch codes and use secret key or scan the QR code to
register your device for multifactor authentication.&quot; 
echo
echo &quot;Login again using your ssh key pair and the generated One-Time Password on your registered
device.&quot; 
echo
logout
fi</p>
<p>```</p>
<h2 id="error-해결">Error 해결</h2>
<p>root 계정으로 접속
<strong>service sshd rstart</strong> (sshd[ssh 데몬] 재시작) 명령어 입력 시
ADVERTISEMENT Unable to register authentication agent: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed
해당 에러가 발생하는 문제가 발생. 또한 polkit 데몬이 작동하지 않음.</p>
<p>문제 원인: 데몬 서비스가 동작하지 않았으나 실제 원인은 root 디렉토리의 권한을 바꾸면서 발생.<strong>(권한 문제)</strong></p>
<p>해결 조치: root 디렉토리의 권한이 744로 되어 있는 상태를 555 상태로 변경함
접근권한 / 퍼미션
744 - 소유자에게 모든 접근 가능,  그룹에게 읽기 가능, 기타에게 읽기 가능
555 - 소유자, 그룹, 기타에게 읽기, 실행 가능</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 스터디2]]></title>
            <link>https://velog.io/@soobeen-jeong/AWS-%EC%8A%A4%ED%84%B0%EB%94%942</link>
            <guid>https://velog.io/@soobeen-jeong/AWS-%EC%8A%A4%ED%84%B0%EB%94%942</guid>
            <pubDate>Fri, 10 Feb 2023 03:07:57 GMT</pubDate>
            <description><![CDATA[<h2 id="ec2-인스턴스-life-cycle">EC2 인스턴스 life cycle</h2>
<p>EC2 수명 주기라 함은 AMI로부터 실행이 되고나서
종료될 때까지 EC2가 거치는 과정을 말함</p>
<h3 id="ec2-사이클-상태">EC2 사이클 상태</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/502ef1c0-b952-40b8-bb80-6b5b812b96ed/image.png" alt=""></p>
<h4 id="1-pending-state">1) pending state</h4>
<p>제일 처음 ami 실행되면 준비상태
ec2를 가동하기 위해 가상머신,eni,ebs 등이 준비되는 과정</p>
<h4 id="2-running-state">2) running state</h4>
<p>실제 ec2를 사용할 수 있는 상태</p>
<h4 id="running-상태에서-할-수-있는-3가지">running 상태에서 할 수 있는 3가지</h4>
<ul>
<li>중지
인스턴스를 잠깐 멈춤
인스턴스 요금 미청구
단, EBS 요금, 다른 구성요소(Elastic IP)은 청구
중지 후 재시작 시 퍼블릭 ip 변경
EBS를 사용하는 인스턴스만 중지 가능</li>
<li>재부팅
인스턴스를 다시시작 하는 것
 중지하고 다시시작과는 달리, 재부팅 시 퍼블릭ip 변동X</li>
<li>최대 절전모드
메모리 내용을 보존해서 재시작시 중단지점에서 시작할 수
있는 정지모드
컴퓨터/노트북 최대 절전 모드와 같은 원리<h4 id="3-shutting-down-state">3) shutting-down state</h4>
인스턴스 종료 중
설정에 따라 EBS도 같이 종료 시킬 수 있고 EBS는 남기고
인스턴스만 종료할 수 있다.<h4 id="4-terminated-state">4) terminated state</h4>
완전히 종료, 인스턴스가 영구적 삭제</li>
</ul>
<h3 id="ec2-상태별로-인스턴스-요금">EC2 상태별로 인스턴스 요금</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/689f0cf3-bbb2-4ccd-9815-e7550fb493c1/image.png" alt=""></p>
<p>요약하자면, 인스턴스 미사용시 중지시켜두기만 해도 많은
비용 절감 가능
다만, 인스턴스를 stopped 해도, EBS나 탄력적 IP를 연결했을 겨우
별도로 청구되니 유의해야 함</p>
<p>이를 이용해서 인스턴스 자동 정지/시작 기능을 이용해,
예를 들어 9시에 aws 서비스를 탑재한 인스턴스를 시작하고
18시에 다시 중지 시켜놓는 식으로 구성 가능
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/90556d7c-cdc5-47d5-95c1-96e6f3f8d830/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AWS 스터디1]]></title>
            <link>https://velog.io/@soobeen-jeong/AWS-%EC%8A%A4%ED%84%B0%EB%94%941</link>
            <guid>https://velog.io/@soobeen-jeong/AWS-%EC%8A%A4%ED%84%B0%EB%94%941</guid>
            <pubDate>Thu, 17 Nov 2022 09:29:47 GMT</pubDate>
            <description><![CDATA[<h2 id="클라우드-컴퓨팅">클라우드 컴퓨팅</h2>
<p>클라우드 컴퓨팅(Cloud Computing)
클라우드 컴퓨팅이란, <strong>인터넷이라는 통신 서비스를 활용한 컴퓨팅 서비스 종류의 하나로 개인용 컴퓨터가 아닌, 인터넷을 통해 연결된 원격 컴퓨터를 활용하는 기술</strong>을 말합니다. 쉽게 말해 &#39;개인용 컴퓨터보다 성능이 뛰어난 컴퓨터나 저장장치 등의 컴퓨터 자원을 다른 곳에서 빌려 사용할 수 있도록 처리해주는 IT 기술이다&#39;라고 할 수 있습니다. 이러한 클라우드 컴퓨팅 자원에 대해 언제, 어디서나, 인터넷을 사용해 손쉽게 접근이 가능하며 최소한의 노력으로 최단 시간에 컴퓨터 자원을 늘리거나 줄이는 것이 가능합닌다. 또한 Pay-Per-Use Pricing이 적용되어 사용한 만큼만 비용을 지불하면 됩니다. 집에서 사용하는 전기, 가스, 수도 요금과 같이 한달 사용량을 측량하여 사용한 만큼 비용을 지불하는 것과 같이 클라우드 서비스도 매월 자원을 사용한 만큼에 대해 비용으로 지불하게 됩니다.</p>
<h3 id="클라우드-컴퓨팅-모델">클라우드 컴퓨팅 모델</h3>
<p>Infrastructure as a Service(IaaS)
IaaS로 줄여 쓰기도 하는 Infrastructure as a Service는 클라우드 IT의 기본 빌딩 블록을 포함하고 일반적으로 네트워킹 기능, 컴퓨터(가상 또는 전용 하드웨어) 및 데이터 스토리지 공간을 제공합니다. Infrastructure as a Service(IaaS)는 IT 리소스에 대해 가장 높은 수준의 유연성과 관리 제어를 제공하며 오늘날 많은 IT 부서와 개발자에게 익숙한 기존 IT 리소스와 가장 비슷합니다.</p>
<p>Platform as a Service(PaaS)
Platform as a Service(PaaS)를 사용하면 조직은 기본 인프라(일반적으로 하드웨어와 운영 체제)를 관리할 필요가 없어 애플리케이션 개발과 관리에 집중할 수 있습니다. 즉, 애플리케이션 실행과 관련된 리소스 구매, 용량 계획, 소프트웨어 유지 관리, 패치 또는 다른 모든 획일적인 작업에 대한 부담을 덜어 더욱 효율적이 되도록 해줍니다.</p>
<p>Software as a Service(SaaS)
Software as a Service는 서비스 제공업체에 의해 실행되고 관리되는 완전한 제품을 고객에게 제공합니다. 대부분의 경우 Software as a Service라고 하면 최종 사용자 애플리케이션을 말합니다. SaaS 오퍼링을 사용하면 서비스가 어떻게 유지 관리되는지 또는 기본 인프라가 어떻게 관리되는지 생각할 필요가 없으며 소프트웨어 이 특정 부분을 어떻게 사용할지만 생각하면 됩니다. SaaS 애플리케이션의 일반적인 예로는 이메일 제품용 추가 기능을 관리할 필요가 없고 이메일 프로그램이 실행되는 서버 및 운영 체제를 유지 관리하지 않고 이메일을 보내고 받을 수 있는 웹 기반 이메일이 있습니다.</p>
<h3 id="클라우드-컴퓨팅-배포-모델">클라우드 컴퓨팅 배포 모델</h3>
<p>클라우드
클라우드 기반 애플리케이션은 클라우드상에 완전히 배포되며 애플리케이션의 모든 부분이 클라우드에서 실행됩니다. 클라우드의 애플리케이션은 클라우드에서 생성되었거나 클라우드 컴퓨팅의 이점을 활용하기 위해 기존 인프라에서 클라우드로 마이그레이션되었습니다. 클라우드 기반 애플리케이션은 낮은 수준의 인프라상에 구축할 수 있고 또는 주요 인프라를 관리, 설계 및 확장할 필요가 없는 높은 수준의 서비스를 사용할 수 있습니다.</p>
<p>하이브리드
하이브리드 배포는 클라우드 기반 리소스와 클라우드에 위치하지 않은 기존 리소스 간에 인프라와 애플리케이션을 연결하는 방법입니다. 클라우드와 기존 온프레미스 인프라 간에 가장 일반적인 하이브리드 배포 방법은 클라우드 리소스를 내부 시스템에 연결하면서 조직의 인프라를 클라우드로 확장하는 것입니다. AWS가 하이브리드 배포에 어떻게 도움을 줄 수 있는지 자세히 알아보려면 하이브리드 페이지를 방문하세요.</p>
<p>온프레미스
가상화 및 리소스 관리 도구를 사용하여 온프레미스에 리소스를 배포하는 것을 “프라이빗 클라우드”라고 부르기도 합니다. 온프레미스 배포는 클라우드 컴퓨팅이 가진 많은 장점을 제공하지는 않지만 전용 리소스를 제공하는 온프레미스 기능이 필요할 때가 있습니다.  대부분의 경우 온프레미스 배포 모델은 리소스 활용도를 높이기 위해 애플리케이션 관리 및 가상화 기술을 사용한다는 점에서 레거시 IT 인프라와 같습니다.
출처:<a href="https://aws.amazon.com/ko/types-of-cloud-computing/">https://aws.amazon.com/ko/types-of-cloud-computing/</a></p>
<h3 id="가상화-종류">가상화 종류</h3>
<h4 id="hosted-hypervisor-가상화">Hosted Hypervisor 가상화</h4>
<p>기존 OS (Host OS)와 별개로 가상화 SW를 이용해서 가상 HW를 구성/제공하는 가상화 방법
Hypervisor를 지원하는 CPU 환경에서만 가능
Hypervisor 환경에서 가상 HW를 구성한 가상머신 (virtual machine)
Host OS와 Guest OS 별도 설치 사용 -&gt; 자원관리 측면에서 많은 자원소모 발생
가상머신의 크기가 SW적으로 하나의 컴퓨터에 대한 자원들을 관리하므로 용량이 큰 편
가상화 SW</p>
<blockquote>
<p>VMWare
VirtualBox</p>
</blockquote>
<h4 id="os-가상화-bare-metal-hypervisor">OS 가상화 (bare metal hypervisor)</h4>
<p>기존 OS (호스트 OS) kernel을 수정하여 가상화 기능 제공 =&gt; KVM
가상의 HW 생성 없이 물리적인 HW를 가상화 기술을 이용하여 공유
자원관리 측면에서 bare metal 방식보다 효과적 &amp; 크기 측면에서도 더 적은 크기로 제공
public cloud 제공업체에서 주로 활용
public cloud의 모든 서비스는 가상환경을 이용하여 제공</p>
<h4 id="application-가상화">Application 가상화</h4>
<p>Application 실행 환경을 가상화하여 좀 더 쉽게 app을 배포/운영 장점
ex) docker</p>
<h2 id="aws-2가지-종류의-계정">aws 2가지 종류의 계정</h2>
<p><strong>1.  루트 사용자의 개념</strong>
AWS 루트 사용자는 회원가입 시 만든 계정으로서 모든 AWS 권한을 갖고 있는 사용자입니다. 이 계정은 탈취당할 시 복구가 매우 어려울 뿐만 아니라, 최근에는 해커들이 비트코인 채굴에 AWS 계정을 착취하여 사용하기 때문에 상상을 초월하는 과금폭탄을 맞을 수 있습니다. 실제로 최근 국내에서 AWS 계정이 해킹을 당하여 과금만 3억이 나온 사례도 있습니다. 따라서, 루트 사용자는 계정 설정을 변경하거나 과금 관리(i.e., Billing) 등 관리 목적으로만 사용하는 것이 바람직합니다. 이처럼 루트 사용자는 최대한 사용을 자제하고 로그인 시 Multi Factor Authentication(MFA)과 같은 OTP 사용을 권장하고 있습니다. </p>
<p><strong>2.  IAM 사용자의 개념</strong>
루트 사용자는 탈취 당할 시 치명적인 문제를 야기할 수 있기 때문에 AWS 관리를 제외한 서비스 관리용 계정이 필요한데, 이러한 계정이 바로 IAM 사용자입니다. IAM은 Identity and Access Management의 약자로, 특정 사용자나 그룹의 서비스 혹은 리소스에 대한 접근 권한을 관리하는 서비스입니다. 쉽게 말하자면, 누가, 언제, 어디에서, 어떤 서비스를, 어떻게 접근하고 사용할 수 있을지 관리해 주는 역할을 합니다. IAM은 지역별(region) 서비스가 아닌 글로벌 서비스라는 점이 특징입니다.</p>
<h2 id="aws-서비스-이용-방법">AWS 서비스 이용 방법</h2>
<h4 id="aws-console-이용">AWS Console 이용</h4>
<p>일반적인 (가장 많이 사용) AWS 서비스 사용 방법 - GUI 방식
AWS 서비스 셍성, 모니터링, 삭제, 변경 등을 GUI 방식으로 운영
dashboard를 통해 개별 서비스 현황 파악 가능
시스템 운영자(관리자), application 개발자</p>
<h4 id="aws-cli-command-line-interface-명령-입력-방식-이용">AWS CLI (Command Line Interface, 명령 입력 방식) 이용</h4>
<p>명령 프롬프트(터미널)에서 명령어 기반으로 AWS 서비스 사용/관리 방법 - CUI
명령을 통해 세세한 관리 수행
별도의 설치 프로그램으로 AWS CLI 설치 후 사용
시스템 운영자(관리자), application 개발자
CLI 사용을 위한 프로그램</p>
<p>Windows
AWS 가상 컴퓨팅 사용시 : ssh client 프로그램 (putty, xshell 등)
Windows에 직접 CLI 설치시: 명령 프롬프트, windows terminal, power shell 사용
Linux/MacOS - 터미널 프로그램</p>
<h4 id="aws-sdk-software-development-kit-sw-개발-환경-이용">AWS SDK (Software Development Kit, SW 개발 환경) 이용</h4>
<p>application program에서 API (Application Programming Interface, 함수 (function) 집합)를 이용하여 AWS 서비스 사용
별도 설치 필요
application 개발자</p>
<h4 id="iac-infrastructure-as-a-code-이용">IaC (Infrastructure as a Code) 이용</h4>
<p>Infra 구축을 코드를 이용하여 관리하는 방법
AWS 서비스 생성 및 운영에 대한 내용을 Code 형식을 사용하여 일괄적으로 관리하는 방법
복잡한 Infra를 일관성있게 유지하면서 관리하기 위한 목적
시스템 운영자 (관리자)
대표적인 IaC Utility
AWS CloudFormation
Ansible
Terraform - Windows 환경에서 많이 사용
참조:<a href="https://velog.io/@peppie0192">https://velog.io/@peppie0192</a></p>
<h2 id="aws-글로벌-인프라">AWS 글로벌 인프라</h2>
<p>글로벌인프라 <a href="https://aws.amazon.com/ko/about-aws/global-infrastructure/">https://aws.amazon.com/ko/about-aws/global-infrastructure/</a></p>
<ul>
<li>25개의 리전</li>
<li>80개의 가용영역(Availability Zone - AZ)<ul>
<li>한국은 가용영역 4곳</li>
</ul>
</li>
<li>5개의 local Zone과 13개의 Wavelength Zone</li>
<li>245개의 국가와 지역에서 서비스 제공</li>
<li>각 리전은 이중화된 100G 케이블(해저 광케이블)로 연결 및 암호화</li>
<li>AWS 글로벌 인프라 맵<ul>
<li><a href="https://aws.amazon.com/ko/about-aws/global-infrastructure/regions_az/">https://aws.amazon.com/ko/about-aws/global-infrastructure/regions_az/</a></li>
<li>해저케이블맵 <a href="https://www.submarinecablemap.com/">https://www.submarinecablemap.com/</a></li>
</ul>
</li>
</ul>
<h4 id="aws-가-이렇게-많은-리전과-가용영역을-가지는-이유">aws 가 이렇게 많은 리전과 가용영역을 가지는 이유?</h4>
<ul>
<li>거리에 따른 지연<ul>
<li>레이턴시(Latency) - 패킷을 전송하는 곳에서부터 전달받는 곳까지 이동하는 데 걸리는 시간</li>
<li>전파 지연(propagation delay) : 송신측 → 수신측으로 이동하는데 필요한 시간, 총 이동거리 대비 신호가 이동하는 속도로 측정</li>
<li>광신호 속도(진공- 30만km/s , 광섬유내 20만km/s)<ul>
<li>적도 둘래 : 4만km -&gt; 약 200ms</li>
<li>왕복을 해야하기 때문에 시간*2 해야함</li>
</ul>
</li>
</ul>
</li>
<li>대부분의 사람들은 시스템에서 100~200ms 정도의 지연을 감지하고 300ms 이상시 &#39;느리다&#39;라고 인식</li>
<li>AWS 리전 간 레이턴시 확인 <a href="https://www.cloudping.co/grid">https://www.cloudping.co/grid</a></li>
<li>사용자 브라우저와 리전 간 레이턴시 확인 <a href="https://www.cloudping.info/">https://www.cloudping.info/</a></li>
<li>법적 규제 및 데이터 거버넌스</li>
<li>리전 내에서 사용 가능한 서비스</li>
<li>재해극복</li>
</ul>
<h2 id="리전지역">리전(지역)</h2>
<ul>
<li><strong>리전</strong>이란 AWS가 전 세계에서 데이터 센터를 클러스터링하는 물리적 위치<ul>
<li>각 AWS 리전은 지리적 영역 내에서 격리되고 물리적으로 분리된 여러 개의 AZ로 구성</li>
<li>리전은 최소 2개의 가용 영역으로 구성되고 최대 6개의 가용 영역으로 구성된 리전도 있음</li>
<li>리전끼리는 aws 백본 네트워크로 연결되어 있음
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/9f223a67-60f6-4281-9ad9-6c2f95eda96c/image.png" alt=""></li>
</ul>
</li>
</ul>
<h4 id="리전-선택시-고려사항">리전 선택시 고려사항</h4>
<ul>
<li>내가 필요한 서비스를 포함하는지?</li>
<li>애플리케이션 및 데이터에 해당 리전이 적합한지?</li>
<li>고객에 대한 Latency 고려</li>
<li>특정 리전에 원하는 AWS 서비스가 아직 준비되지 않은 경우가 있음.
리전별로 다른 비용 고려
같은 아시아 내라도 국가에 따라 비용이 다를 수 있음</li>
</ul>
<h2 id="가용영역-az-availability-zone">가용영역 AZ (Availability Zone)</h2>
<p>AZ(가용 영역)는 AWS 리전의 중복 전력, 네트워킹 및 연결이 제공되는 하나 이상의 개별 데이터 센터로 구성</p>
<ul>
<li>즉 리전이 동일해도 다른 가용 영역에 AWS 서비스를 각각 배치했다면 물리적으로는 복수의 데이터센터를 사용하는 것</li>
<li>각 센터는 광통신 전용망(고속 프라이빗 네트워크)으로 연결되어 있음<ul>
<li>동일 리전 내 존재하는 복수의 AZ는 서로 물리적으로 격리되어 있지만, 좋은 품질의 네트워크 연결을 통해 논리적으로 연결되어 있다.</li>
<li>물리적 격리란 자연재해 및 정전 등 사고에 자유롭다는 의미,</li>
<li>고가용성(HA)를 위해 리전 내 복수의 가용 영역에 데이터와 애플리케이션을 배포하는 것이 좋다.</li>
</ul>
</li>
<li>AWS 한개의 센터에는 50000~80000대의 물리적 서버가 존재한다고 함</li>
<li>가용역역 자체는 장애가 날 수 있음 - 예시) 도쿄 리전 AZ 장애</li>
</ul>
<p>가용영역과 외부(인터넷) 연결을 위한 이중화된 트랜짓 센터(엣지) 가 존재
    - 트랜짓 센터는 AWS 글로벌 백본 네트워크에 연결이 되고, 엣지 POP을 통해서 CDN 등 서비스 함</p>
<p>AZ는 표시할 때는 리전 코드와 식별문자를 조합하여 표현한다.
리전은 국가코드, 위치에 숫자로 표기하며, AZ는 알파벳 소문자를 사용한다.</p>
<blockquote>
<p>us-east-1
미국 동부(버지니아 북부)
us-east-2
미국 동부(오하이오)</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/608970bc-dbfb-44a0-9d55-d90ce2a5b2b1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/a669a408-56a0-48af-8bfe-6dbe241be4f7/image.png" alt=""></p>
<h2 id="elastic-ip">Elastic IP</h2>
<ul>
<li>AWS의 Elastic IP를 사용하여 인스턴스 장애가 발생한 AZ로부터 다른 영역으로 인스턴스 주소를 신속히 변경할 수 있다.</li>
<li>Elastic IP는 AWS에서 제공하는 Static ip Address service<ul>
<li>ip주소는 변경되지 않은 상태에서 해당 ip로 연결하는 AZ는 문제가 발생한 곳에서 문제가 없는 곳으로 빠르게 변경 가능하다
참조:<a href="https://velog.io/@swhan9404">https://velog.io/@swhan9404</a></li>
</ul>
</li>
</ul>
<h2 id="amazon-ec2">Amazon EC2</h2>
<p>EC2는 풀어서 쓰면 <strong>ECC(Elastic Compute Cloud)</strong>의 약자입니다. 말그래도 가상의 컴퓨터를 이야기 합니다. 서버를 빌리고자 할 때는 디폴트로 온디맨드 형식으로 빌릴수 있으며, 가장 기본적인 t2.micro 사이즈의 컴퓨터를 선택하여 시간당 16원 정도 부과됩니다. EC2를 빌리고자 할 때는 다음 몇가지를 신경쓰면 됩니다.</p>
<p><strong>EC2 사용 이점</strong>
컴퓨터의 필요한 만큼 크기 설정 가능. 
컴퓨팅 리소스에 대한 포괄적인 제어권 제공. 
보안 및 네트워크 구성, 스토리지 관리 효과적</p>
<p><strong>EC2에서 인스턴스 유형에 사용되는 자원</strong>
CPU
메모리
스토리
네트워킹 용량
EC2에서는 위 자원의 조합으로 운영하려는 서버에 최적화된 환경을 제공함. 운영자는 이에 맞게 적합한 리소스 조합을 선택할 수 있음.</p>
<p><strong>인스턴스 유형 종류</strong></p>
<blockquote>
<p><strong>범용</strong>(General Purpose) :모든 리소스의 균형을 알맞게 유지하여 사용 가능한 유형 
<strong>컴퓨팅 최적화</strong>(Compute Optimized) : 고성능 프로세서의 이점을 활용하는 유형 (일괄처리, 머신러닝 등)
<strong>메모리 최적화</strong>(Memory Optimized) : 메모리에서 대규모 데이터를 처리하는 유형 (관계형 및 NoSQL 데이터베이스, &#39;키-값&#39; 유형의 데이터, 비정형 데이터 처리)
<strong>가속화된 컴퓨팅</strong>(Accelerated Computing) : 그래픽 처리와 같은 하드웨어 기반 컴퓨팅 리소스에 비중을 두는 유형
<strong>스토리지 최적화</strong>(Storage Optimized) : 로컬 스토리지의 초대형 데이터 세트에 대한 순차적 읽기 및 쓰기 엑세스가 많이 필요한 작업에 적합한 유형 (대량 병렬 처리, 데이터 웨어하우스, 하둡 분산, 로그 처리 등)
우선 위와 같이 크게 5가지로 분류할 수 있는데, 각 유형마다 성능별 여러개로 분류된다.</p>
</blockquote>
<p><strong>AMI(Amazon Machine Image)</strong> - 아마존에서 제작한 기본 운영체제 이미지 -&gt; 가상 이미지에 여러 프로그램을 설치하여 커스텀 이미지로 만들수도 있음</p>
<p><strong>인스턴스 유형</strong> - 기본은 t2.micro이나 EC2 요금표를 보고 적절히 선택, 간혹 1GB의 적은 메모리로 인해 프로그램 빌드시 느릴 수 있음</p>
<p><strong>인스턴스 세부정보</strong>
<strong>VPC</strong> : 우리가 VPC를 굳이 만들지 않아도 각 리전마다 기본 VPC 및 서브넷이 설정되어 있음
<strong>퍼블릭 IP 자동 할당</strong>: 외부에서 접근할 수 있는 IP를 할당해줍니다.</p>
<p><strong>스토리지(기본) , 태그</strong> (대시보드에서 편하게 보기위해 Name을 키, 원하는 이름을 값으로 설정)</p>
<p><strong>보안그룹</strong>은 NACL과는 다른 AWS 리소스에 사용되며, 상태 저장 방화벽인 것이 특징입니다.(인바운드 규칙 설정시 자동으로 아웃바운드도 같게 설정)
    - 보통 터미널 접속을 위한 ssh와 웹 접속을 위한 http, https 가 많이 사용되며 서버에 깔리는 애플리케이션에 따라 추가할 수 있습니다.
    - 다만 모든 포트를 개방한 후 특정 포트만 차단하는 블랙리스트 방식보다는 모든 포트를 차단 후 특정 포트만 열어두는 화이트리스트 방식이 안전하다</p>
<p>마지막으로 검토시작 버튼을 누르면 우리가 빌린 EC2에 접속할 수 있는** 키페어 쌍**을 다운받을 수 있다, 한 번 잃어버리면 다시 발급이 불가하니 유의할것</p>
<h2 id="ec2-사용법">EC2 사용법</h2>
<ol>
<li><p><a href="https://console.aws.amazon.com/ec2/">https://console.aws.amazon.com/ec2/</a> 링크 클릭하여 Amazon EC2 콘솔을 연다.</p>
</li>
<li><p>콘솔의 우측 상단에 리전을 선택하고, &#39;인스턴스 시작&#39; 버튼을 누른다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/590028ec-6dd9-4b98-bb15-f3d28e6f036a/image.png" alt=""></p>
</li>
<li><p>아마존 머신 이미지(AMI)를 선택한다.</p>
<ul>
<li>아마존 리눅스 이외에 딥러닝 리눅스 환경이 있는 것도 확인할 수 있다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/cc6c6eec-8e2f-4e17-aa7e-0179f4475522/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/8049f1aa-308e-4be6-aed4-bac6372dd0af/image.png" alt=""></li>
</ul>
</li>
<li><p>인스턴스 유형 선택
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/09b139d4-2ab9-4af6-93e7-210f67a3dab3/image.png" alt=""></p>
</li>
<li><p>키 페어에 대한 메시지가 나타나면 키 페어 생성하여 선택한다. (키 페어 없이 사용하는 옵션은 선택하지 말것!! 인스턴스 연결할 수 없음)
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/9b3d5294-c9c4-4e97-a101-ddb86a0dbb4c/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/b52a6212-002e-4f53-884b-200eca63b9e7/image.png" alt="">
나는 기존에 있는 키페어를 선택했지만 키 페어 생성할 수 있다.</p>
</li>
<li><p>네트워크 설정에서 보안 그룹을 생성할 수 있다. 물론 기존 보안 그룹을 선택 가능하다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/f0b57d15-e9e9-4dda-b2ac-35930b5e1fba/image.png" alt=""></p>
</li>
<li><p>편집에 들어가면 해당화면이 나오며 VPC와 서브넷, ip 자동할당, 인바운드 보안 규칙을 수정할 수 있다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/0cb4f669-61e9-4216-a3f4-07c253cc2441/image.png" alt="">
나는 기존의 인바운드 규칙을 선택하였다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/ed17658f-7230-4f26-acda-105bc891a3ad/image.png" alt=""></p>
</li>
<li><p>마지막으로 스토리지 구성을 설정하고 인스턴스 시작 클릭한다. 고급 세부 정보도 있지만 필요에 의해 수정하면 된다.<img src="https://velog.velcdn.com/images/soobeen-jeong/post/c5638adb-fdbb-48cc-b090-64de5b61c393/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/c4e4f31e-2274-4325-8417-f37009d92818/image.png" alt=""></p>
</li>
</ol>
<p>9.인스턴스 상태를 실행 중 상태로 바꾼다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/4e775016-a0b2-4459-9c95-deeb70de5ecc/image.png" alt=""></p>
<h3 id="ec2-instance-상태">EC2 instance 상태</h3>
<p>pending
EC2 instance 구동준비 상태, 요금 미청구</p>
<p>running
EC2 instance 구동 상태, 요금 청구</p>
<p>stopping
EC2 instance 구동중지 상태, 요금 미청구, 스토리지 비용은 청구, 메뉴 - 인스턴스 정지</p>
<p>shutting down
EC2 instance 종료준비 상태, 요금 미청구</p>
<p>terminated
EC2 instance 삭제, 요금 미청구, 메뉴 - 인스턴스 종료
(중지 vs 종료 헷갈리지 말 것!)</p>
<h3 id="ec2-instance-ip-address">EC2 instance IP Address</h3>
<p><strong>퍼블릭 IPv4 주소</strong>
인터넷에서 사용가능한 IP</p>
<p>EC2 instance가 실행중인 상태에서만 유지 (동적 IP 주소)
기본적으로 EC2 insatnce에 부여된 퍼블릭 IPv4 주소는 동적할당된 IP 주소
-&gt; EC2 instance가 중지되었다가 다시 실행되면 새로운 IP 주소 부여</p>
<p><strong>프라이빗 IPv4 주소</strong>
서브넷에 설정한 IP주소 CIDR 범위에서 할당된 로컬 IP, VPC 내에서 통신 가능</p>
<h4 id="ec2-instance-요금-계산">EC2 instance 요금 계산</h4>
<p>EC2 instance 실행 시간
EC2 instance가 중지 상태인 경우 요금 계산에서 제외</p>
<p>인스턴스 스토리지 볼륨(EBS) 사용량
EC2 instance가 중지 상태인 경우라도 사용요금 부과</p>
<p>네트워크 사용량
패킷 전송(송신)에 대한 비용</p>
<h4 id="탄력적-ip-eip">탄력적 IP (EIP)</h4>
<p>Elastic IP, 고정 IP; 5개까지의 IP를 EIP로 할당 가능</p>
<h4 id="탄력적-ip-사용-경우">탄력적 IP 사용 경우</h4>
<p>EC2 instance에 고정 IP를 부여하고자 하는 경우
NAT Gateway를 사용하는 경우 반드시 EIP 사용
고정 IP 필요성이 있는 경우 사용</p>
<h4 id="eip-요금">EIP 요금</h4>
<p>EIP가 EC2 instance에 할당되고 실행 중일 때는 요금 미청구
EIP가 EC2 instance에 할당되고 중지일 때는 요금 청구
EIP가 첨부된 네트워크 인터페이스가 연결되어 있으면 요금 미청구
그 외는 요금 청구 (참고)</p>
<h4 id="eip-생성">EIP 생성</h4>
<p>EC2 메뉴 -&gt; 탄력적 IP -&gt; 탄력적 IP 주소 할당</p>
<p>네트워크 경계 그룹 - region
퍼블릭 IPv4 주소 풀 (pool) - Amazon의 IPv4 주소 풀
태그 설정</p>
<h4 id="고정-ip를-사용하고자-하는-인스턴스에-eip-연결">고정 IP를 사용하고자 하는 인스턴스에 EIP 연결</h4>
<p>EC2 메뉴 -&gt; 탄력적 IP -&gt; 연결할 EIP 인스턴스 선택 -&gt; 작업 메뉴 -&gt; 탄력적 IP주소 연결</p>
<p>리소스 유형 : 인스턴스
인스턴스 : EIP를 연결할 인스턴스 선택</p>
<h4 id="eip-삭제">EIP 삭제</h4>
<p>EIP에 연결된 인스턴스나 네트워크 인터페이스가 없는 경우에만 삭제 가능</p>
<p>EC2 메뉴 -&gt; 탄력적 IP -&gt; 연결할 EIP 인스턴스 선택 -&gt; 작업 메뉴 -&gt; 탄력적 IP 주소 연결 해제 후 다시 작업 메뉴 -&gt; 탄력적 IP 주소 릴리즈를 선택하여 삭제</p>
<h4 id="인스턴스-접속">인스턴스 접속</h4>
<p>현재 인스턴스 연결하여 접속한 상태이고 웹서버를 접속하기 위해 httpd를 설치해준다
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/28ed335a-d7b9-4c89-b35e-62c4ec013aaf/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/102a534d-5acb-4413-8cc3-96df53bec224/image.png" alt="">
start 명령어까지 해주면 apache2.4가 자동실행된다.
public ip로 접속해야 한다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/ac56e033-b0f3-4b4d-a04d-c4f6f2404de2/image.png" alt="">
이번엔 html 만들려고 한다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/0aca7802-09f8-4f3e-801d-ea0d9b18dd1c/image.png" alt="">
다시 새로고침하면
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/46ebc2c5-ef87-489d-9927-f9acfd027b49/image.png" alt=""></p>
<h2 id="스토리지">스토리지</h2>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/61b89396-c599-40e4-afc3-d55024d3e9b0/image.png" alt=""></p>
<h3 id="스토리지-타입">스토리지 타입</h3>
<p>어떤 곳에 사용하는게 좋은가?
Block Storage : 호스트에서 직접 파일을 액세스하고 기록하며 빠른 성능을 요하는 경우
File Storage : 여러대의 서비스들이 데이터를 공유하고 공유에서 사용해야 하는 경우
Object Storage : 대량의 데이터를 저장하고 또는 앱 컨텐츠로 사용되어야 하거나 다수의 서버에서 해당 데이터에 접근 해야 하는 경우
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/0284355a-ba28-42b4-9905-84bd6410bd04/image.png" alt=""></p>
<h3 id="ebs">EBS</h3>
<ul>
<li>Amazon Elastic Block Storage(EBS)
SAN 방식</li>
<li>EBS는 EC2에서 사용하도록 설계된 영구 지속 블록 스토리지 서비스( 하드 디스크 개념 )<ul>
<li>EBS 볼륨을 활용하여 파일 시스템을 생성하거나 블록 디바이스 자체로 활용(볼륨구성 동적으로 변경가능)</li>
<li>고성능 대규모 데이터 처리와 트랜잭션 집약적인 워크로드에 사용</li>
<li>데이터베이스, 빅데이터 분석, 엔터프라이즈 애플리케이션과 같은 중요한 업무에 활용</li>
<li>볼륨의 크기를 변경은 수동적인 작업</li>
</ul>
</li>
<li>어떨 때 사용하는가?<ul>
<li>데이터를 빠르게 액세스하고, 장기적으로 지속해야하는 경우 적합</li>
<li>단일 EC2 인스턴스의 전용 블록 스토리지<h4 id="특징">특징</h4>
</li>
</ul>
</li>
<li>고가용성</li>
</ul>
<p>99.999% 가용성 제공
데이터 손실 방지를 위해 가용 영역 내에서 자동으로 볼륨 복제</p>
<ul>
<li>안정성
모든 EBS 볼륨 유형은 암호화를 지원
AES-256 및 Amazonb이 관리하는 키인프라를 사용</li>
<li>확장성
애플리케이션 중단없이 볼륨 유형 변경 가능
볼륨 크기 확장 가능</li>
<li>성능
낮은 지연 시간 제공
일정한 I/O 유지</li>
<li>백업
스냅샷을 통해 특정 시점 백업 (특정 시점 스냅샷을 S3에 저장도 가능)
가용영역이나 리전간 스냅샷 복제 가능
마지막 스냅샷 이후 변경된 블록이 저장되는 방식(증분 스냅샷)
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/d13dec30-e0f7-4f47-9eb3-10b529b27ec3/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/1a2640fc-47f6-47c5-804f-76724f7bfc93/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/d259e46f-00cd-46ef-a8a6-2498cb8e2047/image.png" alt=""></li>
</ul>
<h3 id="efs">EFS</h3>
<ul>
<li>Elastic File Storage
NAS 방식</li>
<li>AWS 클라웃드 서비스와 온프레미스 리소스에서 사용할 수 있는 간단하고 확장 가능하며 탄력적인 완전 관리형 탄력적 NFS 파일 시스템
애플리케이션 중단할 필요없이 확장되므로 사용자가 용량을 프로비저닝 및 관리할 필요 없음
프로비저닝 (provisioning) : 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해두는 것</li>
<li>최대 수천개의 EC2 인스턴스를 위한 스토리지이며 동시에 액세스 가능</li>
<li>EFS 파일 시스템은 다중 가용 영역에 걸쳐 데이터와 메타데이터를 저장</li>
<li>네트워크 연결 공유 파일 스토리지 (NFSv4 프로토콜 사용)</li>
<li>VPC 내에서 Ec2 인스턴스는 직접 액세스 할 수 있음</li>
<li>On-promisse 서버는 Direct Connect &amp; VPN 연결을 통해 팡리 시스템 탑재
Direct Connect는 대역폭이 높고 지연 시간이 짧은 전용 네트워크 연결</li>
<li>페타바이트 규모로 탄력적으로 자동 확장 및 축소</li>
<li>Multi AZ
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/53686197-508a-4c4b-a580-27908777cbf6/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/185f8d12-797f-4a88-b186-2642d645d880/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/b5ee831d-7caa-43a2-986a-dfff9f78f939/image.png" alt=""></li>
</ul>
<h3 id="ebs-실습">EBS 실습</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/6d0abe61-d287-442f-bb19-0876c04e7a85/image.png" alt="">
기존 인스턴스 
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/424c665e-5188-4b26-82fc-c8171c492df2/image.png" alt="">
복제 해보자!
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/4b7509e0-d508-4692-bf66-85a722f94c1f/image.png" alt="">
이미지 생성(스냅샷) &gt; MYEC2-clone
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/00274782-abd8-4790-a92a-afa4a2de0ff5/image.png" alt="">
생성된 이미지 확인
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/dd0fbb90-c468-43c0-b3ae-0bc5ef437e97/image.png" alt="">
스냅샷으로 인스턴스 생성
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/324c6708-c3b7-4b28-b70f-1280309a7bdb/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/ec872228-6987-469b-b7de-1c657f7bfda4/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/b964434d-c525-41fd-a7e1-6e867a05b829/image.png" alt="">
스냅샷으로 만든 인스턴스 연결 후 httpd start 시켜주면 이전과 똑같이 화면 출력되는 것을 확인할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/5d73c178-abf9-4f21-af06-b0dfb408534a/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Apache 웹 서비스 구축]]></title>
            <link>https://velog.io/@soobeen-jeong/Apache-%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95</link>
            <guid>https://velog.io/@soobeen-jeong/Apache-%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%B6%95</guid>
            <pubDate>Thu, 17 Nov 2022 09:29:30 GMT</pubDate>
            <description><![CDATA[<h2 id="apache-php-서버-구축">Apache, PHP 서버 구축</h2>
<h3 id="apache-설치">Apache 설치</h3>
<pre><code>sudo apt install apache2</code></pre><p>아파치 활성화</p>
<pre><code>systemctl status apache2</code></pre><pre><code>ps -ef | grep apache2</code></pre><h3 id="아파치-웹-서버-접속-방법">아파치 웹 서버 접속 방법</h3>
<p><a href="http://ip%EC%A3%BC%EC%86%8C">http://ip주소</a>
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/fd1aab9f-5004-4bb2-82f3-78ca116ec4a3/image.png" alt=""></p>
<h4 id="웹-서버-연결-확인">웹 서버 연결 확인</h4>
<pre><code>&lt;html&gt;
&lt;head&gt;
&lt;title&gt;
html test
&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
My First Web Page!!!
&lt;/body&gt;
&lt;/html&gt;</code></pre><p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/3ed0e264-7553-44de-8778-9ecac0508ef9/image.png" alt=""></p>
<h4 id="일반-사용자-계정을-위한-웹-설정">일반 사용자 계정을 위한 웹 설정</h4>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/c0b8c747-eefa-4934-93c8-409831b9e03c/image.png" alt="">
UserDir 앞에 #을 추가한다.</p>
<p>mods-available 디렉터리의 userdir.conf 파일과 userdir.load 파일을 /etc/apache2/modsenabled 디렉터리에서 심볼릭 링크로 연결</p>
<pre><code>sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/userdir.conf</code></pre><pre><code>sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/userdir.load</code></pre><p>설정 파일 변경됬으므로 apache2 서비스 다시 동작</p>
<pre><code>sudo systemctl stop apache2</code></pre><pre><code>sudo systemctl start apache2</code></pre><p>사용자의 홈 디렉터리에 public_html 디렉터리 생성</p>
<pre><code>mkdir public_html</code></pre><p>디렉터리의 접근 권한 조정</p>
<pre><code>chmod 701 .</code></pre><pre><code>chmod 701 public_html</code></pre><h4 id="일반-사용자-계정에서-웹-페이지-작성하기">일반 사용자 계정에서 웹 페이지 작성하기</h4>
<p>public_html 디렉터리 아래에 index.html 파일을 생성</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/ad319b7e-0998-4b07-aa0e-0457dff46a87/image.png" alt="">
웹 브라우저에서 다음과 같이 입력
<a href="http://ip%EC%A3%BC%EC%86%8C/~user">http://ip주소/~user</a></p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/b62a432f-abb8-4026-95a2-045436cfe557/image.png" alt="">
성공!!</p>
<h3 id="호스팅-설정">호스팅 설정</h3>
<h4 id="soobeencom이라는-도메인-이름으로-디렉토리-설정">soobeen.com이라는 도메인 이름으로 디렉토리 설정</h4>
<pre><code>sudo mkdir -p /var/www/soobeen.com/public_html</code></pre><h4 id="log들이-저장도리-디렉토리를-생성">log들이 저장도리 디렉토리를 생성</h4>
<pre><code>sudo mkdir /var/www/soobeen.com/logs</code></pre><h4 id="디렉토리-권한-변경">디렉토리 권한 변경</h4>
<pre><code>sudo chmod 755 /var/www/
sudo chmod 755 /var/www/soobeen.com
sudo chmod 755 /var/www/soobeen.com/public_html
sudo chmod 755 /var/www/soobeen.com/logs</code></pre><p>php 파일 생성
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/b06d6af9-844c-4c8c-aa94-9a0420b9de9c/image.png" alt=""></p>
<h4 id="virtualhost-파일-생성">VirtualHost 파일 생성</h4>
<pre><code>sudo cp /etc/apache2/sites-available/000-default.conf/etc/apache2/sites-available/bind9.conf</code></pre><pre><code>sudo vi /etc/apache2/sites-available/bind9.conf</code></pre><p>VirtualHost 활성화</p>
<pre><code> cd /etc/apache2/sites-available/</code></pre><pre><code>sudo a2ensite bind9.conf</code></pre><pre><code>sudo service apache2 restart</code></pre><p>DNS 서버 설저에서 bind9.kr의 IP 세팅을 변경</p>
<pre><code>sudo vi /etc/bind/db.bind9.zone</code></pre><p>변경 후 nameserver 재시작</p>
<pre><code>systemctl restart resolvconf</code></pre><p>80번 포트 방화벽 허용</p>
<pre><code>ufw allow 80</code></pre><p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/3a532366-bae6-41f5-938a-6ab3c0c713e4/image.png" alt=""></p>
<p>호스팅 서버로 php 페이지 연결 완성</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/024064a7-f311-4e2b-ba76-55ed539b2172/image.png" alt=""></p>
<ul>
<li>추가로 나의 포트폴리오 웹사이트를 아파치 서버를 이용하여 내 아이피 주소로 연결해 보았다.
물론 파일들은 ftp 파일질라를 이용하였다.
apache 서버로 html 페이지 연결 완성</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[DNS 서버 구축 및 MariaDB]]></title>
            <link>https://velog.io/@soobeen-jeong/DNS-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-%EB%B0%8F-MariaDB</link>
            <guid>https://velog.io/@soobeen-jeong/DNS-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-%EB%B0%8F-MariaDB</guid>
            <pubDate>Thu, 17 Nov 2022 09:29:12 GMT</pubDate>
            <description><![CDATA[<h2 id="텔넷과-ssh">텔넷과 SSH</h2>
<p>네트워크에서 데이터를 주는 컴퓨터를 <strong>&#39;서버(Server)&#39;</strong>
데이터를 요청하고 받는 컴퓨터를 *<em>&#39;클라이언트(Client)&#39; *</em></p>
<p>컴퓨터가 데이터를 주고받는 목적은 특정한 기능, 즉 서비스*를 제공하고 사용하기 위한 것입니다. 
네트워크로 연결된 컴퓨터 중 서비스를 제공하는 쪽을 서버라 부르고
그 서비스를 요청하고 받는 쪽을 클라이언트라고 부른다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/e59000d4-ee7d-4778-a8f5-c80ac5fc2a77/image.png" alt=""></p>
<p>서버 클라이언트 구조는 전 세계의 네트워크가 연결된 인터넷의 기반이 되었고, 이를 활용한 대표적인 서비스가 웹 서비스</p>
<h3 id="telnet-사용">telnet 사용</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/271f1cc1-7e60-46c1-996c-5330fcc23ba5/image.png" alt=""></p>
<h3 id="putty-telnet-사용">putty telnet 사용</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/04fceae7-f91c-4b12-9fbd-0cbadaff2674/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/b3e8a87e-b069-4dd6-8127-1d1f449c1b7d/image.png" alt=""></p>
<h3 id="ssh-사용">ssh 사용</h3>
<p>ssh 설치</p>
<pre><code>sudo apt install ssh</code></pre><p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/22687feb-7ed3-4319-8546-ca69b3669b52/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/347cc989-f2c0-44ef-8988-a7332863e53f/image.png" alt=""></p>
<h3 id="putty-ssh-사용">putty ssh 사용</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/b1a66864-b2f3-419a-942c-11f3e255ab67/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/887ef20d-c5a2-4174-87fe-776ba0b0f16e/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/84b72f03-c948-473c-bbdf-445f900cfed7/image.png" alt=""></p>
<h2 id="파일-송수신">파일 송수신</h2>
<h3 id="ftp-서버-설치">ftp 서버 설치</h3>
<pre><code>sudo apt install vsftpd</code></pre><p>FTP 설정 파일: /etc/vsftpd.conf 파일</p>
<p>vsftpd.conf 옵션</p>
<blockquote>
<ul>
<li>anonymous_enable: anonymous(익명) 사용자의 접속을 허가할지 설정</li>
</ul>
</blockquote>
<ul>
<li>local_enable: 로컬 사용자의 접속 허가 여부를 설정</li>
<li>write_enable: 로컬 사용자가 저장, 삭제, 디렉터리 생성 등의 명령을 실행하게 할 것인지 설정
(anonymous 사용자는 해당 없음)</li>
<li>anon_upload_enable: anonymous 사용자의 파일 업로드 허가 여부를 설정</li>
<li>anon_mkdir_write_eanble: anonymous 사용자의 디렉터리 생성 허가 여부를 설정</li>
<li>dirlist_enable: 접속한 디렉터리의 파일 리스트를 보여줄지 설정</li>
<li>download_enable: 다운로드의 허가 여부를 설정</li>
<li>listen_port: FTP 서비스의 포트 번호를 설정(기본: 21번)</li>
<li>deny_file: 업로드를 금지할 파일을 지정(예: deny_file={<em>.mpg,</em>.mpeg,*.avi})</li>
<li>hide_file: 보여주지 않을 파일을 지정(예: hide_file={<em>.gif,</em>.jpg,*.png})</li>
<li>max_clients: FTP 서버의 동시 최대 접속자 수를 지정<blockquote>
<ul>
<li>max_per_ip: 1개 PC가 동시에 접속할 수 있는 접속자 수를 지정</li>
</ul>
</blockquote>
</li>
</ul>
<p>FTP 서버 설정하고 동작시키기: /etc/vsftpd.conf 파일
systemd 데몬으로 관리</p>
<pre><code>sudo systemctl stop vsftpd
sudo systemctl start vsftpd</code></pre><pre><code>telnet 0 21</code></pre><h3 id="윈도우에서-ftp-서버-연결filezila">윈도우에서 FTP 서버 연결(FileZila)</h3>
<p>22번 포트로 연결하여 보안 접속한 경우
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/11d64a09-0e84-42ce-bd85-c5586d0daea3/image.png" alt=""></p>
<h2 id="dhcp-서버">DHCP 서버</h2>
<h3 id="dhcp-dynamic-host-configuration-protocol">DHCP (Dynamic Host Configuration Protocol)</h3>
<p>자신의 NW 안의 클라이언트 컴퓨터가 부팅될 때 자동으로 IP주소, 서브넷 마스크, 게이트웨이 주소, DNS 서버 주소를 할당
장점: 관리 및 이용 편리, 한정된 IP주소로 더 많은 IP주소가 있는 것처럼 활용 가능
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/772aca62-73cb-4406-8d41-cc21c1bf5a29/image.png" alt=""></p>
<h2 id="네임-서버">네임 서버</h2>
<p>네임 서버 = DNS(Domain Name System) 서버
도메인 이름을 IP 주소로 변환시켜 주는 역할
= 이름 해석(Name Resolution)
예) <a href="http://www.nate.com">www.nate.com</a> → 120.50.131.112</p>
<p>①가장 초기의 네트워크 접속 방법
컴퓨터가 몇 대 안 됨
사용자가 모두 외워서 직접 IP주소로 접근함</p>
<p>② hosts 파일을 이용하여 네트워크 접속
인터넷에 연결된 컴퓨터가 수십 ~ 수백대로 늘어남
‘hosts’ 파일에 URL과 IP주소를 기록해 놓는 방식 사용
예) 102.54.94.97 rhino.acme.com
38.25.63.10 x.acme.com
127.0.0.1 localhost
::1 localhost
Windows
C:\Windows\system32\drivers\etc\hosts
리눅스
/etc/hosts</p>
<p>③ 네임 서버를 이용하여 네트워크 접속
기하급수적으로 늘어나는 네트워크 상의 컴퓨터에 대한 모든 IP 정보를 파일 하나에 기록하는 것은 무리
이름 해석(Name Resolution)을 전문적으로 해 주는 서버 컴퓨터가 필요 해짐 (=DNS 서버 = 네임 서버)
전화 안내 서비스인 114와 같은 역할
네임 서버는 인터넷에서 변화하는 모든 컴퓨터의 URL과 IP 정보를 거의 실시간으로 제공하므로, 사용자는 더 이상 URL에 해당하는 IP주소를 신경 쓸 필요가 없어짐.
URL만 알고 있으면 어디서든지 해당하는 컴퓨터에 접속
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/e364f7ad-b876-4cc7-855d-3d4871c0736b/image.png" alt=""></p>
<p>캐싱 전용 네임 서버
PC에서 URL로 IP주소를 얻고자 할 때, 해당하는 URL의 IP주소를 알려주는 네임 서버를 말함</p>
<p>마스터 네임 서버
도메인에 속해 있는 컴퓨터들의 이름을 관리하고, 외부에 해당 컴퓨터의 IP주소를 알려주는 역할</p>
<p>라운드 로빈(Round Robin) 방식의 네임 서버
여러 대의 웹 서버를 운영해서, 웹 클라이언트가 서비스를 요청할 경우에 교대로 서비스를 실시하도록 하는 방식</p>
<h2 id="dns-구현">DNS 구현</h2>
<h3 id="dns-실습용-네트워크-구성">DNS 실습용 네트워크 구성</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/db6c6584-a965-4ce8-ae9e-db9865fe18b7/image.png" alt=""></p>
<p>실습용 도메인과 대응 IP
도메인         대응되는 값
bind9.kr      1.1.1.1
dns.bind9.kr  2.2.2.2
kt.bind9.kr   3.3.3.3
ns.bind9.kr   4.4.4.4
<a href="http://www.bind9.kr">www.bind9.kr</a>  dns.bind9.kr</p>
<h3 id="bind9-설치">BIND9 설치</h3>
<pre><code> sudo apt-get install bind9</code></pre><p>서버를 네임서버로 인식시키기
/etc/resolv.conf 에 nameserver 값에 127.0.0.53 추가하여 네임서버가 자기 자신이 되도록 인식</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/20b81430-df32-4b2a-935a-549c4a624513/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/34884325-2609-4a63-adec-b3c9a0064695/image.png" alt="">
sudo vi named.conf.default-zones 파일에 zone 도메인 정보 추가
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/06c7829e-2f76-49f2-8278-7306caf2433c/image.png" alt=""></p>
<p> sudo cp db.local db.bind9.zone 기존 파일의 틀 이용하기위해 복사</p>
<pre><code>sudo db.bind9.zone</code></pre><p><a href="http://www.soobeen.com">www.soobeen.com</a> 도메인 생성</p>
<h3 id="bind9-dns-서버-설정">bind9 DNS 서버 설정</h3>
<pre><code>sudo vi /etc/bind/named.conf.options</code></pre><p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/e890bda8-ae67-46e1-96bc-3d10a63d9567/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/70501bfb-fb69-4dd2-8099-03dda33edef2/image.png" alt=""></p>
<blockquote>
<h3 id="방화벽-설정">방화벽 설정</h3>
</blockquote>
<ul>
<li>TCP 및 UDP 53 포트 개방</li>
<li>ufw allow 53/tcp</li>
<li>ufw allow 53/udp
• ufw 활성화 -&gt; 비활성화 되어 있다면 활성화 시킬 때</li>
<li>sudo ufw enable
• ufw 상태 정보 조회</li>
<li>sudo ufw status
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/7c1abf32-4efe-4bde-9d0a-ad8386308c3d/image.png" alt=""></li>
</ul>
<h3 id="dns-server-로컬-테스트">DNS Server 로컬 테스트</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/3f18334b-1dfc-4fd5-ab68-3bb40b3055aa/image.png" alt=""></p>
<pre><code>nameserver DNS server IP   ex.192.168.160.130</code></pre><p>네트워크 설정 재시작</p>
<pre><code>sudo systemctl restart NetworkManager
또는
sudo nmcli networking off
sudo nmcli networking on</code></pre><p>nslookup 으로 확인
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/8e008f54-4d10-47fe-a693-e1b7c3c1a3b3/image.png" alt=""></p>
<h4 id="server-side">[server side]</h4>
<ul>
<li>우선 DHCP 실습을 통해 서버 side에 고정 IP를 갖춘걸 전제</li>
<li>bind9 설치 : sudo apt-get install bind9</li>
<li>/etc/resolv.conf의 nameserver 값에 고정IP 추가</li>
<li>/etc/hostname에 ns.bind9.kr 등록</li>
<li>cd /etc/bind -&gt; vi named.conf.default-zones 파일에 bind9.kr 관련 도메인 정보 추가</li>
<li>vi /etc/bind/named.conf.options에 특정 설정 적용 후 bind9 재시작</li>
<li>cp db.local db.bind9.zone -&gt; vi db.bind9.zone로 *.bind9.kr의 기타 DNS 설정</li>
<li>방화벽 설정 -&gt; TCP/UPD 53 포트 개방 : ufw allow 53/tcp, ufw allow 53/udp</li>
<li>ufw 활성화 : sudo ufw enable</li>
<li>ufw 상태정보 조회 : sudo ufw status</li>
<li>sudo apt-get install resolvconf -&gt; sudo vi /etc/resolvconf/resolv.conf.d/head로 서버IP 추가 및 확인</li>
<li>nslookup [도메인명] 으로 확인</li>
</ul>
<h4 id="client-side">[client side]</h4>
<ul>
<li>sudo apt-get install resolvconf</li>
<li>sudo vi /etc/resolvconf/resolv.conf.d/head 에서 서버IP 추가</li>
<li>방화벽 설정 -&gt; TCP/UPD 53 포트 개방 : ufw allow 53/tcp, ufw allow 53/udp</li>
<li>ufw 활성화 : sudo ufw enable</li>
<li>reboot</li>
<li>cat /etc/resolv.conf에서 서버 등록 확인</li>
<li>nslookup [도메인명] 으로 확인 ex) nslookup <a href="http://www.naver.com">www.naver.com</a> 등</li>
</ul>
<h2 id="sql-기초">SQL 기초</h2>
<h4 id="mysql-샘플-데이터-설치">MySQL 샘플 데이터 설치</h4>
<p>‘testdb’ 데이터베이스를 생성하는 간략한 예제</p>
<pre><code>mysql&gt; show databases;
mysql&gt; create database testdb;
mysql&gt; use testdb;
mysql&gt; CREATE TABLE test
(id smallint unsigned not null auto_increment, 
name varchar(20) not null);
mysql&gt; show tables;
mysql&gt; INSERT INTO tablename(id, name) VALUES (1, &#39;Sample data&#39; );
mysql&gt; SELECT * FROM test;</code></pre><h3 id="sql">SQL</h3>
<p>용도 - 데이터베이스에서 데이터를 추출하여 문제 해결
입출력 - 입력은 테이블, 출력도 테이블 
번역 - DBMS
사용 예 - 
SELECT * 
FROM Book;</p>
<h3 id="sql-기능에-따른-분류">SQL 기능에 따른 분류</h3>
<ul>
<li>데이터 정의어(DDL)
테이블이나 관계의 구조를 생성하는 데 사용하며 CREATE, ALTER, DROP 문 등이 있음</li>
<li>데이터 조작어(DML)
테이블에 데이터를 검색, 삽입, 수정, 삭제하는 데 사용하며 SELECT, INSERT, DELETE, 
UPDATE 문 등이 있음. 여기서 SELECT 문은 특별히 질의어(query)라고 함</li>
<li>데이터 제어어(DCL)
데이터의 사용 권한을 관리하는 데 사용하며 GRANT, REVOKE 문 등이 있음</li>
</ul>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/2e7eff13-2ca7-4d29-823d-d3b7005638da/image.png" alt=""></p>
<h2 id="관계-데이터-모델">관계 데이터 모델</h2>
<h3 id="릴레이션">릴레이션</h3>
<p>릴레이션(relation) : 행과 열로 구성된 테이블</p>
<h4 id="릴레이션-스키마">릴레이션 스키마</h4>
<ul>
<li>스키마의 요소
• 속성(attribute) : 릴레이션 스키마의 열
• 도메인(domain) : 속성이 가질 수 있는 값의 집합
• 차수(degree) : 속성의 개수</li>
<li>스키마의 표현
• 릴레이션 이름(속성1 : 도메인1, 속성2 : 도메인2, 속성3 : 도메인3 …)
EX) 도서(도서번호, 도서이름, 출판사, 가격)</li>
</ul>
<h4 id="릴레이션-인스턴스">릴레이션 인스턴스</h4>
<p>인스턴스 요소
• 투플(tuple) : 릴레이션의 행
• 카디날리티(cardinality) : 투플의 수</p>
<h3 id="릴레이션의-특징">릴레이션의 특징</h3>
<p>➊ 속성은 단일 값을 가진다
각 속성의 값은 도메인에 정의된 값만을 가지며 그 값은 모두 단일 값이어야 함
➋ 속성은 서로 다른 이름을 가진다
속성은 한 릴레이션에서 서로 다른 이름을 가져야만 함
➌ 한 속성의 값은 모두 같은 도메인 값을 가진다
한 속성에 속한 열은 모두 그 속성에서 정의한 도메인 값만 가질 수 있음
➍ 속성의 순서는 상관없다
속성의 순서가 달라도 릴레이션 스키마는 같음
예) 릴레이션 스키마에서 (이름, 주소) 순으로 속성을 표시하거나 (주소, 이름) 순으로 표시하여도 상관없음
➎ 릴레이션 내의 중복된 투플은 허용하지 않는다
하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없음, 
즉 모든 투플은 서로 값이 달라야 함
➏ 투플의 순서는 상관없다
투플의 순서가 달라도 같은 릴레이션임. 관계 데이터 모델의 투플은 실제적인 값을 가지고 있으며 이 값은 시간이 지남에 따라 데이터의 삭제, 수정, 삽입에 따라 순서가 바뀔 수 있음</p>
<h3 id="기본키">기본키</h3>
<p>여러 후보키 중 하나를 선정하여 대표로 삼는 키</p>
<ul>
<li>후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고,
여러 개라면 릴레이션의 특성을 반영하여 하나를 선택하면 됨</li>
<li>기본키 선정 시 고려사항
릴레이션 내 투플을 식별할 수 있는 고유한 값을 가져야 함.
NULL 값은 허용하지 않음.
키 값의 변동이 일어나지 않아야 함.
최대한 적은 수의 속성을 가진 것이라야 함.
향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 함.</li>
<li>릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시함
릴레이션 이름(속성1, 속성2, …. 속성N)
EX) 고객(고객번호, 이름, 주민번호, 주소, 핸드폰)
도서(도서번호, 도서이름, 출판사, 가격)</li>
</ul>
<h3 id="외래키">외래키</h3>
<ul>
<li>다른 릴레이션의 기본키를 참조하는 속성을 말함</li>
<li>다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계(relationship)를 표현함</li>
<li>외래키의 특징
관계 데이터 모델의 릴레이션 간의 관계를 표현함
다른 릴레이션의 기본키를 참조하는 속성임
참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함
참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨
NULL 값과 중복 값 등이 허용됨
자기 자신의 기본키를 참조하는 외래키도 가능함
외래키가 기본키의 일부가 될 수 있음</li>
</ul>
<h3 id="데이터베이스-관련-sql">데이터베이스 관련 SQL</h3>
<p>데이터베이스 목록 확인: 기존 데이터베이스 목록을 출력</p>
<pre><code>show databases;</code></pre><p> 데이터베이스 생성: 새로운 데이터베이스를 생성</p>
<pre><code>create database 데이터베이스명;</code></pre><p>데이터베이스 삭제: 지정한 데이터베이스를 삭제</p>
<pre><code>drop database 데이터베이스명;</code></pre><p>사용할 데이터베이스 지정: 여러 데이터베이스 중에서 작업할 데이터베이스를 선택</p>
<pre><code>use 데이터베이스명;</code></pre><h2 id="db-서버">DB 서버</h2>
<h3 id="maria-db-설치">Maria DB 설치</h3>
<pre><code>sudo apt install mariadb-server</code></pre><p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/70e2aceb-bd35-43e0-908b-686e8e5f5ba4/image.png" alt=""></p>
<p>mariadb 접속
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/c4bfc640-d335-4743-bb4c-84589f05bd8c/image.png" alt=""></p>
<p>테이블 확인
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/e534ee92-15de-4e61-911e-69577b775d2e/image.png" alt=""></p>
<p>테이블 기본 키 추가
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/5b066b05-9074-4e42-a2d5-3f83d8447690/image.png" alt=""></p>
<p>테이블 레코드 입력
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/49ca4e78-769f-42f6-9ffe-ea6267cc2eca/image.png" alt=""></p>
<p>tessttable 테이블의 전체 레코드를 출력
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/09e39f72-b381-4fa9-88f5-c0eee6c2d04d/image.png" alt=""></p>
<h2 id="nfs-서버">NFS 서버</h2>
<p>Network File System, 네트워크를 통해 다른 시스템의 디스크를 연결하여 사용</p>
<p>NFS 서버가 설치되어야 하고, NFS 서버 측에서 디스크 공유
(Ubuntu 20에서부터 NFS 버전 3과 4를 지원)</p>
<h3 id="실습">실습</h3>
<blockquote>
<p><strong>서버</strong>
sudo apt install nfs-kernel-server
nfs-server 활성화: systemctl enable --now nfs-server
공유 디렉토리 생성: sudo mkdir /home/share -&gt; sudo chmod 707 /home/share
sudo vi /etc/exports -&gt; /home/share *(rw,sync,no_subtree_check,no_root_squash,insecure) 추가
sudo exportfs -a로 공유한 것이 제대로 적용되었는지 확인
방화벽 설정 ex) sudo ufw allow 2049
NFS 서버 재시작: sudo systemctl restart nfs-kernel-server</p>
</blockquote>
<blockquote>
<p><strong>클라이언트</strong>
sudo apt install nfs-common
sudo mkdir /mnt로 마운트할 디렉토리 생성
sudo ufw allow 2049
mount로 NFS 공유 디렉토리 연결 : sudo mount nfs 192.168.139.3:/home/share /mnt</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[리눅스 시스템 및 네트워크]]></title>
            <link>https://velog.io/@soobeen-jeong/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%B0%8F-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@soobeen-jeong/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%B0%8F-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Thu, 17 Nov 2022 09:27:52 GMT</pubDate>
            <description><![CDATA[<h2 id="작업예약">작업예약</h2>
<p>at 예약한 명령을 정해진 시간에실행
atq 현재 사용자의 등록된 작업 목록 출력
atrm 지정된 작업 번호 작업을 삭제
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/5bb34c5a-cee0-4ca4-b759-60fa62719d72/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/51d6d12c-f9fe-4096-b6f2-648091a67daf/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/f4e14cf6-ec0d-4060-a4bc-1639edc344dc/image.png" alt=""></p>
<h3 id="crontab스케줄링-배치">crontab(스케줄링 배치)</h3>
<p><strong>정해진 시간에 반복 실행</strong>
crond (daemon process)에 의해 crontab 파일 내용을 참조하여 자동으로 정해진 작업 수행</p>
<p>crontab 파일 위치 : /var/spool/cron</p>
<p><strong>crontab [옵션] &lt;파일명&gt;</strong>
crontab 파일 편집 명령
crontab 파일 초기 내용은 주석(comment, #으로 시작)으로만 구성
-e : crontab 파일 편집
-l : crontab 내용 출력
-r : crontab 파일 삭제</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/db6672b3-f543-4e08-b255-c147642f6625/image.png" alt=""></p>
<p><strong>crontab -e</strong>: crontab 생성하고 편집
crontab 편집기로는 기본적으로 VISUAL 또는 EDITOR 환경 변수에 지정된 편집기를 사용</p>
<h2 id="systemd-서비스">systemd 서비스</h2>
<p><strong>system 서비스의 역할</strong>
리눅스의 시스템과 서비스 관리자
유닉스의 init 프로세스가 하던 작업을 대신 수행
다양한 서비스 데몬을 시작하고, 프로세스들의 상태를 유지하며, 시스템의 상태를 관리</p>
<p><strong>init 프로세스와 런레벨</strong>
현재 init 서비스는 systemd 서비스로 대체
man init로 확인해보면 systemd에 대한 설명이 출력</p>
<p>런레벨: 시스템의 상태를 구분하는 숫자/문자
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/82658ada-8122-40b6-94bf-884bcad740a6/image.png" alt="">
자주 사용하는 런레벨
3번 : multi-user.target -&gt; CLI booting
5번 : graphical.target -&gt; GUI booting</p>
<h3 id="systemctl">systemctl</h3>
<p>systemd 서비스를 제어
systemd -a 상태와 관계없이 유닛 전체 출력
systemd -t 유닛 종류: 지정한 종류의 유닛만 출력</p>
<p>유닛 서비스 시작</p>
<pre><code>sudo systemctl start cron</code></pre><p>유닛의 상태 확인</p>
<pre><code>systemctl status cron.service</code></pre><p>유닛 서비스 정지</p>
<pre><code>sudo systemctl stop cron</code></pre><p>현재 target과 런레벨 확인</p>
<pre><code>systemctl get-default</code></pre><p>기본 target 지정</p>
<pre><code>systemctl set-default &lt;name of target&gt;.target</code></pre><h2 id="데몬-프로세스">데몬 프로세스</h2>
<p><strong>데몬</strong>
리눅스의 백그라운드에서 동작하며 특정한 서비스를 제공하는 프로세스</p>
<p><strong>데몬의 동작방식</strong>
독자형 데몬
슈퍼데몬</p>
<p><strong>pstree</strong> 명령 : 프로세스 계층 구조 확인</p>
<p><strong>Linux 주요 데몬</strong>
sshd : 원격 접속 서비스 제공
httpd : 웹서비스 제공
ftpd : FTP 서비스 제공
nfs : 네트워크 파일 시스템
crond : 주기적으로 예약된 명령 실행 서비스
lpd : 프린트 서비스
ntpd : 시간 동기화 서비스</p>
<h2 id="부트-로더">부트 로더</h2>
<p><strong>부트 로더</strong>
커널을 메모리에 로딩하는 역할을 수행
우분투에서는 GRUB를 기본으로 지원</p>
<p><strong>/boot/grub/grub.cfg 파일</strong>
• GRUB2의 기본 설정 파일로 사용자가 직접 수정 불가
• /etc/default/grub 파일과 /etc/grub.d 디렉터리 아래에 있는 스크립트를 읽어서 자동 생성
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/6fa09593-cab6-44d0-9bf8-2acb361afee2/image.png" alt=""></p>
<p><strong>/etc/grub.d 디렉터리</strong>
• GRUB 스크립트를 가지고 있는 디렉터리
• 이 스크립트들은 GRUB의 명령이 실행될 때 순서대로 실행되어 grub.cfg 파일을 생성
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/a9a98493-8351-42e1-93ef-e969e6b55d42/image.png" alt=""></p>
<h3 id="복구-모드로-부팅하기">복구 모드로 부팅하기</h3>
<ol>
<li>복구 모드 선택<ul>
<li>GRUB 메뉴 초기 화면에서 ‘Ubuntu용 고급 설정’을 선택</li>
<li>메뉴가 출력되면 recovery mode를 선택</li>
</ul>
</li>
<li>복구 메뉴 항목에서 root 항목 선택하기</li>
<li>root 항목을 선택하면 바로 root 프롬프트가 출력됨</li>
<li>읽기/쓰기 모드로 다시 마운트하기</li>
<li>복구 작업 수행 후 재시작하기
: reboot -f</li>
</ol>
<h2 id="마운트">마운트</h2>
<p><strong>마운트(mount)</strong>
파일 시스템을 디렉터리 계층 구조의 특정 디렉터리와 연결하는 것
파일 시스템이 디렉터리 계층 구조와 연결되지 않으면 사용자가 해당 파일 시스템에 접근할 수 없음</p>
<p>파일 시스템 마운트 설정 파일: <strong>/etc/fstab</strong>
파일 시스템의 마운트 설정 정보 wjwkd
부팅시 이 파일을 읽고 파일 시스템 마운트</p>
<blockquote>
<p>➊ 장치명: UUID=265c8913-ee1e-4034-885f-207969b0a23b
<strong>(UUID: 파일 시스템을 유일하게 구분해주는 128bit 숫자)</strong>
<strong>Universally Unique IDentifier 범용 고유 식별자</strong>
➋ 마운트 포인트: /
➌ 파일 시스템 종류: ext4 
➍ 옵션: errors=remount-ro
➎ 덤프 관련 설정: 0 (0: dump 명령으로 덤프 안됨 1: 덤프 가능)
➏ 파일 점검 옵션: 1 
(0: 부팅시 fsck명령으로 파일시스템 점검 안함, 
1: 루트 파일시스템, 2: 루트 외 파일 시스템)</p>
</blockquote>
<h2 id="디스크-설치-및-관리">디스크 설치 및 관리</h2>
<h3 id="가상-머신에-디스크-추가">가상 머신에 디스크 추가</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/6681b27e-37af-4549-a015-b9341d7ef43f/image.png" alt="">
edit virtual machine settings 선택</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/bf204a1b-ad1b-4a5e-84e3-bdec98080222/image.png" alt="">
hard disk 선택</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/63b127a3-61c5-4fb4-b132-fd288538a54b/image.png" alt="">
SCSI 선택</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/28c79e14-52ac-44f2-8273-537d182cae15/image.png" alt="">
create a new virtual disk 선택</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/74da9f56-3fe5-4661-a63a-b992871e77e3/image.png" alt="">
1GB 입력</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/0e5e5844-8a4c-46af-983d-c56cbf602637/image.png" alt="">
파일명 지정</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/252cddb6-ba72-4af5-a203-4261c72a5bbb/image.png" alt="">
디스크 추가 작업 완료</p>
<p>fdisk 디스크 파티션 생성, 삭제, 보기 등 파티션을 관리</p>
<pre><code>sudo fdisk -l</code></pre><p>파티션을 만든 후 파일 시스템을 생성해야함
mkfs 파일 시스템 생성 명령</p>
<pre><code>sudo mkfs /dev/sdb1</code></pre><p>mkfs 리눅스 개정판 확장 파일 시스템(ext2, ext3, ext4)을 만듦</p>
<pre><code>mke2fs /dev/sdb1</code></pre><h3 id="lvm">LVM</h3>
<p><strong>Logical Volume Manager</strong>
Linux 저장공간을 효율적이고 유연하게 관리하기 위한 kernel 기능</p>
<p>LVM vs. 기존 방식
기존 방식 : 디스크 (저장장치 storage)를 파티셔닝한 후 OS 영역에 마운트하여 read/write 수행
-&gt; 단점; 저장공간의 크기가 고정되어 증설/축소 어려움 -&gt; 기존 방식의 단점 보완 위해 LVM 구성</p>
<p>LVM은 파티션 대신에 volume이라는 단위로 디스크(저장장치) 다룸</p>
<p>디스크 (저장장치)의 확장/변경에 유연, 크기 변경할 때 기존 데이터 이전 필요 X
LVM 장점
유연한 용량 조절
크기 조절을 위한 storage pool
편의에 따른 장치 이름 지정
disk striping, mirror volume 등 제공</p>
<h3 id="lvm-구성">LVM 구성</h3>
<p><strong>PV (Physical Volume)</strong>
물리적 볼륨, 실제 디스크 장치를 분할한 파티션된 상태
일정한 크기의 PE (Physical extent) 들로 구성</p>
<p><strong>PE (Physical extent)</strong>
PV를 구성하는 일정한 크기 블록
보통 1 PE는 4 MB에 해당
PE와 LE는 1:1 대응</p>
<p><strong>VG (Volume Group)</strong>
PV들이 모여서 생성되는 단위
사용자는 VG를 원하는 크기로 쪼개서 LV로 만들어 사용</p>
<p><strong>LV (Logical Volume)</strong>
사용자가 최종적으로 사용하는 단위
VG에서 필요한 크기로 할당받아 LV 생성
최종적으로 mount하는 대상은 LV</p>
<h3 id="lvm-생성과정">LVM 생성과정</h3>
<p>기존 파일 시스템 종류 변경 -&gt; fdisk 명령
PV 생성 -&gt; pvcreate
VG 생성 -&gt; vgcreate
VG 활성화 -&gt; vgchange -a y 명령
LV 생성 -&gt; lvcreate
LV에 파일 시스템 생성 -&gt; mkfs 명령
LV 마운트 -&gt; mount 명령
LVM 적용을 위한 패키지 설치 필요
lvm2 : LVM 패키지
설치 명령어: sudo apt-get install lvm2
출처:<a href="https://velog.io/@peppie0192/%EA%B5%AC%EB%A6%84-k8s-TIL-1-3-2">https://velog.io/@peppie0192/%EA%B5%AC%EB%A6%84-k8s-TIL-1-3-2</a></p>
<p>df 파일 시스템별 디스크 사용량 확인
df -h
파일 시스템 사용량을 이해하기 쉬운 단위로 표시하기: - h
df -Th
파일 시스템의 종류 출력하기: -T
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/5357f86a-8e39-4297-bc9d-d71f93f13a9d/image.png" alt=""><img src="https://velog.velcdn.com/images/soobeen-jeong/post/5b75a073-d9b4-4ad3-b100-3a3018d7b0f9/image.png" alt="">
du 디렉토리나 사용자별 디스크 사용량 확인
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/5b217e9e-425f-4b44-8de8-11630a83d5d8/image.png" alt="">
fsck 파일 시스템 검사
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/9eb01b6f-84fa-4058-a193-9b2704cb4fa8/image.png" alt=""></p>
<h2 id="우분투스냅-패키지-설치">우분투/스냅 패키지 설치</h2>
<h3 id="dpkg-명령">dpkg 명령</h3>
<p>Debian 계열 패키지 관리 명령 : .deb 패키지 파일 설치/삭제/업그레이드/정보제공</p>
<blockquote>
<p>dpkg [옵션] &lt; .deb 파일명 또는 패키지명 &gt;
-l : 설치된 패키지 목록 확인
-L &lt;패키지명&gt; : 해당 패키지로부터 설치된 모든 파일 목록 확인
-s &lt;패키지명&gt; : 해당 패키지 정보 확인
-I (대문자 i) &lt; .deb 파일명&gt; : 해당 .deb 파일 정보 확인
-i &lt; .deb 파일명&gt; : 패키지 설치/업그레이드, 관리자 권한
-r &lt;패키지명&gt; : 패키지 삭제 (설정 파일 삭제 X), 관리자 권한
-P &lt;패키지명&gt; : 패키지/설정 파일 삭제, 관리자 권한</p>
</blockquote>
<h3 id="apt-명령">apt 명령</h3>
<p>Debian 계열 온라인 repository를 통한 패키지 관리 명령
Ubuntu 패키지 및 해당 패키지 정보를 관리하는 서버 정보는 /etc/apt/sources.list 파일에 저장
기본적으로 /etc/apt/sources.list에 등록된 서버로부터 원하는 패키지에 대한 검색/다운로드/설치 가능
만약 별도의 repository로부터 패키지를 설치하려면 해당 repository 서버 주소 등록 후 사용</p>
<p><strong>apt-cache 명령</strong>
APT 캐시 (패키지 DB)에서 정보 검색; apt-cache [옵션] &lt;서브 명령&gt;</p>
<p>-f : 검색결과 전체정보 출력
서브 명령</p>
<blockquote>
<p><strong>serach 키워드</strong> : 캐시에서 키워드 검색
<strong>show 패키지</strong> : 패키지에 대한 정보 출력</p>
</blockquote>
<p><strong>apt-get 명령</strong>
패키지 관리 명령, 온라인 repository로부터 패키지 다운로드/설치/삭제/업그레이드 등의 관리 수행</p>
<p><strong>[sudo] apt-get [옵션] &lt;서브 명령&gt;</strong></p>
<p>-d : 패키지 다운로드</p>
<p>-y : 패키지 설치시 자동으로 yes 적용</p>
<p>서브 명령</p>
<blockquote>
<p>update : repository의 새로운 패키지 정보 다운로드
upgrade : 현재 설치된 패키지 업그레이드
install &lt;패키지&gt; : 패키지 설치
remove &lt;패키지&gt; : 패키지 삭제 (설정파일 삭제 X)
purge &lt;패키지&gt; : 패키지 및 설정파일 삭제
autoremove : 불필요한 의존성 패키지 삭제</p>
</blockquote>
<p>Linux booting 후 또는 패키지 설치전에 항상 sudo apt-get update 명령을 통해 새로운 패키지 정보 확보 후 필요한 패키지 설치</p>
<p>ssh 데몬 설치</p>
<pre><code>sudo apt-get update
sudo apt-get install [-y] openssh-server
systemctl status sshd.service -&gt; 서비스 실행유무 확인</code></pre><h3 id="ssh-secure-shell">SSH (Secure SHell)</h3>
<p>22번 포트 사용
네트워크를 이용하여 원격으로 접속하는 서비스
=&gt; Linux 사용시 일반적으로 SSH Client를 이용한 접속이 일반적
공개키 암호 방식으로 암호화된 데이터 송수신
원격 접속 대상(서버) Linux host에 SSH Daemon process (sshd, 부르는 용어 -&gt; server program, daemon, service)가 동작중이어야 한다 -&gt; client/server 구조
원격 접속 client는 SSH client 프로그램을 통해 접속
Windows : putty, xshell 등
Linux/MacOS : ssh 명령</p>
<p>별도의 공개키를 생성하여 client에 제공하고 접속하는 방식으로 사용가능</p>
<ul>
<li>public cloud에서 제공하는 가상 컴퓨팅 서비스</li>
<li>IaC를 이용한 infrastructure 관리시에도 많이 사용</li>
<li>ssh-keygen 명령 사용</li>
</ul>
<p><strong>가상 PC 환경에서의 SSH 접속환경 구축방법</strong></p>
<ul>
<li>NAT 환경에 포트 포워딩 기능 사용
Virtualbox -&gt; Linux image -&gt; 네트워크 -&gt; 고급 -&gt; 포트포워딩 설정
ssh client 사용시 : host ip 127.0.0.1 (loopback) / host port : 22
NAT 네트워크 구성 : 별도 네트워크 구성시 유리 (가상 PC 네트워크 구성)
호스트 어댑터 이용 -&gt; SSH server ip로 접속</li>
</ul>
<h3 id="스냅-패키지-관리">스냅 패키지 관리</h3>
<p><strong>스냅 개념</strong>
Ubuntu에 새로 도입한 패키지 형식의 샌드박스 형태 패키지 (완전히 격리된 형태)
패키지를 만들 때 프로그램이 사용하는 모든 라이브러리를 패키지 안에 포함</p>
<p>장점
개발자가 다른 패키지나 라이브러리 의존성을 고려하지 않고 개발
기존 시스템과 격리되어 실행하는 샌드박스 형식으로 보안 강화</p>
<p>단점
큰 패키지 용량</p>
<h4 id="snap-명령">snap 명령</h4>
<p>snap이 별도로 설치되지 않은 경우 설치 후 사용 -&gt; <strong>sudo apt-get install snap</strong>
snap [옵션] 명령</p>
<blockquote>
<p>install 스냅명 : 지정한 스냅 설치, 관리자 권한
list : 설치한 스냅 목록 출력
remove 스냅명 : 지정한 스냅 삭제, 관리자 권한
info 스냅명 : 지정한 스냅 상세 정보 출력
find 스냅명 : 지정한 스냅 검색</p>
</blockquote>
<h2 id="파일-아카이브">파일 아카이브</h2>
<p>아카이브 (Archive)</p>
<ul>
<li>여러 개의 지정된 파일들을 아카이브(묶음)로 만듭니다.</li>
<li>아카이브 파일에는 확장자 .tar을 붙입니다.</li>
<li>파일의 용량은 줄어들지 않습니다. (압축 X 묶음 O)</li>
<li>원본 파일은 그대로 유지됩니다.</li>
</ul>
<p>tar (Taple ARchive) [옵션] [만들 파일 이름].tar [묶을 파일1] ... [묶을 파일 N] <img src="https://velog.velcdn.com/images/soobeen-jeong/post/3cfad4eb-9ac4-47ef-8a97-3be75d0bcb14/image.png" alt="">
→ [옵션]</p>
<p>c 아카이브 생성
x 아카이브 해제
v 진행과정 출력
f .tar 파일을 지정
r 파일 추가
t 아카이브 내용 확인
※ vf는 고정한다고 생각하면 됩니다.</p>
<p>아카이브 생성하기 ( cvf )</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/e34430f4-12f4-434f-8ecf-7d5329e019cb/image.png" alt="">
아카이브 파일 내용 확인하기 ( tvf )
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/cd32c8d5-6829-4cd1-a421-4f1e7b65f035/image.png" alt=""></p>
<p>아카이브 해제하기 ( xvf )
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/2d560a2d-ac6a-4031-a184-56157130a624/image.png" alt=""></p>
<p>아카이브 파일에 새로운 파일 추가하기 ( rvf )
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/12ee6946-4103-4f2a-b1cd-16e9aeee3f1d/image.png" alt=""></p>
<h2 id="소프트웨어-컴파일">소프트웨어 컴파일</h2>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/83426b44-6b75-4723-8a4d-ebd2eb808a79/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/3c89841b-cea5-4197-819f-0913cc799acd/image.png" alt=""></p>
<h2 id="네트워크-기초">네트워크 기초</h2>
<h3 id="주소">주소</h3>
<p>컴퓨터의 주소: MAC 주소, IP 주소, 호스트명</p>
<h3 id="mac-주소">MAC 주소</h3>
<p>하드웨어를 위한 주소
이더넷 주소, 하드웨어 주소, 물리 주소라고도 함
MAC 주소는 네트워크 인터페이스 카드(랜 카드)에 저장된 주소로 기본적으로 네트워크 인터
페이스 카드가 만들어질 때 부여
MAC 주소는 각 하드웨어를 구별하는 역할을 수행
MAC 주소는 : 이나 - 으로 구분되는 여섯 개의 16진수로 구성되며 총 48bit
• 앞의 세 자리는 제조사 번호이고 뒤의 세 자리는 일련번호
• 제조사 번호는 국제 표준 기구 중 하나인 IEEE에서 지정</p>
<h3 id="ip-주소">IP 주소</h3>
<p>인터넷으로 연결된 네트워크에서 각 컴퓨터를 구분하기 위해 사용
IP 주소는 1바이트 크기의 숫자 네 개로 구성되므로 총 4바이트
TCP/IP 프로토콜의 3<del>5계층은 IP 주소를 사용
IP주소는 네트워크를 구분하는 네트워크 주소 부분과, 해당 네트워크 안에서 특정 컴퓨터를
식별하는 호스트 주소 부분
IP 주소는 총 32bit(4B) 중 몇 비트를 네트워크 부분으로 사용하고 나머지 몇 비트를 호스트
부분으로 사용하는지에 따라 A 클래스, B 클래스, C 클래스로 구분
C 클래스는 앞의 3바이트가 네트워크 부분이고 뒤의 1바이트만 호스트 부분
• 호스트 부분으로 사용할 수 있는 숫자는 0</del>255인데, 0은 네트워크 주소를 나타내는 데 사용하고 255
는 브로드캐스트 주소로 사용하므로 1~254를 호스트 주소로 할당
IPv6(IP 버전 6)는 fe80::250:56ff:fe3e:3cfe와 같이 16진수로 표기하며 128bit 크기</p>
<h3 id="넷마스크와-브로드캐스트-주소">넷마스크와 브로드캐스트 주소</h3>
<p><strong>넷마스크</strong>: IP 주소에서 네트워크 부분을 알려주는 역할
<strong>브로드캐스트 주소</strong>: 같은 네트워크에 있는 모든 컴퓨터에 메시지를 보낼 때 사용
• 호스트 부분을 모두 1로 설정
• 예: IP 주소에서 네트워크 부분이 192.168.100.0이면 브로드캐스트 주소는 192.168.100.255</p>
<h3 id="호스트-이름">호스트 이름</h3>
<p>컴퓨터에 붙이는 이름
호스트 이름도 IP 주소처럼 네트워크 부분과 호스트 이름 두 부분으로 구성
예: <a href="http://www.naver.com">www.naver.com</a>, 호스트 부분(www), 네트워크 부분(naver.com)
포트 번호
서버에서 제공하는 각 서비스를 구분하는 번호(예: 웹 - 80)
/etc/services 파일에 서비스 포트번호 저장</p>
<h3 id="포트-번호">포트 번호</h3>
<p>서버에서 제공하는 각 서비스를 구분하는 번호(예: 웹 - 80)
/etc/services 파일에 서비스 포트번호 저장</p>
<h2 id="네트워크-설정">네트워크 설정</h2>
<p>네트워크 관리자 설치</p>
<pre><code>sudo apt install network-manager</code></pre><p>네트워크 전체 상태 살펴보기</p>
<pre><code>nmcli general status</code></pre><pre><code>nmcli gen</code></pre><p>네트워크 장치의 정보보기</p>
<pre><code>ip addr show</code></pre><p>기본 게이트웨이 주소 설정하기</p>
<pre><code>sudo ip route add default via 192.168.1.1 dev ens33</code></pre><p>라우팅 경로 설정하기</p>
<pre><code>sudo ip route add 192.168.2.0/24 via 192.168.147.2 dev ens33</code></pre><p>라우팅 경로 삭제하기</p>
<pre><code>sudo ip route del 192.168.2.0/24</code></pre><p>우분투에서 ifconfig 명령 사용하려면 net-tool 패키지 필요</p>
<pre><code>sudo apt install net-tools</code></pre><p>현재 설치된 네트워크 인터페이스 설정 보기</p>
<pre><code>ifconfig</code></pre><p>특정 네트워크 인터페이스 설정 보기</p>
<pre><code>ifconfig ens33</code></pre><p>라우팅 테이블 보기</p>
<pre><code>route</code></pre><h2 id="호스트-이름-설정">호스트 이름 설정</h2>
<p>호스트 이름 출력</p>
<pre><code>uname -n</code></pre><p>호스트의 모든 정보 출력</p>
<pre><code>uname -a</code></pre><p>호스트 이름 출력 및 설정</p>
<pre><code>hostname</code></pre><pre><code>nmcli gen host</code></pre><pre><code>sudo hostname myubuntu</code></pre><p>호스트 이름 검색 및 설정하기</p>
<pre><code>sudo hostnamectl set-hostname myubuntu</code></pre><pre><code>hostnamectl</code></pre><h2 id="네트워크-상태-확인">네트워크 상태 확인</h2>
<h3 id="ping">ping</h3>
<p>네트워크 장비에 신호를 보냄
옵션
-a: 통신이 되면 소리를 낸다.
-q: 테스트
-c 개수: 보낼 패킷 수를 지정한다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/4132d377-1a20-4428-8058-c798ebce6c3d/image.png" alt=""></p>
<h3 id="netstat">netstat</h3>
<p>네트워크 상태 정보를 출력
옵션
-a: 모든 소켓 정보를 출력
-r: 라우팅 정보를 출력
-n: 호스트명 대신 IP 주소로 출력
-i: 모든 네트워크 인터페이스 정보를 출력
-s: 프로토콜별로 네트워크 통계 정보를 출력
-p: 해당 소켓과 관련된 프로세스의 이름과 PID를 출력
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/d5eb3b56-c4b8-4175-9bf6-52efe698b464/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/18325d93-41b0-4ac1-bc72-3a4cdf5dc387/image.png" alt=""></p>
<h3 id="arp">arp</h3>
<p>arp 캐시 정보를 관리
<img src="blob:https://velog.io/5c31f4ec-148b-4777-b2d3-1bca02a775e0" alt="업로드중.."></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[리눅스 운영체제 기초]]></title>
            <link>https://velog.io/@soobeen-jeong/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@soobeen-jeong/%EB%A6%AC%EB%88%85%EC%8A%A4-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Thu, 17 Nov 2022 09:27:12 GMT</pubDate>
            <description><![CDATA[<h2 id="리눅스-기초">리눅스 기초</h2>
<p><strong>리눅스 커널</strong> - 프로세스 관리, 파일 시스템 관리, 메모리 관리
<strong>응용 프로그램</strong> - 문서 편집기, 컴파일러, 웹 서버
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/9a24016d-86af-424c-a16d-a79725da9aea/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/5116650b-55b7-4746-8741-99993c62c384/image.png" alt="">
출처:<a href="https://kingofbackend.tistory.com/100">https://kingofbackend.tistory.com/100</a></p>
<h3 id="linux-kernel-구조">Linux Kernel 구조</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/2206e310-493a-4ed3-bbb1-5cc5b10681d0/image.png" alt="">
출처:<a href="https://mintnlatte.tistory.com/393">https://mintnlatte.tistory.com/393</a></p>
<p>리눅스는 공개 소프트웨어이며 무료 사용 가능
유닉와 완벽한 호환성 유지
서버용 운영체제로 많이 사용
편리한 GUI 환경 제공
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/7149e7c7-eea9-43ef-835c-b17dd7dde766/image.png" alt=""></p>
<h2 id="리눅스-실습-환경-구축">리눅스 실습 환경 구축</h2>
<h2 id="가상머신vmware-설치-방법">가상머신(VMware) 설치 방법</h2>
<p><a href="https://www.vmware.com/latam/products/workstation-player/workstation-player-evaluation.html">https://www.vmware.com/latam/products/workstation-player/workstation-player-evaluation.html</a>
해당 사이트에 접속하여 윈도우 버전으로 다운로드 한다.</p>
<h3 id="가상머신-내-우분투ubuntu-설치">가상머신 내 우분투(Ubuntu) 설치</h3>
<p><a href="https://releases.ubuntu.com/focal/?_ga=2.84732825.1604966450.1665963317-2061005471.1661251289">https://releases.ubuntu.com/focal/?_ga=2.84732825.1604966450.1665963317-2061005471.1661251289</a>
iso 이미지를 다운받는다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/d0a985f3-2764-42c4-99b7-6890c7da2784/image.png" alt="">
create a New virtual Machine 클릭하여 생성한다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/4f1f4ef8-8c3c-4986-8b3a-bf5ff7ea577d/image.png" alt="">
iso 이미지를 넣는다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/a47bd54c-2c30-47cf-ba85-49397b1fa020/image.png" alt="">
계정을 생성한다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/2098d52c-cc2c-4db5-9668-0be2a2d18fc4/image.png" alt="">
디스크 설정한다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/8c645e7a-e1e9-4016-b83f-d80e5e458e1e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/d3b10e53-06fd-41f9-a549-632f1776abb4/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/5dbc6abc-42d3-4d40-9619-34fc949804d4/image.png" alt="">
생성한 계정 비밀번호 입력한다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/a2192504-e8a2-4f97-a462-655fba667b55/image.png" alt="">
깔끔하게 우분투 설치된 모습이다.</p>
<h3 id="centos-설치-과정">centos 설치 과정</h3>
<p><a href="http://mirror.kakao.com/centos/7.9.2009/isos/x86_64/">http://mirror.kakao.com/centos/7.9.2009/isos/x86_64/</a>
iso 이미지를 다운받는다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/fe2d6de4-abbc-47cf-9699-de3648954d9b/image.png" alt="">
iso 이미지를 넣는다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/6a9c7b15-c11f-4bb7-9736-94afba644a91/image.png" alt="">
설치되는 중이다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/c5cd2f5c-22cf-4938-a83d-a833bf41a2b9/image.png" alt="">
네트워크 설정해야 하는데 configure 들어가서 수동으로 DNS도 설정해준다.
Host name도 docker로 바꿔준다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/99c9031d-7ccf-44b3-a93e-eb255ce54d76/image.png" alt="">
계정 만들어준다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/22266161-480f-4b38-86e5-606f6299ce12/image.png" alt="">
설치되어 재부팅되는 모습이다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/56a3c713-7473-45f7-aa22-648de7dc20a1/image.png" alt="">
로그인 아이디 입력한다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/e6e85591-99a4-4fd3-97e6-6a9b74a181c9/image.png" alt="">
비번 입력해준다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/172ba86c-76a4-48f3-8d1e-984e606275c3/image.png" alt="">
깔끔하게 로그인된 화면이다.</p>
<h2 id="리눅스-윈도-기본-사용법">리눅스 윈도 기본 사용법</h2>
<h3 id="원격-접속">원격 접속</h3>
<h4 id="ssh-client-프로그램-이용">SSH Client 프로그램 이용</h4>
<h3 id="ssh-secure-shell"><strong>SSH (Secure SHell)</strong></h3>
<p>네트워크를 이용하여 원격 접속 가능케 함
특히 공개 키 암호방식으로 접속하여 보안 강화 (22번 포트 활용)
SSH Client 프로그램은** CLI 방식**으로 작동</p>
<pre><code>Windows : PuTTY (무료), xshell (유료) 등
Linux, MacOS : terminal 프로그램 사용</code></pre><h3 id="putty"><strong>Putty</strong></h3>
<p>공개 키 파일 형식 ( .ppk ), 비밀 키는 리눅스가 가짐</p>
<pre><code>Session 메뉴 : Hostname 또는 IP 주소와 포트 결정 후 open 버튼 선택 시 접속 (주로 이 방식)
Connection 메뉴 -&gt; SSH 메뉴 -&gt; Autho 항목에서 private key 파일 별도 지정 가능</code></pre><p>원격 접속을 위해서는 Linux에 <strong>SSH Server 프로그램이 동작</strong>하고 있어야 한다.</p>
<p><strong>Ubuntu 배포판</strong>: SSH 서버 프로그램 기본 설치 X -&gt; Ubuntu 설치 후 별도 설치 필요
<strong>CentOS 배포판</strong>: SSH 서버 프로그램 기본 설치, booting 시 자동 실행</p>
<h2 id="리눅스-명령-사용법">리눅스 명령 사용법</h2>
<p>date 날짜 시간 출력</p>
<p>clear 화면 지움</p>
<p>passwd 비번 변경</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/202eb2f4-b25f-41dd-ae6c-2cec6065ad83/image.png" alt=""></p>
<p>man 명령어 사용법 화면에 출력
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/4064a924-e298-452c-be6d-9e5f770d5b4f/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/136deca5-d186-4d12-9d58-5fd51d948045/image.png" alt=""></p>
<h2 id="리눅스-파일과-디렉터리">리눅스 파일과 디렉터리</h2>
<h3 id="linux-기본-디렉토리-구조">Linux 기본 디렉토리 구조</h3>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/819abde4-1777-4433-aff5-ab324b2337d8/image.png" alt=""></p>
<p>각 디렉토리 목록</p>
<blockquote>
<p>/ (root) : 루트 디렉토리, 최상위 디렉토리, 통상 별도파일 저장 X, 디렉토리만 생성
/bin : Linux 기본 명령어 (Built-in) 저장
/boot : Linux 부팅 관련 파일 저장
/dev : 디바이스 파일 저장
/etc : 환경설정 파일 저장
/root : root 사용자 홈 디렉토리
/home : 일반 사용자 홈 디렉토리
/lib : library 파일 및 kernel 모듈 저장
/usr : 일반 사용자 공통파일 저장, Windows OS의 Program Files 폴더 같은 개념
/mnt : 외부장치 연결 (mount) 파일 저장
/proc : Linux Kernel 작업 관리자에서 사용하는 임시파일 저장,
가상파일 시스템, Linux 동작중에만 내용 저장
/var : 시스템 운용 중 생성되는 임시데이터 저장소
/sbin : 시스템 관리자 명령 저장
/tmp : 임시파일 저장소, 가상파일 시스템
/opt : 추가 패키지 저장</p>
</blockquote>
<h2 id="디렉터리-관련-명령어-파일-관련-명령어">디렉터리 관련 명령어, 파일 관련 명령어</h2>
<p>pwd 현재 디렉토리 확인
cd 디렉토리 이동
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/5487e23b-c361-4755-8918-1915de571394/image.png" alt=""></p>
<p>ls 디렉토리 내용 확인
ls -a 숨김파일 확인하기
ls -F 파일 종류 표시
ls -l 상세 정보 출력
ls -d 디렉토리 자체 정보 확인
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/5ca56bfc-09f5-40d5-a962-df03fce7c6d6/image.png" alt=""></p>
<p>mkdir 디렉토리 생성
mkdir -p 중간 디렉토리를 자동으로 만들기
rmdir 디렉토리 삭제
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/3c6dfa5d-de61-4b05-9f67-80f81e368b11/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/c193be14-9725-4ce5-8e31-5e0db4fa6916/image.png" alt=""></p>
<p>cat 파일 내용 출력
more 파일 내용 화면단위로 출력
less 파일 내용 화면단위로 출력
tail 파일 내용 뒷부분 출력
cp 파일 복사
mv 파일명 변경
rm 파일삭제
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/3c83295b-f173-4669-aa03-983fd0e9229b/image.png" alt=""><img src="https://velog.velcdn.com/images/soobeen-jeong/post/55008fe0-db35-4595-a1a1-03bc6fe1d825/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/c1f684f6-cb17-4f27-91db-803f696fe2fa/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/c746bc85-33d2-44af-b1d8-30e9553a7914/image.png" alt=""></p>
<p>ln 파일 링크 생성
touch 빈 파일 생성
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/0f502b92-3b64-46e6-81c8-91d866ae0b2d/image.png" alt=""></p>
<p>grep 파일 내용 검색
find 파일 찾기
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/3b69c3c9-a012-4e70-bf4f-731ce2610b6b/image.png" alt=""></p>
<p>whereis 명령의 위치 찾기
which 명령의 위치 찾기
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/e4699c90-eaa1-406d-ab94-6ff7ec52a285/image.png" alt=""></p>
<h2 id="vi-사용법과-환경-설정">vi 사용법과 환경 설정</h2>
<h3 id="vi-사용법">vi 사용법</h3>
<p><strong>vi 실행</strong>
vi (vim) : vi 실행, 편집할 파일은 별도 지정 X
vi (vim) &lt;파일명&gt; : 지정한 파일을 vi로 읽어서 실행
vi 시작 시 명령모드로 실행</p>
<p><strong>vi 종료</strong>
:q : vi 종료 명령, 현재 편집내용에 대한 저장이 필요한 경우 저장하지 않으면 종료 X
:q! : vi 강제종료 명령, 현재 편집내용 저장유무 상관 X 강제종료</p>
<p><strong>명령 모드 / 편집 모드 전환</strong>
명령 -&gt; 편집 전환
편집 모드에서 사용하는 단축키 입력
편집 -&gt; 명령 전환
Esc 키 입력 후 : (colon) 또는 / (slash) 입력 후 명령 입력
편집 모드 단축키
편집 모드에서 명령 모드 전환은 Esc 키로</p>
<p><strong>편집 모드 상태에서 커서 이동</strong>
키보드 방향키 사용
키보드의 h, j, k, l 키 사용
h : 왼쪽
j : 아래쪽
k : 위쪽
l : 오른쪽</p>
<p><strong>내용 입력</strong>
i 키 : 현재 커서 위치에 입력 (헷갈리면 주로 이거 위주로 쓰는걸 권장)
a 키 : 현재 커서 위치 다음에 입력
o 키 : 현재 줄 다음줄에 입력
I 키 : 현재 줄 Home 위치에 입력
A 키 : 현재 줄 end 위치에 입력
O 키 : 현재 줄 이전줄에 입력
내용 수정
r 키 : 현재 커서위치 내용 한 글자만 수정
R 키 : 수정 상태 진입, Esc 키 입력 전까지 수정 상태 유지
내용 삭제
x 키 : 한 글자 삭제
&lt;숫자&gt; X : 숫자 개수만큼 글자 삭제
dd 키 : 줄 단위 삭제
&lt;숫자&gt; dd 키 : 숫자 개수만큼 줄 삭제</p>
<p><strong>내용 복사</strong>
yy 키 : 줄 단위 복사
&lt;숫자&gt; yy 키 : 숫자만큼의 줄 복사
p 키 : 붙여넣기
v 키 : 범위 지정
y 키 : 지정 범위 내용 복사
d 키 : 지정 범위 내용 삭제</p>
<p><strong>내용 이동</strong>
dd 키를 이용하여 삭제 후 원하는 위치로 커서 이동 후 p 키 입력</p>
<p><strong>검색 및 바꾸기</strong>
/ &lt;검색 문자열&gt; : 현재 커서 위치 이후로 검색
n 키 : 현재 위치에서 파일 끝 방향으로 다음 검색결과 이동
N 키 : 현재 위치에서 파일 처음 방향으로 이전 검색결과 이동
s/ &lt;문자열 1&gt; &lt;문자열 2&gt; : 현재 커서 위치에서 첫번째 찾은 문자열 1을 문자열 2로 변경
%s/ &lt;문자열 1&gt; &lt;문자열 2&gt; : 파일 전체에서 문자열 1을 문자열 2로 변경</p>
<p><strong>기타 편집 키</strong>
u 키 : undo
Ctrl + r 키 : redo</p>
<p><strong>명령모드 단축키</strong></p>
<p><strong>편집 내용 저장</strong>
:w : 처음 vi 실행시 입력한 파일에 현재 편집내용 저장
:w &lt;파일명&gt; : 지정한 파일명에 현재 편집내용 저장
:wq : 처음 vi 실행시 입력한 파일에 현재 편집내용 저장 후 vi 종료
<strong>새로운 파일 로드</strong>
:e &lt;파일명&gt; : 파일명에 해당하는 파일 로드</p>
<p><strong>외부명령 실행</strong>
:! &lt;외부명령&gt; : vi 실행상태에서 외부명령 실행결과 확인 ex) !ls -l
:!sh : 표준 shell 실행, 표준 shell에서 exit 입력하면 다시 vi로 전환
:!bash : 표준 bash shell 실행, bash에서 exit 입력하면 다시 vi로 전환</p>
<h3 id="vi-환경설정">vi 환경설정</h3>
<p>vi 실행 환경과 관련된 여러 내용을 환경 변수에 등록하여 vi 실행시마다 환경 변수 내용을 기반으로 작동
<strong>변수 (variable)</strong> : 메모리 공간 ; 원하는 값 저장 및 변경 가능
<strong>환경변수 (environment variable)</strong> : 명령 or 응용 프로그램의 원할한 동작 수행을 위해 미리 메모리에 저장된 값</p>
<p>set 명령을 통한 환경 변수 확인 및 변경
:set all : 전체 환경 변수 내용 출력
:set &lt;환경 변수&gt;=값 : 환경 변수 내용 변경, = 기호 오른쪽 값을 = 기호 왼쪽 환경변수에 저장
ex) set tabstop=4
현재 vi 상태에서 set 명령으로 환경변수를 변경/적용하면 현재 vi에서만 환경변수 내용 적용</p>
<p>vi 실행환경을 사용자가 원하는 형태로 구성하기 위해 별도의 환경설정 파일을 만들어 사용자 홈 디렉토리에 저장해두면 vi 실행 시 해당 환경 변수 기반으로 동작
.vimrc : vi 환경설정 파일
.exrc : vi 환경설정 파일
(둘다 dot(.)으로 시작하니 히든파일)</p>
<p><strong>실제 ~/.vimrc 실습파일에 적용한 주요 환경 변수</strong></p>
<p>set number : line 번호 표시
set tabstop=4 : tab 간격을 4칸으로
set ai : auto indent (들여쓰기)
set si : smart indent
set hisearch : 검색시 하이라이트
set nocompatible : 방향키 이동 가능
set ruler : 상태표시줄에 커서 위치 표시
set title : 제목 표시
set mouse=a : 커서 이동을 마우스로 이동 가능하도록 설정
set bs=indent,eol,start : backspace 사용 가능
set showmatch : 매치되는 괄호 표시
출처:<a href="https://velog.io/@peppie0192/%EA%B5%AC%EB%A6%84-k8s-TIL-1-2-3#vi-%ED%8E%B8%EC%A7%91%EA%B8%B0">https://velog.io/@peppie0192/%EA%B5%AC%EB%A6%84-k8s-TIL-1-2-3#vi-%ED%8E%B8%EC%A7%91%EA%B8%B0</a></p>
<h2 id="shell의-기능과-종류">shell의 기능과 종류</h2>
<h3 id="shell의-기능">shell의 기능</h3>
<p>명령어 해석기 기능
프로그래밍 기능: 셸 스크립트
사용자 환경 설정 기능</p>
<h3 id="shell의-종류">shell의 종류</h3>
<ul>
<li>본셸(sh): 최초의 셸, 유닉스 v7에서 처음 등장, 현재는 배시셸 등 다른 셸로 대체</li>
<li>C셸(csh): 캘리포니아대학교에서 빌 조이가 개발, 2BSD 유닉스에서 발표
• 앨리어스, 히스토리 기능 포함, 셸 스크립트 구문 형식이 C언어와 동일
콘셸(ksh): 1980년대 중반 AT&amp;T 벨연구소에서 개발, SVR4 유닉스에서 발표
• 본셸과 호환성 유지, 앨리어스, 히스토리 기능 제공</li>
<li>배시셸(bash): 1988년 브레인 폭스가 개발
• 본셸과 호환성 유지, C셸/콘셸의 편리한 기능 모두 포함
• 리눅스의 기본 셸로 제공</li>
<li>대시셸(dash): 1997년 허버스 슈가 리눅스에 이식
• 본셸을 기반으로 개발, POSIX 표준 준수하며 작은 크기로 개발
• 우분투는 6.10버전부터 본셸 대신 대시셸을 사용</li>
</ul>
<h2 id="셀의-기본-사용법">셀의 기본 사용법</h2>
<p>chsh 사용자 로그인 셀을 바꿈
옵션 -s shell: 지정한 절대 경로로 변경
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/79013c12-b649-429e-b71e-73e3b080f2e0/image.png" alt=""></p>
<p>echo 화면 한줄 문자열 출력
printf 자료 형식화하여 화면 출력
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/76b0b1f8-b007-48e3-a889-710d72f13078/image.png" alt=""></p>
<h2 id="bash-shell-환경-설정">bash shell 환경 설정</h2>
<p>set: 셸 변수와 환경 변수 모두 출력
env: 환경 변수만 출력
변수명=문자열
export 지정한 셀 변수를 환경변수 변경
export -n 환경변수를 다시 셀 변수로 변경하기
unset 변수 해제
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/a7baf5b1-f886-4101-9e64-7bc243f0f27c/image.png" alt=""></p>
<h2 id="alias와-history">alias와 history</h2>
<p>alias 앨리어스를 생성
unalias 앨리어스 삭제
history 히스토리를 출력
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/994f0074-4682-4a1c-a02c-235742afed36/image.png" alt=""><img src="https://velog.velcdn.com/images/soobeen-jeong/post/4b31c792-1a32-4d71-ad8e-7450f523202b/image.png" alt=""></p>
<h2 id="prompt-설정">prompt 설정</h2>
<p>프롬프트를 저장한 환경변수:PS1
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/36873bec-230d-4220-bfa2-4e770bd56254/image.png" alt=""></p>
<h2 id="파일-속성">파일 속성</h2>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/aebe9405-c348-4675-bbc4-5d2f42935e9e/image.png" alt=""></p>
<h2 id="파일-접근-권한">파일 접근 권한</h2>
<p><strong>파일 접근 권한 변경</strong>
파일은 읽기, 쓰기, 실행에 대한 파일 접근 권한을 부여
파일 파일 소유자, 파일 소유자 그룹, 기타 사용자에 대해 각각의 파일 접근 권한 부여</p>
<p><strong>파일 접근권한 표기 방법</strong>
문자 표기 방법
권한 부여시에는 권한 문자 표시 -&gt; <strong>r w x</strong>
권한 미부여시에는 - 표시
주로 이 방법 사용</p>
<pre><code>예시) rwxr-xr-x

소유자: 읽기/쓰기/실행 권한
그룹: 읽기/실행 권한
기타 사용자: 읽기/실행 권한</code></pre><p>숫자 표기 방법
파일 접근 권한은 r w x 순서로 부여 =&gt; <strong>고정순서</strong>
권한 부여 문자는 3자리로 구성 (단축해서 표기할 때 사용)
2진수 3자리는 8진수 1자리로 표현 가능</p>
<p>통상 Linux shell에서 파일 생성 시 기본 접근 권한
텍스트 파일
rw-rw-r-- 또는 664 : 소유자 읽기/쓰기 권한, 그룹 읽기/쓰기 권한, 기타 읽기 권한</p>
<p>디렉토리 파일
rwxr-xr-x 또는 755 : 소유자 읽기/쓰기/실행 권한, 그룹 읽기/실행 권한, 기타 읽기/실행 권한</p>
<p>파일 접근 권한은 파일 생성시 Linux shell에서 정해놓은 접근 권한에 의해 설정되지만, 필요시 원하는 접근 권한으로 변경 가능</p>
<h3 id="chmod">chmod</h3>
<p>파일 접근 권한 변경; chmod [옵션] &lt;파일 접근 권한&gt; &lt;파일명&gt;</p>
<p>-R : 하위 디렉토리까지 모두 접근 권한 변경
파일 접근 권한 표기 방법</p>
<p>기호 모드 (문자 형태)
&lt;카테고리 문자&gt; &lt;연산자 기호&gt; &lt;접근 권한 문자&gt;</p>
<p>카테고리 문자 : u (user 사용자) , g (group 사용자 그룹) , o (other 기타 사용자) , a (all 모두)
연산자 문자 : + (권한 부여) , - (권한 미부여)
권한 문자 : r (읽기) , w (쓰기) , x (실행)</p>
<p><strong>숫자 모드 (8진수로 표현)</strong>
파일 소유자/소유자 그룹/기타 사용자에 대한 권한을 8진수 3자리로 표현, 주로 사용하는 방식</p>
<p>777 : 소유자/그룹/기타 사용자 모든 권한 부여
666 : 소유자/그룹/기타 사용자 모두 읽기 및 쓰기 권한 부여
755 : 소유자는 모든 권한, 그룹/기타 사용자는 읽기 및 실행 권한 부여
644 : 소유자는 읽기와 쓰기, 그룹/기타 사용자는 읽기 권한 부여
640 : 소유자 읽기 및 쓰기, 그룹 읽기 권한 부여, 기타 사용자는 모든 권한 미부여</p>
<p><strong>파일 기본 권한 제한</strong></p>
<blockquote>
<p>Linux shell 상에서 생성되는 파일에 대해 기본 권한이 설정되어 생성
필요시 파일에 부여되는 기본 권한을 제한해서 생성할 수 있도록 설정할 때가 있기도 함
Linux shell 파일 기본 접근 권한
<strong>일반 파일</strong> : 소유자 읽기/쓰기, 그룹 및 기타 사용자 읽기 권한
<strong>디렉토리 파일</strong> : 소유자 모든 권한, 그룹 및 기타 사용자 읽기/실행 권한
touch 명령어로 생성한 파일은 일반 파일에 텍스트 파일 생성, 기본적으로 실행 권한 부재
<strong>umask</strong> : 파일 생성시 기본 권한 제한 설정; umask [옵션][&lt;mask 값&gt;]
<strong>-s 옵션</strong> : mask 값 문자 출력
umask 또는 umask -s 입력시 현재 설정된 mask 값 출력
<strong>mask 값</strong> : 파일 생성시 제한하고 싶은 권한을 표시한 값
&quot;umask 숫자 값 입력 후 umask -s를 추가로 입력해야 설정값이 적용된다&quot;</p>
</blockquote>
<h3 id="특수-접근-권한">특수 접근 권한</h3>
<p>접근 권한은 원래 4자리의 8진수 사용
가장 처음 자리수가 특수 접근 권한 의미
특수 접근 권한에는 1, 2, 4 부여 가능
<strong>sticky bit</strong> : 맨 앞자리가 1
<strong>SetGID</strong> : 맨 앞자리가 2
<strong>SetUID</strong> : 맨 앞자리가 4</p>
<p><strong>SetUID</strong>
해당 파일이 실행되는 동안에는 실행한 사용자의 권한이 아닌 파일 소유자 권한으로 생성</p>
<p><em>SetUID 부여 방법</em> : chmod 4&lt;숫자모드 3자리&gt; &lt;파일명&gt; ex) chmod 4755 sample
소유자의 실행권한이 s로 변경 ex) -rwsr-xr-x</p>
<p><strong>SetGID</strong>
해당 파일이 실행되는 동안 파일 소유 그룹의 권한으로 실행</p>
<p><em>SetGID 부여 방법</em> : chmod 2&lt;숫자모드 3자리&gt; &lt;파일명&gt; ex) chmod 2755 sample2
그룹 실행권한이 s로 변경 ex) -rwxr-sr-x</p>
<p><strong>Sticky bit</strong>
디렉토리 부여</p>
<p>디렉토리에 sticky bit가 설정되면 이 디렉토리에는 누구나 파일 생성 가능
파일을 생성한 계정으로 파일 소유자 설정, 他 사용자가 생성한 파일은 삭제 불가
디렉토리에 대한 권한
r : 디렉토리 내용 읽기 가능
w : 디렉토리에 파일 생성 가능
x : 디렉토리에 이동 가능
<em>부여 방법</em> : chmod 1&lt;숫자모드 3자리&gt; &lt;디렉토리명&gt; ex) chmod 1777 temp
기타 실행권한이 t로 변경 ex) drwxrwxrwt
sticky bit가 설정된 대표적 디렉토리: /tmp</p>
<h2 id="프로세스-개념">프로세스 개념</h2>
<p><strong>프로세스</strong>
현재 시스템에서 실행 중인 프로그램</p>
<p><strong>프로세스의 부모-자식 관계</strong>
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/8a433d99-fb0d-4dd9-adfd-9a8e1642acdc/image.png" alt=""></p>
<p><strong>프로세스 번호</strong>
각 프로세스는 고유한 번호를 가짐:PID
1번 프로세스는 system, 2번 프로세스는 kthreadd</p>
<p><strong>프로세스 종류</strong></p>
<blockquote>
<ul>
<li><strong>데몬 프로세스</strong>: 특정 서비스를 제공하기 위해 존재하며 리눅스 커널에 의해 실행</li>
</ul>
</blockquote>
<ul>
<li><strong>고아 프로세스</strong>: 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료되면 자식 프로
세스는 고아 프로세스가 됨</li>
<li><strong>좀비 프로세스</strong>
• 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아 있는 경우가 있는데 이러한 자식
프로세스를 좀비 프로세스라고 함
• 좀비 프로세스는 프로세스 목록에 defunct 프로세스라고 나오기도 함<blockquote>
<p>• 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 정상적인 프로세스가 실행되지 않을 수도 있음</p>
</blockquote>
</li>
</ul>
<h2 id="프로세스-관리-명령어">프로세스 관리 명령어</h2>
<p>ps 현재 단말기의 프로세스 목록 출력
ps -f 프로세스 상세 정보 출력
ps a 터미널에서 실행시킨 프로세스 정보 출력
ps au 터미널에서 실행시킨 프로세스 상세 정보 출력
ps -ef 전체 프로세스 목록 출력
pgrep 지정한 패턴과 일치하는 프로세스 정보를 출력
kill 프로세스 종료
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/4c6d6fd5-d7f3-414b-b533-87103e586650/image.png" alt=""><img src="https://velog.velcdn.com/images/soobeen-jeong/post/4b46584e-ec14-45df-993b-fc3c71e56059/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/cbef5d13-7190-49be-b37d-3c7af4294d46/image.png" alt=""></p>
<h2 id="시그널">시그널</h2>
<p>*<em>시그널 *</em></p>
<ul>
<li>프로세스에 무언가 발생했음을 알리는 간단한 메시지</li>
<li>무엇이 발생했는지를 나타내는, 미리 정의된 상수를 사용</li>
<li>시그널은 번호로 구분되며 이름 을 가지고 있음  시그널을 받은 프로세스는 기본적으로 종료
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/d0731226-56dc-4d20-9572-b01c9ea02a56/image.png" alt=""></li>
</ul>
<h2 id="top">Top</h2>
<p>프로세스 관리 도구
현재 실행 중인 프로세스의 정보를 주기적으로 출력
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/dc1f8f4c-be62-46dc-a6fc-5129de6afa81/image.png" alt=""></p>
<p><strong>화면 출력 내용</strong>
PID : Process ID
USER : 사용자
PR : 우선 순위
NI : Nice 값
VIRT : 프로세스 사용 가상 메모리 크기
RES : 프로세스 사용 물리 메모리 크기
SHR : 프로세스 사용 공유 메모리 크기
%CPU : CPU 사용량
%MEM : 메모리 사용량
TIME+ : CPU 누적 이용 시작
COMMAND : 명령</p>
<p><strong>top 내부 명령</strong>
Spacebar : 내용 갱신
k : 프로세스 종료
n : 출력 프로세스 개수 변경
u : 사용자에 대한 정렬
m : 사용 메모리 크기에 따라 정렬
P (대문자) : CPU 사용량에 따라 정렬
q : top 종료</p>
<h2 id="포그라운드백그라운드-프로세스">포그라운드/백그라운드 프로세스</h2>
<h4 id="foreground-프로세스-생성">foreground 프로세스 생성</h4>
<p>shell에서 명령 실행</p>
<h4 id="background-프로세스-생성">background 프로세스 생성</h4>
<p>shell에서 명령 실행시 명령 마지막에 &#39;&amp;&#39; 추가
-&gt; 지속적으로 bg에서 동작
bg 명령을 이용한 background 프로세스로 전환
Ctrl + z 키 엽력을 통한 background 전환</p>
<h3 id="jobs-명령">jobs 명령</h3>
<p>현재 shell의 background 작업 목록 출력
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/829663b0-f53f-4242-bbf1-d6a871905a2f/image.png" alt=""></p>
<p>작업번호
= 작업순서</p>
<p>&#39; + &#39; : 최근 작업
&#39; - &#39; : 최근 작업 바로 전
상태
Running : 현재 실행 중
Stopping : 작업 중지
Done : 작업 정상 종료
Terminated : 작업 비정상 종료
fg / bg 전환
fg &lt;%작업 번호&gt; : background 작업을 foreground로 전환</p>
<p>bg &lt;%작업 번호&gt; : foreground 작업을 background로 전환</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TCP/IP 기초]]></title>
            <link>https://velog.io/@soobeen-jeong/TCPIP-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@soobeen-jeong/TCPIP-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Thu, 17 Nov 2022 09:26:46 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/88f87172-b3e3-4d20-adcc-0d12c6b53beb/image.png" alt=""></p>
<h2 id="c1-컴퓨터-네트워크">C1. 컴퓨터 네트워크</h2>
<p>전송 제어 프로토콜 (Transmission Control Protocol: TCP)
인터넷 프로토콜 (Internet Protocol: IP
두대의 컴퓨터 연결되면 네트워크가 된다.
메시지나 파일을 주고 받을 수 있다.</p>
<p>여러 대의 컴퓨터가 연결되면 네트워크가 된다.
컴퓨터들이 서로 정보를 주고 받을 수 있도록 연결된 망을 컴퓨터 네트워크라고 한다.
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/56755521-0c09-43c9-b33f-80d5e9a009a2/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/21c1ad7e-f1d8-4b62-9462-6ee1c7996178/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/ce19d586-e0ab-439b-8d5b-2dd1065bc0d3/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/d6b6f874-85c5-40f3-ac28-bd1c3f537985/image.png" alt="">
애플리케이션 계층
HTTP - 웹 페이지 데이터를 주고받음
HTTPS - 보안을 위해 웹 페이지 데이터를 주고받는 과정을 암호화함
POP3 - 서버에 보관된 수신 메일을 꺼내옴
SMTP - 메일을 송신함
FTP - 파일을 전송함
Telnet - 컴퓨터를 원격에서 제어함
SSH - 보안을 위해 컴퓨터를 원격에서 제어하는 과정을 암호화함
SMB - 윈도우 컴퓨터와 파일을 공유함
DHCP - 컴퓨터에게 프라이빗 IP를 동적으로 할당함
DNS - 도메인 이름과 IP 어드레스를 서로 변환함
SSL - 보안을 위해 통신 과정에서 주고받는 데이터를 암호화함</p>
<p>트랜스포트 계층
TCP - 애플리케이션의 데이터를 송수신하되 데이터의 정확한 전달을 중시함
UDP - 애플리케이션의 데이터를 송수신하되 데이터의 전송 속도를 중시함</p>
<p>인터넷 계층
IP - 패킷을 목적지까지 전달함
ICMP - IP의 통신 오류를 전달함
IPsec - 패킷을 암호화하여 전달함
ARP - 네트워크 장비의 MAC 어드레스를 알아냄</p>
<p>네트워크 인터페이스 계층
이더넷 - 일반 금속 케이블이나 광 케이블을 통해 데이터를 전달함
PPP - 사용자 인증 후에 원격지의 장비와 통신함</p>
<h2 id="c2-네트워크-서비스와-애플리케이션-계층">C2. 네트워크 서비스와 애플리케이션 계층</h2>
<p>애플리케이션 계층은 사용자가 직접 사용하며 체감하는 계층
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/828d26a5-ee1e-45d4-93d9-44295de8d48d/image.png" alt=""></p>
<p><strong>사용자각 직접 사용하는 프로토콜</strong>
HTTP - 웹 페이지 데이터를 주고받음
POP, SMTP, IMAP - 메일을 송수신하고 보관
SMB, AFP - LAN 안에서 파일을 공유
FTP - 서버를 통해 파일을 주고 받음
Telnet, SSH - 원격에서 서버 제어</p>
<p><strong>사용자가 간접적으로 사용하는 프로토콜</strong>
DNS - 도메인명과 IP 어드레스의 정보를 서로 변환할 때 사용
DHCP - LAN 내의 컴퓨터에게 IP 어드레스를 할당할 때 사용
SSL/TLS 통신 데이터를 암호화하여 주요 정보를 안전하게 주고받을 때 사용
NTP - 네트워크에 연결된 장비들의 시스템 시간을 동기활 때 사용
LDAP - 네트워크에 연결된 자원(사용자,장비들)의 통합 관리에 필요한 디렉토리 서비스를 제공할 때 사용
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/e866ab20-4535-47ad-9b78-53e990b860e6/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/0a0947f4-350d-4800-94bf-bb1a37519565/image.png" alt="">
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/5147b6eb-38c9-4e3d-b501-cd0258dc44ed/image.png" alt=""></p>
<h2 id="c3-트랜스포트-계층">C3. 트랜스포트 계층</h2>
<p>데이터 분류하는 트랜스포트 계층
포트 번호로 애플리케이션을 구분
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/c5c7d497-c09d-4622-93a0-9ce103878bf2/image.png" alt="">
데이터의 정확한 전달을 중시하는 TCP
포트 번호는 컴퓨터 내부의 수진자를 표현</p>
<p><strong>주요 웰 노운 포트</strong>
20번 FTP(액티브 모드에서 데이터 커넥션, 패시브 모드에서 랜덤 포트 사용)
21번 FTP(컨트롤 커넥션)
22번 SSH(원격 제어,보안 기능 있음)
23번 Telnet(원격 제어)
25번 SMTP(이메일 전송)
80번 HTTP(웹)
110번 POP3(이메일 수신)
143번 IMAP4(이메일 수신,보관 기능 있음)</p>
<p>클라이언트가 사용하는 포트 번호는 그때그때 다름
클라이언트의 ip어드레스와 포트를 조합해서 기억
<img src="https://velog.velcdn.com/images/soobeen-jeong/post/b4583048-a0f4-44bc-8529-74ca778a259f/image.png" alt="">
TCP가 정확하게 데이터를 전달하는 방법
일련번호와 최대 세그먼트 크기를 사전에 조율
1.송신 실패 여부를 판단한다.
2.연속된 데이터를 몰아서 보내면 전송 속도가 빨라진다.
3.한번에 받아 낼 수 있는 데이터 양을 조절
4.버터가 가득찬 경우 네트워크의 혼잡 상태를 확인
UDP는 다른 처리 없이 전송만 한다.</p>
<p>출처: 명쾌한 설명과 풍부한 그림으로 배우는 TCP/IP 쉽게, 더 쉽게</p>
<h2 id="암호화-보안-프로토콜">암호화 보안 프로토콜</h2>
<p>암호화 프로토콜은 보안 연결을 제공하여 두 당사자가 사생활 보호와 데이터 무결성을 가지고 서로 통신할 수 있게 해줌</p>
<h3 id="https">HTTPS</h3>
<p>HTTP는 기본적으로 암호화되지 않은 데이터 송수신
=&gt; HTTPS (HTTP Secure)는 HTTP 프로토콜에 암호화 적용한 프로토콜, 기본 포트번호는 443번</p>
<p>HTTPS 통신 은 HTTP 통신 과 다르게 서버가 제공하는 SSL 인증서 라는 요소가 추가되었으며, 이를 통해 클라이언트는 필요한 서버의 정보를 취득하고 신뢰성을 판단합니다.</p>
<h4 id="https가-사용하는-보안기능-암호화-방식">HTTPS가 사용하는 보안기능 (암호화 방식)</h4>
<p>SSL ( Secure Sockets Layers ) : 현재 SSL 3.0까지 출시, 향후 업데이트 X
TLS ( Transport Layer Security )
현재 TLS 1.0까지 출시
SSL의 업그레이드 버전이지만 SSL 제작사와는 다른 회사에서 제작 및 관리
통상 SSL이라는 보안기능은 사실상 TLS를 의미
HTTPS-SSL, HTTPS-TLS, HTTPS-SSL/TLS 등의 여러가지 형태로 표기</p>
<h4 id="ssltls-인증서">SSL/TLS 인증서</h4>
<p>클라이언트-서버 간 통신을 제3자가 보증해주는 문서
클라이언트가 서버에 접속하면 -&gt; 서버는 클라이언트에게 인증서 전송
-&gt; 클라이언트는 전달받은 인증서를 보고 신뢰할 수 있는 대상인지 확인 후
-&gt; 데이터를 보내는 절차 수행</p>
<h2 id="ssltls-통신과정">SSL(TLS) 통신과정</h2>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/a282515c-a68a-4a64-8ea0-fbd9dcd4cb76/image.png" alt=""></p>
<ol>
<li>클라이언트 → 서버로 랜덤 데이터와 사용 가능한 암호화 방식을 보낸다.</li>
<li>서버 → 클라이언트로 랜덤 데이터, 사용할 암호화 방식과 SSL 인증서를 보낸다.</li>
<li>클라이언트는 서버에게 받은 인증서의 CA가 자신이 들고 있는 CA 리스트에 있는지 확인하고, 있다면 CA의 공개키로 복호화한다. 이는 곧 CA 비밀키에 의해 암호화됐다는 것이므로 인증서의 신원을 보증해준다. (공개키 암호화 방식)
클라이언트는 자기가 보낸 랜덤 데이터와 서버로부터 받은 랜덤 데이터를 조합하여 임시 키 (pre master secret key)를 만든다.</li>
<li>만들어진 임시 키를 인증서의 공개키로 암호화하여 서버에게 보낸다.</li>
<li>서버는 자신이 들고 있던 비밀키로 임시 키를 복호화한다.</li>
<li>이로써 클라이언트와 서버는 동일한 임시 키를 공유하게 되는데, 일련의 과정을 거쳐 master secret 값을 만들고 세션 키를 생성한다.</li>
<li>이렇게 만들어진 세션 키로 암호화된 데이터를 주고받는다. (대칭키 암호화 방식)</li>
<li>세션이 종료되면 클라이언트와 서버 모두 세션 키를 폐기한다.</li>
</ol>
<p>이렇게 공개키 암호화 방식과 대칭키 암호화 방식을 조합해서 사용하는 이유는 아래와 같다.</p>
<ol>
<li>공개키 방식은 컴퓨터 파워를 많이 사용한다. 그래서 요청이 쏠리는 경우 서버는 과금을 내야 한다.</li>
<li>대칭키 방식은 암호를 푸는 열쇠인 대칭키를 상대방에게 줘야 한다. 하지만 인터넷을 통해 키를 전송하는 것은 위험하다.</li>
</ol>
<p>그래서 채널을 수립할 때에는 공개키 방식을 이용해 보다 안전한 채널을 수립하고, 이후 데이터를 주고받을 때 대칭키를 통해 암호화하여 주고 받는다.</p>
<h2 id="wirshark네트워크-패킷-분석-도구">Wirshark(네트워크 패킷 분석 도구)</h2>
<p>와이어샤크는 네트워크 패킷을 캡처하고 분석하는 오픈소스 도구이다.
처음엔 &#39; Ethereal &#39; 이라는 이름으로 나왔다가 이후에 상표문제로 &#39; Wireshark &#39;로 바뀌었다.
강력하고 쉬운 사용법때문에 해킹뿐만 아니라 보안 취약점 분석, 보안 컨설팅, 개인정보 영향평가 등 여러 분야에서 폭 넓게 사용된다.
사무실 내부 네트워크에서 지연 현상 발생 시 과다 트래픽 및 패킷을 유발하는 IP를 확인하는 간단한 방법을 소개합니다.</p>
<h4 id="wireshark-기본-작동-개념">Wireshark 기본 작동 개념</h4>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/4c99562c-7977-42b4-9ab5-7799a6d522c6/image.png" alt=""></p>
<p> 같은 네트워크 구간의 Noel과 Susan은 이메일이나 메신저 등을 통해 대화를 주고받는다.
여기에서 Wireshark를 사용하는 제3자는 이 둘 사이의 네트워크로 돌아다니는 패킷( 네트워크상의 데이터 )을 수신하여 저장한다.
이때, PCAP이라는 파일 포맷으로 저장된다.
PCAP 은 Packet Capture의 약자로 네트워크 트래픽을 캡처하는 API구성이다.
Wireshark는 자체 프로그램으로 네트워크 트래픽을 캡처하는 것이 아니고, 운영체제에서 지원하는 캡처 라이브러리를 이용하여 수집한다.
유닉스 : libpcap
윈도우 : Winpcap</p>
<h4 id="wireshark-설치">Wireshark 설치</h4>
<p>Kali Linux 사용자의 경우 기본적으로 설치가 되어있다.
window 사용자의 경우 wireshark 홈페이지에서 무료로 다운받아 사용이 가능하다.
<a href="https://www.wireshark.org/">https://www.wireshark.org/</a></p>
<p>나는 macOS Arm 64-bit .dmg 다운받아 설치하였다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/f4402e9e-fcf3-4014-98ec-10284fde9389/image.png" alt="">
와이어샤크 처음 실행하면 위와 같은 화면이 뜬다.
가운데 빨간색 박스를 보면 자동으로 와이어샤크가 이더넷 인터페이스를 찾아놨다.
따라서 해당 부분을 클릭하면 왼쪽 상단에 상어지느러미 모양이 활성화되는데 이것을 누르면 해당 이더넷 인터페이스에서 오고 가는 패킷들을 찾아준다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/76dde951-8583-476e-b296-c26fabff8018/image.png" alt="">
이런식으로 오고가는 패킷을 실시간으로 잡아내는 것을 확인할 수 있다.</p>
<blockquote>
<p>No. : 패킷을 수집한 순서
Time : 패킷이 수집된 시간
Source : 패킷을 보낸 주소
Destination : 패킷 도착 주소
Protocol : 프로토콜 정보
Length : 패킷의 길이
Info : 패킷 정보</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/10a2d019-13c8-410a-9954-52972ff4f480/image.png" alt=""></p>
<h3 id="패킷-필터링">패킷 필터링</h3>
<p>사실 위와 같이 그냥 start버튼으로 패킷을 수집해버리면 원하는 패킷만 보고 싶은데 다른 패킷들도 다 수집해버려서 보기 어렵다.
그래서 그런 문제를 해결하기 위해 필터링을 제공한다.</p>
<p>두 가지의 필터링 방식이 있는데 중요한 것은 아니므로 쉽게 설명하도록 한다.</p>
<ol>
<li>애초에 패킷 수집 자체에 필터를 걸어서 필터링에 적용된 패킷만 받는 방법(성능에 영향을 끼칠 수 있음..)</li>
<li>오가는 패킷 전체를 수집한 후, 내가 화면에서 볼 것만 필터링하는 방법(권장, 다양한 연산이 사용가능함)
1을 캡쳐필터라고하고 2를 디스플레이 필터라고 한다는 것만 알고 넘어간다.</li>
</ol>
<p>예를들어 &quot;ip.addr == 192.0.2.1&quot; 이라고 적용하면 source든 destination이든 아이피가 해당 아이피인 패킷만 볼 수 있다.</p>
<ul>
<li>유용한 필터링 식</li>
</ul>
<blockquote>
<p>eth.addr == 00:3f:1e:00:00:23 //출발지나 목적지 MAC 주소로 검색
ip.addr == 192.168.0.2 // 출발지나 목적지 IP주소로 검색
tcp.port == 3306 // TCP 출발지나 목적지 포트 번호로 검색
ip.src != 10.1.2.3 // 출발지 IP주소가 해당 IP주소가 아닌것 검색
eth.dst == 00:3f:1e:00:00:23 // 목적지 MAC주소 검색</p>
</blockquote>
<p>기타 비교 연산자나 논리 표현도 가능해서 아주 다양하게 적용할 수도 있다.</p>
<p><img src="https://velog.velcdn.com/images/soobeen-jeong/post/026a9cb1-07e3-4bab-bb60-a2a641d21c11/image.png" alt="">
필터링을 하여 아이폰 핫스팟으로 맥북 연결한 내 아이피를 들어가면 화면을 이렇게 나오는 것을 확인 할 수 있다.</p>
]]></description>
        </item>
    </channel>
</rss>