[CentOS 6.X] Samba를 활용해보자 !
안녕 안녕 ?
오늘은 반말로 포스팅해볼게 ~
먼저 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에 기록한 것이 저장되어있어. 이럴 경우 다시 접속할 때 아이디/패스워드를 묻지 않아.
다음과 같은 명령어로 삭제해줘야해
이렇게 기록을 삭제하고 재접속 시 인증을 받게 나오도록 됨