해킹에는 두 가지가 있습니다. Local 해킹과 Remote 해킹입니다.
 Local 해킹은 해킹하고자 하는 서버에 루트( root ) 권한이 아닌 일반 계정을 가지고 있을 때, root 권한을 얻으려고 시도 하는 것을 말합니다.
 반면 Remot 해킹은 자신이 해킹하고자 하는 서버에 아이디가 없을 때, 아이디를 얻고자 시도하는 것을 말합니다. 

 이 중에서 가장 중요하다고 할 수 있는 것이 Local 해킹입니다. root 권한을 얻은 순간 여러분은 해당 시스템을 손에 넣은 것이 됩니다. 즉, 해킹이란 정상적인 방법이 아닌 방법으로 root 권한을 얻는 것을 말합니다. 


SetUID 라는 개념이 여기에서 등장합니다. 지난번 트레이닝의 마지막에 물음표를 남겼었습니다. 분명 비밀번호를 관리하는 shadow라는 파일은 root 계정에게만 읽기 권한이 있었습니다. 하지만 만일 내가 내 비밀번호를 바꾸려고 시도 할 때 어떤 일이 발생 할 까요? 권한이 root에게만 있기 때문에 root가 아닌 나는 나의 비밀번호를 바꿀 수 없게 됩니다. 하지만 실제 시스템에서는 내가 내 비밀번호를 바꿀 수가 있습니다. 어떻게 된 일까요?

 여기에서 SetUID의 필요성이 나타납니다. SetUID는 일시적으로 자신의 ID를 바꾸는 것을 의미합니다. shadow에 접근하기 위해서 일시적으로 UID를 root로 바꾸는 것을 허용해야 합니다. 이를 이용해서 해킹을 시도 할 수 있습니다.

 이런 SetUID가 없다면 root는 매우 바빠져야 할 것입니다. 패스워드를 바꾸고자 하는 유저가 많을 때, SetUID를 사용하지 않다면 root는 매번 해당 유저의 패스워드를 바꿔줘야 하는 일이 발생합니다. 이러한 SetUID는 shadow 파일에만 걸리는 것이 아닙니다. 리눅스의 여러 파일들이 이런 SetUID를 가지고 있습니다. 일반 유저가 이러한 파일을 다루면서 잠시 SetUID를 빌리고 어떠한 버그를 이용해서 SetUID를 유지, 즉 root권한을 획득하게 되면 시스템은 여러분의 것이 됩니다. 
 이런 버그에는 "버퍼오버플로우", "포맷 스트링 어택", "링크 버그" 등이 있다고 합니다. 


 그럼 수 많은 리눅스 파일중에 SetUID가 걸려있는 파일은 어떻게 찾을까요?

$ ls -al /usr/bin/passwd

위 명령어를 입력해보면, /usr/bin/passwd 에 대한 권한 정보들이 나옵니다. 그 중에 익숙하지 않은 것이 있습니다. 바로 "S"라는 글자입니다. 바로 이 녀석이 SetUID를 의미하는 문자입니다. s가 유저의 실행부분에 걸려있기 때문에 다음과 같이 해석 할 수 있습니다.  "모든 유저는 이 파일을 실행 할 때, SetUID를 이용해서 root의 권한을 얻게 된다. "


$ find / -perm -4000

위 명령어의 의미는 "/" 폴더의 하위 폴더에서 -perm 퍼미션에 SetUID가 있는 파일을 찾아라" 라는 뜻입니다. 

-perm 퍼미션과 일치하는 파일을 찾는다.
-name 이름과 일치하는 파일을 찾는다.
-user 유저와 일치하는 파일을 찾는다.
-group 그룹과 일치하는 파일을 찾는다.

 
이런 것들을 이용해서 여러분은 root권한을 얻으려고 노력할 것입니다. 이제 과정은 없습니다. 여러분이 배우는 하나하나가 여러분의 해킹 기술에 피와 살이 될 것입니다. 해커의 세계에 오신것을 환영합니다. 앞으로 레벨을 높여서 엘리트 해커가 되어 봅시다. !!




 이번 시간에는 리눅스의 권한에 대해서 배워 보았습니다. 리눅스는 여러 유저들이 동시에 서버에 접속해서 자신이 할 일을 하는 운영체제입니다. 한 유저의 파일과 정보를 다른 유저로부터 보호하기 위하여 권한이라는 개념이 등장했습니다. 리눅스를 사용하면서 Permission Denied ( 접근 거부 )라는 메시지를 많이 볼 수 있습니다. 이는 자신에게 권한이 없는 파일에 접근을 했을 때 볼 수 있는 메시지 입니다.
 리눅스에는 4가지 사용자 분류가 있습니다. 1) 유저 : 로그인한 사용자 각각을 의미합니다. 2) 그룹 : 한명 이상의 유저는 비슷한 유저들끼리 그룹을 형성 할 수 있습니다. 예를 들어 ABC라는 동아리 회원들은 각각 유저이면서 ABC라는 그룹원이 됩니다. 3) 아더 : 유저와 그룹을 제외한 다른 사람들을 의미합니다. 4) 루트 : 루트는 시스템의 관리자로 모든 권한을 갖습니다. 모든 파일과 정보를 접근할 수 있습니다.


 여러분의 등록정보를 볼 수 있는 명령어가 있습니다.

$ id

 이 명령어를 입력하면 여러분의 uid와 gid 등 계정에 대한 정보들을 볼 수 있습니다. id 명령으로 알 수 있는 정보들을 나열하면,

uid : 유저 아이디; 유저를 식별하는 번호입니다. 컴퓨터는 문자열보다는 숫자를 더 좋아하기 때문에 사용합니다.
gid : 그룹 아이디; 유저가 포함되어 있는 그룹의 식별 번호입니다.
groups : 그룹 ; 자신이 포함되어 있는 그룹입니다.

 리눅스 시스템에서는 각 파일마다 권한을 등록 할 수 있습니다. 그럼 각 파일들의 권한을 볼 수 있는 명령어는 무엇일까요? 이미 알고 있듯이 "ls"명령어입니다.

$ ls -al 파일이름

위 명령어를 입력하면 해당 파일에 대한 상세한 정보가 나오고, 해당 파일의 정보중에 권한에 관련된 정보가 있습니다.


맨 처음 표시되는 rwxrwxrwx가 바로 권한을 나타내는 정보입니다. r은 읽기 권한이고 w는 쓰기 권한, x는 실행권한을 나타냅니다. 


 다시 보시면 rwx가 세번 반복되는 것을 볼 수 있습니다. 첫번째 rwx는 유저의 권한, 그룹의 권한, 아더의 권한을 나타냅니다. 파일마다 소유한 유저와 그룹이 존재한다는 것을 유추해 낼 수 있습니다.
 해당 파일을 소유한 유저는 trainer9라는 부분에 나타나고, 그룹은 trainer10이라는 부분에 나타납니다.


 
$ ls -al /etc/shadow

위 명령어를 입력해서 shadow 파일에 대한 정보를 보도록 하겠습니다. shadow 파일은 사용자의 비밀번호를 저장해 놓는 파일입니다.
 권한을 보면 유저 권한에 읽기 권한만 지정이 되어 있는 것을 알 수 있습니다. 이 파일의 유저는 root입니다. 즉, 이 파일은 root만 읽기 권한을 갖고 있습니다. 여기서 의문점은 비밀번호를 교체 할 때 권한 설정은 어떻게 되는 것일까요? 이 물음의 해답이 바로 해킹의 출발점입니다. 곰곰히 생각해 보시기 바랍니다.





이번 시간에는 리눅스 환경에서 C언어 프로그래밍을 하는 법에 대해서 알아 보았습니다. C언어를 이용한 프로그래밍에는 여러 단계가 필요합니다.

첫 번째 단계는 텍스트 에디터를 이용해서 원시코드를 작성하는 단계입니다. 여러분이 흔히 보는 C언어 소스들이 이에 해당합니다. 윈도우 환경에서는 NotePad, EditPlus 등의 텍스트 에디터나 Turbo C, Visual Studio 등의 IDE(Integrated Development Environment )에서 제공하는 텍스트 에디터를 사용했습니다. 리눅스 환경에서 가장 많이 사용하는 에디터는 vi 에디터와 그 업그레이드 버젼이라고 할 수 있는 vim 에디터가 있습니다.


여기에서는 cat 과 리디렉션을 이용한 텍스트 파일을 만드는 방법을 사용하도록 하겠습니다. 리디렉션이란 “방향을 바꾼다.”라는 의미입니다. Cat 명령어는 파일의 내용은 터미널이나 콘솔로 출력하는, 즉 모니터로 출력해주는 명령어입니다. 하지만 리디렉션을 이용하여 출력 내용을 모니터가 아닌 파일로 저장 할 수가 있습니다.

$ cat > test.txt

위 명령어를 입력하게 되면, 일단 커서가 깜빡이며 입력을 대기 하게 됩니다. 내용을 입력해 넣고 마지막으로 [Ctrl] + D 를 누르면 내용이 test.txt 라는 파일로 저장이 됩니다. 이 때, 중요한 특성이 있습니다. 리디렉션 명령어 “>”는 무조건 덮어쓰기 모드로 동작을 하게 됩니다. 즉, 위 명령어를 입력하면 기존에 있던 test.txt 파일에 덮어 쓰게 되어 이전에 있던 내용은 모두 지워지게 됩니다. 이어쓰기 모드로 리디렉션을 하기 위해서는 “>>”을 이용하면 됩니다.  “>>”을 이용하면 기존에 있던 내용의 끝에서부터 이어 쓰기를 시작합니다. ( 즉, EOF 위치부터 내용이 추가 되기 시작합니다. )


 다음과 같은 명령어를 쳐서 C언어 프로그램을 만듭니다. ( 사실은 원시 소스코드를 만드는 것입니다. )

$ cat > program.c
int main(){
int a=10.b=20;
printf("10+20=%d",a+b);}

위 소스코드를 입력하신뒤 [Ctrl] + D 를 누르시면 화면에 출력되어야 할 내용들이 파일로 저장이 되어 C 파일을 만들었을 겁니다. ( 직접 ls 명령어를 사용하여 확인하셔도 됩니다. )
C언어를 배우신 분이나 프로그래밍 경험이 있으신 분이라면 쉽게 이해를 할 수 있는 소스코드입니다. ( 10과 20을 더하는 프로그램입니다. )


 이제 이 소스 파일을 목적 파일로 컴파일 해 보도록 하겠습니다. 소스파일을 목적 파일로 컴파일 하는 명령어는 다음과 같습니다. 


$ gcc -o 생성될파일 원시소스파일
[생성 될 파일에는 컴파일 후 생성될 목적파일( 실행파일 )의 경로와 이름을 지정해 주시면 되고, 원시소스파일은 컴파일이 될 파일의 경로를 적어주시면됩니다. 위에서는 program.c가 되겠습니다. ]

 gcc -o program.exe program.c 를 입력하여 위에서 작성한 소스파일인 program.c 를 목적 파일 program.exe로 컴파일 하도록 합니다. 아무런 추가 메시지가 뜨지 않는다면 컴파일은 성공적으로 끝난 것이 됩니다. ls를 사용하여 파일이 생성되었는지 확인합니다. 
 


 마지막으로 컴파일 한 파일을 실행하는 연습을 해 보도록하겠습니다. 이에는 상대경로와 절대 경로를 이용하는 방법 2가지가 있는데, 일단 절대 경로를 이용한 실행 방법은 만들어진 파일의 절대 경로를 입력하면 됩니다. 예를 들면 /home/trainer8/program.exe 를 입력하면 해당 파일이 실행됩니다.
 두번째로 상대경로를 이용한 실행 방법입니다. gcc를 이용하여 컴파일을 하는 경우는 대부분 현재 폴더에 컴파일 결과를 저장하게 됩니다. 현재 폴더에 있는 파일을 실행하기 위해서는 "./파일이름"을 입력하면됩니다. 위의 경우에는 ./program.exe 를 입력하면 됩니다. 이 때, "/"앞의 "."은 "현재"라는 의미입니다. 즉 ./program.exe는 현재 폴더의 program.exe 라는 의미입니다.

 리눅스에서 C언어를 이용하여 프로그래밍하고 컴파일하는 기초적인 방법에 대해서 배웠습니다. 앞으로 리눅스 환경에서 프로그래밍 경험을 많이 쌓아야 겠다는 생각이 드는 트레이닝이었습니다.






