<리눅스 부팅 순서>

1. PC에 전원이 들어오게 되면, 메인보드에 있는 ROM-BIOS에 있는 BIOS는 우선 시스템의 하드웨어에 문제가 없는지 다양한 테스트를 한 후, 문제가 없다면 부팅을 시작한다.

 

2. BIOS는 먼저 어느 디스크 드라이브로부터 부팅을 시작할 것인지 선택하는데, 첫번째 하드디스크로부터 부팅을 시도할 것이다.

 

3. 디스크의 첫번째 섹터를 읽어 들이는데, 파티션이 나뉘어져 있으면 그 파티션의 정보를 담고 있는 MBR을 읽어들일 것이고, 그렇지 않다면 하드디스크의 통상 첫번째 섹터라고 불리는 부트 섹터를 읽어들일 것이다.

 

4. 부트 섹터에는 작은 프로그램을 넣어두는데, 이 프로그램이 운영체제를 읽어들이고 실행을 시키게 된다. 하드 디스크에서 부팅할 때는MBR의 프로그램이 파티션 테이블을 검사한다. 이 과정을 통해 어느 파티션이 활성화된 파티션(즉 부팅이 가능하다고 표시된 파티션)인지를 알아본 후에, 그 파티션의 부트 섹터를 읽어서 그 코드를 실행시킨다.

 

5. 이 부트 섹터의 역할은 커널을 파티션으로부터 읽어들이고 실행시켜야 한다. 그런데, 각 파티션에는 파일시스템이 존재하므로 플로피의 경우처럼 디스크를 단순히 순차적으로 읽을 수는 없다. 이 문제를 해결하기 위한 여러 방법들이 있는데, 그 중에 가장 많이 쓰는 것이 바로 LILO이다. LILO는 커널이 어느 섹터에 위치하는 지를 미리 파악해 두었다가, 부팅때 이 정보를 가지고 커널을 읽어들이는 방법을 쓴다.

 

6. LILO로 부팅을 하게 되면, 보통 기본 설정된 커널로 부팅이 된다. 그러나 설정을 바꿔주면 몇가지 다른 커널을 사용해 부팅할 수도 있고, 심지어 아예 다른 운영체제로도 부팅이 가능하다. 그래서 부팅시에 어떤 커널이나 운영체제로 부팅을 할 것인지 사용자가 직접 고를 수 있다. 즉, 부팅시 LILO가 떴을 때,alt, shift, ctrl 키를 누른 후 선택을 입력하게 할 수도 있고, 언제나 입력을 요구하도록 설정할 수도 있다. 선택을 하지 않는다면, 지정된 대기 시간이 지난후 기본 설정으로 부팅이 될 것이다.

 

7. 리눅스 커널이 메모리 속으로 읽혀지고나면, 진짜 부팅 과정이 시작된 것이라 볼 수 있다.

 

8. 리눅스 커널은 압축된 형태로 설치되어 있다. 따라서 우선 압축을 풀어야 한다. 그래서 압축된 커널 이미지의 첫부분은 압축을 풀기 위한 작은 프로그램으로 되어 있다.

 

9. 압축 과정이 끝나면, 커널은 어떤 하드웨어들이 장착되어 있는지 체크하고(하드 디스크, 플로피, 네트워크 어댑터 등), 적절한 장치드라이버를 설정한다.

 

10. 이제 커널은 루트 파일시스템(root filesystem)을 마운트하려 할 것이다. 이 위치는 컴파일시에 지정될 수도 있고, rdev나 LILO를 통해 정해줄 수도 있다. 또한 파일시스템 타입은 자동적으로 감지된다. 만일, 적합한 파일시스템 드라이버를 커널에 포함시키지 않았다든지 하는 이유로, 파일시스템을 마운트하는 데 실패한다면 커널은 공황상태(panic)에 빠져들고 시스템은 그저 꺼지는 수 밖에 없다.(루트 파일시스템이 마운트되지 않으면 아무것도 할 수가 없다.)

 

11. 루트 파일시스템은 흔히 읽기 전용으로만 마운트된다. 이렇게 하면 마운트한 상태에서도 파일시스템을 안전하게 점검할 수 있게 된다.

 

