이제 드디어 기본 설정이 끝났고 본격적으로 FTP 프로그램을 깔아본다.

FTP는 File Transfer Protocol의 약자이다. 파일 전송을 위한 규격이라고 할 수 있다. 인터넷 브라우저에서 사이트 주소 앞에 흔히 붙는 http라는 것도 Hyper-Text Transfer Protocol의 약자이다. 한국 사람은 한국말로 해야 말이 통하고 미국 사람은 영어 해야 말이 통하듯이 서로 뭘 주고받을 것인지, 말이 통하기 위한 규격이라고 생각하면 된다.

FTP 프로토콜로 접속을 하게 되면 목표 서버에 나는 파일을 다운로드 하려고 그 서버에 접속하는 거라고 말하는 셈이다.


# proftp 설치하기


$ sudo apt-get install proftpd-basic


내가 봤던 매뉴얼에서는 sudo apt-get install proftpd 입력하라고 되어있었는데 어차피 apt-get이 지원하는 패키지 이름을 검색해보고 자동으로 proftpd-basic 깐다고 하니 그냥 처음부터 proftpd-basic 설치하면 될 것 같다.


중간에 어떤 모드로 설치할 것인지 물어보는데, 기본 세팅대로 standalone으로 설치한다.

standalone 버전은 말그대로 proftpd 프로세스가 독립적으로 실행되는 상태이고, 다른 모드 이름이 기억은 안나는데 그 모드는 외부 접속을 처리하는 다른 독립 프로그램이 있고 걔가 여러 가지 요청을 처리하다가 ftp 관련 요청이다 싶으면 proftpd 프로세스를 종속적으로 만들어서 처리를 맡기는 형식으로 기억한다.

내 기억이 잘못됐을 수도 있고 더 이상의 설명은 (나도 모르는 부분이라) 불가능하므로 나랑 비슷한 수준의 초보자라면 곱게 standalone으로 설치하자.


설치가 다 끝났다면 약간의 설정을 해주자.



# proftp 설정하기


설정 파일은 /etc/proftpd/proftpd.conf 파일 안에 저장되어 있다. 텍스트 편집기로 열어준다. 물론 얘도 sudo 넣어서 열어줘야 한다.


$ sudo nano /etc/proftpd/proftpd.conf


ServerName 같은 거는 서버 이름이니까 적당히 원하는 대로 바꿔줘도 되고, 다른 설정은 다른 데서 검색해보고 공부해서 고쳐도 되지만 내가 설명해 줄 건 DefaultRoot 옵션이다.


이 옵션은 보안을 위해 필요한 것인데, 나중에 이 서버를 주변 친구들이나 다른 사람에게 공개할 때 아무나 내 서버에 접속해서 중요한 파일을 헤집어놓고 다니면서 설정을 바꿔놓는다면 큰 문제가 생길 것이다.

그래서 보안을 위해서는 공개를 위한 디렉토리를 따로 만들어놓고 일반 사용자들은 그 제한된 디렉토리 안에서만 접근할 수 있도록 바꿔야 한다. 따라서 DefaultRoot 옵션이 적용될 수 있도록 주석을 해제해줘야 한다. 기본적으로 DefaultRoot 앞에 '#' 글자가 붙어서 설정에 영향을 미치지 않는 주석으로 처리가 되어있는데, 이 #을 지워서 설정이 적용되게 한다. 아래 그림처럼.



스크롤 내려서 찾기 힘들면 '^W Where Is' 라고 써있는게 텍스트 검색 단축키 설명이다. Ctrl+W 눌러서 defaultroot 입력하고 엔터치자. 기본적으로 대소문자 구별은 안한다.


저기서 ~ 라고 써있는 게 리눅스에서의 홈디렉토리를 가리킨다고 보면 된다. DefaultRoot 옵션을 통해 각 계정별로 지정된 홈디렉토리를 루트, 즉 최상위 디렉토리로 지정을 하기 때문에 그 상위 디렉토리로 못넘어가게 막는 것이다.


조금 자세히 설명을 해보자면, 라즈베리파이의 관리자 계정인 pi가 있고 이 pi의 홈디렉토리는 /home/pi/가 된다.