이번 시간엔 파일의 압축에 대해서 알아봤습니다. tar와 gzip이 그것인데, 리눅스에서는 압축을 할 때, 하나의 파일 밖에 압축하지 못 한다고 합니다. 여러개의 파일을 압축하기 위해서는 압축 할 파일들을 하나의 파일로 묶고, 그 파일을 압축 명령어를 통해서 압축해야 합니다.


tar 명령어는 여러개의 파일을 하나의 파일로 묶어서 관리하는 명령어 입니다.

$ tar cvf 합칠파일 합쳐질파일들
[ tar 명령어는 합쳐질파일들을 합칠파일로 묶어 주는 명령어입니다. cvf는 옵션으로
c : create 새로운 파일을 생성합니다.
v : view 압축이 되거나 풀리는 과정을 보여줍니다.
f : 파일로 백업을 합니다.
이렇게 하나로 묶인 파일은 .tar 라는 확장자를 갖게 됩니다. ]


$ tar xvf 풀릴파일
[ 풀릴파일을 해당 디렉토리에 풀어 냅니다. ]


 이 때, tar는 단지 파일들을 하나로 묶어 줄 뿐 용량의 감소, 즉 압축은 일어나지 않습니다. 오히려 파일정보를 담고 있어야 하기 때문에 용량이 늘어나게 됩니다.


압축을 담당하는 명령어는 gzip이라는 명령어입니다. 윈도우의 winzip과 비슷한 녀석인데, 리눅스 버젼이라고 생각하셔도 됩니다.

$ gzip 파일이름
[선택한 파일을 압축합니다.]

$ gzip -d 파일이름
[선택한 파일을 압축 해제 합니다.]

gzip으로 압축을 하면 .gz 의 확장자를 갖는 파일이 생성됩니다. tar로 파일들을 하나의 파일로 묶고 gzip으로 압축했다면 파일 확장자는 .tar.gz 가 될 것입니다.


 오늘 배운 간단한 압축 명령어와 파일을 묶는 명령어는 파일 관리에 많이 사용되고 특히 업데이트를 할 때, 많이 사용되기 때문에 잘 알아두시기 바랍니다.


리눅스에서 모든 정보는 파일로 기록이 됩니다. 가장 중요하다고 할 수 있는 정보인 각 사용자의 비밀번호 정보도 역시 리눅스 어딘가에 파일로 저장이 됩니다. 지난 시간에   배웠던 $ cat /etc/passwd 라는 명령어를 기억 하실 겁니다. 이번 단계에서는 그 때 출력 되었던 내용들을 분석해보는 단계입니다.

 


 현기증이 나기 시작합니다. 저 많은 문자들은 도대체 무엇을 의미한단 말일까요? 어지러워 하지 마시기 바랍니다. 저것들이야 말로 유저들의 정보들이니까요. 이제 하나하나 분석해 보도록 하겠습니다.


 

위의 내용을 잘 살펴 보면, 콜론 ( ‘ : ‘ ) 을 이용해서 7가지 항목들을 구분하고 있습니다. 각각 의미하는 바를 설명해 드리겠습니다.


1. root

- 첫 번째 쓰여 있는 항목은 사용자의 아이디입니다. 리눅스 시스템에 처음 로그인을 할 때, 아이디를 적고 비밀번호를 적는데, 그 때 사용하는 아이디를 말합니다.


2. x

- 두 번째 쓰여 있는 항목은 해당 사용자의 비밀번호를 말합니다. 하지만 대부분 암호화가 되어 있어 그대로 사용하면 효과가 없는 문자열입니다. 하지만 해커들은 그 암호를 풀기 때문에 더 강화된 보안 수준을 위해서 비밀번호들만을 따로 떼어서 /etc/shadow 라는 파일로 만들어서 관리를 하게 됩니다. 이 파일은 root 계정만 접근을 할 수 있습니다.


3. 0

