본문 바로가기

프로그램/Linux

samba 설정 및 mount 설정..

samba는 주로 윈도우에서 네트웍 파일 시스템을 이용하려 할때 사용합니다.

linux에 samba 데몬을 설치하고 적당한 셋팅을 하면 윈도우에서 네트웍 드라이브로 서버의 특정 디렉토리를 접근 할 수 있습니다.

또한 리눅스에서는 파일 시스템을 특정 폴더에 mount하여 접근하는데.. 이때 마운트하는 드라이브를 삼바에서 제공하는 드라이브로 연결할수 있습니다.

리눅스(데비안기준)에서 apt-get install 명령을 통해 samba를 설치 할수 있습니다.

설치후 /etc/samba/smb.conf 파일을 적당히 손보면 됩니다.

설치 관련 글은 검색하는 무수히 많이 나옴으로 생략 하겠습니다.



이글을 쓰는 이유는 특정한 상황이 발생 했기 때문 입니다.

장비가 2대 있고 한대는 라즈비안(라즈베리 OS-데비안계열), 한대는 ubuntu(데비안계열)가 있습니다.

모두 iptime 공유기에 물려 있습니다.

라즈비안에는 1T짜리 외장하드가 있습니다.
해당 저장소를 '몽실이네' 사이트에서 사용하는 데이터(첨부파일, 테마파일) 저장소로 활용합니다.

리눅스의 /etc/fstab 파일에는 부팅시에 자동을 마운트되는 드라이브들이 설정되어 있습니다.

이곳에 외장하드를 마운트 해뒀습니다.
마운트 되는 디렉토리는 /mnt/usbhdd 입니다.


proc            /proc           proc    defaults          0       0
/dev/mmcblk0p6  /boot           vfat    defaults          0       2
/dev/mmcblk0p7  /               ext4    defaults,noatime  0       1
/dev/sda1       /mnt/usbhdd     ext4    defaults        0       2

맨 밑에 셋팅되어 있습니다.

fstab을 편집하고 바로 마운트 적용을 하려면 아래의 명령어를 사용합니다.

sudo mount -a





이제 외장하드에 특정 디렉토리를 만들고 사이트 관리자 페이지의 환경변수를 셋팅하여 첨부 파일이 외장하드에 저장되도록 합니다.

일반적인 상황에서는 이것으로 끝 입니다.

그런데 문제는 서버에서 tomcat를 구동할때 사용하는 계정이 tomcat 입니다.
그래서 저장되는 모든 파일의 소유권이 tomcat에게 주어져 있습니다.
java vm이 tomcat계정에 의해 구동되고 해당 프로세스가 생성하는 모든 파일은 vm 을 실행한 계정으로 권한 설정이 되는 겁니다.

위에서 언급한 우분투 서버에도 몽실이네를 띄울것이고 우분투에서 실행되는 tomcat에서 저장되는 첨부파일이 라즈베리에 물린 1T 외장하드에 저장되어야 합니다.

즉, 같은 스토리지에 저장되어야 한다는 얘기 입니다.

문제를 정리하면 이렇습니다.

1. 2대의 물리적 서버가 있다.
2. 각각의 tomcat에서 생성하는 파일을 한곳에서 관리해야 한다.

즉 1번서버의 was에서 저장된 파일도 2번 was에서 접근이 가능해야 한다.

보통 프로젝트에서는 인프라팀에서 서버에 nas 구성을 해서 물리적을 다른곳에서 저장된 데이터도 서로 공유가 되도록 해줍니다.

nas 솔루션이 없으니 samba로 셋팅해야 합니다.

라즈베리에 삼바를 설치하고 네트웍으로 접근 가능한 디렉토리를 설정합니다.

[nas]
comment = room samba server
path = /mnt/usbhdd/nas
valid user = pi
read only = no
browseable = yes
create mask = 0775
directory mask = 0775
writable = yes

/etc/samba/smb.conf 파일의 내용중 일부 입니다.
[nas] -> nas라는 이름으로 공유된다.
comment = room samba server --> 접속시 client에 보여지는 코멘트 (아무거나 쓰면 되겠죠?)
path = /mnt/usbhdd/nas --> 공유시킬 디렉토리 입니다. (이미 마운트된 usbhdd 에 nas라는 폴더를 만들고 해당 폴더를 공유 시킵니다.)
valid user = pi --> nas에 접근 가능한 사용자 id 입니다.(클라이언트에서 인증시에 쓰는 id 이며 실제 서버에 계정이 존재해야 합니다.)
나머지 옵션을 굳이 설명 안해도 될듯 하네요.

이렇게 셋팅하고 samba를 재기동 합니다.

이제 우분투에서 라즈비안의 삼바서버에 접근하도록 셋팅 합니다.

아래는 우분투의 fstab 내용중 일부 입니다.