12. 커널은 init 프로그램을 백그라운드로 실행시킨다(/sbin/init). init는 가장 먼저 실행되는 프로세스이므로, 그 프로세스 번호는 1이 된다. init는 시스템 시작을 위한 다양한 작업을 수행하는데, 최소한 몇가지 필수적인 백그라운드 데몬을 실행하도록 되어 있다.

 

13. init는 다중사용자 모드로 전환되며, getty를 가상 콘솔과 시리얼 라인 터미널들에 띄운다. getty는 사용자들이 가상 콘솔이나 시리얼 라인 터미널을 통해 로그인 할 수 있도록 해주는 프로그램이다. 또한 init가 어떻게 설정되느냐에 따라, 여기서 몇가지 다른 프로그램들을 실행하기도 한다.

 

 

더 자세한 내용은 이곳을 참고하길 바란다.

http://wiki.kldp.org/Translations/html/SysAdminGuide-KLDP/x1681.html 

LIST

'OS > Linux' 카테고리의 다른 글

리눅스 - 마스터 네임 서버 구축  (0) 2015.12.23
리눅스 - DNS 서버 개념  (0) 2015.12.23
리눅스 - OpenSSH 서버  (0) 2015.12.22
리눅스 - Telnet(텔넷) 서버  (0) 2015.12.22
리눅스 - FTP서버  (0) 2015.12.22

<OpenSSH>

OpenSSH가 무엇일까?

과거부터 우리는 원격접속을 하기위해 telnet을 많이 사용해왔다. 하지만 telnet에는 단점이 있다.

그것은 바로 보.안이다

ID와 Password가 그대로 네트워크 상에 전송되기 때문에 중간에 해커가 스니핑이나 스푸핑을 통해서 충분히 암호화 되어 있지 않은 ID와 password를 볼 수 있다.

그렇기 때문에 도청당하거나 속여서 얻은 정보라도 ID와 Password를 암호화해서 전송하면 문제가 없을 것이다.

그래서 나온 것이 OpenSSH이다.

클라리언트가 OpenSSH서버로 접속하기 위해서 ID와 password를 전송하게 된다. 중간에 암호화를 해서 OpenSSH서버와 클라이언트 간에만 암호를 읽을 수 있도록 한것이다.

 

OpenSSH 서버 구축 과정에 대해서 알아보자.

1. OpenSSH서버를 설치한다.

yum -y install openssh

 

2. 데몬을 재실행 해준다.

 

3. 포트를 열어준다. (22번)

 

4. 클라이언트에서 접속 할때 ssh [사용자명]@서버IP 이렇게 입력한다.

 

5. windows에서 접속 할때는 한글 푸티를 설치해야 한다.

기본적으로 telnet같은 경우는 windows에서 기본적으로 제공하지만 ssh 클라이언트는 제공하지 않으므로 클라리언트 프로그램인 한글 putty를 설치해야한다.

 

6. ssh접속 끝!

 

 

<실습>

1. OpenSSH를 설치해보자.



2. 데몬을 재실행 시켜준다.

ssh는 xinetd에 종속된 데몬이 아니고 standalone이기 때문에 sshd명을 사용한다.



3. 방화벽에 들어가서 ssh포트를 열어준다.



4. 리눅스 클라이언트에서 접속을 시도해보자.



5. 이번에는 window 클라이언트에서 접속을 시도해보자.

다시 한번 말하지만 window는 telnet에 대한 클라이언트는 지원하지만 ssh에 대한 클라이언트는 지원하지 않기 때문에 한글 puty를 설치해야한다.

끗.

LIST

'OS > Linux' 카테고리의 다른 글

리눅스 - DNS 서버 개념  (0) 2015.12.23
리눅스 - 부팅 순서 정리  (0) 2015.12.23
리눅스 - Telnet(텔넷) 서버  (0) 2015.12.22
리눅스 - FTP서버  (0) 2015.12.22
리눅스 - 환경변수  (0) 2015.12.22

<Telnet>

텔넷이란 과거부터 사용해왔던 (비록 지금은 잘 사용하지않지만...) 원격 접속 방법이다.

예를 들어보자.

독자가 서버 관리자라고 생각해보자. 서울에서 근무하고 있지만, 부산에 있는 서버가 에러를 일으켜 출장을 가야한다. 서울~부산까지의 거리를 매번 왕복하면서 부산에 있는 서버가 고장날 때 마다 직접 이동해서 가야할 것이다. 너무 인력 낭비이다.

