Tuesday, April 17, 2018

CentOS 7.3 리눅스 네트워크 ] 12.1 삼바 (Samba) - 서버 간단 구성


안녕하세요. 썬구루입니다. 이 게시물에서는 CentOS 7.3 리눅스 기반 Samba 서버 설치 및 구성 방법에 대해 알아보도록 하겠습니다.

리눅스/유닉스 시스템 간 파일 공유를 하기 위해 NFS 서비스 즉 네트워크 파일시스템을 사용합니다. 만약 리눅스와 윈도우 시스템 간에 파일 공유를 하려 한다면 어떻게 하면 될까요?

Samba 서비스를 사용하면 윈도우 운영체제 자원을 즉 프린터나 파일을 리눅스/유닉스에게 공유할 수 있고 역으로도 가능합니다.

그런데 Samba가 많이 사용되느냐?

보통 리눅스 책을 보면 많이 사용한다고 되어 있는데 일단 사용하는 곳은 사용하고 사용하지 않는 곳은 사용하지 않습니다. 그리고 15년 동안 IT 바닥에서 일하면서 Samba를 구성해준 적은 단 한 번도 없었습니다. 왜냐하면 저가 방문하였던 고객사들은 네트워크 프린터를 사용했었고 지금도 그렇게 사용하고 있습니다. 그리고 방문한 고객사에서 사무용 컴퓨터 운영체제로 윈도우 운영체제를 거의 100% 사용하고 있습니다.

고객사에는 Samba를 사용하지 않더라도 업무파일 공유를 위한 시스템은 모두 갖춰져 있고 유닉스는 유닉스끼리 리눅스는 리눅스끼리 NFS 파일시스템을 사용하거나 공유 파일시스템을 사용합니다. 그리고 해킹 예방 차원에서 시스템 및 네트워크 보안을 위해 웬만하면 공유에 관련된 것은 최소화하려 하고 있습니다. 그렇다고 저가 국내 모든 고객사에 방문한 것은 아니니 속속들이 모든 환경은 알 수는 없습니다. 세상은 넓고 할 일은 많고 저라는 개인의 단편적인 시각으로 세상을 보는 것이니 Samba를 사용하여 운영하는 곳도 많이 있을 것이라 생각됩니다.

이 게시물에서 CentOS 7.3 리눅스에 Samba 서버를 설치하고 구성하여 윈도우 8.1과 파일 공유하는 방법에 대해 알아보도록 하겠습니다.

■ Samba(삼바)는?

Samba는 SMB(Server Message Block)과 CIFS(Common Internet File System) 프로토콜을 사용하여 네트워크에 연결된 윈도우, 리눅스 및 유닉스 시스템 간 파일과 프린터 공유를 할 수 있도록 해주는 서비스입니다. 이것은 Andrew Tridgell에 의해 처음 개발되었고 과거에는 SMB 프로토콜만 사용했으나 지금은 CIFS도 같이 지원하고 있습니다.

Samba에 대한 특징은 다음과 같다.

▶ 윈도우, 리눅스, 유닉스 클라이언트에 파일 및 프린터 공유 가능
▶ 네트워크 검색 지원 (NetBIOS도 가능)
▶ WINS(Windows Internet Name Service) 이름 풀이 지원
▶ Windows Server AD(Active Directory)와 연동 가능
▶ 오픈 소스(Open Source) 프로그램

이 게시물에서 CentOS 7.3 리눅스에 Samba 서버를 설치하고 구성하여 윈도우 8.1과 파일 공유하는 방법에 대해 알아볼 것입니다.


■ CentOS 7.3 리눅스 Samba

1). Samba 서버 패키지 설치

CentOS 7.3을 Samba 서버로 구성하기 위해서 관련된 samba-4.4.4-9.el7.x86_64.rpm 패키지가 설치되어 있어야 합니다. 템플릿으로 사용하는 가상머신을 복제하여 Samba 가상머신을 생성합니다. 그리고 eth0(또는 ens32) NIC에 위 그림과 같이 IP 주소를 설정한 후 CentOS 7.3 DVD ISO 파일을 가상머신에 연결하여  아래와 같이 samba-4.4.4-9.el7.x86_64.rpm 패키지를 설치합니다.

