728x90

컴퓨터는 필수장치인 CPU와 메모리, 주변장치인 입출력장치와 저장장치로 구성되며, 각 장치는 메인보드에 있는 버스로 연결된다.

다양한 주변장치는 데이터 전송 속도에 따라 저속 주변 장치와 고속 주변장치로 구분할 수 있따.

 

저속 주변장치: 메모리와 주변장치 사이에 오고 가는 데이터의 양이 적어 데이터 전송률이 낮은 장치를 말한다. 키보드의 경우 아무리 빨리 타이핑을 한다고 해도 1초에 1KB를 넘지 않으므로 저속 주변장치이다.

 

고속 주변장치: 메모리와 주변장치 사이에 대용량의 데이터가 오고 가므로 데이터 전송률이 높은 장치를 말한다. 출력장치인 그래픽카드의 경우 모니터에 초당 수십 장의 그래픽을 보여주어야 하기 때문에 고속 주변장치이다. 하드디스크도 대용량의 데이터를 메모리에 올리거나 메모리에서 하드디스크로 옮겨야 하기 떄문에 고속 주변장치이다.

 

데이터 용량이 적다면 저속, 많다면 고속이다.

 

여러 주변장치는 메인보드 내의 버스로 연결된다. 그런데 버스에는 많은 종류의 장치가 연결되기 때문에 버스를 1개만 사용하면

병목 현상이 발생한다. 따라서 여려 개의 버스를 묶어서 사용하는데,

이 때 데이터가 지나다니는 하나의 통로를 채널이라고 부른다.

 

입출력 제어기는 2개의 채널, 즉 메인버스와 입출력 버스로 나뉘며, 메인버스는 고속으로 작동하는 CPU와 메모리가 사용하고 입출력 버스는 주변장치가 사용한다. CPU에서 입출력 요청이 오면 입출력 제어기는 입출력장치로부터 데이터를 직접 송수신한다. 입출력 제어기를 사용하면 느린 입출력 장치로 인해 CPU와 메모리의 작업이 느려지는 것을 막을 수 있어 전체 작업 효율이 향산된다.

 

입출력 버스를 고속 입출력 버스와 저속 입출력 버스로 분리하여 운영한다. 고속 입출력 버스에는 고속 주변장치를 연결하고 저속 입출력 버스에는 저속 주변장치를 연결하여, 두 버스 사이의 데이터 전송은 channel selector(채널 선택기) 가 관리한다. 

 

인터럽트는 주변장치의 입출력 요구나 하드웨어의 이상 현상을 CPU에 알려주는 역할 하는 신호이다.

CPU가 요청한 작업을 완료했을 때, 키보드로 데이터를 입력받았을 때, 네트워크 카드에 새로운 데이터가 도착했을 때, 하드웨어에 이상이 발생했을 때 등 다양한 경우에 인터럽트가 발생한다.

 

외부 인터럽트: 입출력장치로부터 오는 인터럽트뿐 아니라 전원 이상이나 기계적인 오류 때문에 발생하는 인터럽트를 포함하므로 하드웨어 인터럽트라고도 부른다. IRQ라는 고유의 인터럽트를 부여하여 어떤 장치에서 인터럽트가 발생했는지 파악한다.

 

내부 인터럽트: 숫자를 0으로 나누거나 자신의 주소공간을 벗어나서 작업하는 것과 같이 프로세스의 오류와 관련된 인터럽트는 내부 인터럽트이다. 내부 인터럽트는 프로세스의 잘못이나 예상치 못한 문제에 때문에 발생하는 인터럽트 이므로 예외상황 인터럽트라고도 부른다.

 

반면, 사용자가 직접 발생 시키는 인터럽트도 있는데 ctrl + c 와 같은 경우이다. 사용자의 의지로 발생시키는 자발적 인터럽트를 시그널이라고 부른다.

종류 특징 비고
외부 인터럽트 입출력 및 하드웨어 관련 인터럽트 주변장치 변화, 하드웨어 이상
내부 인터럽트 프로세스의 오류로 발생하는 인터럽트 예외 상황 인터럽트
시그널 사용자의 요청으로 발생하는 인터럽트 자발적 인터럽트

인터럽트 벡터: 여러 인터럽트 중 어떤 인터럽트가 발생했는지 파악하지기 위해 사용하는 자료 구조. 벡터 값이 1이면 인터럽트 발생!

 

버퍼: 버퍼는 속도가 다른 두 장치의 속도 차이를 완화하는 역할을 한다. 느린 장치를 통해 들어오는 데이터를 버퍼에 모아 한꺼번에 이동하면 효율적이다. 하드디스크나 CD-ROM 등 대부분의 입출력장치는 버퍼를 사용하여 느린 속도를 보완한다. 커널이 입출력 장치로 보내야 할 데이터를 버퍼에 담아 놓으면 입출력 제어기가 커널 버퍼에서 입출력 장치로 데이터를 보낸다.

 

sector(섹터): 하드디스크의 물리적 개념으로 가장 작은 저장 단위이다.

 

track(트랙): 플레터에서 회전축을 중심으로 데이터가 기록되는 동심원, 즉 동일한 동심원상에 있는 섹터의 집합을 말한다.

 

seek time(탐색 시간): 하드디스크의 특징 섹터에 저장된 데이터를 읽거나 쓰려면 그 섹터가 있는 트랙까지 헤드가 이동해야 한다. 이처럼 헤드가 현재 위치에서 그 트랙까지 이동하는 데 걸리는 시간을 탐색시간이라고 한다.

 

rotational latency time(회전 지연 시간): 특정 트랙까지 이동한 헤드는 플래터가 회전하여 원하는 섹터를 만날 때까지 기다린다. 이처럼 원하는 섹터를 만날 때까지 회전하는 데 걸리는 시간을 표현한다.

 

transmisstion time(전송 시간): 헤드는 원하는 섹터에 있는 데이터를 읽어 전송하는데, 이때 걸리는 시간을 표현한다.

데이터 전송 시간 = 탐색시간 + 회전지연시간 + 전송시간

 

Disk scheduling (디스크 스케줄링): 트랙의 이동을 최소화하여 이 탐색 시간을 줄이는데 목적이 있다.

 

FCFS 디스크 스케줄링: 요청이 들어온 트랙 순서대로 서비스한다.

 

SSTF 디스크 스케줄링: 현재 헤드가 있는 위치에서 가장 가까운 트랙부터 서비스한다. 만약 다음에 서비스할 두 트랙의 거리가 같다면 먼저 요청 받은 트랙을 서비스 한다. 효율성이 좋지만, 아사현상이 발생 할 수 있다.

 

블록 SSTF 디스크 스케줄링: 현재 트랙에서 가장 먼 트랙을 블록의 끝으로 이동한다. 따라서 멀리 있는 트랙도 몇 번만 양보하면 서비스 받을 수 있다. 이는 SSTF 디스크 스케줄링에 에이징을 적용한 것이다.

 

SCAN 디스크 스케줄링: 공평성 위배 문제를 완화하기 위해 만들어진 기법, 헤드가 한 방향으로만 움직이면서 서비스한다. 헤드가 움직이기 시작하면 맨 마지막 트랙에 도착할 때까지 뒤돌아가지 않고 계속 한 방향으로 전진한다.

 

C-SCAN 디스크 스케줄링: SCAN도 공평성에 위배가 된다. 그래서 바깥쪽에 공평성을 위해 끝에 도달했을 경우 반대 방향으로 이동할 때 중간 작업 없이 반대 끝 방향으로 이동한다.

 

LOOK 디스크 스케줄링: 더 이상 서비스할 트랙이 없으면 헤드가 끝까지 가지 않고 중간에서 방향을 바꾼다.

 

C-LOOK 디스크 스케줄링: 중간에서 방향을 바꾸는 경우에 중간 작업 없이 끝 방향으로 이동한다.

 

RAID: 자동으로 백업을 하고 장애가 발생하면 이를 복구하는 시스템으로 '레이드'라고 부른다. 메모리가 아닌 값싼 디스크를 이용하기 때문에 이런 이름이 붙었다.

728x90

'운영체제_스터디' 카테고리의 다른 글

#DAY5 물리 메모리 관리  (0) 2021.11.26
#DAY4 교착상태  (0) 2021.11.16
# DAY3 프로세스 동기화  (0) 2021.11.12
728x90
블로그에 작성하면서 다시 복습하는 노트이다.
스터디 책은 '쉽게 배우는 운영체제-(한및아카데미)'를 사용했다.

MAR (메모리 주소 레지스터): CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 메모리 주소 레지스터를 사용한다.

 

