스터디 그룹/ProjectH4C

ProjectH4C 2개월 4주차 과제 (해커스쿨 ftz)

해커스쿨 ftz를 해보자. 맥을 이용했기에 VMware Fusion을 사용했다.

 

📒Trainer1

먼저 ftz에 trainer1로 로그인을 하게 된다면 이렇게 뜬다. 

터미널 창에서 순서대로 접속ID/서버/현재위치를 나타낸다.

그다음으로 ls 명령을 치게되면 현재위치에 있는 모든 폴더/파일들이 출력된다.

 

디렉토리와 파일을 구분해서 출력하고자 하면 ls -l을 치면 된다.

그럼 우리는 이 출력을 보고 디렉토리와 파일을 구분해보자. 

 

start.txt 라는 텍스트 파일과 tmp 폴더로 비교해보겠다.

start.txt는 -rw-rw---- 로, 가장 왼쪽이 -이다.

하지만 tmp의 경우 drwxr-x--- 처럼 가장 왼쪽이 d이다. 이는, directory임을 의미하는 것이다.

 

이번엔 설정파일같은 중요한 파일들을 찾아보자. ls -a를 입력해보자. 

이렇게 이름 앞에 .이 붙은 숨김처리된 데이터들도 볼 수 있다.

 

이런 숨김 처리된 파일/디렉토리를 구분하고 싶다면 ls -al을 해보자.

 

trainer2 pwd : linuxer


📒Trainer2

이번엔 디렉토리에 관해 알아보자.

 

  • 현재 나의 경로(위치) : pwd
  • 일단계 상위 디렉토리로 이동 : cd ..
  • 최상위 디렉토리로 이동 : cd /
  • 현재 내 위치의 tainer2 폴더로 이동 : cd trainer2
  • 현재 내 위치의 trainer2 폴더의 tmp로 이동 : cd trainer2/tmp
  • 현재 내 위치에 linuxer 폴더 만들기 : mkdir linuxer
  • 현재 내 위치의 linuxer 폴더 지우기 : rmdir linuxer
  • file1을 file_cp 로 복사 : cp file1 file_cp
  • file_cp 지우기 : rm file_cp
  • 복사하지 않고 파일 이동시키기 (주로 파일 이름을 바꿀 때 사용) : mv 복사원본 복사사본

trainer3 pwd : computer


📒Trainer3

터미널과 네트워크에 관해 공부해보자. (그런데 버전 차이때문에 지금은 안되는 것이 있을 수도 있겠다.)

 

  • 서버에 접속한 리스트 : w
  • tty로 표시되면 콘솔접속, pts로 표시되면 터미널 접속을 의미한다.
  • finger -l 명령을 사용한다면 사용자들에 대한 좀 더 자세한 정보를 얻을 수 있다.
  • 내가 현재 어떤 터미널을 사용하는 지 알고싶다면 tty 명령을 통해 알 수 있다.
  • 윈도우의 ipconfig : 맥의 ifconfig
  • write [user_name] /dev/pts/번호 를 통해 터미널에 접속한 유저에게 쪽지를 보낼 수 있다.
  • 모든사람에게 쪽지를 보내고 싶다면 wall 명령을 사용하면 된다. : wall test

trainer4 pwd : mungguta


📒Trainer4

  • /bin : 가장 필수적인 리눅스 실행파일이 들어가있다. ls, rm 등등 모두 이곳에 존재한다.
  • /boot : 리눅스 부팅 관련 파일과 커널이 들어있다.
  • /dev : 하드웨어에 관한 정보들이 파일형태로 저장되어있다.
  • /etc : 많은 중요한 파일들이 존재한다. 패스워드 파일, 쉐도우 파일 등등 이곳에 존재한다.
  • /home : 일반 사용자들의 디렉토리가 들어가있다.
  • /lib : 라이브러리 파일들이 존재한다.
  • /mnt : mount 명령을 사용하여 마운트 시킨 시디롬 등의 디렉토리이다.
  • /proc : 프로세스들이 파일 형태로 들어가있다.
  • /root : 루트 사용자의 디렉토리이다.
  • /sbin : 기본 명령을 제외한 시스템 관리용 명령어들의 집합 폴더이다.
  • /tmp : 임시로 저장된 파일들의 폴더이다.
  • /usr : 다양한 응용프로그램들이 설치되어있는 폴더이다.

 

  • /var : 시스템 운영중에 생성되는 각종 임시 파일들이 저장됨. 로그파일 등

 