//192.168.0.18/nas      /mnt/nas       cifs    user=pi,pass=패스워드,rw,uid=123,gid=127    0       0

아이피/삼바에서 설정한 이름
마운트될 디렉토리
파일 시스템명
사용자 아이디, 패스워드, 읽기쓰기 가능, 마운트된 디렉토리의 소유자, 마운트된 디렉토리의 그룹

uid 및 gid 값이 중요합니다.
우분투에서 /etc/passwd 파일을 열어서 tomcat 계정의 uid와 gid를 알아내어 적어 줍니다.

이렇게 셋팅하고 sudo mount -a 명령어로 마운트 하면(/mnt/nas 디렉토리를 미리 만들어놔야 합니다.)

/mnt/nas 디렉토리에 라즈베리에서 재공하는 nas 디렉토리가 마운트되어 사용할 수 있습니다.

XXX@XXXXXX:/mnt/nas$ ls -al
합계 4
drwxr-xr-x 2 tomcat8 tomcat8    0 11월 14 10:02 .
drwxr-xr-x 5 root    root    4096 11월 14 10:06 ..
drwxr-xr-x 2 tomcat8 tomcat8    0 11월 14 10:16 windhome

우분투에서 본 모습니다.
fstab에서 설정한대로 /mnt/nas 디렉토리의 소유자와 그룹명이 tomcat8로 되어 있습니다.

이제 우분투에서 tomcat8 계정으로 실행된 vm이 파일을 이곳에 쓸수 있습니다.
파일 쓰여지면 실제로 라즈비안의 외장하드에는 pi라는 권한으로 쓰여 집니다.

pi@raspberrypi:/mnt/usbhdd/nas $ ls -al
합계 12
drwxr-xr-x  3 pi pi 4096 11월 14 10:02 .
drwxr-xr-x 17 pi pi 4096 11월 14 09:37 ..
drwxr-xr-x  4 pi pi 4096 11월 14 10:16 windhome

라즈비안에서 본 모습 입니다.
물리적이 디스크의 nas 디렉토리는 소유자 및 그룹명이 pi로 되어 있습니다.

우분투에서 fstab으로 samba 디렉토리 연결할때 userid를 pi로 했기 때문 입니다.
실제로 pi로 안하면 권한 문제로 해당 디렉토리를 사용할수 없게 됩니다.

이제또 문제가 있습니다.
라즈비안에서 was를 띄울때 라즈비안에 있는 tomcat 계정으로 띄웁니다.
그런데 저장해야 할 디렉토리인 /mnt/usbhdd/nas는 소유자가 pi 입니다.

보시면 소유자만 읽고 쓰고 할수 있습니다.
즉 라즈비안에서 '몽실이네'를 띄우고 첨부파일 디렉토리를 /mnt/usbhdd/nas 안쪽으로 셋팅하면 권한 문제로 저장이 안된다는 겁니다.

이문제를 해결하기 위해서 우분투에서 했던 것 처럼 라즈비안의 fstab 파일을 수정하여 라즈비안의 samba 서버에서 제공하는 nas 디렉토리를 마운트 합니다.

//127.0.0.1/nas /mnt/nas        cifs    user=pi,pass=패스워드,rw,uid=115,gid=123      0       0

우분투와 다른건 압쪽에 주소 부분 입니다.
루프백 아이피를 사용하였습니다.

uid,gid도 라즈비안에 등록된 tomca 계정의 것으로 해줍니다.

마운트후에 라즈비안의 /mnt/nas 디렉토리 모습입니다.

pi@raspberrypi:/mnt/nas $ ls -al
합계 4
drwxr-xr-x+ 3 tomcat8 tomcat8    0 11월 14 10:02 .
drwxr-xr-x  5 root    root    4096 11월 14 09:43 ..
drwxr-xr-x+ 4 tomcat8 tomcat8    0 11월 14 10:16 windhome

우분트 쪽과 같아 졌습니다.

좀 복잡하긴 하지만 이제 셋팅이 다 되었습니다.

1. 삼바에서 디렉토리를 제공한다.
2. 각각의 was가 설치된 장비에서 samba 디렉토리를 마운트 한다.
3. 마운트시에 접속 아이디는 삼바디렉토리를 제공할때 셋팅한 아이디로..
4. 접속후 마운트 된 디렉토리의 권한(소유자,그룹)은 각 장비의 was 실행시키는 사용자의것(tomcat8)




실제 사이트에서 셋팅한 디렉토리 입니다.

이제 nas 구성이 되었으니 시간날 때 Apache와 Tomcat을 이용한 HA를 구성해봐야 겠습니다.

'프로그램 > Linux' 카테고리의 다른 글

우분투에 vmware 설치하기 : 오류 대처방법  (1) 2019.01.22