메모리 관리의 이중성: 프로세스 입장에서 작업의 편리함과 관리자 입장에서 관리의 편리함이 충돌을 일으키는 것을 말한다.

 

계층적 메모리 구조: 메모리를 계층적 구조로 만들어 작업 속도를 올리고 가격을 낮추는 방법

 

컴파일러: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후 한꺼번에 실행한다. C언어, 자바 등이 있다.

 

인터프린터: 소스코드를 한 행씩 번역하여 실행한다. 자바스크립트, 베이직 들이 이 방식으로 프로그램을 실행한다.

 

컴파일러 목적

  • 오류 발견: 소스코드에서 오류를 발견하여 실행 시 문제가 없도록 하는 것이다. 컴파일러는 오류를 찾기 위해 symbol table(심벌 테이블)을 사용한다. 심벌 테이블은 변수 선언부에 명시한 각 변수의 이름과 종류를 모아놓은 테이블로, 선언하지 않은 변수를 사용하지는 않았는지, 변수에 다른 종류의 데이터를 저장하지는 않았는지 알 수 있다.
  • 코드 최적화: 사용하지 않는 변수를 삭제하면 더욱 간결해서 실행 속도가 빨라진다. 컴파일러는 실행하기 전에 코드를 점검하여 오류를 수정하고 최적화함으로써 작은 빠른 실행 파일을 만든다.

컴파일러와 인터프린터 목적

  • 크고 복잡한 프로그램에는 컴파일러를 사용하고 간단한 프로그램에는 인터프린터를 사용한다.

컴파일 과정

  1. 소스코드 작성 및 컴파일: 프로그래머가 C 언어나 자바로 소스코드를 작성하여 컴파일하면 목적 코드가 만들어진다.
  2. 목적 코드와 라이브러리 연결: 목적 코드가 만들어지면 라이브러리에 있는 코드를 목적 코드에 삽입하여 최종 실행 파일을 만든다.

Memory Manage Unit(메모리 관리 유닛): 메모리 관리자

  • fetch(가져오기 작업): 프로세스와 데이터를 메모리로 가져오는 작업이다. 메모리 관리자는 사용자가 요청하면 프로세스와 데이터를 모두 메모리로 가져온다.
  • placement(배치 작업): 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업이다. 배치 작업 전에 메모리를 어떤 크기로 자를  것인지가 매우 중요하다.
  • replacement(재배치 작업): 새로운 프로세스를 가져와야 하는데 메모리가 꽉 찼다면 메모리에 있는 프로세스를 하드디스크로 옮겨놓아야 새로운 프로세스를 메모리에 가져올 수 있따.

paging: 메모리를 같은 크기로 자르는 것을 페이징이라고 한다.

 

segmentation: 프로세스의 크기에 맞게 자르는 것을 세그먼테이션이라고 한다.

728x90

'운영체제_스터디' 카테고리의 다른 글

# DAY8 입출력 시스템과 저장 장치  (0) 2021.12.07
#DAY4 교착상태  (0) 2021.11.16
# DAY3 프로세스 동기화  (0) 2021.11.12
728x90
이 글은 운영체제 스터디를 진행하면서 본인이 이해하기 위해 작성하는 글입니다.
참고 도서는 '쉽게 배우는 운영체제(한빛아카데미)'입니다.

dead lock (교착상태) : 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 교착 상태라고 한다.

교착 상태는 아사 현상과 비슷해 보이지만 차이점이 있다.
아사 현상은 운영체제가 잘못된 정책을 사용하여 특정 프로세스의 작업이 지연되는 문제이고,
교착 상태는 여러 프로세스가 작업을 진행하다 보니 자연젹으로 일어나는 문제이다.

 

resource allocation grap (자원 할당 그래프) : 프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것이다. 자원 할당 그래프를 사용하면 어떤 프로세스에 자원이 할당되어 있는지 혹은 어떤 프로세스가 자원을 기다리고 있는지를 한눈에 파악할 수 있다.

 

자원이 2개 이상의 프로세스를 동시에 허용하는 경우가 있다. 여러 프로세스가 하나의 자원을 동시에 사용하면 이를 "multiple resource (다중 자원)" 이라고 부른다.

 

*(교착 상태 발생) 식사하는 철학자 문제