이 pi 홈디렉토리 밑에 guest 라는 이름의 디렉토리를 만든다. (/home/pi/guest/) 그리고 이 /home/pi/guest/를 홈디렉토리로 하는 guest라는 계정을 만든다.


그러면 pi 계정은 홈 디렉토리가 /home/pi/ 이므로 여기서부터 시작해 그 하위 디렉토리(/home/pi/guest/ 포함)는 전부 접근할 수있지만, 반대로 guest 계정은 홈 디렉토리가 /home/pi/guest/ 이므로 여기서부터 시작해야 하기 때문에 더 상위 디렉토리인 /home/pi/ 디렉토리는 접근할 수도 없고 여기에 무슨 파일들이 있는지 알 수 없게 되는 것이다.


그래서 저 옵션을 설정함으로써 어느 수준의 보안을 구현할 수 있다는 말이다.


그러면 이제 저장을 하고 텍스트 편집기를 종료하자.



# ProFTP 재시작하기


설정을 바꿨다면 변경된 내용을 적용하기 위해 proftp 서비스를 재시작해야 한다.


$ sudo service proftpd restart

$ sudo /etc/init.d/proftpd resart // 위 명령어와 같은 일을 한다. 둘 중에 아무거나 편한 거 쓰면 된다.


# 컴퓨터 인터넷 브라우저에서 ftp 접근해보기


크롬을 쓰든 인터넷 익스플로러를 쓰든 파이어폭스를 쓰든, 심지어 윈도우 탐색기라도 좋다. 주소창에 ftp://<라즈베리파이 IP 주소>를 쳐보자.


<라즈베리파이 IP 주소> 부분에 공유기에서 확인한 내부 IP 주소를 넣을 수도 있고, 1. 유선랜 고정 IP 할당 게시물에서 포트포워딩을 통해 외부 접근이 가능하게 만들어 두었으므로 공유기가 할당받은 외부 IP 주소를 넣을 수도 있다.


내부 IP 주소를 넣는다면 컴퓨터가 같은 공유기에 연결이 되어 있어야만 접근할 수 있다.

외부 IP 주소를 넣는다면 집이 아니라 카페나 도서관 와이파이를 잡더라도 외부 IP 주소를 외워서 적어넣으면 접근 가능하다.


IP 주소를 외워다가 치기 복잡하면 우리가 흔히 아는 알파벳 형태로 된 도메인(www.google.com 이라든가)을 IP 주소에 부여해야 한다. 이것은 DDNS 서비스라고 하여 나중에 다시 설명하기로 한다.



ftp://<IP 주소> 치고 들어가면 계정과 비밀번호를 물어보는데, 지금 라즈베리파이에서 쓰는 계정 그대로 치고 들어가면 된다.

기본 설정 그대로라면 pi / raspberrypi 치면 되겠지. 로그인 후에 위 캡쳐사진처럼 홈디렉토리 아래의 파일들이 그대로 나온다면 성공이다.


지금까지의 글들이 스크롤이 어마어마하게 긴 것에 비해 겉으로 드러나는 게 별로 없었는데, 이번엔 스크롤도 짧고 할 것도 별로 없는 주제에 뭔가 어마어마한 성취를 이뤄낸 것 같이 보인다.

여기까지 무사히 완수했다면 스스로에게 박수를 쳐주자.


만약 문제가 생겼다면 댓글을 달아주시길...


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

받은 트랙백이 없고 , 댓글  5개가 달렸습니다.
  1. 안녕하세요 2015.07.16 22:22 신고
    댓글을 보실지 잘모르겟네요.. 반대로 vi에서 주석처리를 하기위해 저 #을 치게되면 L과 비슷한 상형문자가 입력되는데 이경우에는 어떻게 해결해야되나요? 아직 리눅스 기초 부분을 공부중인데 전혀모르겟네요.. #이 주석처리라면 반대로 #을 입력하기위해서는 어떻게해야되나요?
    • 댓글을 보실지 모르겠지만 2015.07.25 08:59 신고
      http://200315193.tistory.com/1111
      이거 보시고 키보드 설정 하시면 됨
    • 답변이 늦었습니다. 요즘 블로그 관리를 안했더니..
      다른분께서 답변 잘 달아주셨네요. 라즈베리파이가 원래 영국의 비영리재단에서 만든거라 시간 설정이나 키보드 매핑 같은게 다 영국이 기본이라 이상한 데서 걸리적거리는 게 있더라구요 ㅎㅎ;
  2. proftp를 따로 css 작업해서 적용이 되나요?
  3. 막힘없이 잘 따라오고 있습니다. ㅎㅎ 설명을 잘 해주셔서 중간중간 배우는 것도 많네요. 감사합니다!
