티스토리 뷰
전날은 기본적인 리눅스 명령어들을 배웠고 오늘도 이어서 배울 예정이다.
1교시에 전에 배웠던 baseband 방식과 broadband 방식을 다시 복습했다.
- baseband(변조x) 한 번에 하나의 신호만 전송 가능하고 멀리 전송이 힘들지만, 케이블만으로 데이터를 전송할 수 있다.
- broadband(변조o) 한 번에 여려 개의 신호를 전송 가능하고 멀리 전송이 가능하지만 모뎀 같은 변복조 장비들이 있어야 한다.
lo 주소라고 나와 있는 것은 loopback주소로 127.0.0.1의 주소 값을 가지는 주소이다.
이런 loopback주소는 프로세스에서 시스템 콜을 전송했을 때 nic 카드까지 가지 않고 커널단에서 처리해서 바로 목적 프로세스로 전송하는 것을 볼 수 있다.
리눅스에서 자신의 ip주소를 확인하기 위해서 사용하는 명령어인 ifconfig는 interface configuration으로 인터페이스 구성을
뜻하는 명령어이다.
출력은 이런 식으로 나오는데
loopback 주소는 지금으로선 유의미한 정보가 아니므로 뒤에 ens160을 치면 해당 이더넷 이름만 볼 수 있다.
거기에 자신이 원하는 내용만 출력하기 위해서는 전 시간에 배운 | 기호를 사용하여 ip 주소만 알아낼 수 있다.
cut -d는 뒤에 포함된 "문자"를 기준으로 나누어서 구분기준에서 몇 번째인지를 확인해서 정확히 원하는 단만 뽑아낼 수 있다.
명령어1 ; 명령어2
: 명령어 1이 실행된 후에 이어서 명령어 2를 실행한다.
명령어 1의 정상 실행여부와 상관없이 명령어 2를 실행한다.
명령어 1과 명령어 2가 실행에 있어 연관이 크지 않은 경우
명령어 1 && 명령어 2
: 명령어 1이 실행된 후에 이어서 명령어 2를 실행한다.
명령어 1이 정상 실행된 경우에만 명령어 2를 실행한다.
명령어 1과 명령어 2가 종속적으로 1이 실행이 된 상태에서 2가 실행돼야 하는 경우
앞에서 기술하다시피 명령어 1이 실행된 후 명령어 1이 성공하지 않은 상태에서도 명령어 2가 실행 가능하고 그 실행으로
유의미한 결과를 낼 수 있다면 ;를 사용해도 되겠지만
명령어 1이 명령어 2에 필수적인 동작이라면 명령2를 실행해도 명령1이 선행되지 않아 오류를 일으킬 수 있으므로 &&를 사용하는 것이 좋다.
apt, dnf는 설치에 관련된 명령어이지만
apt는 debian 계열이고, dnf는 red-hat 계열에서 사용된다.
vmware 상에서 설치 -> 실행 -> 방화벽 해제를 하면 기본 index.html 파일을 만들지 않았다면 Test Page가 나온다.
아마존 리눅스 상에서 EC2 인스턴스를 실행시켜서 aws에서 httpd를 실행해 보자
aws상에서 방화벽은 인스턴스 생성 시에 설정할 수 있다.
다음은 간단한 index.html 파일이다.
기본 html 파일을 만들었으니 이제 리눅스에 httpd 명령어를 사용해 웹서버 동작을 시켜보자
이런 식으로 /var/www/html/아래에 index.html 파일을 html5 규격에 맞게 만들어서 저장하면 이런 식으로 만들 수 있다.
자동으로 이 진행 과정을 처리 가능하도록 하는 도구를 aws상에서 지원한다.
고급 설정 탭을 열고 아래로 쭉 내리면 이런 공간이 나오는데 이 공간의 내용은 root 권한으로 순차적으로 처리해 준다.
인스턴스 생성과 동시에 설치 -> 실행 -> 방화벽 해제가 되어 바로 진입이 가능해진다.
문제1
history
/etc/services 파일의 100행부터 110행까지의 내용을 출력해 줘
원하는 중간 부분을 자르려면 반대 방향에서 원하는 부위까지 자르고 그다음 정방향에서 원하는 양만큼 잘라주면 원하는 범위를 얻을 수 있다.
Ascii 파일: vi로 편집 가능한 파일들
binary 파일: 알아볼 수 없는 파일들
windows에서도 ssh가 기본 내장되어 있어 putty 없이도 접속가능함
/etc/passwd 파일은 계정 정보를 저장해놓은 파일이고
내부 구성은
계정명 : 암호 : UID : GID : Gecod : 홈디렉토리 : 기본쉘
sales20 : x : 1002 : 1002 : : /home/sales20 : /bin/bash
이런 식으로 이루어져 있다.
sudo chown sales20:sales20 file100으로 권한을 넘기고 sales20 계정을 삭제하면 sales20의 UID와 GID로 남아있는 것을 볼 수 있다.
로그인 시 계정명으로 로그인하지만, 컴퓨터는 UID 번호가 1002번인 계정이라고 생각함
sudo chown sales20:sales20 file100로 파일 소유권을 넘김
레드햇 리눅스는 계정명과 같은 그룹을 만듬(UID == GID)
Gecod는 최근에는 전화번호 등을 기억할 목적으로 이용
sales20:$5$
~
ㄴencrypted_password
암호화된_암호로 저장되어 있었다.
123456 salt => -HASH 함수-> => 14jl1h5ruhuo12
123 salt => HASH 함수 => j1oi2oi12h4o56
125 salt => HASH 함수 => 45fds45few5f7w
Hash 알고리즘은 일방향 함수를 이용해서 입력이 달라도 출력은 항상 같은 길이의 값을 내보내며 같은 입력일 시
항상 같은 Hash값을 가지게 함으로 무결성을 만족시킬 수 있도록 하는 알고리즘이다.
해시함수는 항상 동일한 길이를 가진다.
약간의 변화로도 값이 크게 변한다.
일방향 함수를 이용함으로 데이터의 손실이기 때문에 오리지널 암호를 얻을 방법이 없다.
하지만 길이가 정해진 해시값 특징상 A -> B = C를 보고 D -> B = C라고 해도 무결성을 인정해 준다.
rainbow_table
SHA-256
충돌저항성을 강하게 만들어야 함
1. pre-image resistance
2. second-image resistance
3. collision resistance
/etc/shadow :계정 암호를 저장해놓은 파일
구성 : 계정명 : Encrypted_password : last_passwd : Min_day : Max_Day : Warn_day : InActive_passwd : Exp_Day
Encrypted_password: $알고리즘$Salt_Value$hasked_passwd
$알고리즘$round=숫자$Salt_Value$hasked_passwd
암호화된 암호
입력된 암호를 hash 알고리즘으로만 hashed_password를 만들면, rainbow_table에 쉽게 추측 가능해지기 때문에
사용자마다 Salt_Value를 이용하여, 각각 서로 다른 hashed_password를 만든다.
저 파란 줄부터 해시값이다.
round는 Hash 알고리즘으로 몇 번 시도했는지를 알려준다. (기본값 5000, 아닌경우에 표시한다.)
Min_day: 0이면 시간에 상관없이 바꿀 수 있음, 1이면 하루에 한 번만 바꾸기 가능
Max_day: 이 기간 안에 바꾸라고 함(최대 주기)
Warn_day: n일 전부터 바꾸라고 경고
InAct_Day: 최대 주기가 지나면 계정 잠금 후 며칠 뒤 잠궈버림(root가 풀어줘야 함)
Exp_Day: 파견 직원에게 1달짜리 계정을 만들어 줄 수 있음
마지막 변경일 20122은 1970년 1월 1일부터 일수로 계산한 것
sudo를 치고 들어가지 않게 해주는 법
sudo visudo
User Hosts=(User1, User2) NOPASSWD
이 파일에 저장된 명령어만 사용 가능하다.
swj 계정은 모든 명령을 NOPASSWD로 사용가능하다.
admin20은 useradd와 userdel만 사용가능하다.
admin20은 다른 관리자 기능을 사용하지 못하는 것이 보인다.
계정 관리 명령어
계정관리 명령어들은 아래와 같다.
useradd, usermod, userdel
passwd, chage, chfn
- useradd :새로운 계정 생성하는 명령어
ㄴ사용법) useradd [옵션] 계정명ㄴ -u : UID 지정 :1000번부터 1씩 증가하며 UID를 부여하지만 임의의 번호를 할당하고 싶을 때 사용 혹은 1000번 미만의 번호를 할당하고 싶을 때 사용 -d : 홈디렉토리 변경: 웹서버 사용 시 디폴트 경로가 아닌 /var/www/ -s : 기본쉘이 아닌 다른 쉘로 변경, 로그인 불가능으로 만들 때는 (/sbin/nologin)을 사용 -o : 중복된 계정 만들 때 사용 -g : 기본 그룹 변경 -G 그룹1,그룹2 : 추가 그룹 변경
리눅스 커널은 h/w를 관리하기 위해 cpu, hdd, 2차 메모리 등을 제어하기 위한 드라이버들의 집합이라고 볼 수 있다.
shell: 명령어 해석기
사용자의 명령어(system call)를 바이너리 파일로 바꾸어서 커널에 제공하고 커널이 H/W를 제어한다.
shell (Bourn SHell)
c shell
t shell
k shell
bash shell (Linux shell)
g shell
가볍고 빠르지만, 기능은 적거나, 무겁고 느리지만 기능은 많은 셸로 나눠져 있고 일장일단이 있어 골고루 사용되고 있다.
nologin shell:
로그인 금지쉘: 보통 시스템 계정(웹서버 계정)은 로그인 기능이 없어도 되므로 이렇게 세팅되어 있다.
위에서 기술하듯 계정명으로 로그인해도 컴퓨터는 UID 번호로 식별한다.
-1000번으로 변경하면 유일하지 않다고 거절하니 -o 옵션을 사용해 UID 1000번인 해커 계정을 만든다.
그 상태에서 로그인을 시도하면?
hacker라는 계정으로 로그인했으나 swj로 로그인 시켜준 모습이다.
UID가 0번인 계정이 root임
단 하나만 있어야 함(0번)
root 계정의 비밀번호를 삭제하고 루트 계정의 비밀번호를 잠그는 법
backdoor 계정을 만들어 UID를 0으로 설정하니 backdoor 계정으로 로그인해도 root 계정으로 로그인된 모습
20122:1:30:5:2는
1970년부터 20122일 지나면 변경해야 한다.
그리고 한번 암호 변경 시 하루 동안 변경 못 하며 30일 동안 사용 가능 5일 전부터 바꾸라고 경고 2일간 유예기간을 주겠다고 적혀있다.
여기서 date 명령어를 사용해서 정해진 기간인 30일에 가깝게 설정한다면?
이렇게 패스워드 유효기간이 3일 남았다고 알려준다.
아예 기간을 넘겨버리니 바로 비밀번호를 바꾸게 한다.
2. usermod :생성된 계정 변경하는 명령어
ㄴ사용법) usermod [옵션] 계정명
ㄴ 옵션은 useradd 명령어의 옵션을 대부분 그대로 사용
3. userdel :생성된 계정을 삭제하는 명령어
ㄴ사용방법) userdel [-r] 계정명
ㄴ계정 삭제 시 사용했던 홈 디렉토리까지 같이 제거한다.
4. passwd :암호를 변경하거나 암호화 관련된 날짜 정보 수정에 사용
sudo passwd -l(lock) [계정명]
ㄴ계정의 비밀번호를 잠근다.
처음 생성된 계정이 이 상태이므로 계정의 비밀번호를 설정해 주어야 한다. (!!이 잠긴 비밀번호)
5. chage :패스워드 관리, 암호와 관련된 날짜 정보를 수정한다.
6. chfn :change finger,
※ finger라는 명령어는 계정@[domain or ip address or 계정]
특정 계정에 대한 정보를 얻을 수 있다.
계정만 적으면 == (계정@localhost)
※ comment를 사용하는 공간을 전체 이름, 오피스 이름, 오피스 전화번호, 집 전화번호를 입력하는 명령어
Red hat 9(Rocky 9)부터는 finger 명령어를 지원하지 않음
groupadd [옵션] [그룹명]
-g :GID 변경
-g 옵션을 쓰면 1000 미만의 그룹명을 사용 가능하다.
-G 옵션은
useradd -G [그룹명] [사용자명]
으로 사용자를 해당 그룹에 포함할 수 있다.
-G 그룹1,그룹2,그룹3 사용자1
처럼 한 사용자를 여러 그룹에 한 번에 지정할 수 있다.
groupmod [옵션][변경명][그룹명]
-n :그룹명 변경
groupdel [그룹명]
그룹 삭제
groups [계정명]
그 계정이 어떤 그룹에 속해있는지 볼 수 있다.
gpasswd
그룹에 암호를 설정해서 그 그룹원이 아님에도 그 그룹의 권한 얻기 가능
상황 생성
이렇게 세팅을 해보자.
각 그룹별로 gpasswd 명령어를 사용해서 암호를 설정하고
test 디렉토리 생성 후 777 권한을 주어서 디렉토리에 모두가 모든 권한을 가지게 한다.
cat 명령어와 리다이렉션 기호를 사용해서 file 1, 2, 3을 생성한 뒤
file 1에는 644, file 2,3 에는 640을 준다.
777, 644, 640이 뭔지 잘 모르겠다면 표로 한번 보자.
8진법을 이용한 권한 값 표기이다.
read, write, excute의 한 글자만 딴 것
파일 속성 | 소유자(User) | 그룹(Group) | 기타 사용자(Other) | ||||||
d = directory | r | w | x | r | w | x | r | w | x |
- = file | 4 | 2 | 1 | 4 | 2 | 1 | 4 | 2 | 1 |
l = symbolic link | ↓ 예시 | ||||||||
c = console | 4 | 2 | 0 | 4 | 0 | 0 | 0 | 0 | 0 |
b = block file | 6 | 4 | 0 |
이게 640 즉 소유자는 읽고 쓰기가 가능하며, 그룹에 속한 유저는 읽기만 가능하고, 그 외의 나머지 전부 읽지도 쓰지도
실행시키지도 못한다는 것이다.
각 r, w, x에 해당하는 8진수의 값들이 권한을 바꾸는 것이다.
user2는 file1은 others에 속하기 때문에 읽을 수 있고, file2의 admins 그룹에 있으므로 file2는 읽을 수 있다.
하지만 file3는 others의 입장에서 읽을 수 없다.
file2를 수정하려고 하면 읽기 전용이기 때문에 불가능하다.
이렇게 newgrp 명령어를 사용해서 products 암호를 친다면 권한을 임시로 얻을 수 있다.
newgrp :기본 그룹 변경 명령어(임시로 가입하는 것 exit 누르면 탈퇴됨)
기본그룹이란?
ㄴ 내가 만드는 파일에는 하나의 파일에 그룹값이 있어야 하는데 기본그룹으로 할당된다.
newgrp로 기본 그룹을 바꿔서 만들면 그룹명이 바뀐 그룹명으로 만들어짐
groups 확인 시 가장 앞에 있는 그룹명이 기본 그룹
newgrp 명령어로 기본그룹을 바꾼 뒤 파일을 만들면 소유자는 자신으로 뜨지만 그룹은 현재의 기본그룹으로 생성이 된 것을 볼 수 있다.
chmod o+x [파일명]
처럼 others에 + x(excute)권한을 주겠다 처럼 명령을 줄 수 있다.
uesr2가 dir2에 접속 권한은 있으나 read, write 권한이 없어 들어갈 순 있으나 ls -l 명령어를 치면 권한이 없다고 나온다.
chmod o+r을 주고 나니 ls -l 명령어가 잘 되는 것을 볼 수 있다.
앞으로의 진도는 vi 편집기를 배우고 패키지 관리자를 배운다고 한다.
아래 내용은 Hash 함수에 대해서 공부했을 때 정리 해놓은 건데 따로 포스팅 하긴 좀 그러니 적어보겠다.
해시함수는 무결성을 제공한다.
큰 파일에서 작은 해시값을 만들어 이 파일이 변경된 점이 있나 확인하고 싶을 때 두 해시값이 같은지 검사를 해보면 된다.
파일에서 아주 적은 단위의 변경만 있어도 해시값은 값이 크게 달라져 버리기 때문에 가능한 것
일방향 해시 함수에서 입력은 메시지 출력은 해시 값이 나온다.
그리고 해시값은 메시지의 길이와는 관계가 없다.
메시지의 길이가 아무리 달라져도 해시 함수는 고정된 길이의 해시값을 출력한다.
해시값의 특징
1. 항상 고정길이의 해시값을 계산한다.
2. 해시값은 고속 계산이 가능하다. (라운드만 빠르게 돌려버리면 됨)
3. 메시지가 달라지면 해시값도 달라진다.
4. 일방향성을 가진다.(데이터의 크기를 줄여버려서 당연한 것)
일방향 함수에서의 충돌
이게 바로 강사님께서 말씀하신 해시값에서 레인보우 테이블을 작성하는 기법들이다.
1. 일방향성 (preimage resistance)
주어진 것 = 해시값
찾는 것 = 이 해시값에 해당하는 다른 메시지를 찾는 것
다른 이름: 역상 저항성, 약 일방향성
2. 약한충돌내성(second preimage resistance)
주어진 것 = 메시지와 해시값
찾는 것 = 주어진 메시지와 동일한 해시값을 가지는 다른 메시지를 찾아라
원래 메시지와 내용은 다르지만 해시값이 동일한 메시지를 찾아라
다른 이름: 제2 역상저항성, 강 일방향성
3. 강한 충동 내성 (Collision resistance)
주어진 것 = 없음
찾는 것 = 해시값이 동일한 2개의 메시지를 찾는 것이 어려워야 함
같은 해시값의 다른 메시지 찾기
다른 이름:충돌 저항성, 충돌 회피성
약한 충돌 내성은 강한 충돌 내성을 포함하고 일방향성과 집합관계에 있다.
hash 알고리즘은 검증된 저 3개에 충돌저항성이 보증된 기술만 사용해야 한다.
해시 함수들 설명
MD4
128비트 해시값
16단계 3라운드
안전하지 않음
MD5
128비트 해시값
16단계 4라운드
안전하지 않음
SHA-1 (Secure Hash Algorithm)
160 비트(20바이트)의 해시값
사용에 권장되지 않음
SHA-2
NIST가 개발
SHA-256(256비트 해시값) 2^64 미만
SHA-384(384비트 해시값) 2^128 미만
SHA-512(512비트 해시값) 2^128 미만
SHA-224(224비트 해시값)☆
RIPEMD-160
160비트의 해시값
비트코인에서 사용중
SHA-3
1,2와 아에 다른 구조로 만듬 케챡이라는 이름의 알고리즘을 표준으로
KECCAK 실질적인 세계표준
★우리나라의 표준
HAS 160
SHA-1과 비슷한 구조로 160비트 해시함수
사용하지 않는 것을 권고
LSH
경량 해시함수로
LSH-224/256/384/512 로 구성됨
SHA-512는
2의 128승 비트 이하 메시지를 입력으로 받고
출력은 항상 512비트의 메시지로 출력된다.
KECCAK(케콕)
해시길이는 SHA-2에 길이와 맞춰짐
SHA-224(224비트 해시값)
SHA-256(256비트 해시값)
SHA-384(384비트 해시값)
SHA-512(512비트 해시값)
입력 데이터 크기에 제한 없음(무한)
스펀지 구조가 사용
입력되는 메시지에 패딩을 시행하고 흡수와 추출 단계를 거쳐 해시값을 출력한다.
일방향 해시 함수에 대한 공격
1. 전사 공격 (brute force)
긴 데이터를 작게 줄였으므로 결국
메시지는 같은데 중복되는 해시값이
나오는 것은 필연일 수밖에 없음
EX) 지불 금액 백만원
EX) 지불 금약 일억원
EX) 지불 금약 1억원
EX) 지불 금약 100000000원
EX) 지불 금약 一億원
등 계속 하다보면 약한 충돌 내성이 깨질 수 있음
약한 충돌 내성 = 메시지와 해시값을 주고 같은 메시지를 찾아라
전사공격 = 약한 충돌내성
생일 공격(birthday attack)
백만원 계약서 n개 생성
일억원 계약서 n개 생성
해서 해시값이 같은 계약서 2개를 만들어
상대방을 속이는 것
강한 출동 내성 = 조건이 없을 때 두 메시지가 해시값이 같은 경우를 찾는 것
생일 공격 = 강한 충돌 내성
일방향 해시함수는 무결성은 제공하지만 거짓행세는 검출하지 못한다.
인증도 검출하지 못한다.
해시값이 동일하니까 엘리스가 보낸 게 맞겠지? = X
(누가 보냈는진 알 수 없지만 일단 파일의 값이 변하지는 않았군 = O
'클라우드 국비 과정 > 리눅스' 카테고리의 다른 글
리눅스 강의 6일차_2025_02_06 (0) | 2025.02.06 |
---|---|
리눅스 강의 5일차_2025_02_05 (0) | 2025.02.05 |
리눅스 강의 4일차_2025_02_04 (0) | 2025.02.04 |
리눅스 강의 2일차_2025_01_31 (0) | 2025.02.01 |
리눅스 강의 1일차_2025_01_27 (0) | 2025.01.31 |
- Total
- Today
- Yesterday
- adminitrative distance
- Lan
- IP
- 서브네팅
- vmware 자동로그인
- icmp code
- OSI 7계층
- dns mtu
- sticky_bit
- 스파인 스위치
- ed25519
- 스케일 인
- accessdb
- domain server (255.255.255.255)
- longest match rule
- WAN
- 프로토콜
- CCNA 1년 도전기
- presentaion
- 리눅스 전원
- 리프 스위치
- vm copy
- OSI
- cisco error message
- circuit-switching
- putty 원격접속
- 종단장치
- ios prompt
- TCP
- permission
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |