PC/MAC/강좌2013.01.31 11:26


  리눅스를 가지고 할 수 있는 것은 수도 없이 많지만 그중에서도 가장 유용하게 쓰일 수 있는 분야가 파일서버(NAS: Network-attached storage) 인것 같습니다.  요즘은 조그마한 네모박스형태의 NAS 제품이 많이 나와 간편하게 활용하는 방법도 있지만.  PC를 이용한 전통(?)적인 파일 서버만의 강점이 있기에 이부분을 다뤄 보려고 합니다.


(대상은 리눅스를 잘 모르시는 분들도 가능한데, 다만 중간중간 나오는 명령어들이 이해가 안될때는 따로 조금씩 공부하면서 따라오는걸 전제로 하겠습니다.)


일단 강좌 순서는 아래 대로 진행하려고 합니다.  상황을 봐서 여기에 좀더 추가적으로 활용할 만한 내용이 있으면 좀더 길어 질 수  있을 지 모르겠습니다.


 순서대로 강좌를 끝나고 나면 대략 아래 그림과 같은 구성을 할 수 있게 됩니다.



  구성도에서 보여주는 것은 집이나 소규모 사무실 내부에서 공유폴더로 사용가능하고 외부에서도 인터넷을 통해 접근 가능한 구조 입니다.

 

오늘은 첫번째로 SAMBA를 이용한 공유폴더 만들기 입니다.

우분투 설치 PC 준비하기

   SAMBA 사용은 아주 간단하게 할 수 도 혹은 복잡하게 할 수 도 있지만. 여기서는 최소한의 설정으로 금방 공유 폴더가 될 수 있도록 하는 정도 만 다루게 됩니다. (강좌 전반에 최대한 간결 하는 방향으로 할 생각입니다.)

  우선 우분투가 설치된 PC 가 있어야 하는데 여기서는 현재 시점의 최신 LTS 버전인 12.04 를 기준으로 합니다.  LTS (Long Term Support)는 말그대로 오래 지원이 가능한 배포본으로 몇년동안은 OS 업데이트 유지가 비교적 용이합니다.

  우분투를 설치전이라면 http://www.ubuntu.com/download/desktop  에서 다운로드 하여 설치합니다.
우분투 서버버전도 있지만 네트워크 보안설정이나  XWindows 환경이 편한 데스크탑(32bit)  버전으로 합니다.  (서버버전도 물론 가능합니다만. 처음에는 데스크탑 버전으로 해보시길 권장합니다.)

다운 받은 .iso 를 CD 로 구워 부팅 설치 하면 됩니다. 하드디스크 파티션은 기본추천하는데로 하셔도 무방합니다. (우분투 설치는 "계속" 버튼을 누르면서 쭈욱 진행하면 되지만 혹 중간에 잘 모르겠으면 설치방법을 검색하면 글이 많이 있습니다.)


삼바(SAMBA) ?


   SAMBA는 윈도우용 네트워크 파일시스템을 리눅스와 같은 Unix-like OS에서 지원하도록 만들어진 서버 프로그램입니다. 즉, 리눅스에 디렉토리를 윈도우에서 공유폴더로 접근하여 쓸 수 있도록 해주는 소프트웨어 프로그램이라는 뜻입니다.  물론 MS윈도우를 파일서버로 사용가능 하나 그만큼 OS를 추가 구매 해야 하나 리눅스는 무료입니다. 그리고 다양한 리눅스의 백업 솔루션을 활용 할 수 있고,  단순히 공유폴더 서버로만 쓰더라도  최근의 복잡해진 윈도우 공유폴더 보다 (아이러니하게도 오히려) 더 간단하게 설정이 가능합니다.

프로그램 설치하기

우분투에 SAMBA를 설정하려면 먼저 패키지를 설치해야 합니다.

설치는 간단합니다.


$sudo apt-get  install samba



이렇게 하면 일단 프로그램 자체는 설치가 끝났습니다.


다음에 접속할 사용자를 추가합니다.


먼저 리눅스 사용자를 추가합니다.




$sudo adduser user1

$sudo adduser user2




그리고 SAMBA 접속 가능 사용자로 등록및 패스워드 설정합니다.


$sudo smbpasswd -a user1

$sudo smbpasswd -a user2



이때 설정하는 패스워드는 윈도우에서 공유폴더로 접속할때 인증할 패스워드가 됩니다. 


그리고 설정파일 입니다.   vi 에디터나 nano 에디터 등으로  /etc/samba/smb.conf 파일을 열어 맨아래에
아래 내용을 추가합니다.


$sudo nano /etc/samba/smb.conf


# 아래 내용 추가

[user1_home]

        comment= My  Folder

        path = /home/user1

        read only = no

        browseabale = yes

        guest ok = no

        create mask = 0666

        valid users = user1


[pub]

        comment=public                           # 폴더설명

        path = /sharefolder/pub                # 공유 대상 경로

        read only = no                              # 읽기 전용 여부

        browseable = yes                         # 해당 폴더가 보일지 여부

        guest ok = no                               # 누구나 접근 가능여부

        create mask = 0666                  # 1. 파일 생성시 권한 비트

        force create mode = 0                   # 2. OR masking

        security mask = 0777                     # 3. AND masking

        force security mode = 0                 # 4. OR masking with security mask

        directory mask = 0777                    # 5. 디렉토리 생성시 권한 비트 

        force directory mode = 0                # 6. OR masking

        directory security mask = 0777        # 7. AND masking

        force directory security mode = 0    # 8. OR masking with directory security mask



 
각각 항목별로 옆에 코멘트를 달아 드렸는데  크게 어려운 것은 없을 것(?) 입니다.

  다만 기본적으로 알아두면 좋을 것은  valid users create mask 입니다.  
아래 [pub] 폴더처럼 valid users 에 지정된 사용자가 없으면 누구나 접근 가능한 폴더가 되고, [user1_home] 폴더 처럼 user1을 지정한 경우에는 user1만 접근 가능하게됩니다.

  그리고 create mask 는  리눅스에서 파일에 대한 접근권한 부분입니다.  윈도우에서 해당 폴더를 공유해서 파일을 생성하게 되었을때 어떠한 파일권한을 갖게 할것인지를 설정하는 것이죠.

그런데 이것만으로는 파일 생성권한이 잘 먹히지 않습니다. 왜냐면  security mask 에서 허용이 되어있어야 하기 때문 입니다.   

            관련해서 SAMBA에서는 최종 권한을 적용할때 다음과 같은 로직으로 설정됩니다.


 create permission =  

( create mask  OR force create mode ) AND (security mask OR force security mode)



즉 security mask 에서 허가되지 않은 부분은 create mask 로 설정이 되어있더라도 적용이 안됩니다. 만일 create mask에서 설정하는데로 되게 하고 싶으면 security mask를 0777로 해두면 됩니다. 위에 예처럼 말이죠.

현재 우리가 적용하는 상황은 보안보다는 편의성이 중요한 상황이라고 보고 일단 접근 가능한 사용자라면 누구나 생성/삭제가 가능하도록 적용하였습니다.

이렇게 해서 파일을 추가하고 나면 SAMBA 데몬(서버프로그램)을 다시 시작해야 합니다.


$sudo  /etc/init.d/smbd restart



다시 시작하면 이제 윈도우에서 접근해봅니다.  

접근 방법은 리눅스의 IP를 조회하면 됩니다.  ifconfig 명령을 이용하면 조회가 가능합니다.
보통 eth0 또는 eth1 랜카드에 ip가있을 겁니다. 아래의 예는 랜포트가 2개 있는 PC인 경우이고 현재 eth1에 연결되어있습니다.


$ ifconfig

eth0      Link encap:Ethernet  HWaddr 00:1b:1b:0a:8f:f7

          UP BROADCAST MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

          Interrupt:16 Memory:96400000-96420000


eth1      Link encap:Ethernet  HWaddr 00:1b:1b:40:a9:c5

          inet addr:192.168.1.109  Bcast:192.168.1.255  Mask:255.255.255.0

          inet6 addr: fe80::21b:1bff:fe40:a9c5/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:592504491 errors:0 dropped:0 overruns:0 frame:0

          TX packets:218177502 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:895777159784 (895.7 GB)  TX bytes:16078571519 (16.0 GB)

          Interrupt:17 Memory:94400000-94420000