요즘같은 IT시대에 너무 시대에 뒤떨어지는 방법이다.

그래서 과거부터 사용하던 것이 telnet이다.

멀리서 서버로 원격접속을 시도하여 소프트웨어 적인 부분을 접근할 수 있고, 수정도 할 수 있는 것이다. (물론 하드웨어적인 부분이 고장나면 직접 가야하겠지만...)

 

텔넷 서버의 설치과정을 잠깐 설명하겠다.

1. 텔넷 서버를 설치한다.

yum -y install telnet-server

 

2. 설정 파일을 telnet을 사용할 수 있도록 변경한다.

/etc/xinetd.d/telnet

 

3. 설정 파일을 수정했으면 당연히 해야하는 것은 뭐? 데몬 재실행!

service xientd restart

 

4. 텔넷이 활성화 되었다. 우리는 게임을 설치하면 무엇을 하나? 계정을 만든다! 이와 깉이 텔넷에 접속하기 위해 계정을 만든다.

adduser 사용자명

passwd 비번

 

5. 텔넷에 접속하기 위한 포트를 열어준다. (23번)

system-config-firewall

 

6. 4번에서 만든 계정으로 접속을 시도해본다.

telnet [서버 IP]

 

<실습>

telnet을 설치해보자.

먼저, VM ware에 server를 하나 만들고, client는 window(VM ware아님)를 활용할 것이다.

1. telnet 설치



이렇게 rpm으로 telnet이 설치되어 있는지 확인 후, 설치되어 있지 않다면 yum으로 설치하자.

 

2. 설치 후, /etc/xinetd.d/telnet 설정 파일을 변경해보자.



왜 yes->no로 변경할까? 그 이유는 disable이 부정의 의미인데 부정의 부정을 해주는 것이다. service telnet을 사용하지 않다고 되어있는 것을 사용하지 않는 것을 취소하겠다. 즉, 사용하겠다 라는 의미이다.

 

3. xinetd 데몬을 재 실행시켜주자.

여기서 잠깐... telnet의 구성파일을 바꿧으면 telnet데몬을 재실행 시켜야하는데 왜 xinetd데몬을 재실행 시킬까?

그 이유는 telnet 서버는 혼자 독립적으로 구동하는 데몬(standalone)이 아닌, xinetd데몬의 하위 종속의 데몬이다.

쉽게 말해 xinetd의 부하라는 의미이다. xinetd 데몬이 실행되면 자동으로 telnet 데몬도 실행된다는 의미이기 때문에 xinetd만 재실행 시켜주는 것이다.


4. telnet서버 설치와 구성까지 끝났다.

방화벽에 들어가서 telnet포트를 열어주자.



5. telnet을 할때 사용하기 위한 계정을 만들어보자.


6. window(client)에서 server로 ping이 잘 나가는지 확인하고, (물론 그전에 ip확인은 필수) telnet을 시도해보자.


끗.

LIST

'OS > Linux' 카테고리의 다른 글

리눅스 - DNS 서버 개념  (0) 2015.12.23
리눅스 - 부팅 순서 정리  (0) 2015.12.23
리눅스 - OpenSSH 서버  (0) 2015.12.22
리눅스 - FTP서버  (0) 2015.12.22
리눅스 - 환경변수  (0) 2015.12.22

<FTP>

File Transfer Protocol로 파일을 전송하기 위한 서비스이다. 요즘은 웹 환경에서 ftp의 기능인 파일 전송을 편리하게 사용할 수 있어서 과거보다는 인기가 많이 떨어졌다.

 

<실습>

1. ftp를 설치해보자.

rpm -qa | grep vsftpd로 ftp가 설치되어있는지 확인 후, 설치되어 있지 않다면 yum -y install vsftpd를 사용해 설치하도록 하자


2. SELinux기능을 꺼줘야한다.

ftp설치 후, system-config-firewall에서 FTP를 체크해주자.

ftp데몬 vsftpd를 restart시켜주자

 

3. /etc/vsftpd/vsftpd.conf에 대해서 알아보자.

anonymous_enable : 익명 사용자가 접속을 허가할지 설정

local_enable : 로컬사용자의 접속 허가 설정