secret

이번에는 라즈베리파이에 고정 IP를 할당해서 기기를 껐다 켤 때마다 IP 주소가 바뀌는 불편함을 방지해보자.

그리고 SSH 프로그램을 이용해서 라즈베리파이에 명령어를 입력하는 방법도 함께 다룬다.


본문 내용은 https://www.modmypi.com/blog/tutorial-how-to-give-your-raspberry-pi-a-static-ip-address 이곳의 글을 주로 참조하였다.


아래 과정을 다 따라하고나면 1번 방향으로 동일한 네트워크 내에서 SSH로 접근하는 것과, 2번 방향으로 외부 인터넷망에서 SSH로 접근하는 것을 해결할 수 있다.



# 라즈베리파이 현재 IP 주소 확인하기


지난 글에서 라즈베리파이를 공유기에 랜선으로 꽂아서 연결하는 것을 추천한 바가 있다. 공유기가 라즈베리파이에 할당한 IP 주소를 메인 컴퓨터에서 확인해보자.


윈도우 7 기준으로,

제어판 > 네트워크 및 인터넷 > 네트워크 및 공유센터로 들어가서 메인 컴퓨터가 공유기에 유선랜으로 연결된 경우 '로컬 영역 연결', 무선랜으로 연결된 경우 '무선 네트워크 영역'을 눌러서 연결 상태 창을 연다. 그리고 '자세히'를 눌러서 네트워크 연결 세부 정보를 확인한다. (스크린샷은 연구실에서 찍은 거라 로컬 연결 영역이고, 집에서 노트북으로 연결했을 때는 약간 내용이 많이 나오네..)



그러면 거기서 'IPv4 기본 게이트웨이' 라고 적힌 곳의 IP 주소를 웹브라우저에 입력한다. 공유기 설정에 접근하기 위해서이다.



주소창에 원래 있던 IP 주소와 외부 IP주소는 가렸다. 혹시나 모를 보안을 위해서 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ 보안은 쥐뿔도 모르긴 하지만.


사용하는 공유기에 따라서 화면은 다를 수 있다. '관리도구' 등의 메뉴를 눌러 공유기 설정으로 들어간다.


이름은 조금 다를 수 있지만 내부 네트워크를 관리하는 곳에서 raspberrypi 라는 기기에 어떤 IP 주소가 할당되었는지 볼 수 있다.




# 포트 포워딩


밑에서 사용할 PuTTY같은 SSH 서비스로 라즈베리파이에 접근하고 싶거나, 우리의 목표인 FTP 연결을 외부 네트워크에서도 연결하고 싶다면 포트 포워딩은 필수이다. 포트 포워딩은 네트워크 외부에서 공유기 IP를 쳐서 들어왔을 때 특정 포트로 접근을 하면, 요청한 포트 번호에 따라서 내부 네트워크에 연결된 기기들에 할당된 내부 IP 주소로 연결해주는 것이다.ㄴ


공유기 설정에 들어간 김에 한 번에 해결하자.


규칙이름은 원하는대로 (22번 포트이면 사실 ssh 뭐시기라고 적는게 나았을텐데 이제와서 바꾸기 귀찮으니 그냥 뒀다.) 쓰고, 내부 IP 주소는 라즈베리파이가 할당받은 IP 주소를 적는다. 나는 TCP, UDP 각각 따로 규칙 설정을 했는데 TCP/UDP 자동으로 세팅해주는 거도 사실 상관 없을 것 같다. 내부 포트 외부 포트는 별다른 일이 없다면(다른 서비스랑 충돌하거나 그러지 않는 이상) 동일하게 세팅하면 된다.


