■ 개요


NFS(Network File System)는 Linux 간에 많이 사용되는 네트워크 파일 공유 시스템이다.

하지만, Windows와 Linux 같은 경우 NFS 파일 시스템 공유를 것을 많이 볼 수 없다.

왜냐하면 NFS를 사용하지 않고 Sabma를 많이 이용하기 때문이다.


그렇다면 Samba와 NFS 차이는 무엇일까 ?

NFS 같은 경우 다른 머신에 있는 파티션을 마치 자신의 로컬 영역인 것처럼 네트워크를 이용하는 기술이다.

하지만, 로컬 영역인것 처럼 사용하기 위해 접근할 때 딱히 보안상으로 크게 좋지는 않다.

실제로 공유하는 머신인 Linux에서도 별 다른 설정이 없다.


반면 Samba는 인증 방식을 통해 접근이 가능하다.

실제 설정하는 부분에서도 여러가지 설정을 할 수 있다.


두 가지 서비스마다 각 다른 차이점이 있겠지만, 보안을 크게 신경쓰지 않는다면 NFS를 추천해주고 싶다.



■ 설치 전 환경


Linux : Centos 5.4

Windows : Windows 7 Enterprise K


여기서 Linux 부분에서는 OS 버전이 크게 필요없다.

그저 NFS 설치만 되어있으면 된다.



■ Linux에서의 마운트 공유 설정


[root@localhost home]# ls

linux  lost+found

[root@localhost home]# vi /etc/exports

/home        *(rw,async,no_root_squash,no_all_squash,no_subtree_check)

[root@localhost home]# service nfs restart


아주 간단하다. /etc/export에 /home 공유를 해주고 모든 머신이 접근이 가능하도록 *을 넣어줬다.

특정 머신에 설정을 원할 경우 특정 머신의 IP를 입력해주면 된다.

해당 범위 내 광역으로 넣어줄 경우 예로 192.168.1.* 이런식으로 넣어줘도 된다.



■ Windows에서 마운트


윈도우 cmd 열고 mount 입력하면 없는 명령어라고 나온다.

경우는 mount 기능이 disable 되어있기 때문에 enable 시켜준다.

 

제어판 - 프로그램 추가/제거 - Windows 기능 사용/사용 안함 클릭



선택 확인




초록색 박스 mount 기능이 disable .

아래 빨간 박스 mount 기능이 enable .





리눅스 NFS 다르게 Windows에서는 네트워크 드라이브로 인식이 되어 마운트가 되는 하다.

원하는 드라이브의 경로를 설정 마운트해주면 된다.

그림에서는 H:\ 마운트를 했다.

해지할 때에는 umount 명령어를 써주면 된다.





드라이브에 진입




linux에서 존재했던 linux 파일이 존재하는 것을 확인할 있다.




추가적으로 윈도우에서 자동 마운트가 되도록 설정을 하고 싶지만, 찾아봐도 보이지 않는다...

아마 최초 마운트를 하면서 자동 마운트가 되는 듯 하다. Windows 재부팅을 해서 확인하고 싶었지만, 

돌리고 있는 작업들이 있어서 재부팅하지 못했다.

만약 된다면.. 댓글 좀.. 

저작자 표시 비영리 변경 금지
신고


안녕 안녕 ?


오늘은 반말로 포스팅해볼게 ~


먼저 Samba 라는것을 배워볼텐데..


Samba에 개념과 설정. 활용 방법에 대해 설명하겠어 !



1. Samba란 ?



Samba은 기본적으로 MS 윈도우 환경과 리눅스 환경 사이에서 공유를 받을 수 있도록 하는 데몬이지.


MS 윈도우에서는 마우스 클릭 몇번으로 간단하게 공유가 되지만..


우리가 쓰는 것은 리눅스니깐.. 모든 설정들이 다 명령어로 이루어지는건 알지 ?


일단 내가 설명할 것은 Centos 6.5 환경에서 하는거야.



2. Samba 설치 및 설정



Samba 설치는 매우 간단해 !


[root@seob01 ~]# yum install samba


이렇게 하면 간단하게 다 설치가 되어버리지.


설치 될 때 samba, samba-client, samba-common도 같이 설치가 되어 이거에 대해 설명을 해볼게.


 samba 

 SMB 서비스 네트워크 데몬 및 기본 유틸리티 포함 

 samba-client

 공유 네트워크 내에 있는 서버리스트 출력

 samba-common

 설정 파일이나 설정 유틸리티, Man 페이지 포함


꼭 필요한 패키지들이지.