서버 IP 주소
관련 서비스
서비스 포트 (Port) 주소
192.168.80.13
Samba
137, 138, 139, 445, 901
192.168.80.13
Windows 8.x IE
-

[root@samba01 ~]# vi /etc/hosts
[root@samba01 ~]#
[root@samba01 ~]# more /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.13 samba01

[root@samba01 ~]#
[root@samba01 ~]# cd /etc/yum.repos.d/
[root@samba01 yum.repos.d]#
[root@samba01 yum.repos.d]# vi CentOS-Media.repo

# CentOS-Media.repo
#
#  This repo can be used with mounted DVD media, verify the mount point for
#  CentOS-7.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c7-media [command]
#
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c7-media [command]

[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///run/media/root/CentOS\ 7\ x86_64/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[root@samba01 yum.repos.d]#
[root@samba01 yum.repos.d]# df -h | grep sr0

/dev/sr0             7.8G  7.8G     0 100% /run/media/root/CentOS 7 x86_64

[root@samba01 yum.repos.d]#
[root@samba01 yum.repos.d]# yum --disablerepo=\* --enablerepo=c7-media -y install samba

Loaded plugins: fastestmirror, langpacks
file:///media/CentOS/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /media/CentOS/repodata/repomd.xml"
Trying other mirror.
file:///media/cdrom/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /media/cdrom/repodata/repomd.xml"
Trying other mirror.
c7-media                                                                         | 3.6 kB  00:00:00
c7-media/group_gz              FAILED                                 
file:///media/CentOS/repodata/c55e5b7bbe933fa8dac2cffca4596c265812b74ed12ef3968d487dd6eb22ad93-c7-x86_64-comps.xml.gz: [Errno 14] curl#37 - "Couldn't open file /media/CentOS/repodata/c55e5b7bbe933fa8dac2cffca4596c265812b74ed12ef3968d487dd6eb22ad93-c7-x86_64-comps.xml.gz"
Trying other mirror.
(1/2): c7-media/group_gz                                                         | 155 kB  00:00:00
c7-media/primary_db            FAILED                                 
file:///media/cdrom/repodata/bd50ff3d861cc21d254a390a963e9f0fd7b7b96ed9d31ece2f2b1997aa3a056f-primary.sqlite.bz2: [Errno 14] curl#37 - "Couldn't open file /media/cdrom/repodata/bd50ff3d861cc21d254a390a963e9f0fd7b7b96ed9d31ece2f2b1997aa3a056f-primary.sqlite.bz2"
Trying other mirror.
(2/2): c7-media/primary_db                                                       | 5.6 MB  00:00:00
Determining fastest mirrors
 * c7-media:
Resolving Dependencies
--> Running transaction check
---> Package samba.x86_64 0:4.4.4-9.el7 will be installed
--> Processing Dependency: samba-libs = 4.4.4-9.el7 for package: samba-4.4.4-9.el7.x86_64
--> Processing Dependency: samba-common-tools = 4.4.4-9.el7 for package: samba-4.4.4-9.el7.x86_64
--> Processing Dependency: samba-common-libs = 4.4.4-9.el7 for package: samba-4.4.4-9.el7.x86_64
--> Processing Dependency: libxattr-tdb-samba4.so(SAMBA_4.4.4)(64bit) for package: samba-4.4.4-9.el7.x86_64
--> Processing Dependency: libpopt-samba3-samba4.so(SAMBA_4.4.4)(64bit) for package: samba-4.4.4-9.el7.x86_64
--> Processing Dependency: libxattr-tdb-samba4.so()(64bit) for package: samba-4.4.4-9.el7.x86_64
--> Processing Dependency: libpopt-samba3-samba4.so()(64bit) for package: samba-4.4.4-9.el7.x86_64
--> Running transaction check
---> Package samba-common-libs.x86_64 0:4.4.4-9.el7 will be installed
---> Package samba-common-tools.x86_64 0:4.4.4-9.el7 will be installed
---> Package samba-libs.x86_64 0:4.4.4-9.el7 will be installed
--> Processing Dependency: libpytalloc-util.so.2(PYTALLOC_UTIL_2.1.6)(64bit) for package: samba-libs-4.4.4-9.el7.x86_64
--> Processing Dependency: libpytalloc-util.so.2(PYTALLOC_UTIL_2.0.6)(64bit) for package: samba-libs-4.4.4-9.el7.x86_64
--> Processing Dependency: libpytalloc-util.so.2()(64bit) for package: samba-libs-4.4.4-9.el7.x86_64
--> Running transaction check
---> Package pytalloc.x86_64 0:2.1.6-1.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package                        Arch               Version                   Repository            Size
========================================================================================================
Installing:
 samba                          x86_64             4.4.4-9.el7               c7-media             609 k
Installing for dependencies:
 pytalloc                       x86_64             2.1.6-1.el7               c7-media              15 k
 samba-common-libs              x86_64             4.4.4-9.el7               c7-media             160 k
 samba-common-tools             x86_64             4.4.4-9.el7               c7-media             450 k
 samba-libs                     x86_64             4.4.4-9.el7               c7-media             260 k

Transaction Summary
========================================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 1.5 M
Installed size: 3.9 M
Downloading packages:
warning: /run/media/root/CentOS 7 x86_64/Packages/pytalloc-2.1.6-1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Public key for pytalloc-2.1.6-1.el7.x86_64.rpm is not installed
--------------------------------------------------------------------------------------------------------
Total                                                                   2.3 MB/s | 1.5 MB  00:00:00
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
 Userid     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 Package    : centos-release-7-3.1611.el7.centos.x86_64 (@anaconda)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : samba-common-libs-4.4.4-9.el7.x86_64                                                 1/5
  Installing : pytalloc-2.1.6-1.el7.x86_64                                                          2/5
  Installing : samba-libs-4.4.4-9.el7.x86_64                                                        3/5
  Installing : samba-common-tools-4.4.4-9.el7.x86_64                                                4/5
  Installing : samba-4.4.4-9.el7.x86_64                                                             5/5
  Verifying  : samba-common-libs-4.4.4-9.el7.x86_64                                                 1/5
  Verifying  : pytalloc-2.1.6-1.el7.x86_64                                                          2/5
  Verifying  : samba-common-tools-4.4.4-9.el7.x86_64                                                3/5
  Verifying  : samba-libs-4.4.4-9.el7.x86_64                                                        4/5
  Verifying  : samba-4.4.4-9.el7.x86_64                                                             5/5

Installed:
  samba.x86_64 0:4.4.4-9.el7                                                                   

Dependency Installed:
  pytalloc.x86_64 0:2.1.6-1.el7                       samba-common-libs.x86_64 0:4.4.4-9.el7   
  samba-common-tools.x86_64 0:4.4.4-9.el7             samba-libs.x86_64 0:4.4.4-9.el7         

Complete!

[root@samba01 yum.repos.d]#
[root@samba01 yum.repos.d]# firewall-cmd --permanent --add-service=samba
success
[root@samba01 yum.repos.d]# firewall-cmd --reload
success
[root@samba01 yum.repos.d]#
[root@samba01 private]# systemctl enable smb

Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.

[root@samba01 private]#
[root@samba01 private]# systemctl start smb
[root@samba01 private]# systemctl stop smb

2). Samba 서비스 시작 종료

