OSS Fan ~OSSでLinuxサーバ構築~

このエントリーをはてなブックマークに追加

Samba 4.2.3をCentOS 7.2にインストールしてファイルサーバとして設定

カテゴリ:OSSセットアップ | ソフトウェア:Samba | タグ:
最終更新日:2021/01/02 | 公開日:2016/04/01

目次

概要

 家庭内や企業内で利用することを想定したファイルサーバを構築します。 ソフトウェアにはCentOS 7.2に同梱されているSamba 4.2.3を利用します。 ファイルサーバとして準備する共有フォルダは以下の3種類とします。

  • 登録ユーザ向け共有フォルダ ・・・Sambaにアカウントを持つ人のみが読み書き可能
  • 全ユーザ向け共有フォルダ ・・・ファイルサーバと同じネットワーク上の人は誰でも読み書き可能
  • 個人向けホームディレクトリ ・・・Sambaにアカウントを持つ人でかつ、本人のみが読み書き可能

構成

サーバ構成

OSバージョン

CentOS 7.2.1511 x86_64

ソフトウェア・パッケージ一覧

  • samba-4.2.3-10.el7.x86_64.rpm
  • samba-common-4.2.3-10.el7.noarch.rpm
  • samba-common-libs-4.2.3-10.el7.x86_64.rpm
  • samba-common-tools-4.2.3-10.el7.x86_64.rpm
  • samba-libs-4.2.3-10.el7.x86_64.rpm
  • samba-client-libs-4.2.3-10.el7.x86_64.rpm
  • libwbclient-4.2.3-10.el7.x86_64.rpm
  • libtdb-1.3.6-2.el7.x86_64.rpm
  • libldb-1.1.20-1.el7.x86_64.rpm
  • pytalloc-2.1.2-1.el7.x86_64.rpm

クライアント構成

OSバージョン

Windows 7 Ultimate Service Pack 1 64bit

環境構築

インストール

 Sambaに必要なパッケージを依存パッケージ含めてインストールします。 DVDドライブにCentOS 7.2のインストールメディアを挿入した後に、下記コマンドを実行します。

# mount /dev/cdrom /media/cdrom
# cd /media/cdrom/Packages/
# rpm -ihv samba-4.2.3-10.el7.x86_64.rpm samba-common-4.2.3-10.el7.noarch.rpm \
> samba-common-libs-4.2.3-10.el7.x86_64.rpm samba-common-tools-4.2.3-10.el7.x86_64.rpm \
> samba-libs-4.2.3-10.el7.x86_64.rpm samba-client-libs-4.2.3-10.el7.x86_64.rpm \
> libwbclient-4.2.3-10.el7.x86_64.rpm libtdb-1.3.6-2.el7.x86_64.rpm \
> libldb-1.1.20-1.el7.x86_64.rpm pytalloc-2.1.2-1.el7.x86_64.rpm
警告: samba-4.2.3-10.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:libtdb-1.3.6-2.el7               ################################# [ 10%]
   2:libldb-1.1.20-1.el7              ################################# [ 20%]
   3:pytalloc-2.1.2-1.el7             ################################# [ 30%]
   4:samba-libs-0:4.2.3-10.el7        ################################# [ 40%]
   5:samba-common-tools-0:4.2.3-10.el7################################# [ 50%]
   6:samba-common-0:4.2.3-10.el7      ################################# [ 60%]
   7:libwbclient-0:4.2.3-10.el7       ################################# [ 70%]
   8:samba-client-libs-0:4.2.3-10.el7 ################################# [ 80%]
   9:samba-common-libs-0:4.2.3-10.el7 ################################# [ 90%]
  10:samba-0:4.2.3-10.el7             ################################# [100%]
# cd /
# umount /media/cdrom

設定

Linuxグループの作成

 個人ユーザ用のグループとして samba-grp を、共有のゲストユーザ用のグループとして guest01 を作成します。

# groupadd -g 10001 samba-grp ←個人ユーザ用グループ
# groupadd -g 11001 samba-gst ←ゲストユーザ用グループ
# tail -n 2 /etc/group
samba-grp:x:10001:
samba-gst:x:11001:

Linuxユーザの作成

 ファイルサーバへアクセスする際のユーザを作成します。 ここでは個人用ユーザとして user01 と user02 を作成し、共有のゲストユーザとして guest01 を作成します。 Linuxユーザは後で作成するSambaユーザとマッピングされて、ファイルを読み書きする際のパーミッション設定などで 使われるだけなので、パスワードは設定する必要ありません。

