리눅스/CentOS7

CentOS7 - Windows File Server(Samba) 구축하기(7/10)

일편나루 2019. 5. 25. 12:39
반응형

목차 (INDEX)

     

    개요

    리눅스 서버를 윈도즈용 파일서버로 설정하기 위해서 Samba를 도입하여 아래의 폴더를 생성합니다.

    • 유저 전용 폴더
    • 모든 유저가 읽기 쓰기 가능한 폴더
    • 특정 유저만 읽기 쓰기 가능한 폴더
    • 특정 그룹만 읽기 쓰기 가능한 폴더
    • 특정 유저 이외 참조 전용 폴더

    구축 환경

    • PC : Macbook Pro
    • 서버 : CentOS 7
    • User 계정: naru, naru1, naru2
    • Group: centos
    • Server Name : centos7
    • 참고사이트 : https://centossrv.com/samba.shtml 

    준비

    CentOS 7 서버에 접속합니다.

    ■ ssh의 기본 포트는 22/tcp이지만 보안상 포트번호를 임의의 번호(1999/tcp)로 변경해서 사용합니다.

    ※포트번호를 변경하는 방법은 CentOS7 - 초기설정/보안설정 (2/10) 에서 확인할 수 있습니다.

    ※ CentOS를 아직 설치하지 않았다면 이곳을 참고합니다 >> CentOS7 - OS설치하기 (1/10)

    try🐶everything ~$ ssh naru@centos7 -p1999
    naru@centos7's password:
    Last login: Tue May 7 11:03:27 2019 from 10.x.1.x

    ■ sudo를 사용하여 root 권한을 획득합니다.

    [naru@centos7 ~]$ sudo su -
    [sudo] naru's password:
    Last login: 2019/05/07 (火) 10:47:55 JST日時 pts/0
    [root@centos7 ~]#

    Samba 설치하기

    [root@centos7 ~]# yum -y install samba

    ■ 설치된 samba버전을 확인합니다

    [root@centos7~]# yum list installed | grep samba
    samba.x86_644.8.3-4.el7@base
    samba-client-libs.x86_644.8.3-4.el7@base
    samba-common.noarch4.8.3-4.el7@base
    samba-common-libs.x86_644.8.3-4.el7@base
    samba-common-tools.x86_644.8.3-4.el7@base
    samba-libs.x86_644.8.3-4.el7@base

    Samba 설정하기

    ■ Samba서버에 접근할 유저를 설정하는 방법은 두 가지입니다.

    • 리눅스 유저를 신규로 생성 후 설정하는 방법
    • 기존 유저를 Samba서버에 접근할 유저로 설정하는 방법

    리눅스 유저를 신규로 생성 후 설정하는 방법

    ■ 신규로 생성된 유저는 pdbedit -a 명령으로 samba 서버에 접근할 유저로 등록해야 합니다.

    [root@centos7 ~]# useradd naru
    [root@centos7 ~]# passwd naru
    Changing password for user naru.
    New password:    ←   패스워드 입력
    Retype new password: ←   패스워드 입력(확인)
    passwd: all authentication tokens updated successfully.

    기존 유저를 Samba서버에 접근할 유저로 설정하는 방법

    [root@centos7 ~]# pdbedit -a naru
    new password:         ←   패스워드 입력
    retype new password:      ←    패스워드 입력(확인)
    Unix username: naru
    NT username:
    Account Flags: [U ]
    User SID: S-1-5-21-1273093702-2967678695-2170325751-1004
    Primary Group SID: S-1-5-21-1273093702-2967678695-2170325751-513
    Full Name:
    Home Directory: \centos7\naru
    HomeDir Drive:
    Logon Script:
    Profile Path: \centos7\naru\profile
    Domain: LINUX
    Account desc:
    Workstations:
    Munged dial:
    Logon time: 0
    Logoff time: Thu, 07 Feb 2036 00:06:39 JST
    Kickoff time: Thu, 07 Feb 2036 00:06:39 JST
    Password last set: Wed, 08 May 2019 19:31:44 JST
    Password can change: Wed, 08 May 2019 19:31:44 JST
    Password must change: never
    Last bad password : 0
    Bad password count : 0
    Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    [root@centos7 ~]#

    홈 디렉터리를 작성

    ■ 신규 유저용

    [root@centos7 ~]# mkdir /etc/skel/samba

    ■ 기존 유저 처리
    [root@centos7 ~]# vi mkhomedir.sh 

    #!/bin/bash
    
    for user in ls /home
    do
    id $user > /dev/null 2>&1
    [ $? -eq 0 ] && 
    [ ! -d /home/$user/samba ] && 
    mkdir /home/$user/samba && 
    chown $user:$user /home/$user/samba && 
    echo "/home/$user/samba create"
    done
    
    

    공유 디렉터리 생성

    [root@centos7 ~]# mkdir /home/samba     ← 모든 유저가 풀 액세스 가능한 공유 디렉터리를 작성
    [root@centos7 ~]# chown nobody:nobody /home/samba     ← 공유 디렉터리의 소유자를 nobody로 변경

    Samba 설정 파일 편집

    ■ samba설정 파일을 열고 Global Settings를 수정합니다.
    [root@centos7 ~]# vi /etc/samba/smb.conf

    [global]
    unix charset = UTF-8     ← 추가 (리눅스 측 문자코드)
    dos charset = CP932      ← 추가 (Windows 측 문자코드)
    mangled names = no     ← 추가 (긴 파일명이 깨지는 것을 방지)
    vfs objects = catia        ← 추가(위의 처리로 인해서 파일 액세스가 안 되는 일부 문자를 치환)
    catia:mappings = 0x22:0xa8,0x2a:0xa4,0x2f:0xf8,0x3a:0xf7,0x3c:0xab,0x3e:0xbb,0x3f:0xbf,0x5c:0xff,0x7c:0xa6 ← 추가(위의 처리로 인해서 파일 액세스가 안 되는 일부 문자를 치환)
    workgroup = MYGROUP
    hosts allow = 192.168.1. 127.    ← 추가 (자신의 로컬 IP대역을 추가합니다.)

     

    ■ Samba에서 프린터를 공유하지 않는 경우
    ;load printers = yes      ← 줄 맨 앞에 ;을 추가(프린터 공유 무효화)
    load printers = no    ← 추가 (프린터 공유 무효화)
    disable spoolss = yes ← 추가(프린터 공유 무효화)

    [homes]
    comment = Home Directories
    path = %H/samba ← 추가 (/home/유저명/samba를 홈 디렉터리로 설정)
    browseable = no
    writable = yes

     

    ■ 각 유저 전용의 휴지통 기능 추가하기
    ※ 파일 삭제 시에 자동적으로 휴지통에 이동되도록 설정하기
    vfs objects = recycle  ← 휴지통 유효화
    recycle:repository = .recycle ← 휴지통의 디렉토리명(/home/유저명/. recycle)
    recycle:keeptree = no  ← 휴지통에 이동할 때 디렉터리 구조를 유지하지 않기
    recycle:versions = yes  ← 같은 이름의 파일이 휴지통에 있을 경우 다른 이름으로 변경하여 이동
    recycle:touch = no  ← 휴지통에 이동할 때 타임스탬프를 갱신하지 않기
    recycle:maxsize = 0  ← 휴지통에 이동하는 파일의 사이즈 상한 (0:무제한)
    recycle:exclude = .tmp ~$  ← 여기에 지정한 파일은 휴지통으로 이동하지 않고 즉시 삭제

     

    ■ 아래의 내용을 파일의 맨 마지막 부분에 추가합니다
    [public]
    comment = Public Stuff
    path = /home/samba
    public = yes
    writable = yes
    only guest = yes

     

    ■ 공유 디렉터리의 휴지통 기능을 추가
    ※ 파일을 삭제할 때, 자동적으로 휴지통으로 이동하도록 설정하기

    vfs objects = recycle  ← 휴지통 유효화
    recycle:repository = .recycle ← 휴지통의 디렉토리명(/home/유저명/.recycle)
    recycle:keeptree = no  ← 휴지통에 이동할 때 디렉터리 구조를 유지하지 않기
    recycle:versions = yes  ← 같은 이름의 파일이 휴지통에 있을 경우 다른 이름으로 변경하여 이동
    recycle:touch = no  ← 휴지통에 이동할 때 타임스탬프를 갱신하지 않기
    recycle:maxsize = 0  ← 휴지통에 이동하는 파일의 사이즈 상한 (0:무제한)
    recycle:exclude = .tmp ~$  ← 여기에 지정한 파일은 휴지통으로 이동하지 않고 즉시 삭제


     

    설정 파일까지 완료해주면 기본 설정은 완료됩니다.

    서버를 기동 해주고 상태를 확인해서 문제가 없으면 몇 가지 추가적인 설정을 합니다.

     

    반응형

    Samba 서버 기동 하기

    [root@centos7 ~]# systemctl start smb  ← Samba 기동
    [root@centos7 ~]# systemctl start nmb  ← nmb 기동
    [root@centos7 ~]# systemctl enable smb ← Samba 자동기동 설정
    [root@centos7 ~]# systemctl enable nmb ← nmb 자동기동 설정

    Samba status 확인하기

    Samba SMB Daemon 확인하기

    [root@centos7~]# systemctl status smb
    ● smb.service - Samba SMB Daemon
    Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
    Active: active (running) since Wed 2019-05-08 17:33:34 JST; 9s ago
    Docs: man:smbd(8)
    man:samba(7)
    man:smb.conf(5)
    Main PID: 29918 (smbd)
    Status: "smbd: ready to serve connections..."
    CGroup: /system.slice/smb.service
    ├─29918 /usr/sbin/smbd --foreground --no-process-group
    ├─29920 /usr/sbin/smbd --foreground --no-process-group
    └─29921 /usr/sbin/smbd --foreground --no-process-group
    
    May 08 17:33:34 centos7systemd[1]: Starting Samba SMB Daemon
    
    ... 이하생략
    
    

    Samba NMB Daemon 확인하기

    [root@centos7~]# systemctl status nmb
    ● nmb.service - Samba NMB Daemon
    Loaded: loaded (/usr/lib/systemd/system/nmb.service; enabled; vendor preset: disabled)
    Active: active (running) since Wed 2019-05-08 17:33:27 JST; 20s ago
    Docs: man:nmbd(8)
    man:samba(7)
    man:smb.conf(5)
    Main PID: 29910 (nmbd)
    Status: "nmbd: ready to serve connections..."
    CGroup: /system.slice/nmb.service
    └─29910 /usr/sbin/nmbd --foreground --no-process-group
    
    May 08 17:33:27 centos7systemd[1]: Starting Samba NMB Daemon
    
    ... 이하생략

    현재의 Samba에의 접속상태를 확인하기

    [root@centos7 ~]# smbstatus
    Samba version 4.8.3
    PID Username Group Machine Protocol Version Encryption Signing
    Service pid Machine Connected at Encryption Signing
    No locked files

    smb.conf 파일 내부의 설정이 정확한지 검증해보기

    [root@centos7~]# testparm
    Load smb config files from /etc/samba/smb.conf
    rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
    Processing section "[homes]"
    Processing section "[printers]"
    Processing section "[public]"
    Loaded services file OK.
    Server role: ROLE_STANDALONE

    클라이언트에서 Samba 서버 접속 확인하기

    ■ 맥북

    finder를 실행한 후에 「command + k」 ⇒ 서버 접속을 위한 에서 ⇒ smb://호스트명 또는 smb://IP어드레스 를 입력 후 ⇒ 엔터
    자신의 폴더와 Samba공유폴더(public)가 표시되는지 확인해 봅니다.

     

    ■ Windows

    「시작」 ⇒ 「파일명을 지정해서 실행하기」(또는 Windows + R키) ⇒ 「이름」에 「\서버IP어드레스 (예:\192.168.1.30)」 또는 「\호스트명 (예:\centos7)」을 입력 후 「OK」 버튼 클릭, Samba공유폴더가 표시되는지 확인한다

    ※유저명과 패스워드는 pdbedit명령으로 작성했던 유저명과 패스워드를 입력합니다

    휴지통 내의 파일을 자동 삭제하기

    ■ 1주일 단위로 30일간 액세스가 없는 휴지통 내 파일을 자동으로 삭제하도록 설정합니다.

    [root@centos7 ~]# yum -y install tmpwatch     ← tmpwatch를 설치
    [root@centos7 ~]# yum list installed | grep tmpwatch
    tmpwatch.x86_64 2.11-5.el7 @base


    [root@centos7 ~]# vi /etc/cron.weekly/recyclewatch    ← 휴지통 내 파일을 자동 삭제하는 스크립트를 작성

    #!/bin/bash
    
    for user in ls /home/
    do
    if [ -d /home/$user/.recycle ]; then
    tmpwatch -f 720 /home/$user/.recycle/
    fi
    done

    [root@centos7 ~]# chmod +x /etc/cron.weekly/recyclewatch   ← 휴지통 내 파일 자동 삭제 스크립트에 실행 권한 부여

    특정 유저만 읽기 쓰기가 가능한 폴더 설정하기

    ■ 읽기 쓰기가 가능한 폴더에 접근할 계정을 설정합니다.
    ※ useradd로 시스템 유저를 생성한 후 아래의 명령을 실행

    [root@centos7 ~]# pdbedit -a naru1
    new password:
    retype new password:
    Unix username:naru1
    NT username:
    Account Flags:[U]
    User SID:S-1-5-21-1273093702-2967678695-2170325751-1002
    Primary Group SID:S-1-5-21-1273093702-2967678695-2170325751-513
    Full Name:
    Home Directory:\centos7\naru1
    HomeDir Drive:
    Logon Script:
    Profile Path:\centos7\naru1\profile
    Domain:LINUX
    Account desc:
    Workstations:
    Munged dial:
    Logon time:0
    Logoff time:Thu, 07 Feb 2036 00:06:39 JST
    Kickoff time:Thu, 07 Feb 2036 00:06:39 JST
    Password last set:Wed, 08 May 2019 18:25:07 JST
    Password can change:Wed, 08 May 2019 18:25:07 JST
    Password must change: never
    Last bad password: 0
    Bad password count: 0
    Logon hours: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    [root@centos7 ~]#
    
    
    
    [root@centos7 ~]# pdbedit -a naru2
    new password:
    retype new password:
    Unix username:naru2
    NT username:
    Account Flags:[U]
    User SID:S-1-5-21-1273093702-2967678695-2170325751-1003
    Primary Group SID:S-1-5-21-1273093702-2967678695-2170325751-513
    Full Name:
    Home Directory:\centos7\naru2
    HomeDir Drive:
    Logon Script:
    Profile Path:\centos7\naru2\profile
    Domain:LINUX
    Account desc:
    Workstations:
    Munged dial:
    Logon time:0
    Logoff time:Thu, 07 Feb 2036 00:06:39 JST
    Kickoff time:Thu, 07 Feb 2036 00:06:39 JST
    Password last set:Wed, 08 May 2019 18:25:21 JST
    Password can change:Wed, 08 May 2019 18:25:21 JST
    Password must change: never
    Last bad password: 0
    Bad password count: 0
    Logon hours: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    [root@centos7 ~]#


    [root@centos7 ~]# systemctl restart smb       ← Samba의 변경된 설정을 반영[root@centos7 ~]# mkdir /home/private1 ← 특정 유저만 읽기 쓰기 가능하게 할 디렉터리를 작성 (예: /home/private1)
    [root@centos7 ~]# chown nobody:nobody /home/private1   ← 특정 유저만 읽기 쓰기 가능한 디렉터리의 소유자를 nobody로 변경
    [root@centos7 ~]# vi /etc/samba/smb.conf  ← Samba설정 파일을 편집


    ■ 아래 내용을 파일 맨 끝에 추가해 줍니다
    [private1]
    comment = private1
    path = /home/private1     ← 특정 유저만 읽기 쓰기 가능하게 할 디렉터리를 지정
    public = yes
    writable = yes
    only guest = yes
    directory mask = 0700
    create mask = 0700
    valid users = naru1 naru2    ← 읽기 쓰기 가능한 유저를 지정

     

    ■ 위쪽의 클라이언트에서 Samba 서버 접속 확인하기 를 참고하여 아래의 내용을 확인해 봅니다.

    naru1、naru2 유저로 private1 폴더에 파일 작성이 가능한지?
    naru1、naru2 유저 이외는 private1 폴더에 접근이 불가능한지?

    특정 그룹만 읽기 쓰기가 가능한 폴더 설정하기

    ※ 읽기 쓰기 가능한 그룹에 소속시킬 유저 : naru1, naru2
    [root@centos7 ~]# mkdir /home/private2 ← 특정 그룹만 읽기 쓰기 가능한 디렉터리를 작성 (예:/home/private2)
    [root@centos7 ~]# chown nobody:nobody /home/private2 ← 특정 그룹만 읽기 쓰기 가능한 디렉터리의 소유자를 nobody로 변경
    [root@centos7 ~]# groupadd centos  ← 읽기 쓰기 가능한 그룹 생성(예: centos)
    [root@centos7 ~]# usermod -G centos naru1 ← 읽기 쓰기 가능한 유저(예:naru1)를 centos그룹에 등록
    [root@centos7 ~]# usermod -G centos naru2 ← 읽기쓰기가능한 유저(예:naru2)를 centos그룹에 등록
    [root@centos ~]# vi /etc/samba/smb.conf ← Samba 설정 파일 편집

     

    ■ 아래의 내용을 파일 맨 끝에 추가해 줍니다
    [private2]
    comment = private2
    path = /home/private2
    public = yes
    writable = yes
    only guest = yes
    directory mask = 0700
    create mask = 0700
    valid users = @centos   ← 읽기 쓰기 가능한 그룹을 지정
    [root@centos7 ~]# systemctl restart smb ← Samba설정을 반영

     

     위쪽의 클라이언트에서 Samba 서버 접속 확인하기 를 참고하여 아래의 내용을 확인해 봅니다.

    naru1、naru2 유저로 private2 폴더에 파일을 작성할 수 있는지
    naru1、naru2 유저 이외에는 private2 폴더에 접근이 불가능한지

    특정 유저 이외 참조 전용 폴더 작성하기

    ※ 참조 전용 폴더에 읽기 쓰기 가능한 유저 naru는 이미 등록된 것을 전제로 합니다 (처음에 생성했었죠!)
    [root@centos7 ~]# mkdir /home/share    ← 참조 전용 디렉터리 생성 (예:/home/share)
    [root@centos7 ~]# chown nobody:nobody /home/share   ← 참조 전용 디렉터리의 소유자를 nobody로 변경
    [root@centos7 ~]# vi /etc/samba/smb.conf    ← Samba설정 파일 변경

     

    ■ 아래의 내용을 파일 맨 끝에 추가합니다.
    [share]
    comment = share
    path = /home/share
    public = yes
    read only = yes
    directory mask = 0700
    only guest = yes
    create mask = 0700
    write list = naru   ← 쓰기 가능한 유저를 지정
    [root@centos7 ~]# systemctl restart smb   ← Samba설정을 반영

     

     위쪽의 클라이언트에서 Samba 서버 접속 확인하기 를 참고하여 아래의 내용을 확인해 봅니다.

    naru유저만 share폴더에 파일을 작성할 수 있는지
    naru유저 이외는 share폴더에 파일을 작성하지 못하고 참조만 가능한지

     

     

     

    이상, Samba구성을 마칩니다.

    다음에는 아파치 웹서버를 구축하고 설정해보겠습니다

     

     

    반응형