- write_enable : 로컬사용자가 ftp 명령어 중에 접속해서 write명령어를 허용할 것인가를 결정하는 것이다.

- local_umask : 파일들의 기본값을 설정하는 값을 지정해줌

- anon_upload_enable : 익명 사용자의 파일 업로드 허가를 설정

- anon_mkdir_write_enable : 익명 사용자의 디렉토리 생성 허가를 설정

- download_enable : 다운로드의 허가를 설정

- dirmessage_enable=YES : ftp 접속한 사용자가 특정디렉토리로 이동하였을 때 개별 디렉토리의 메시지를 보여주도록 허용할 것인가 허용하지 않을 것인가를 설정하는 부분이다. 주로 pwd를 지정해놓는다. (위치를 출력하게끔...)

- xferlog_enable=YES : 로그 기록을 저장하겠다. 어디에? /var/log/xferlog에

- connect_from_port_20=YES : ftp서비스는 접속과 명령어에 사용되는 포트는 21번이며 실제 데이터 전송에 사용되는 기본포트는 20번이다. 20번 포트의 데이터 전송 연결을 허용할 것인가 아닌가를 설정하는 것이다.

- idle_session_timeout=600 : ftp연결에서 idle 타임에 대한 타임아웃값을 설정한다. ftp 접속후에 600초동안 아무런 작업 없이 놀고있다면 강제 로그아웃시켜버린다.

- data_connection_timeout=120 : ftp 연결시 큰 파일을 업로드 or 다운로드 할 때에 전송도중 접속이 끊기는 상황이 발생한다면 이 설정을 주석처리 하거나 값을 늘리면 된다.

- ftpd_banner : ftp베너 부분을 바꾸는 부분

- max_clients=30

max_per_ip=3 : 동시 ftp 접속자수를 30명까지만 허용하고, 한 ip에서의 동시 접속을 3번까지만 허용하는 것이다.

- listen_port : FTP의 포트번호를 설정 (default=21)

- deny_file : 업로드를 금지할 파일을 지정

ex) deny_file={*.jpg,*.avi}

 

4. /etc/vsftpd/vsftpd.conf로 들어가서 anonymous_enable, local_enable, write_enable, anon_upload_enable, anon_mkdir_write_enable의 주석을 제거한다.

그 후, 데몬을 restart시켜준다.

 

5. ftp명령어 후에, 서버에 접속해보자.



6. 디렉토리를 이동해보자.



7. 디렉토리 이동 후, ftp서버에 있는 c.txt파일을 받아보자.

받을 때 사용하는 명령어는 get [파일명]이고, 한꺼번에 많은 파일을 받고 싶을때는 mget[파일명]이다.


--------------------------------------------------------------------

ftp서버에 접속했을때 사용하면 유용한 명령어

binary mod : 바이너리 파일 전송 모드로 전환(원래는 ascii 모드)

cd : 디렉토리를 변경

디렉토리를 한꺼번에 이동하는 방법은 !cd /home/fedora처럼 맨 앞에 !를 써준다.

dir : 원격 디렉토리의 목록을 출력

get [파일명] : 파일을 내려받음

open : 원격 ftp서버로 접속

put [파일명]: 로컬의 파일을 ftp서버로 전송(업로드)

pwd : 원격 서버의 작업 디렉토리 위치 출력

 

<ftp 접속 제한>

- /etc/vsftpd/user_list파일을 이용하는 방법 -

 

user_list파일에 한 행에 한 계정씩만 등록하는 것이다.

/etc/vsftpd/vsftpd.conf파일에서 userlist_enable=YES로 설정하였을 경우에 이 파일의 설정내용이 활성화됨을 의미하며 이것은 이 파일에 등록된 사용자들은 모두 접속이 거부된다는 것을 말한다.

역으로 /etc/vsftpd/vsftpd.conf파일에서 userlist_enable=NO라고 되면 user_list파일에 등록된 사용자들은 접속이 허가되는 것이다.

 

user_list파일을 보도록 하자.


여기에 보면 많은 사용자들이 있는데 /etc/vsftpd/vsftpd.conf파일에 userlist_enable=YES로 되어있어서 여깄는 사용자들은 전부 접속이 거부된것이다.


LIST

'OS > Linux' 카테고리의 다른 글