- 세 번째 쓰여 있는 항목은 해당 사용자의 사용자 번호를 말합니다. 컴퓨터 시스템은 문자열 보다는 숫자에 더욱 빠르게 반응합니다. Sky0123, kin345 등과 같은 문자열 보다는 1( 1번 사용자), 2(2번 사용자)와 같이 사용자에게 고유의 번호를 할당해서 관리하는게 더 효율적일 수가 있습니다. 세 번째 필드는 바로 그 사용자 번호를 말합니다.


4. 0

- 세 번째에 이어서 네 번째도 0 이라는 숫자가 있습니다. 리눅스 시스템에는 사용자와 함께 그룹이라는 개념이 있습니다. 나중에 배우겠지만 각 사용자는 어떤 그룹에 속해 있습니다. ( 기본적으로 자기 자신과 같은 이름의 그룹에 속하게 됩니다. ) 그 그룹들을 구별하기 위해서 사용되는 필드입니다.


5. Admin

- 5번째 필드는 해당 사용자의 이름입니다. 특별히 지정을 해주지 않으면 채워지지 않습니다. 로그 인에 사용되는 ID와는 다른 내용입니다.


6. /root

- 6번째 필드는 해당아이디의 홈 디렉토리를 말합니다. 홈 디렉토리란 로그인에 성공했을 때, 시작하게 되는 일종의 바탕화면과 같은 개념의 디렉토리입니다.
 

7. /bin/bash

- 7번째 필드는 해당아이디가 로그인에 성공하게 되면 실행되는 프로그램을 말합니다. 주로 쉘 프로그램이 됩니다.

 

앞으로 배워감에 따라서 이 같이 어지러운 파일들을 많이 보게 됩니다
. 어지러워 하지 마시고 차근차근 분석하는 습관을 기르시기 바랍니다. 이 정도에 어지러워 하면 나중에 멀미합니다 ;;;








 해킹이란 무엇일까요? 해킹의 주요한 목적중에 하나가 바로 정보를 빼내는 것입니다. 공격할 서버의 정보를 수집하여 취약점을 찾아내고 그 곳을 공격하는게 순서일텐데요. 여러분이 접속해 있는 서버의 정보들을 알아내는 명령어들을 배워보도록 하겠습니다.

$ whoami
[ 직역하면 "나는 누구인가?"  정도가 되겠네요. 현재 서버가 알고 있는 여러분의 정보를 알려줍니다.]

$id
[ 더 자세한 여러분의 정보를 알려줍니다. ]


다음으로는 궁극의 다른 유저 비밀번호 알아내는 명령어를 배워보도록 하겠습니다. 물론 실제 운영체제에서는 접근 권한이 없기 때문에 열수는 없습니다만 해킹에 성공하여 root 권한을 얻고 나면 이 명령어를 실행해서 비밀 번호를 알아 낼 수 있습니다.



$ cat /etc/passwd
[ cat 명령어는 파일이름을 받아서 화면에 내용을 출력해주는 명령어입니다. 위 명령어에서는 /etc/passwd라는 파일의 내용을 출력해주는데, 이 파일이 이 시스템에 있는 유저들의 비밀번호가 저장되어있는 파일입니다.]


나머지 명령어들도 알아보도록 하겠습니다.

$ uname -a
[ 현재 접속해있는 서버의 커널 버젼을 말해줍니다. 인터넷 커뮤니티에는 리눅스 커널 버젼에 따른 취약점이 배포되어 있습니다. 운이 좋게도 해당 시스템이 구버젼의 커널을 사용하고 그 취약점이 알려져 있다면 생각보다 손쉽게 시스템에 침투 할 수 있습니다. ]