systemctl [ start | stop ] samba

3). 시스템 부팅시 HTTPD 서비스 자동 시작

systemctl [ enable | disable ] samba




■ CentOS 7.3 리눅스 Samba 구성 파일 

CentOS 7.3 리눅스에 samba 패키지를 설치하면 /etc/samba 디렉터리에 smb.conf Samba 구성 파일이 생성되어 있습니다. 여기에 설정되는 내용들을 간략하게 정리하면 아래와 같습니다.

구성 정보
내 용
workgroup
 윈도우 작업 그룹
hosts allow
 삼바 서버에 접속을 허용할 컴퓨터 IP 주소 또는 네트워크 주소
security
 보안 옵션 ( user : 사용자 단위 보안, share : 공유)
comment
 주석, 설명 
path
 공유 디렉터리 경로 
public
 다른 사용자도 사용 가능 ( 공용 가능. 값은 yes or no) 
writable
 읽기, 쓰기 가능 (값은 yes or no)
browseable
 공유 디렉터리를 보여줌 (값은 yes or no)
read only
 읽기만 가능 (값은 yes or no) 

■ CentOS 7.3 리눅스 Samba 서버 테스트

1). Windows 8.1 90일 평가판 다운로드

▶ Windows 8.1 다운로드 사이트

https://www.microsoft.com/ko-kr/evalcenter/evaluate-windows-8-1-enterprise