samba를 설치하면 의존성에 의해 모두 같이 설치가 되기 때문에 따로 개별적으로 설치할 필요는 없어


[root@seob01 ~]# ls /etc/samba/

lmhosts  smb.conf  smbusers


설치시 총 3개의 파일이 위 경로에 설치가 되는데 이 파일에 대해서도 간략하게 설명할게



 lmhosts 

 공유 네트워크 내에 있는 서버리스트 정보을 담은 파일

 smb.conf

 Samba 서버 설정 파일

 smbusers

 Samba 유저의 별칭을 담은 파일


여기서 우리가 건들것은 smb.conf 이라는 파일이야.


먼저 smb.conf 기본적인 내용들이야.


기본적인것들만 설명하고.. 초록색 글자로 표기해둘테니 꼭 읽어보길 바래


[root@seob01 samba]# cat smb.conf

# This is the main Samba configuration file. You should read the

# smb.conf(5) manual page in order to understand the options listed

# here. Samba has a huge number of configurable options (perhaps too

# many!) most of which are not shown in this example

#

# For a step to step guide on installing, configuring and using samba, 

# read the Samba-HOWTO-Collection. This may be obtained from:

#  http://www.samba.org/samba/docs/Samba-HOWTO-Collection.pdf

#

# Many working examples of smb.conf files can be found in the 

# Samba-Guide which is generated daily and can be downloaded from: 

#  http://www.samba.org/samba/docs/Samba-Guide.pdf

#

# Any line which starts with a ; (semi-colon) or a # (hash) 

# is a comment and is ignored. In this example we will use a #

# for commentry and a ; for parts of the config file that you

# may wish to enable

#

# NOTE: Whenever you modify this file you should run the command "testparm"

# to check that you have not made any basic syntactic errors. 

#

#---------------

# SELINUX NOTES:

#

# If you want to use the useradd/groupadd family of binaries please run:

# setsebool -P samba_domain_controller on

#

# If you want to share home directories via samba please run:

# setsebool -P samba_enable_home_dirs on

#

# If you create a new directory you want to share you should mark it as

# "samba_share_t" so that selinux will let you write into it.

# Make sure not to do that on system directories as they may already have

# been marked with othe SELinux labels.

#

# Use ls -ldZ /path to see which context a directory has

#

# Set labels only on directories you created!

# To set a label use the following: chcon -t samba_share_t /path

#

# If you need to share a system created directory you can use one of the

# following (read-only/read-write):

# setsebool -P samba_export_all_ro on

# or

# setsebool -P samba_export_all_rw on

#

# If you want to run scripts (preexec/root prexec/print command/...) please

# put them into the /var/lib/samba/scripts directory so that smbd will be

# allowed to run them.

# Make sure you COPY them and not MOVE them so that the right SELinux context

# is applied, to check all is ok use restorecon -R -v /var/lib/samba/scripts

#

#--------------

#

#======================= Global Settings =====================================

[global] // 이 부분은 전역 설정 부분이야 기본적으로 여기 아래에 옵션을 넣게 되면 모든 Samba 정보에 설정되는 것이지

# ----------------------- Network Related Options -------------------------

#

# workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH

#

# server string is the equivalent of the NT Description field

#

# netbios name can be used to specify a server name not tied to the hostname

#

# Interfaces lets you configure Samba to use multiple interfaces

# If you have multiple network interfaces then you can list the ones

# you want to listen on (never omit localhost)

#

# Hosts Allow/Hosts Deny lets you restrict who can connect, and you can

# specifiy it as a per share option as well

#

workgroup = MYGROUP // workgroup 부분이야 윈도우의 workgroup과 일치 시키거나 NT 도메인 이름으로 설정하면 돼

server string = Samba Server Version %v 

        // 윈도우의 컴퓨터 설명과 비슷하지. 나중에 공유를 받게 되면 폴더명 옆에 설명으로 나오게 돼.

        // %h은 호스트이름, %L은 NetBIOS 이름, $v은 Samba Version을 표기해 

; netbios name = MYSERVER

  // 여기서부터는 ; 이 앞에 있으면 주석처리가 되어버리니 알고있어 !

  // NetBIOS 네임을 설정하는 영역으로 윈도우의 컴퓨터 이름과 동일해.

  // 주석처리 할 경우 호스트 이름을 NetBIOs 네임으로 사용하게 되지 현재 내가 seob01 라는 호스트 이름이니

      NetBIOS 이름은 seob01이가 되는거야


; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 

  // 두개의 네트워크에 Samba Server가 물려있는 경우 Samba가 양쪽 네트워크에 대해 브라우징 및 서비스가 가능하도록

      설정하는 영역이지. 설정방법은 < IP 주소 > / < 넷마스크 > 이렇게 표기하면 돼