# useradd -u 10001 -g 10001 user01 ←個人ユーザ
# useradd -u 10002 -g 10001 user02 ←個人ユーザ
# useradd -u 11001 -g 11001 guest01 ←ゲストユーザ
# tail -n 3 /etc/passwd
user01:x:10001:10001::/home/user01:/bin/bash
user02:x:10002:10001::/home/user02:/bin/bash
guest01:x:11001:11001::/home/guest01:/bin/bash

ディレクトリの作成

 ファイルサーバとしてファイルを保存するためのディレクトリを作成します。 登録されたユーザが参照、保存可能な /data/samba-private ディレクトリと ゲストユーザ(全ユーザ)が参照、保存可能な /data/samba-public ディレクトリを作成します。 個人専用のホームディレクトリは、Linuxユーザ作成時に自動で作成される /home/ユーザ名 ディレクトリを利用しますので個別には作成しません。

# cd /
# mkdir -m 777 data
# cd /data/
# mkdir -m 775 samba-private ←登録ユーザ用共有フォルダ(ゲストユーザは不可)
# chgrp samba-grp samba-private
# mkdir -m 775 samba-pubic ←全ユーザ用共有フォルダ(ゲストユーザも可)
# chgrp samba-gst samba-public
# ls -ld samba-*
drwxrwxr-x 2 root samba-grp 26  3月 28 23:48 samba-private
drwxrwxr-x 2 root samba-gst  6  3月 30 23:22 samba-public

Sambaの設定ファイル作成

 Sambaの設定ファイルを作成します。 Sambaのパッケージをインストールすると設定ファイルが自動で生成されますが、 コメントや不要な設定が多くて可読性が悪いので、バックアップして新規に作成します。

# cd /etc/samba/
# mv smb.conf samba.conf.bk20160328 ←デフォルトの設定ファイルはバックアップしておく
# vi smb.conf ←ファイルを新規作成
ファイル名:/etc/samba/smb.conf
※以下の内容でファイルを新規作成※
[global]
  dos charset = CP932
  unix charset = UTF-8

  workgroup = WORKGROUP
  netbios name = SAMBA-SERVER

  map to guest = bad user
  guest account = guest01

  interfaces = 192.168.0.104 172.0.0.1
  bind interfaces only = yes
  socket address = 192.168.0.255

  printcap name = /dev/null

  log level = 1

[homes]
  browseable = no
  writeable = yes
  valid users = %S

[private]
  path = /data/samba-private

  hosts allow = 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.1
  write list = @samba-grp
  valid users = @samba-grp
  writeable = yes

  force group = samba-grp
  force create mode = 664
  force directory mode = 775

[public]
  path = /data/samba-public
  writeable = yes

  guest ok = yes
  guest only = yes

Sambaの設定ファイルチェック

 作成した設定ファイルに構文エラーがないかをチェックします。 testparm コマンドを実行すると、/etc/samba/smb.conf ファイルが自動でチェックされ、 問題があれば表示されます。

※以下では警告が1件表示されていますが、現状対応が分からないのでそのままにしてありますが、 動作上は問題ないように見えています。分かり次第修正します。

# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
WARNING: The "socket address" option is deprecated
Processing section "[homes]"
Processing section "[private]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions ←[Enter]キーを押す

# Global parameters
[global]
        dos charset = CP932
        netbios name = SAMBA-SERVER
        interfaces = 192.168.0.104 172.0.0.1
        bind interfaces only = Yes
        map to guest = Bad User
        guest account = guest01
        printcap name = /dev/null
        nbt client socket address = 192.168.0.255
        idmap config * : backend = tdb


[homes]
        valid users = %S
        read only = No
        browseable = No


[private]
        path = /data/samba-private
        valid users = @samba-grp
        write list = @samba-grp
        force group = samba-grp
        read only = No
        force create mode = 0664
        force directory mode = 0775
        hosts allow = 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.1


[public]
        path = /data/samba-public
        read only = No
        guest only = Yes
        guest ok = Yes

自動起動設定

 Sambaのサービスである smb と nmb を自動起動するように設定します。 前後でステータスを表示して設定が変わったことを確認します。

# systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
# systemctl status nmb
● nmb.service - Samba NMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/nmb.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
# systemctl enable smb ←smbを自動起動に設定する
Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service.
# systemctl enable nmb ←nmbを自動起動に設定する
Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
# systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled) ←enableになった
   Active: inactive (dead)
# systemctl status nmb
● nmb.service - Samba NMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/nmb.service; enabled; vendor preset: disabled) ←enableになった
   Active: inactive (dead)

Sambaデーモン起動

 一通り設定が終わったので、Samba(smbとnmbのサービス)を起動します。

# systemctl start smb ←smbを起動
# systemctl start nmb ←nmbを起動
# systemctl status smb
● smb.service - Samba SMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 2016-03-31 00:11:01 JST; 5s ago
 Main PID: 2989 (smbd)
   Status: "smbd: ready to serve connections..."
   CGroup: /system.slice/smb.service
           tq2989 /usr/sbin/smbd
           mq2991 /usr/sbin/smbd

 3月 31 00:11:01 rah81s1 systemd[1]: Starting Samba SMB Daemon...
 3月 31 00:11:01 rah81s1 systemd[1]: smb.service: Supervising process 2989 which is not our child. We'll most likely not notice ...t exits.
 3月 31 00:11:01 rah81s1 smbd[2989]: [2016/03/31 00:11:01.374114,  0] ../lib/util/become_daemon.c:124(daemon_ready)
 3月 31 00:11:01 rah81s1 smbd[2989]:   STATUS=daemon 'smbd' finished starting up and ready to serve connections
 3月 31 00:11:01 rah81s1 systemd[1]: Started Samba SMB Daemon.
Hint: Some lines were ellipsized, use -l to show in full.
# systemctl status nmb
● nmb.service - Samba NMB Daemon
   Loaded: loaded (/usr/lib/systemd/system/nmb.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 2016-03-31 00:11:11 JST; 11s ago
 Main PID: 3007 (nmbd)
   Status: "nmbd: ready to serve connections..."
   CGroup: /system.slice/nmb.service
           mq3007 /usr/sbin/nmbd

 3月 31 00:11:11 rah81s1 systemd[1]: Starting Samba NMB Daemon...
 3月 31 00:11:11 rah81s1 systemd[1]: nmb.service: Supervising process 3007 which is not our child. We'll most likely not notice ...t exits.
 3月 31 00:11:11 rah81s1 nmbd[3007]: [2016/03/31 00:11:11.731837,  0] ../lib/util/become_daemon.c:124(daemon_ready)
 3月 31 00:11:11 rah81s1 nmbd[3007]:   STATUS=daemon 'nmbd' finished starting up and ready to serve connections
 3月 31 00:11:11 rah81s1 systemd[1]: Started Samba NMB Daemon.
Hint: Some lines were ellipsized, use -l to show in full.

Sambaユーザ作成

 Sambaを起動したら、Sambaユーザを作成します。 Sambaユーザは先に作成したLinuxユーザと1対1に対応します。

# pdbedit -a user01
new password: ←設定するパスワードを入力する
retype new password: ←同じパスワードを再入力する
Unix username:        user01
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-2341606965-2465339000-2149555108-1001
Primary Group SID:    S-1-5-21-2341606965-2465339000-2149555108-513
Full Name:
Home Directory:       \\samba-server\user01
HomeDir Drive:
Logon Script:
Profile Path:         \\samba-server\user01\profile
Domain:               SAMBA-SERVER
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          木, 07  2月 2036 00:06:39 JST
Kickoff time:         木, 07  2月 2036 00:06:39 JST
Password last set:    月, 28  3月 2016 23:42:09 JST
Password can change:  月, 28  3月 2016 23:42:09 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# pdbedit -a user02
new password: ←設定するパスワードを入力する
retype new password: ←同じパスワードを再入力する
Unix username:        user02
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-2341606965-2465339000-2149555108-1002
Primary Group SID:    S-1-5-21-2341606965-2465339000-2149555108-513
Full Name:
Home Directory:       \\samba-server\user02
HomeDir Drive:
Logon Script:
Profile Path:         \\samba-server\user02\profile
Domain:               SAMBA-SERVER
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          木, 07  2月 2036 00:06:39 JST
Kickoff time:         木, 07  2月 2036 00:06:39 JST
Password last set:    月, 28  3月 2016 23:43:11 JST
Password can change:  月, 28  3月 2016 23:43:11 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# pdbedit -a guest01
new password: ←設定するパスワードを入力する
retype new password: ←同じパスワードを再入力する
Unix username:        guest01
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-2341606965-2465339000-2149555108-501
Primary Group SID:    S-1-5-21-2341606965-2465339000-2149555108-513
Full Name:
Home Directory:       \\samba-server\guest01
HomeDir Drive:
Logon Script:
Profile Path:         \\samba-server\guest01\profile
Domain:               SAMBA-SERVER
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          木, 07  2月 2036 00:06:39 JST
Kickoff time:         木, 07  2月 2036 00:06:39 JST
Password last set:    木, 31  3月 2016 00:14:50 JST
Password can change:  木, 31  3月 2016 00:14:50 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# pdbedit -Lw ←作成したSambaユーザを確認する
guest01:11001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U          ]:LCT-00000000:
user02:10002:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:813D0C2A213CB3D124926B8D9D38E00C:[U          ]:LCT-56F942FF:
user01:10001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:58A478135A93AC3BF058A5EA0E8FDB71:[U          ]:LCT-56F942C1:

動作テスト

Sambaプロセス確認

 Sambaのプロセスが起動していることを確認します。 サービス名は smb と nmb でしたが、プロセス名は smbd と nmbd となっています。

# ps -ef | grep smb
root      2542     1  0  3月31 ?      00:00:00 /usr/sbin/smbd
root      2544  2542  0  3月31 ?      00:00:00 /usr/sbin/smbd
root      2705  2542  0  3月31 ?      00:00:00 /usr/sbin/smbd
root      5856  2434  0 00:37 pts/0    00:00:00 grep --color=auto smb
# ps -ef | grep nmb
root      2551     1  0  3月31 ?      00:00:00 /usr/sbin/nmbd
root      5858  2434  0 00:37 pts/0    00:00:00 grep --color=auto nmb

Windowsからの接続確認

 構築したSambaサーバと同じサブネット上にあるWindowsパソコンから接続確認、ファイルの作成確認を行います。 Windows 7のネットワークを表示すると構築したSambaサーバが SMABA-SERVER という名前で表示されます。 弧の名前は smb.conf ファイルに設定したとおりの名前です。

 SAMBA-SERVERには2つの共有フォルダが存在しています。 全ユーザが利用できる public と、登録ユーザのみが利用できる private です。 この時点ではまだログインを行っていないので、個人フォルダは表示されていません。

 共有フォルダ public を開いて、試しにファイルを作成してみます。 問題なく作成できました。

 続いて共有フォルダ private を開いてみます。

 「Windowsセキュリティ」画面が表示されるので、先ほど作成したSambaユーザの user01 でログインします。

 ログインが成功すると、共有フォルダ private の中身が表示されますので、ファイルを作成してみます。 問題なく作成できました。

 SAMBA-SERVERに戻ると、先ほどは表示されていなかった user01 という共有フォルダが見えるようになっています。 これは user01 のホームディレクトリで、user01 ユーザからしか読み書きできません。 他のユーザには表示されませんし、パスを直接指定するとログイン画面が表示され、IDとパスワードの入力が求められます。

 user01 のホームディレクトリを開いて、試しにファイルを作成してみます。 問題なくファイルを作成できました。

Linuxでのファイル確認

 上記でWindows上から作成したファイルをLinux上から確認します。 登録ユーザ向けの private フォルダに作成されたファイルは、作成したユーザ user01 が所有者になっています。 全ユーザ向けの public フォルダに作成されたファイルは、ゲストユーザ guest01 が所有者になっています。 これは smb.conf ファイルで guest ony = yes を設定しているためです。 ホームディレクトリに作成されたファイルは、作成したユーザ user01 が所有者になっています。

# ls -l /data/samba-private/
合計 0
-rwxrw-r-- 1 user01 samba-grp 0  3月 31 19:24 user01のファイル.txt ←テストで作成したファイル
# ls -l /data/samba-public/
合計 0
-rwxr--r-- 1 guest01 samba-gst 0  3月 31 19:21 ゲストユーザのファイル.txt ←テストで作成したファイル
# ls -l /home/user01/
合計 0
-rwxr--r-- 1 user01 samba-grp 0  3月 31 19:25 user01のファイル2.txt ←テストで作成したファイル