2). samba01 가상머신에 samba  구성

▶ /etc/samba/smb.conf 구성 파일 수정

[root@samba01 yum.repos.d]# cd /etc/samba/
[root@samba01 samba]# ls

lmhosts  smb.conf  smb.conf.example

[root@samba01 samba]# mv smb.conf smb.conf.old
[root@samba01 samba]#
[root@samba01 samba]# vi smb.conf

[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
netbios name = SAMBA01
log file = /var/log/samba/log.%m
max log size = 50
security = user
passdb backend = tdbsam

[smb01]
comment = sambafolder
path = /smb01
browseable = yes
writable = yes
printable = no

[root@samba01 samba]# 

▶ 공유 디렉터리 생성, samba 서비스 시작 및 samba 사용자 계정 설정

[root@samba01 samba]# mkdir /smb01
[root@samba01 samba]# groupadd group1
[root@samba01 samba]# useradd -g group1 -s /sbin/nologin -M user1
[root@samba01 samba]#
[root@samba01 samba]# ls -l /var/lib/samba/private/passdb.tdb

-rw-------. 1 root root 421888 Feb  4 21:09 /var/lib/samba/private/passdb.tdb

[root@samba01 samba]#
[root@samba01 samba]# file /var/lib/samba/private/passdb.tdb

/var/lib/samba/private/passdb.tdb: TDB database version 6, little-endian hash size 131 bytes

[root@samba01 samba]# strings /var/lib/samba/private/passdb.tdb | grep user1
[root@samba01 samba]#
[root@samba01 samba]# smbpasswd -a user1

New SMB password:
Retype new SMB password:
Added user user1.

[root@samba01 samba]# strings /var/lib/samba/private/passdb.tdb | grep user1

user1
&USER_user1
user1
user1
&USER_user1
user1

[root@samba01 samba]# mkdir /smb01/user1
[root@samba01 samba]# chown user1:group1 /smb01/user1/
[root@samba01 samba]# ls -ld /smb01/user1/

drwxr-xr-x. 2 user1 group1 6 Feb  4 21:12 /smb01/user1/

[root@samba01 samba]# chmod 700 /smb01/user1/
[root@samba01 samba]#
[root@samba01 samba]# systemctl start smb
[root@samba01 samba]#
[root@samba01 samba]# chcon -Rt samba_share_t /smb01/
[root@samba01 samba]#
[root@samba01 samba]# systemctl status smb

● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-02-04 21:13:33 EST; 8s ago
 Main PID: 3792 (smbd)
   Status: "smbd: ready to serve connections..."
   CGroup: /system.slice/smb.service
           ├─3792 /usr/sbin/smbd
           ├─3793 /usr/sbin/smbd
           ├─3794 /usr/sbin/smbd
           └─3795 /usr/sbin/smbd

Feb 04 21:13:32 samba01 systemd[1]: Starting Samba SMB Daemon...
Feb 04 21:13:33 samba01 smbd[3792]: [2017/02/04 21:13:33.041815,  0] ../lib...y)
Feb 04 21:13:33 samba01 systemd[1]: Started Samba SMB Daemon.
Feb 04 21:13:33 samba01 smbd[3792]:   STATUS=daemon 'smbd' finished startin...ns
Hint: Some lines were ellipsized, use -l to show in full.