복습해보자.

  • /bin : 기본적인 실행파일들이 들어가있다.
  • /etc : 리눅스의 설정파일들이 들어가있다.
  • /tmp : 누구나 이곳에 파일을 올릴 수 있는 작업공간이다.
  • /home : 일반 사용자들의 아이디와 그들의 작업공간

 

조금만 더 자세히 알아보자.

  • /etc/passwd : 사용자들에 대한 간단한 정보가 저장되어있다.
  • /etc/shadow : 사용자들의 패스워드가 들어가있다. ( 아무나 보지 못한다. )
  • /etc/services : 서버가 어떤 서비스를 하는 지에 관한 정보가 존재한다.
  • /etc/issue.net : 처음 접속될 때 나오는 화면이다. (이거 짱 신기하다.)
  • /etc/motd : 로그인 후에 나오는 메세지가 들어가있다.
  • ~/public.html : 각 사용자들의 홈페이지 파일이 들어가있다.

헿.

 

trainer5 pwd : goodluck

 


📒Trainer5

  • 지금 접속한 나의 정보를 알고자 하면 whoami 명령을 통해 알아보자.
  • 다른 사용자들에 대한 정보를 얻고자 한다면 cat /etc/passwd 명령을 치자. (이건 권한으로 막아야 하지 않을까 .)
  • 커널의 버전을 알아보고자 한다면 uname -a 명령을 통해 알아보자.
  • 운영체제 버전을 알고싶다면 cat /etc/*release를 통해 알아보자.
  • 패키지들에 관한 정보를 알아보고자 한다면 rpm -qa를 통해 알아보자.
  • 서버의 cpu를 알고싶다면 cat /proc/cpuinfo 를 통해 알아보자.

trainer6 pwd : coffee


📒Trainer6

root:x:0:0:Admin:/root:/bin/bash

 

이걸 분석해보자.

먼저 패스워드 파일은 콜론을 기준으로 7개의 필드로 구분이 된다.

 

root | x | 0 | 0 | Admin | /root | /bin/bash 로 구분을 할 수 있겠다.

 

첫 번째 필드는 root이다. 즉 아이디 (계정) 을 알려준다.

두 번째 필드는 비밀번호가 들어가는 영역이다. 하지만 가려져있다. 그리고 이런 패스워들을 /etc/shadow에 저장해놓았다.

세 번째 필드는 컴퓨터가 알아보기 쉽게 사용자의 id를 정하는 것이다. (uid ??)

네 번째 필드는 컴퓨터가 알아보기 쉽게 사용자의 그룹 id를 정하는 것이다. (gid ??)

다섯 번째 필드는 사용자의 이름이다.

여섯 번째 필드는 사용자의 기본 디렉토리이다.

일곱 번째 필드는 처음 로그인 했을 때 실행할 프로그램이다.

 

trainer7 pwd : to the top


📒Trainer7

먼저 파일을 합칠 때는 " tar cvf 합칠파일 합칠파일들 " 이런 명령을 사용하면 된다.

반대로 해체할 때는 "tar xvf 해체할파일" 이런 명령을 사용하면 된다.

 

tar 명령의 옵션을 좀 알아보자.

  • c - Create : 새로운 파일을 만드는 옵션
  • x - eXtract : 압축을 해제시키는 옵션
  • v - View : 압축이 되거나 풀리는 과정을 출력하는 옵션
  • f - File : 파일로서 백업을 하겠다는 옵션

이 부분은 직접 실습을 해야 좀 더 쉽게 알 것 같다.

 

먼저 아래 3개의 파일을 songs.tar로 합쳐보자. : tar cvf songs.tar *

이렇게 songs.tar가 생겼음을 확인할 수 있다. 근데, tar 파일은 압축 파일이 아니다.

 

왜냐하면 용량이 오히려 증가하였다.

tar 명령은 용량은 늘어나지만, 압축하거나 해체하는 부분에서 속도가 엄청 빠르다는 장점이 있다.

 

그러면 압축파일은 어떻게 만들어야 할까?

우선 리눅스에는 gzip이라는 명령이 있다. 이건 압축파일을 만들 수는 있는데, 한 파일당 한개의 압축파일만 만들 수 있다.

그럼 tar 명령으로 .tar 파일을 만들어주고 이걸 gzip 명령을 이용하여 압축파일을 만들어주면 되겠다.

용량이 어느정도 줄어들었다. 이번엔 이런 파일들에 대한 확장자를 알아보자.

  • .tar : tar로 만들어진 파일이다.
  • .gz : gzip으로 압축된 파일이다.
  • .tar.gz : tar로 만들어지고 gzip으로 압축된 파일이다.
  • .tgz : .tar.gz를 이렇게 쓰기도 한다.

이제 원래 파일들을 지워버리고 저 압축파일을 해제해보자.

gzip -d songs.tar.gz

tar -xvf songs.tar

 

이런 순서를 거치게 되면 압축파일을 해체할 수 있다.

 

trainer8 pwd : player


📒Trainer8

cat > test.txt 명령을 하고 아무말이나 치고 Ctrl + D를 하면 그 내용들이 모두 test.txt로 보내진다.

하지만 이 명령은 test.txt를 모두 날려버리고 그 위에다가 글을 작성하게 되는거라 위험하다.

 

만약 원래 글을 보존하고 작성하고 싶다면 cat >> test.txt를 해주면 된다.

그럼 기존에 있던 test.txt 밑부분에 글이 추가적으로 작성된다.

 

trainer9 pwd : programming


📒Trainer9

리눅스의 권한에 관해 알아보자.

  • 유저 : 자신의 이름 , 신분을 의미
  • 그룹 : 모든 유저는 적어도 하나 이상의 그룹에 속한다. 그룹은 사용자들을 묶어서 권한관리를 편하게 해준다.
  • 아더 : 특정 유저와 그룹을 제외한 다른 모든 사람들
  • 루트 : 루트, 이 루트를 따는 것이 해킹이다.

 

  • uid : User ID의 약자, 숫자가 붙는다. 이 숫자로 누구인지 파악한다.
  • gid : Group ID의 약자, 숫자가 붙는다. 이 숫자로 어느 그룹인지 파악한다.
  • groups : 어느 그룹에 속해있는지 알려준다. 임의로 바꾸지 않는 이상 uid와 동일하다.

ls 명령을 통해 파일의 권한을 알아보자.

rwx rwx rwx 이걸 분석하면 된다. 순서대로 유저의 권한, 그룹의 권한, 아더의 권한 이다.

rwx는 순서대로 read, writing, eXcute 권한이다. (읽기, 쓰기, 실행)

그럼 유저와 그룹, 아더는 누구인지 어떻게 알까 ?

trainer9 trainer10을 분석하면 된다. 이 순서대로 유저와 그룹이다.

이걸 제외한 모든 사람들이 아더이다.

 

이 파일도 분석해보자.

먼저 user는 guest, 그룹은 trainer1이다. 즉, 아더는 이들을 제외한 모든 다른 사람들이다.

 

guest의 권한은 rwx

trainer1 그룹의 권한은 r-x

아더의 권한은 --x 이다.

 

/etc/shadow 파일의 경우에도 root 사용자만 읽을 수 있다.

 

trainer10 pwd : best!


📒Trainer10

이번엔 setUid 에 관하여 알아보자.

 

SetUID는 일시적으로 자신의 id를 변경하는 것이다. 왜 변경할까 ?

결국 구타라는 사용자는 자신의 비밀번호를 변경해야 하는데, 자신의 권한으로는 변경할 수 없으므로 setUID를 통해 일시적으로

권한을 빌릴 수 있던 것이고, 이를 통해 비밀번호를 변경하는 데에 성공하였다.

 

그리고 권한을 빌리고 작업이 끝나면 다시 원래 UID로 돌아오게 된다.

 

이러한 과정에서 취약점을 발견하여 해킹을 통해 영구적으로 UID를 바꿀수 있다. 그래서 해킹하는 많은 사람들이 c언어를 배우는 것이다.

 

/usr/bin/passwd*를 확인해보자. 분명 x가 있어야 할 자리에 s가 들어가 있다. 

즉 일반적인 사용자들도 합법적인 방법으로 root권한으로 setUID를 할 수 있고, root의 권한으로 패스워드를 바꿀 수 있다.

 

그럼 서버 전체에서 SetUID가 걸린 파일은 어떻게 찾아야 할까

 

find / -perm -4000

여기서 -perm은 권한을 의미하고, -4000은 적어도 4000인 파일들을 의미한다.

  • perm : 권한과 일치하는 파일
  • name : 이름과 일치하는 파일
  • user : 유저와 일치하는 파일
  • group : 그룹과 일치하는 파일

끝.