위에 보면 노랗게 되어있는 부분이 주소 입니다.  이 주소를 이용해서 윈도우폴더에서
\\192.168.1.109 를 입력하면 됩니다.

아래 윈도우 7 에서 접근 한 그림을 참고하세요.


위처럼 2개의 폴더가 조회됩니다.


그러면 접근해서 파일을 보관사용하면 되겠습니다.


이렇게해서 첫번째 리눅스를 이용한 파일서버(NAS)구축하기 강좌를 마치겠습니다. 


혹시나 가능한 필요한 부분만 쓴다고 불친절한 글이 됐는지 모르겠습니다.  감사합니다.






Posted by 퍼니로거 즐건록

댓글을 달아 주세요

  1. 이후 강좌도 너무 기대됩니다... 감사합니다.

    2013.02.01 15:12 [ ADDR : EDIT/ DEL : REPLY ]
  2. 유동유동

    강좌를 잘보고 nas잘 쓰고 있습니다 ^^

    2013.03.04 14:34 [ ADDR : EDIT/ DEL : REPLY ]
  3. 정말 정성 가득한 도움 만땅 되는 포스팅들입니다. 저도 이 후 강좌 기대합니다.
    큰 도움되는 강좌에 감사 드립니다.

    2013.03.13 11:14 [ ADDR : EDIT/ DEL : REPLY ]
  4. 비밀댓글입니다

    2013.04.08 14:27 [ ADDR : EDIT/ DEL : REPLY ]
  5. 초보

    강좌 보며 따라 하고 있습니다.
    저 같은 경우 조금 문제가 있습니다.
    위에 작성된 예시문을 그대로 긁어서 붙혀 넣기 하고 .. 필요한 부분 (계정명,폴더이름) 수정후 실행 해 보면
    pub 폴더 부분이 보이지 않습니다. --> mkdir 롤 폴더를 만들었습니다 ..
    그리고 궁금한것이 하나 있습니다.
    서버를 사용하려는 사용자가 3명 이며 한명은 관리자, 두명은 사용자가 되며
    관리자는 로컬에서 혹은 온라인에서 접속하여 모든 권한을 사용 할수 있게 하고
    나머지 2명중 한명은 읽기,쓰기 권한, 나머지 한명은 읽기만 권한을 줄수 있는 방법과
    하나의 폴더에 여러명이 접속 하게 하려면 어떻게 해야 하는지요 ...
    제 이메일은 pyun1ppp@naver.com 입니다.

    2013.04.23 23:19 [ ADDR : EDIT/ DEL : REPLY ]
    • 접근권한을 달리하는 방법은 일단 2가지를 생각해볼 수 있는데요.

      첫번째,
      예를 들어 /sharefolder/aaa 디렉토리에 대해서 권한을 달리하려면

      해당 경로에 대해 samba 매핑을 만들고 여기에 특정 유저만 접근가능하돌고 valid users를 주시고,
      동일 경로에 또 다른 매핑 해주되 read only = yes 로 한뒤 누구나 접근가능하도록 valid users를 하지 않으면 됩니다.

      두번째는, 해당경로의 쓰기권한을 그룹권한까지만 주는 방법입니다.
      이는 리눅스(유닉스)의 파일권한에 대한 이해가 있어야 합니다.

      2013.04.24 23:37 신고 [ ADDR : EDIT/ DEL ]
  6. 초보

    보이지 않던 폴더는 보이게 하였습니다 .. 오타가 있더군요 .. 그런데 pub 폴더에 접근을 할수가 없다고 나옵니다 ..

    2013.04.24 22:59 [ ADDR : EDIT/ DEL : REPLY ]
    • 아마도 해당 경로에 대해 접근권한(리눅스)을 주지 않은듯합니다.
      예를 들어 pub에 매핑된 경로가 /test/data
      라면 test에 접근권한, data권한등 단계별 디렉토리 권한을 모두 허용해주어야 합니다.
      예를 들면
      >sudo chmod 777 /test
      >sudo chmod 777 /test/data

      2013.04.24 23:32 신고 [ ADDR : EDIT/ DEL ]
  7. 초보

    알려 주신것 처럼 잘 따라 하고 있습니다. 그런데 혹시 usb 외장하드디스크를 사용하여 저장공간을 늘리고 싶습니다.
    여기 강좌의 내용으로는 .. '경로를 찾을수 없다' 라고만 나옵니다 .. ㅡ,.ㅡ;

    2013.06.13 00:19 [ ADDR : EDIT/ DEL : REPLY ]
    • 경로를 찾을 수 없다는 메시지가 어떤 상황에서 (윈도우에서? 아니면 리눅스에서 ) 나온건지 궁금합니다.
      리눅스에서 사용은 잘되고 추가작업까지 다되었는데.. 윈도우에서도 보이고,. 연결이안되는건지...

      SAMBA 에 설정이 되어있으면 이후 USB 외장연결이 안되어있어도 윈도우에서 보일 수 있습니다. 이때 연결에 문제가 될 수 있구요. 항상 외장하드게 제대로 mount 되어있는지 확인을 해야합니다.

      2013.06.13 10:22 신고 [ ADDR : EDIT/ DEL ]
  8. 포스팅 덕분에 많은 도움이 되었습니다. 감사합니다 :-)

    2013.08.13 19:48 [ ADDR : EDIT/ DEL : REPLY ]
  9. 초보

    좋은 강의 감사합니다. 그런데 외부 네트워크에서 접근하는 방법도 올려주시면 안될까요

    2013.10.07 00:24 [ ADDR : EDIT/ DEL : REPLY ]
  10. 초보당

    안녕하세요. 서버공부에 아주 좋은 경험이 될 것 같습니다. 정말 진심으로 감사드립니다.

    덕분에 삼바서버로 손쉽게 홈서버를 구축하였구요. 혹시 궁금한게있는데,
    vaild users = user1 로 했다고 치고 다른 pc에서 접근하려면 user1 로 접속할수있게 설명해주셨는데
    만약에 user1 폴더를 user2가 사용하고싶다. 그런다면 그 밑에 vaild users = user2를 입력해주는 것 만으로 끝나는 것 같진 않은데 다른방법이 있을까요? 쉽게 말해서 한 폴더를 여러사람(guest가 아닌)이 사용하는거죠. 조언부탁드리겠습니다.

    2014.02.16 13:55 [ ADDR : EDIT/ DEL : REPLY ]
    • 기본적으로 삼바의 접근권한은 운영체제의 접근권한위에 추가적인 접근권한관리가 제공됩니다.

      리눅스에서 삼바를 적용한 경우

      특정 디렉토리에 guest가 아닌 특정 여러 유저만을 접근하게 하려면 기본적으로 2가지 방법이 있습니다.

      1. 리눅스에 해당 공유디렉토리의 접근권한을 그룹까지만 부여하고 해당 그룹에 속한 사용자만 접근할 수 있도록 한다.

      - chown 명령과 chmod 명령사용 소유자와 접근권한 설정

      이경우 valid users 를 없애면 누구나 삼바의 권한은 통과되지만 리눅스상의 접근권한에서 해당 그룹사용자까지만 접근이 가능합니다.

      2. 두번째 방법은 리눅스에서는 특정폴더를 누구나접근가능하게 하고
      예를 들어 아래와 같은 명령으로 (물론 특정 그룹만 설정한뒤에도 가능합니다.)

      # chmod 777 <해당디렉토리>

      이후 삼바설정에서
      valid users 에 접근가능하게 하고 싶은 사용자만 쭈욱 콤마(,)를 붙여
      가면서 나열하면됩니다.

      valid users = user1, user2, user3

      이렇게 말이죠.

      2014.02.17 11:17 신고 [ ADDR : EDIT/ DEL ]
  11. kimyh

    퍼가요~

    2014.05.14 12:15 [ ADDR : EDIT/ DEL : REPLY ]
  12. ecamoa

    삼바 설정 때문에 고생했는데 잘 보고 갑니다. 감사합니다^^

    2015.07.06 18:44 [ ADDR : EDIT/ DEL : REPLY ]
  13. 누리문

    잘보고갑니다 완전 잘쓰고있어요 감사합니다!!

    2015.07.07 13:27 [ ADDR : EDIT/ DEL : REPLY ]