SSH 서비스는 주로 22포트가 기본이므로 22번 포트, FTP는 주로 21포트가 기본이므로 21번 포트를 각각 포트 포워딩 설정해준다.



마지막으로 공유기 설정 창을 닫기 전에 외부 IP 주소를 확인하고 끄자. 이 IP 주소를 알고 있으면 외부 IP 주소와 방금 설정한 포트포워딩을 이용해서 전세계 어디서든 라즈베리파이에 접근할 수 있다.



# 라즈베리파이 터미널 접속


라즈베리파이에 모니터와 키보드를 연결해서 쓰는 중이라면 이부분은 넘어가도 된다.

다른 메인컴퓨터에서 접속중이라면 SSH 접속 프로그램인 PuTTY 프로그램을 켜자.



상세 설정은 나중에 하더라도 일단 라즈베리파이 본체에 접근하려면 Host Name (or IP address) 라고 되어있는 부분에 아까 확인한 라즈베리파이의 IP 주소를 적는다. 포트나 커넥트 타입을 확인한다.


이 때 라즈베리파이의 IP는 공유기가 할당한 내부 IP 주소를 적어도 되고, 이제 포트 포워딩을 마쳤으므로 공유기 자체가 가지고 있는 외부 IP 주소를 적어도 된다. 22포트로 접근을 하면 자동으로 라즈베리파이에 연결되게 해뒀으니까


PuTTY 켤 때마다 아이피주소 적는게 번거롭다면 IP 주소를 쓴 다음에 Saved Sessions 부분에 적당한 이름을 적고 Save를 누르면 저장을 한다. 다음번에 설정을 불러올 때는 Load를 누르면 된다.


그리고 Open을 눌러보자.


login as: 라고 뜨는 부분에는 아이디 (기본으로 pi) 입력하고 엔터,

pi@<IP address>'s password: 라고 뜨는 부분에는 비밀번호 (기본으로 raspberrypi) 입력하고 엔터.

비밀번호 부분에 몇글자 적었는지 안보이더라도 잘 입력 중이니 엔터만 잘 치면 된다.


제대로 잘 입력했다면 로그인에 성공하고 명령어를 입력할 준비가 다 된 것이다.





# 현재 네트워크 정보 확인


네트워크 설정을 바꾸기 전에, 명령어 입력하는 연습도 할겸 라즈베리파이의 현재 네트워크 연결 정보를 확인해보자.


(아래 스크린샷들은 위에 링크한 참조 페이지에서 퍼왔다.)


ifconfig



나는 랜선으로 연결한 상태이기 때문에 eth0으로 잡혀있는 것을 볼 수 있다.

여기서 주목할 정보는 다음과 같다. (적어두라는 뜻이다.)


inet address: 라즈베리파이의 현재 IP 주소

Bcast: broadcast IP range

Mask: Subnet Mask address


netstat -nr



여기서는 GateWay, Destination 정보를 적어둔다.



# 네트워크 설정 변경해서 고정 IP 할당


라즈베리파이의 네트워크 설정은 /etc/network/interfaces 에 저장되어있다. nano 편집기를 써서 편집을 해보자. 그리고 이런 중요한 설정 파일은 관리자 권한이어야 편집이 가능하다. superuser 권한을 얻을 수 있도록 sudo를 붙여서 실행하자.


터미널에 다음과 같은 명령어를 입력한다.


sudo nano /etc/network/interfaces


그러면 화면에 다음과 같은 내용이 나온다.


이걸 아래와 같이 바꾸자. 


address, netmask, network, broadcast, gateway에 집어넣을 값의 설명은 다음과 같다.


address : 할당할 내부 IP 주소 (공유기에서 확인한)

netmask : ifconfig에서 나온 Mask

network : netstat -nr에서 나온 Destination

broadcast : ifconfig에서 나온 Bcast

gateway : netstat -nr에서 나온 공유기 Gateway


덧.

아마 무선으로 하려면 iface wlan0 inet manual 이라고 써진 부분을 위로 올려서 