; hosts allow = 127. 192.168.12. 192.168.13.

        // Samba Server에 대해 접근을 허락 할 호스트 네임 혹은 IP 주소를 지정할 수 있어.

        // 예를 들어 192.168.1.1~254 단위로 설정하고 싶거든. 192.168.1. 이렇게만 적어두면 돼

# --------------------------- Logging Options -----------------------------

#

# Log File let you specify where to put logs and how to split them up.

#

# Max Log Size let you specify the max size log files should reach

# logs split per machine

log file = /var/log/samba/log.%m

  // 서버에 접속한 호스트마다 개별적인 로그 파일을 생성하도록 설정 

# max 50KB per log file, then rotate

max log size = 50

# ----------------------- Standalone Server Options ------------------------

#

# Scurity can be set to user, share(deprecated) or server(deprecated)

#

# Backend to store user information in. New installations should 

# use either tdbsam or ldapsam. smbpasswd is available for backwards 

# compatibility. tdbsam requires no further configuration.


security = user

   // security 영역은 다음과 같이 설정할 수 있어

   // user = Samba Server에서 계정 및 패스워드를 통한 인증을 거친 사용자에 한하여 공유를 허가

   // share = 모든 공유 영역에 권한 없이 접근이 가능하도록 설정. 윈도우의 워크그룹 기본 모드.

   // server = 공유 영역에 대한 사용 권한은 다른 호스트(NT 패스워드 서버)의 인증 과정을 거친 사용자에 한하여 허가

passdb backend = tdbsam

   // 패스워드에 대한 인증 방식이야

   // tdbsam = samba 내장 TDB SAM 형식

   // ldapsam = LDAP 사용 (LDAP 라이브러리 필요)

   // smbpasswd = smbpasswd 텍스트 파일 인증 형식



# ----------------------- Domain Members Options ------------------------

#

# Security must be set to domain or ads

#

# Use the realm option only with security = ads

# Specifies the Active Directory realm the host is part of

#

# Backend to store user information in. New installations should 

# use either tdbsam or ldapsam. smbpasswd is available for backwards 

# compatibility. tdbsam requires no further configuration.

#

# Use password server option only with security = server or if you can't

# use the DNS to locate Domain Controllers

# The argument list may include:

#   password server = My_PDC_Name [My_BDC_Name] [My_Next_BDC_Name]

# or to auto-locate the domain controller/s

#   password server = *


; security = domain

; passdb backend = tdbsam

; realm = MY_REALM


; password server = <NT-Server-Name>

  // security에서 domain과 server을 할 경우 Samba 이외에 해당 기능을 수행하는 NT 서버가 필요해.

  // 즉.. 해당 NT 서버를 아래의 password server를 통해 지정해야하지.

# ----------------------- Domain Controller Options ------------------------

#

# Security must be set to user for domain controllers

#

# Backend to store user information in. New installations should 

# use either tdbsam or ldapsam. smbpasswd is available for backwards 

# compatibility. tdbsam requires no further configuration.

#

# Domain Master specifies Samba to be the Domain Master Browser. This

# allows Samba to collate browse lists between subnets. Don't use this

# if you already have a Windows NT domain controller doing this job

#

# Domain Logons let Samba be a domain logon server for Windows workstations. 

#

# Logon Scrpit let yuou specify a script to be run at login time on the client

# You need to provide it in a share called NETLOGON

#

# Logon Path let you specify where user profiles are stored (UNC path)

#

# Various scripts can be used on a domain controller or stand-alone

# machine to add or delete corresponding unix accounts

#

; security = user

; passdb backend = tdbsam

; domain master = yes 

; domain logons = yes

# the login script name depends on the machine name

; logon script = %m.bat

# the login script name depends on the unix user used

; logon script = %u.bat

; logon path = \\%L\Profiles\%u

# disables profiles support by specifing an empty path

; logon path =          

; add user script = /usr/sbin/useradd "%u" -n -g users

; add group script = /usr/sbin/groupadd "%g"

; add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"

; delete user script = /usr/sbin/userdel "%u"

; delete user from group script = /usr/sbin/userdel "%u" "%g"

; delete group script = /usr/sbin/groupdel "%g"

# ----------------------- Browser Control Options ----------------------------

#

# set local master to no if you don't want Samba to become a master

# browser on your network. Otherwise the normal election rules apply

#

# OS Level determines the precedence of this server in master browser

# elections. The default value should be reasonable

#