철학자 4명이 둥그런 식탁에 둘러앉아 식사를 하는데,
왼쪽에 있는 포크를 잡은 뒤 오른쪽에 있는 포크를 잡아야만 식사가 가능하다는 조건이 있다.
철학자들은 음식을 먹기 위해 왼쪽의 포크를 잡은 뒤 오른쪽 포크를 잡으려고 옆을 볼 것이다. 
그런데 옆에는 이미 왼손에 포크를 들고 있는 다른 철학자가 앉아 있다.
결과: 식사하는 철학자 문제의 결과는 오른쪽 포크를 잡지 못해 모두 굶어 죽는다는 것이다.
  1. 철학자들은 서로 포크를 공유할 수 없다. - 자원을 공유하지 못하면 교착 상태가 발생한다.
  2. 각 철학자는 다른 철학자의 포크를 빼앗을 수 없다. - 자원을 빼앗을 수 없다면, 놓을때 까지 기다려야 하므로 교착 상태 발생.
  3. 각 철학자는 왼쪽 포크를 잡은 채 오른쪽 포크를 기다린다. - 자원 하나를 잡은 상태에서 다른 자원을 기다리면 교착 상태가 발생.
  4. 자원 할당 그래프가 원형이다. - 자원을 요구하는 방향이 원을 이루면 양보를 하지 않기 때문에 교착 상태가 발생.

 

교착 상태 필요조건

  • 상호 배제: 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 한다.
  • 비선점: 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점자원이야 한다. 자원을 빼앗을 수 없으면 공유할 수도 없다.
  • 점유와 대기: 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 한다. 다른 프로세스가 필요로 하는 자원을 점유하고 있으면서 또 다른 자원을 기다리는 상태
  • 원형 대기: 점유와 대기를 하는 프로세스 간의 관계가 원을 이우어야 한다. 점유와 대기를 하는 프로세스들이 서로 방해하는 방향이 원을 이루면 프로세스들이 서로 양보하지 않기 때문에 교착 상태에 빠진다.

 

교착 상태 해결 방법

해결 방법 특징
교착 상태 예방 교착 상태를 유발하는 네 가지  조건을 무력화한다.
교착 상태 회피 교착 상태가 발생하지 않는 수준으로 자원을 할당한다.
교착 상태 검출 자원 할당 그래프를 사용하여 교착 상태를 발견한다.
교착 상태 회복 교착 상태를 검출한 후 해결한다.

 

교착 상태 예방. 4가지 방법

  • 상호 배제 예방: 독점적으로 사용할 수 있는 자원을 없애버리는 방법이다. 시스템 내외 모든 자원을 공유할 수 있다면 교착 상태가 발생하지 않는다. 
  • 비선점 예방: 모든 자원을 빼앗을 수 있도록 만드는 방법이다. 하지만 임계구역을 보호하기 위해 잠금을 사용하면 자원을 빼앗을 수 없을 뿐만 아니라 상호 배제도 보장할 수 없다.
  • 점유와 대기 예방: 프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법이다. 다시 말해 '전부 할당하거나 아니면 아예 할당하지 않는' 방식을 저용하는 것이다.
  • 원형 대기 예방: 자원을 한 방향으로만 사용하도록 설정함으로써 원형 대기를 예방할 수 있다. 모든 자원에 숫자를 부여하고 숫자가 큰 방향으로만 자원을 할당하는 것이다.

교착 상태 회피

banker's alogorithm (은행원 알고리즘)

  • 각 프로세스의 기대 자원과 비교하여 가용 자원이 하나라도 크거나 같으면 자원을 할당한다. 가용 자원이 기대 자원보다 크다는 것은 그 자원을 사용하여 작업을 끝낼 수 있는 프로세스가 있다는 의미이므로 '안정 상태' 이다.
  • 가용 자원이 어떤 기대 자원보다 크지 않으면 할당하지 않는다. 가용 자원을 사용하여 작업을 마칠 수 있는 프로세스가 없다는 의미이므로 '불안정 상태' 이다.
728x90

'운영체제_스터디' 카테고리의 다른 글

# DAY8 입출력 시스템과 저장 장치  (0) 2021.12.07
#DAY5 물리 메모리 관리  (0) 2021.11.26
# DAY3 프로세스 동기화  (0) 2021.11.12
728x90
블로그에 작성하면서 다시 복습하는 노트이다.
스터디 책은 '쉽게 배우는 운영체제-(한및아카데미)'를 사용했다.