[root@samba01 samba]#




3). samba  접속 테스트

▶ Windows 8.1 에서 samba 접속 테스트

탐색기를 열어 주소창에 \\192.168.80.13를 입력합니다. 그러면 아래와 같이 계정/암호 입력 창이 나타납니다.


user1 계정명과 smbpasswd 명령을 사용하여 정의한 암호를 입력한 후 확인 버튼을 눌러 로그인합니다. 그러면 공유 디렉터리가 나타나고 그 디렉터리 안으로 들어가면 user1 디렉터리가 나타납니다.


user1 디렉터리에서 새 폴더를 생성 시도하여 파일이 생성되는지 확인합니다.



▶ Windows 8.1에서 user2 계정으로 samba 접속 시도

CentOS 7.3 리눅스에서 아래와 같이 /smb01/user1 디렉터리에 생성된 디렉터리(폴더)를 확인한 후 user2 계정을 생성합니다.

[root@samba01 samba]# useradd -g group1 -s /sbin/nologin -M user2
[root@samba01 samba]#
[root@samba01 samba]# smbpasswd -a user2

New SMB password:
Retype new SMB password:
Added user user2.

[root@samba01 samba]#

그리고 Windows 8.1 가상머신에서 탐색기를 닫고 명령창(cmd)을 열어 아래와 같은 명령을 실행하여 samba 연결을 끊습니다.

 C:\> net use \\192.168.80.41\smb01  /delete


만약 위 명령을 실행해도 연결정보가 남아있다면 Windows 8.1 로그아웃/로그인을 하길 바랍니다. 로그아웃/로그인이 가장 깔끔합니다.



로그인 후 다시 samba 공유 디렉터리에 접근하려 하면 아래와 같이 계정/암호를 넣는 창이 나타납니다. 이때 새로 만든 user2 계정으로 접속합니다.


접속 후 smb01/user1 디렉터리(폴더)로 들어가려 하면 경로 이동이 되지 않을 것입니다. 이는 user1 디렉터리 소유자는 user1 계정으로 설정되어 있으며 접속 권한은 700 즉 rwx------로 설정했기 때문에 user1 계정만이 이 디렉터리(폴더)로 경로 이동을 할 수 있습니다.


4). Samba 계정 삭제

Sabmba를 사용할 수 있도록 설정된 계정을 삭제하기 위해 아래와 같은 명령을 사용할 수 있습니다.

[root@samba01 samba]# pdbedit -x -u user1
[root@samba01 samba]#
[root@samba01 samba]# strings /var/lib/samba/private/passdb.tdb | grep usre1
[root@samba01 samba]# 

5). Samba 서비스 상태 확인


[root@samba01 samba]# smbstatus

Samba version 4.4.4
PID     Username     Group        Machine                                   Protocol Version  Encryption           Signing       
----------------------------------------------------------------------------------------------------------------------------------------
4817    user1        group1       192.168.80.101 (ipv4:192.168.80.101:49221) SMB3_00           -                    partial(HMAC-SHA256)

Service      pid     Machine       Connected at                     Encryption   Signing
---------------------------------------------------------------------------------------------
IPC$         4817    192.168.80.101 Sat Feb  4 10:09:11 PM 2017 EST  -            -   
smb01        4817    192.168.80.101 Sat Feb  4 10:09:13 PM 2017 EST  -            -   

Locked files:
Pid          Uid        DenyMode   Access      R/W        Oplock           SharePath   Name   Time
--------------------------------------------------------------------------------------------------
4817         1001       DENY_NONE  0x100081    RDONLY     NONE             /smb01   .   Sat Feb  4 22:09:12 2017
4817         1001       DENY_NONE  0x100081    RDONLY     NONE             /smb01   .   Sat Feb  4 22:09:12 2017

[root@samba01 samba]# 

여기까지 Samba(삼바) 서버 간단 구성에 대해 알아보았습니다.



No comments:

Post a Comment