# Preferred Master causes Samba to force a local browser election on startup

# and gives it a slightly higher chance of winning the election

; local master = no

; os level = 33

; preferred master = yes

#----------------------------- Name Resolution -------------------------------

# Windows Internet Name Serving Support Section:

# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both

#

# - WINS Support: Tells the NMBD component of Samba to enable it's WINS Server

#

# - WINS Server: Tells the NMBD components of Samba to be a WINS Client

#

# - WINS Proxy: Tells Samba to answer name resolution queries on

#   behalf of a non WINS capable client, for this to work there must be

#   at least one WINS Server on the network. The default is NO.

#

# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names

# via DNS nslookups.

; wins support = yes

; wins server = w.x.y.z

; wins proxy = yes

; dns proxy = yes

# --------------------------- Printing Options -----------------------------

#

# Load Printers let you load automatically the list of printers rather

# than setting them up individually

#

# Cups Options let you pass the cups libs custom options, setting it to raw

# for example will let you use drivers on your Windows clients

#

# Printcap Name let you specify an alternative printcap file

#

# You can choose a non default printing system using the Printing option

load printers = yes

  // Samba에서 별도의 프린터 설정을 하지 않고, printcap name에서 설정한 프린트 설정 파일을 불러와 쓰도록 설정

  // 아래 printercap name 옵션을 참고해

cups options = raw


; printcap name = /etc/printcap

  // Samba에서 공유해서 사용할 프린트에 대한 설정이 포함되어 있는 파일을 지정하는 영역으로 /etc/printcap 파일을 지정

#obtain list of printers automatically on SystemV

; printcap name = lpstat

; printing = cups

  // 지원하는 프린트 시스템을 지정하는 영역으로 기존의 LPRng을 이용하여 프린트를 사용할 경우 lprng를, CPUS을 이용하여

      프린트를 사용할 경우 cpus를 지정해야해


# --------------------------- Filesystem Options ---------------------------

#

# The following options can be uncommented if the filesystem supports

# Extended Attributes and they are enabled (usually by the mount option

# user_xattr). Thess options will let the admin store the DOS attributes

# in an EA and make samba not mess with the permission bits.

#

# Note: these options can also be set just per share, setting them in global

# makes them the default for all shares


; map archive = no

; map hidden = no

; map read only = no

; map system = no

; store dos attributes = yes



#============================ Share Definitions ==============================

// 여기서부터는 공유 영역이야. 무엇을 공유할지 쓰는 곳이지. 간단하게 homes 라는 거에 설명만 할게


[homes] // 공유 폴더 이름이야. 

comment = Home Directories // 폴더에 대한 설명

browseable = no // 이 폴더가 리스트에 출력하게 할 것인지 정하는거야 yes 할 경우 출력, no 할 경우 보이지 않음

writable = yes // 읽고, 쓰기 권한에 대해 묻는거야. yes 허용, no 거부

; valid users = %S // 공유 영역에 접근 가능한 사용자 혹은 그룹을 지정할 수 있어 그룹일 경우 @(앳)을 꼭 붙여야해

         // ex) seob @seobgroup

; valid users = MYDOMAIN\%S

[printers]

comment = All Printers

path = /var/spool/samba

browseable = no

guest ok = no

writable = no

printable = yes

# Un-comment the following and create the netlogon directory for Domain Logons

; [netlogon]

; comment = Network Logon Service

; path = /var/lib/samba/netlogon

; guest ok = yes

; writable = no

; share modes = no

# Un-comment the following to provide a specific roving profile share

# the default is to use the user's home directory

; [Profiles]

; path = /var/lib/samba/profiles

; browseable = no

; guest ok = yes

# A publicly accessible directory, but read only, except for people in

# the "staff" group

; [public]

; comment = Public Stuff

; path = /home/samba

; public = yes

; writable = yes

; printable = no

; write list = +staff


위에서 난 몇개 수정만 해볼게


# server string = Samba Server Version %v  ==> server string = hello seob


위 옵션을 변경하고 공유 영역에 다음과 같이 추가할게


[Seob]

comment = Seob Directories

browseable = yes

writable = yes

path = /home


위에 설정된 내용은 server string 변경하고 인증된 사용자만 /home에 접근 후 수정이 가능하도록 설정했어.


옵션에 대해 설명


전역 영역과 공유 영역이 나뉘는것은 본문만 읽어도 알 수 있어.


현재 위에 보면 공유 영역에 옵션은 총 4개가 들어가있어.


comment, browseable, writable, path.