프로세스 간 통신의 종류

  • 프로세스 내부 데이터 통신 :  하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우의 통신이다. 프로세스 내부의 스레드는 전역 변수나 파일을 이용하여 데이터를 주고받는다.
  • 프로세스 간 데이터 통신 : 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로, 공용파일 또는 운영체제가 제공하는 파이프를 사용하여 통신한다.
  • 네트워크를 이용한 데이터 통신 : 여러 컴퓨터가 네트워크로 연결되어 있을 때도 통신이 가능한데, 이 경우 프로세스는 소켓을 이용하여 데이터를 주고받는다.

 

통신은 데이터가 전송되는 방향에 따라 나뉜다.

  • 양방향 통신 : 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조로, 일반적인 통신은 모두 양방향 통신이다. 프로세스 간 통신에서는 소켓 통신이 양방향 통신에 해당한다.
  • 반양방향 통신 : 데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로만 전송할 수 있는 구조이다. 반양방향 통신의 대표적인 예는 무전기이다.
  • 단방향 통신 : 모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있는 구조이다. 프로세스 간 통신에서는 전역 변수와 파이프가 단방향 통신에 해당한다.

 

busy waiting(바쁜 대기) : 전역변수를 사용하는 통신 방식의 가장 큰 문제점은 언제 데이터를 보낼지 데이터를 받는 쪽에서는 모른다. 그러므로 데이터를 받는 쪽에서는 반복적으로 전역 변수의 값을 점검하게되어 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것이다.

 

프로세스 간 통신은 동기화 기능에 따라 분류된다.

  • synchronous communication (동기화 통신) : 동기화를 지원하는 통신 방식이다. 데이터를 받는 쪽은 데이터가 도착할 때 까지 자동으로 대기 상태에 머물러 있다.
  • asynchronous communication (비동기화 통신) : 동기화를 지원하지 않는 통신 방식이다. 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터가 도착했는지 여부를 직접 확인한다.

shared resource (공유 자원) : 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공유 자원은 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나, 쓰느냐에 따라 결과가 달라진다.

  • 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 'race condition(경쟁 조건)'이 생겼다고 한다.

critical section (임계구역) : 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의 영역을 임계구역이라고 한다.

  • 임계구역과 관련된 전통적인 문제점 "product-consumer problem (생산자-소비자 문제)"
728x90

'운영체제_스터디' 카테고리의 다른 글

# DAY8 입출력 시스템과 저장 장치  (0) 2021.12.07
#DAY5 물리 메모리 관리  (0) 2021.11.26
#DAY4 교착상태  (0) 2021.11.16
728x90

컴퓨터는 0과 1로만 작동하는데 

 

이것을 기계어라고 부른다.

 

우리는 엄청난 기계를 감당할 수 없다.

 

구분하기 어렵고 해석하기 어렵기 때문이다.

 

그렇다면

 

우리가 이해하기 위해서는 어떤 과정을 거치게 되는 걸까?

 

Low Level Language 에 속하는 어셈블리어라는게 탄생했다.

 

그럼 여기서 Low Level Language에 대해 간단하게 설명하자면

 

기계가 이해하기 쉬운 언어에 가까운게 Low Level Language 이다.

 

C, JAVA, Python 과 같은 언어는 무엇일까?

 

바로 High Level Language 이다.

 

사람이 이해하기 쉬운 언어에 가깝다!

 

 다시 어셈블리어로 돌아와서

 

어셈블리어에는 OpcodeOperand로 이루어져있다.

 

 


 

728x90
728x90

마지막 트레이닝이다.

 

열심해 해보자

 

 

 

 

 

- SetUID를 조작하면 관리자 권한 (root)를 얻을 수 있따.

 

 

 

- 레이스 컨디션 : 한정된 자원을 동시에 이용하려는 여러 프로세스가 지원의 이용을 위해 경쟁을 벌이는 현상

- IFS 버그 : IFS 변수는 도스에서 사용하지 않는 변수이다. 이것은 사용자의 명령해중 공백 구분자를 표시하는 것으로 디폴트 값은 '' 이다.

- 버퍼오버플로우 : 버퍼 오버런은 메모리를 다루는 곳에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다.

- 포맷 스트링 어택 : 포맷팅을 수행하는 printf() 같은 특정한 C 함수들에서 검사되지 않은 사용자 입력을 포맷 스트링 파라미터로 사용하는 것으로부터 나온다.