리눅스 - DNS 서버 개념  (0) 2015.12.23
리눅스 - 부팅 순서 정리  (0) 2015.12.23
리눅스 - OpenSSH 서버  (0) 2015.12.22
리눅스 - Telnet(텔넷) 서버  (0) 2015.12.22
리눅스 - 환경변수  (0) 2015.12.22

<환경변수란?>

환경변수란 운영체제 즉 리눅스, 윈도우, 유닉스 등에서는 모두 path환경변수가 존재한다. 

사용자의 명령을 기다리는 프롬프트 상에서 command를 내리면 그 실행파일을 OS가 찾게 되는데 어디에서 찾냐면 path에 설정되어 있는 곳에서 찾는다.

path에 셋팅된 위치에 있는 명령어는 그냥 명령어만 치면 실행이 되고,

path에 셋팅되지 않은 명령어는 명령어의 위치를 나타내는 절대경로를 사용하여야 한다.

※ path란? 사용자가 정의해놓은 길을 의미한다. path에 있는 경로를 따라가면 이런 명령어들을 실행할 수 있을거야~ 같이...

 

절대경로는 C:\xxx\xxx 처럼, root디렉토리에서부터 명령어(실행파일) 있는 곳까지의 경로를 다 적는 것을 말한다.

path 설정을 왜 사용하는 것일까? 물론 매번 사용자들이 절대경로를 모두 알고 일일이 사용할 때 마다 절대경로를 사용한다면 상관없지만 솔직히 귀찮지 않은가... 사용자의 편의를 위해 사용되는 것이다.

예를 들어 사용자가 만든 프로그램 test1가 /usr/bin/local/test 에 있다고 가정을 할 때..

사용자 위치는 /home/testuser 이라고 가정을 하자.

사용자가 test1 명령을 수행하기 위해 /usr/bin/local/test/test1 을 수행해야 한다.

하지만 path=.;/usr/bin/local/test

라는 설정이 추가되어 있다면, test1 수행만으로 실행이 되는 것이다.

왜냐? path에서 이미 /usr/bin/local/test로 가면 test1이라는게 있다고 미리 정의해놨으니까! 길을 터놓은 셈이다.

 

리눅스에 예를 들어보자.

cd, ls 등 이런 명령어들은 어딘가의 경로에 디렉토리 안에서 프로그램으로 존재하고 있다. (명령어니까)

그래서 이 프로그램들을 실행하기 위해서는 각각의 절대경로를 사용해서 /bin/ls 이런식으로 일일이 써줘야지 명령어가 먹힌다. 하지만 이런것들을 모두 타이핑 하지 않고도 cd, ls 이렇게만 써줘도 사용가능한 이유가 환경변수 때문이다. 그 이유는... 환경변수에 명시되어 있기 때문이다.

자, 그렇다면 운영체제가 명령어들을 찾는 순서를 알아볼까?

/etc/profile -> /etc/bashrc -> /etc/inputrc -> $HOME/.bash_profile -> $HOME/.bashrc -> $HOME/.inputrc 이런식으로 찾아보게 된다.

 

.bashrc : 주로 alias가 등록되어 있다.

.bash_profile : path같은 환경변수가 등록되어 있다.

.bash_history : 사용한 명령어가 기록되어 있다.

.bash_logout : 로그아웃시 실행할 명령어가 기록되어 있다.

 

자, 그렇다면 환경변수 path에 내가 만든 프로그램을 실행시키고 싶어 절대경로가 아닌 그 프로그램명만 입력했을때 바로 실행되게 하려면 어떻게 해야할까?

path환경변수에 넣어주면 된다.

export PATH=[추가할경로]:$PATH를 입력하면 환경변수에 추가된다.

환경변수의 구분자는 :이다.

echo $PATH를 사용해서 지금 사용하고 있는 리눅스에 어떤 환경변수들이 저장되어 있는지 알아보자.



LIST

'OS > Linux' 카테고리의 다른 글

리눅스 - DNS 서버 개념  (0) 2015.12.23
리눅스 - 부팅 순서 정리  (0) 2015.12.23
리눅스 - OpenSSH 서버  (0) 2015.12.22
리눅스 - Telnet(텔넷) 서버  (0) 2015.12.22
리눅스 - FTP서버  (0) 2015.12.22

+ Recent posts