iface lo inet loopback 밑에 iface wlan0 inet static 이라고 쓰고 나머지 비슷하게 작성하면 되지 않을까 한다.

직접 테스트해본 것은 아니므로 제대로 안된다면 다른 글을 참조하길 바란다. 불친절하지만 어쩔수 없..


이렇게 해두고 Ctrl+O 를 누르면 저장 (^ 표시가 Ctrl 키를 의미), Ctrl+X를 누르면 종료이다. 굳이 저장 후 종료하지 않아도 파일이 변경된 상태에서 종료하면 저장할 것인지 물어보긴 한다.


그리고 터미널에 sudo reboot 입력해서 재부팅하고 나면 라즈베리파이에 동일한 IP주소가 할당되는 것을 확인할 수 있다.

이로써 라즈베리파이에 고정 아이피 할당하는 단계가 끝났다. 여기까지 따라왔다면 축하한다.


WRITTEN BY
Chaz
서울소재 모 대학교 공대 졸업하고 일개미가 된 일명 비둘기가 거주하는 곳입니다

받은 트랙백이 없고 , 댓글  6개가 달렸습니다.
  1. putty 로 오픈 했는데 아무글자도 안뜨네요 그러다가 타임아웃되고
    ip는 맞게 해놨는데 뭐가 문제일까요?
    • 아 해결했습니다 내부IP말고 외부 IP로 오픈하니 열리네요.
      좋은 정보감사합니다
  2. 지나가던 선비 2017.01.19 20:04 신고
    putty로 라즈베리파이를 열 때 Network error: connection refused 라고 오류가 발생하는데 왜 그런거죠?
    • 라즈베리파이가 인터넷 연결이 제대로 안되어있거나 해서 접속할 대상을 못찾은 것 같이 보이네요. 번거로우시더라도 모니터를 연결하고 gui 환경에서 확인해보시는 것도 괜찮을 것 같습니다.
  3. 자세한 포스팅에 감사합니다.
    언제 답변이 달릴지는 모르겠지만 질문드립니다.

    putty로는 현재라즈베리파이와 동일 네트워크상에 있는 pc로 라즈베리 파이에 접속도 가능하고 외부 ip로도 22번 포트를 통해 ssh접속이 가능한대...

    동일한 조건으로 라즈베리파이와 동일 네트워크에 있는 pc에서는 내부 ip:1000(80포트를 1000으로변경함, webpage)로는 접속이 가능하지만 외부 ip를 통해 접속이 불가한대 어떤 설정을 어디서 추가로 해줘야하나요.?

    다른 네트워크에서는 공인 ip:1000포트로 접속이 되기때문에 포트포워딩 문제는 아닌것 같습니다.

    제 네트워크구성은 아래와 같습니다.

    메인 공유기 (BTv) ->
    라즈베리파이(무선 192.168.25.13) (와이파이로 ip세팅함)
    노트북 192.168.25.4 (와이파이 이용)
    애니게이트 유무선 공유기

    메인 공유기 아래 3개의 장치가.같은 네트워크로 구성되어있습니다.
    • 확인이 늦었습니다 ㅎㅎ;

      세 번째 문단이 조금 이해가 안돼서 다시 질문드립니다.
      putty 이용해서 ssh 접속하는 것은 내/외부 IP 모두 정상적으로 접근이 되는데,
      웹브라우저를 이용해서 (1000번 포트로) 접속을 하면 내부 IP로만 접근이 되고 외부 IP로는 접근이 안된다는 것인가요?

      혹시 https://iptime.com/iptime/?page_id=174&nType=UFFscUh5dURlaTNsU1BwZGlNV2czcWpRb3B1QldXK21aUXoza1VRdlB0UFZjN012UUhUejZKa1ZDNitEWWU5LzVHa1dYVDlncG9LNW12TWloa3NIVENPd2FWa0xHNzV5S1ZnZFJiRm8yWUFyOWVWejJSOC9yaVhEWTUrOXlveGZmdU4zV0VnU0MyTm1TajZEaTB5RmpUZElGY3pPczFnVk9Cb05WRmpENGc9PQ==
      이 글의 증상과 비슷한 것인지 확인 부탁드릴게요.
secret