이번에는 파일에 SetUID가 있는지 알아보는 과정이다.

 

- ls -al /usr/bin/passwd 를 입력해서 확인해본다.

- s는 x를 포함하고 있는데 바로 이것이 SetUID이다.

 

 

 

- find / -perm -4000 을 입력하면 "/ 부터 SetUID가 걸린 모든 파일을 찾아준다.

- 4000 앞에 "-"는 "적어도" 라는 뜻이다.

- -perm 은 "권한을 찾겠다" 는 옵션이다.

- 4 는 SetUID를 의미한다.

 

 

 

 

- 본 문제를 풀 때 SetUID가 걸린 파일을 찾아 다음으로 넘어가는 방식이다.

 

- 이번에는 SetUID에 대한 이해를 해보았다.

- 시스템 해킹이 이렇게 접근한다고 알고 있었지만 직접 명령어를 타이핑한 경험은 처음이다.

- 본 문제를 풀면서 발전해보자

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 9  (0) 2021.03.14
FTZ Training 8  (0) 2021.03.13
FTZ Training 7  (0) 2021.03.13
FTZ Training 6  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
728x90

벌써 마지막이 다가온다.

 

언제나 마지막은 아쉬운 법

 

하지만

 

본 문제는 남았기에 열심히 해보자

 

 

보안인으로써 중요한 권한에 대한 내용이다.

 

 

- 권한을 사용자마다 다르게 부여해서 다른 사용자의 내요을 볼 수 없게하는 것도 권한에 예이다.

 

- 리눅스는 4가지 종류의 사용자가 있다.

  • 유저 : 자신을 의미한다. abc로 로그인하면 abc라는 유저가 된다. 
  • 그룹 : 모든 유저는 하나 이상의 그룹에 속하게 된다. 임의로 이 그룹을 변경하지 않는 한 모든 유저는 자신의 유저네임과 같은 이름의 그룹에 속하게 된다.
  • 아더 : 유저와 그룹을 제외한 모든 사용자를 의미한다.
  • 루트 : 절대적인 권한을 가지고 있는 사용자이다. 루트 권한을 가지고 있는 자는 어떤 권한에도 구애받지 않는 상태로 파일들을 제어할 수 있게된다. 절대적인 루트 권한을 얻기위해 하는 것이 "해킹"이다.

 

- id 를 입력하면 본인이 속해 있는 정보에 대해 알 수 있다.

 

 

 

- rwx 에서 각 뜻은

  • r : 읽기권한
  • w : 쓰기권한
  • x : 실행권한 

 

 

- 정보를 분석하는 방법은 위 그림과 같은 순서로 진행이 된다.

- 어떤 권한을 가지고 있는지 어떤 그룹에 속해 있는지 쉽게 구분할 수 있다.

 

 

 

 

- 이번에는 다른 사용자(test2) 이다.

- 다른 점은 trainer1과 guest 권한이 다르고 나머지 사용자에 대한 권한도 다르다.

 

 

 

- 우리는 사용자를 구분하는 방법을 배웠고

- 사용자에 따른 권한이 다를 수 있다는 부분을 알게되었다.

 

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 10  (0) 2021.03.14
FTZ Training 8  (0) 2021.03.13
FTZ Training 7  (0) 2021.03.13
FTZ Training 6  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
728x90

FTZ Training 8

 

이제부터 파일을 생성하고 컴파일하는 과정을 배운다.

 

눈크게 뜨고 배워보자

 

- cat > 생성파일이름.txt 명령어를 입력하면

- 원하는 파일을 만들 수 있다.

- > 뜻하는 것은 cat로 작성한 내용을 생성파일이름.txt에 보내겠다는 뜻입니다.

 

 

- cat > test.txt 명령어로 내용을 입력해서 저장해보았따.

 

 

- 만약 위 처럼 > 을 사용해서 내용을 저장했다면,

- 한번 더 하면 내용이 바뀌는데

- 내용을 추가하기 위해서는?

- cat >> test.txt 로 입력하면 리다이렉션이 두번이다.

- 내용이 아래 새롭게 추가된다. 

 

 

 

- cat > program.c에 프로그램 코드를 작성해주면

- 프로그램 소스가 만들어진다.

 

 

- gcc -o program.exe program.c 를 입력하면

- 컴파일이 성공적으로 되었다.

 

 