$ cat /etc/*release
[ 리눅스는 많은 버젼들이 있습니다. 우분투 리눅스도 있고, 레드햇 리눅스도 있고 수세, 젠투 등등 많은 리눅스 들이 있는데, 이 서버는 어느 버젼을 사용하고 있는지 말해줍니다. ]



$ rpm -qa
[ 레드햇 계열의 리눅스에서 설치되어 있는 패키들의 정보를 알아낼수 있는 명령어 입니다. 이 정보들을 보고 해킹이 가능한지 여부에 대해서 알 수 있다고 합니다. ]

$ cat /etc/cpuinfo
[ 현재 서버의 CPU 정보를 나타냅니다. ]






이렇게 타겟 서버에 대한 정보를 획득하는 명령어들을 배웠습니다. 물론 많은 수의 정보들은 여러분으로부터 은폐되어 있습니다. 대부분 root 권한을 얻어야 볼 수 있는 것들입니다. 여러분의 리눅스에서 실습해 보시기 바랍니다.







 리눅스를 조금이라도 만져보신 분들이라면 루트 디렉토리 아래에 많은 디렉토리들이 있는 것을 보셨을 겁니다. 각각 디렉토리들은 고유의 역할이 있고, 중요한 디렉토리들입니다. 해커가 되기 위해서는 이런 디렉토리들을 빠삭하게 알고 있어야 겠죠. 이번 트레이닝에서는 중요한 몇개의 디렉토리만을 알아보도록 합니다.


bin : 기본적인 명령어들이 존재하는 디렉토리입니다. 앞서 배웠던 ls, rm 등의 명령어의 내용이 저장되어 있습니다.

boot : 리눅스를 부팅시키기 위한 프로그램들과 운영체제의 핵심인 커널이 들어 있는 디렉토리입니다.

dev : 리눅스에 부착되어 실행되고 있는 하드웨어들의 정보들이 저장되어 있는 곳입니다.

etc : 리눅스에 설치되어 있는 프로그램들의 설정파일이나 리눅스 자체의 설정파일들이 들어있습니다. 비밀번호라든지 유저 정보들도 들어있는 중요한 디렉토리입니다.

home : 일반적인 유저들이 기본 위치가 저장되어 있는 디렉토리입니다.

lib : 라이브러리 파일들이 존재하는 디렉토리입니다.

mnt : mount 명령어를 통해서 마운트 시킨 하드웨어가 저장되는 곳입니다.

proc : 프로세스들이 파일의 형태로 저장되는 곳입니다.

root : 최종 관리자인 root의 홈 디렉토리입니다.

sbin : 기본 명령어들을 제외한 시스템 관리 명령어들이 저장되는 곳입니다.

tmp : 임시 파일을 저장하는 디렉토리로 누구나 접근이 가능한 디렉토리입니다.

usr : 많은 응용프로그램들이 저장되는 장소입니다.

var : 프로세스가 실행되는 동안 생성되는 임시 파일들이 저장되는 곳이며 운영체제의 로그파일이 저장되는 곳이기도 합니다.



이번 과정은 그냥 암기 과정이었습니다. 하지만 기본적인 암기이기 때문에 반드시 외워야 하는 것들입니다. 제가 다니는 대학교 과정 리눅스/유닉스 수업에서도 디렉토리의 역할에 대한 문제를 시험문제로 냈었습니다. 반드시 외우고 다니시기 바랍니다.






 Trainer3 에서는 좀 더 재미있는 명령어를 배우게 됩니다. 바로 네트워크 명령어 인데요. 대부분 리눅스들은 서버 컴퓨터에 설치가 되고 다수의 유저가 접속해서 사용하게 됩니다. 즉, 네트워크의 개념을 포함하게 되는데요. 이 네트워크를 이용한 재미있는 명령어를 배우게 됩니다.



 새로 배우는 개념이 두가지 있습니다. 바로 콘솔과 터미널이라는 용어인데요. C언어를 이용해서 프로그래밍을 해 보신 분들이라면 콘솔이라는 단어에 익숙하실 겁니다.

콘솔( Console ) 
Local Computer에 Linux나 Unix 등의 OS를 설치하고 그 OS에 접속했을때 "콘솔을 통해 접속했다."라고 함

터미널( Terminal )
Remote Computer에 설치되어 있는 Linux나 Unix같은 OS에 원격 접속을 했을때 "터미널을 통해 접속했다." 라고 함





 다음으로 현재 서버에 어떤 유저들이 접속해 있는지를 볼 수 있는 명령어입니다.

$ w
[ 현재 어떤 유저들이 서버에 접속해 있는가를 나타내는 명령어]

USER : 어떤 ID를 가진 유저가 로그인 상태에 있는지 나타냅니다.
TTY  :  해당 유저가 콘솔을 통해 접속했는지, 터미널을 통해 접속했는지 나타냅니다. 콘솔이라면 tty로 터미널이라면 pts로 표현되며 터미널을 통해 접속한 유저가 많으면 순서대로 "/번호" 가 붙어 구별할 수 있습니다.
FROM : 해당 유저가 접속한 컴퓨터의 IP주소를 나타냅니다.
LOGIN  : 해당 유저가 로그인한 시간을 나타냅니다.
IDLE : 해당 유저가 마지막 명령을 내린뒤 흐른 시간입니다.
JCPU : 각 유저가 CPU를 사용한 지연 시간을 말합니다.
PCPU : WHAT 필드에 있는 명령이 지연된 시간을 말합니다.
WHAT : 현재 사용자가 어떤 형태의 명령을 내리는지 말합니다.





사용자의 정보를 볼 수 있는 명령어도 있습니다. finger 명령어가 그것인데, 원격에서 많은 유저의 정보를 볼 수 있기 때문에 보안상 골칫거리가 될 수도 있다고 하네요. 삭제하는 것이 바람직하다고 하는데 지금은 배우는 단계이기 때문에 사용해 봅니다.

$ finger 사용자 ID
[ 해당 유저에 대한 정보를 보여줌, -l 옵션을 이용해서 상세 정보를 볼 수 있음]




자신의 터미널을 확인하는 명령어도 있습니다. 동시에 여러명의 유저가 터미널에 접속하게 되면 순서대로 번호가 부여가 되는데, 자신이 몇번인지 알아볼때 유용합니다.

$ tty
[현재 자신의 터미널 정보를 보여주는 명령어]




물론 접속한 서버의 네트워크 상태를 볼 수 있는 명령어도 있습니다. 서버의 ip주소를 알수 있습니다. MS-DOS의 ipconfig 명령어와 유사합니다.

$ ifconfig
[서버의 ip정보를 알 수 있다.]


서버에 동시간대에 접속해 있는 유저에 대해서 알게 되었으니 이제 그 유저에게 메시지를 보내는 명령어를 배웁니다.

$ write ID /dev/pts/해당유저의pts번호
[ 해당 ID의 유저와 채팅을 합니다.]



 다음으로 서버에 접속해 있는 모든 유저에게 메시지를 전달하는 이른바 브로드캐스팅 명령어에 대해서 배웁니다.

$ wall 메시지
[ 메시지에 해당되는 문자열을 해당 서버에 접속해 있는 모든 유저에게 보낸다 ]




자 이번 레벨도 마무리를 지었습니다. 역시 복습은 잊지 마시구요.. 다음으로 넘어가도록 하겠습니다.



 
 이전 트레이닝에서 리눅스 환경에서 파일 내용을 볼 수 있는 흥미로운 명령어를 봤습니다. 이제 파일을 생성하고 복사하고 옮기는 작업을 하는 명령어를 배울 차례입니다.



새로운 명령어를 배우게 됩니다.

$ pwd
[ 현재의 경로를 표현해 주는 명령어 ]

 pwd 를 입력하면 현재 여러분의 위치가 절대 경로로 표현되게 됩니다. 

 절대 경로란 상대 경로와 대비되는 개념으로 여러분의 위치를 절대적으로 표현해주는 어떤 위치에 하나밖에 부여가 되지 않는 경로를 말합니다. 

 반면 상대 경로는 현재 위치에 대해서 상대적인 경로를 말하는데, 현재 경로보다 하위 디렉토리나 경로에 대해서는 현재 위치까지의 경로를 생략하는 방식입니다. 상대 경로는 개념상 편리한 경로입니다.




MS-DOS 에서도 사용했던 CD라는 명령어입니다.

$ CD 경로이름
[ 입력 받은 경로로 현재 위치를 이동합니다. 경로는 상대 경로 일 수도 있고, 절대 경로일 수도 있습니다. ]

 CD .. 은 현재 위치의 한단계 위의 위치 ( 부모 위치라고 할 까요? )로 이동하는 것을 의미합니다. 앞으로 디렉토리 사이를 많이 움직일 것이기 때문에 많이 사용될 명령어입니다.


$ mkdir 디렉토리이름
[ 디렉토리를 만드는 명령어입니다. 디렉토리 이름을 받아서 현재 위치에 디렉토리를 새로 만듭니다. ]

$ rmdir 디렉토리이름
[ 디렉토리를 제거하는 명령어입니다. 디렉토리 이름을 받아서 해당 디렉토리를 삭제합니다. ]


디렉토리를 다루는 명령어인 mkdir과 rmdir입니다.


$ cp 파일이름1 파일이름2
[ 파일이름을 2개 입력값으로 받아서 파일이름1의 내용을 파일이름2의 내용으로 복사를 합니다. 이 때, 파일이름1의 내용은 바뀌지 않습니다. ]

$ rm 파일이름
[ 파일이름을 입력으로 받아서 해당 파일을 삭제하는 명령어입니다. ]

$ mv 파일이름1 파일이름2
[ 파일이름 2개를 입력으로 받아서 파일이름1을 파일이름2로 이동시킵니다. 결과적으로 파일이름1은 삭제가 됩니다. 파일이름1의 이름을 파일이름2로 바꾸고자 할 때 많이 쓰이는 명령어입니다. ]




자.. 레벨2도 무사히 통과하였습니다. 이번 레벨에서는 파일의 기본적인 조작법을 배웠는데요. 배운후에 복습하는 습관은 가장 중요한 습관입니다. 여러분의 컴퓨터에 리눅스를 깔아놓고 복습을 해 보시기 바랍니다.






 이전글에서 FTZ에 접속하는 법을 배웠습니다. 이제 FTZ Level 1을 해보도록 하겠습니다. 기본적인 리눅스 명령어 사용법을 배우는 단계입니다.



프롬프트에 대한 설명을 해주고 있습니다. 프롬프트는 여러분이 리눅스와 대화를 할 수 있는 앞으로 아주 익숙해질 인터페이스입니다. [접속ID@서버 현재위치]$ 로 나타나게 됩니다. 이는 성공적으로 로그인이 되었음을 나타낸다고 하네요.

자 이제 ls( 엘에스 )라는 명령어에 대해서 배우도록 합니다. MS-DOS를 사용해 보신 분들이라면 dir이라는 명령어에 아주 익숙 할 것입니다.



리눅스에도 이 처럼 파일 목록을 볼 수 있는 명령어가 있는데 바로 ls 명령어입니다. ls 명령어를 입력해 봅니다.



ls에는 몇 가지 옵션이 있는데, 그 옵션을 이해하고 사용 할 줄 아는 것이 이번 FTZ의 목적이 되겠습니다.


$ ls  
 [ MS-DOS의 dir과 같은 명령어로 현재 위치에 있는 파일들과 하위 디렉토리들을 보여줌 ]

$ ls -l  
 [ 파일과 디렉토리의 정보를 표현해 줍니다. 자세히 보기 정도가 되겠네요. ]

$ ls -a  
 [ 숨김 파일도 보여주는 옵션입니다. 파일명이 "."으로 시작되면 숨김 파일입니다.

$ls -al
  [ 숨김 파일에 대한 자세한 정보를 표현해 줍니다. ]




 FTZ Level 1을 진행하다 보면 잠깐 퀴즈가 나옵니다. 직접 풀어보시는게 여러분의 실력 향상에 도움이 될 꺼라고 생각합니다.





자 FTZ Level1을 무사히 통과했습니다. 다음 레벨도 통과하길 바랍니다.







 해커스쿨이라는 사이트에서 해킹 연습을 시작하시려는 분들에게 여러가지 문제를 주고 있네요. FTZ( Free Tranning Zone )이라는 서비스를 하면서 해킹의 기본기들을 익힐 수 있습니다. 해커스쿨 FTZ에 접속하는 방법을 알려드리겠습니다. 저는 텔넷을 이용해서 FTZ에 접속을 하겠습니다.

[시작]->[실행]을 해서 다음을 입력합니다.

telnet ftz.hackerschool.org




그러면 이제 FTZ에 접속이 되었습니다.




이제 글을 잘 읽어 보시고 FTZ를 수료하시기 바랍니다. 저도 하나하나 수료해 나가면서 포스팅을 하겠습니다.




우리 같이 열심히 공부해서 대한민국 웹을 지키도록 합시다. !!




+ Recent posts