일단 8개의 옵션들만 설명할게.



 path 

 경로 지정 

 browsable

  해당 공유 내역을 브라우징 리스트에 나타나게 할 것인지에 대한 옵션

 writable

 쓰기 가능 여부 writable=yes은 readonly=no와 동일해 

 printable

 프린터 공유에만 사용하는 영역 yes를 할 경우 공유 이름으로 전역 영역에서 정의한 프린터를 공유하게 됨

 public

 nobody 사용자에 대한 접근 권한 설정. 전역 영역의 guest ok=yes와 연관있음

 hosts allow

 공유 영역에 대한 호스트별 접근 허가 설정, IP 혹은 네트워크 주소를 지정

 vlid users

 공유 영역에 접근 가능한 사용자 혹은 그룹 지정사용자를 여러 명 지정할 경우 공백으로 구분하여 그룹명 

 일 경우 @(골뱅이)를 통해 그룹임을 명시


 ex) seob @seobgroup

 write list

 공유 영역에 대한 쓰기 가능한 사용자 혹은 그룹 지정사용자를 여러 명 지정할 경우 공백으로 구분하여 그룹명

 일 경우 @(골뱅이)를 통해 그룹임을 명시

 

 ex) seob @seobgroup 







옵션은 대해서는 이걸로 마무리 짓고.. 먼저 사용자 인증을 시켜야겠지 ?


일반적으로 Linux에서 사용하고 있는 계정으로 로그인할 수 없어 


smb 방식으로 인증을 해줘야해.


아주 간단해. 현재 존재하는 계정에 smb 인증만 해주면 되니깐.


[root@seob01 ~]# smbpasswd -a root

New SMB password:

Retype new SMB password:

Added user root.



설정이 끝났으면 테스트해봐야겠지 ?


서비스 재시작은 다음과 같이 실행하면 돼


[root@seob01 samba]# service smb restart

Shutting down SMB services:                                [FAILED]

Starting SMB services:                                     [  OK  ]

[root@seob01 ~]# service smb reload

Reloading smb.conf file:                                   [  OK  ]




3. Windows에서 접속하기




먼저 Samba Server의 IP는 192.168.75.4 야


아이피 앞에 꼭 \\을 넣어서 써줘




아까 만들었던 Seob 라는 이름이 그대로 존재해.


저 폴더를 클릭하게 되면




위와같이 뜨게 된다.


root 에 smbpasswd를 걸었던것 기억하지?


사용자 이름은 root가 되고 암호는 아까 설정한 것들이 되는거지.


기존에 있는 Linux 패스워드와 전혀 달라.




접속된 모습.. !


현재 아무런 파일도 없어서 나타나지 않아.


이것으로 Samba Server와 Windows랑 연결하여 사용할 수 있어


궁금한 점이 있다면 댓글 달아줘~



4. 그 외 문제점 발생 시


Q. 접속 시 아이디/패스워드가 맞지 않습니다.


A. 아이디/패스워드가 맞지 않을 경우 smbpasswd -a <사용자 계정> 으로 다시 암호를 변경해보도록 해.



Q. 접속 자체가 되지 않습니다.


A. 방화벽 문제일 가능성이 커.


setup 명령어를 입력 후 Firewall configuration 에 들어가서  Disable를 시키거나 혹은 Samba Server만 가능하도록 해.


또한 다음 화면에서 설명할게.


[root@seob01 ~]# cat /etc/selinux/config


# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted


위에 빨간 부분이 보이지 ? 원래면 enforcing 인데 이것을 disabled 로 변경 후 재부팅을 해야해



Q. 인증이 이상하게 됩니다.


A. 처음 말한 workgroup = 부분있지 ?


이 부분을 Windows와 일치시켜줘야해. 만약 시키지 않으면 다른 문제점이 발생할 수 있으니 꼭 일치 시켜주고.


smb service를 재시작, 리로드해주길 바래.



Q. 처음 유저/패스워드를 입력 후 접속에 성공했습니다. 근데 또 다시 들어가려하니 입력창이 뜨지 않습니다.


A. 처음 입력한 것이 기억되어있어서 저장되었기 때문이야.


제일 간단한 방법은 재부팅하는 것이고, 다른 방법은 명령어로 저장된 기록을 날리는 것이지.




net use 를 입력하면 현재 192.168.75.4에 기록한 것이 저장되어있어. 이럴 경우 다시 접속할 때 아이디/패스워드를 묻지 않아.


다음과 같은 명령어로 삭제해줘야해




이렇게 기록을 삭제하고 재접속 시 인증을 받게 나오도록 됨

저작자 표시 비영리 변경 금지
신고


티스토리 툴바