- 성공적으로 끝난 컴파일 과정을 실행해보자

- /home/trainer8/program.exe 명령어를 입력하면 program.exe 위치에서 실행되어

- 10 + 20 = 30이라는 값이 나온다.

 

 

 

- 소스 코드를 작성해 보았고

- 컴파일해서

- 실행해 보았다.

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 10  (0) 2021.03.14
FTZ Training 9  (0) 2021.03.14
FTZ Training 7  (0) 2021.03.13
FTZ Training 6  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
728x90

FTZ Training 7

 

지금까지 리눅스를 사용하면서

 

압축파일을 해제한 경험이 있다.

 

하지만 

 

압축을 해본 경험은 없던거 같다.

 

이번에 배울 내용은 압축에 관한 내용이다.

 

리눅스에서 압축을 할 때 사용되는 명령어는 두개이다.

 

- tar

- gzip

 

먼저 tar을 사용해보자

- tar cvf songs.tar * 을 입력하면 현재 디렉토리에 있는 모든파일* 을 songs라는 

- 새로운 파일로 합친다 는 명령어이다.

- 명령어를 통해서 songs.tar이라는 합친 파일이 생성 되었다.

 

 

 

- tar은 압축파일이 아니다

- 파일을 합친 것 이다.

- 용량을 확인해 보면 압축을 한 크기가 아니다.

 

 

그렇다면 

 

gzip은 어떨까?

 

- gzip songs.tar 명령어를 통해서 합쳤던 파일 songs.tar을 songs.tar.gz로 압축했습니다.

- 파일 용량을 보면 압축이 되었다는것을 알 수 있습니다.

 

 

이번에는 

 

지금까지 과정에 역순으로

 

해제를 해보자

 

해체는 조립에 역순! 이라는 말이 있다.

 

- gzip -d songs.tar.gz 명령어를 입력하니 용량이 늘어난 songs.tar로 변했다.

- 압축을 한 상태가 해제 된 것이다.

 

 

 

- tar xvf songs.tar 명령어를 입력하니

- 합쳐진 파일이 다시 분해가 되었다.

 

 

- 앞으로 리눅스에서 백업을 할 경우에 tar과 gzip순서로 하면 빠르게 할 수 있다.

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 9  (0) 2021.03.14
FTZ Training 8  (0) 2021.03.13
FTZ Training 6  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
FTZ Training 4  (0) 2021.03.13
728x90

FTZ Training 6

 

모든게 중요하지만 패스워드 파일 분석 방법

 

이름만 들어도 중요해 보인다.

 

- 지금까지 패스워드만 담은 건줄 알았다.

- 패스워드 파일에는 서버를 사용하는 사용자들의 모든 정보를 기록해 놓는 파일이다.

- 그래서 중요하다.

 

 

- 보안 기사에서 자주 나오는 문제이다.

- 필드는 7개로 나뉜다.

- 각자 다른 의미가 있다.

- 첫번째 필드는 서버에 로그인할 때 사용되는 아이디(계정)을 뜻한다.

 

 

 

- 두번째 필드패스워드를 뜻하게 된다. 

- X인데? 패스워드라고?

- 지금까지 다양한 암호화 방식으로 문자열(패스워드)를 암호화 했지만 계속해서 뚫렸다.

- 그러한 X들을 모아서 /etc/shadow/ 라는 파일을 만들었다.

- shadow는 관리자가 아닌 사람은 쳐다도 못봤다.

 

 

 

- 세번째, 네번째 필드는 컴퓨터를 위한 숫자를 사용하여 사용자를 판단하는데 사용합니다.

 

 

- 다섯번째 필드사용자 이름을 뜻한다. 

- 여섯번째 필드는 사용자가 로그인 시 기본 디렉토리 위치를 뜻한다.

 

 

 

- 일곱번째 필드로그인 시 실행되는 프로그램을 뜻한다.

 

 

 

- 이번 시간에는 각 필드가 뜻하는 정보를 배웠다.

- 보안 기사에서 많이 틀렸던 문제라 참.. 

728x90

'pwn > FTZ 풀이' 카테고리의 다른 글

FTZ Training 8  (0) 2021.03.13
FTZ Training 7  (0) 2021.03.13
FTZ Training 5  (0) 2021.03.13
FTZ Training 4  (0) 2021.03.13
FTZ Training 3  (0) 2021.03.09

+ Recent posts