71
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Sambaの環境構築手順

1 Sambaとは?

SambaはLinuxをWindowsのファイルサーバとして動作させるソフトウェアです。

2 環境

素振り用として、以下の環境を構築しました。
Windows10および、VMware Workstation 15 Player上の仮想マシン(1台)を使いました。
仮想マシン(CentOS7.6)がSambaサーバ、Windows10がSambaクライアントになります。

ネットワーク構成
+------------------- PC ----------------------+
|                                             |
|                                             |
|   Samba client              Samba server    |
|   +-----------+             +-----------+   |
|   |           |             |           |   |
|   | Windows10 |             | CentOS7.6 |   |
|   |           |             |           |   |
|   |           |             |           |   |
|   |           |             |    smbd   |   |
|   |           |             |    (445)  |   |
|   |           |             |           |   |
|   |           |             |           |   |
|   |           |             |           |   |
|   +-- eth0 ---+             +-- eth0 ---+   |
|     .3 |                          | .10     |
|        |                          |         |
|   +-------------------------------------+   |
|   |     VMware Workstation 15 Player    |   |
|   +-------------------------------------+   |
|        |                          |         |
|        |                          |         |
+---------------------------------------------+
                      |
                      |
                      |
------------------------------------------------ router ------- Internet
               192.168.3.0/24                     .1

仮想マシンの版数は、以下のとりです。

CentOS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
カーネル版数
[root@server ~]# uname -r
3.10.0-957.el7.x86_64

Sambaの版数を確認します。

Sambaの版数
[root@server ~]# smbd -V
Version 4.9.1

3 Sambaサーバの設定

3.1 Linuxシステムのユーザ登録

[root@server ~]# useradd user1

3.2 SELinuxの設定

本来は正しく設定するべきです。
現時点、設定方法がよくわからないので、SELinuxを無効にしました。
設定方法が判明次第、追記します。

SELinuxを無効にします。

SELinuxの無効
[root@server ~]# setenforce 0

SELinuxが無効になったことがわかります。

SELinuxの状態確認
[root@server ~]# getenforce
Permissive

3.3 パッケージのインストール

sambaパッケージをインストールします。

パッケージのインストール
[root@server ~]# yum -y install samba

パッケージ一覧を確認します。
私の環境では、下記パッケージがインストールされました。

パッケージの確認
[root@server ~]# rpm -qa|grep samba
samba-common-4.9.1-10.el7_7.noarch
samba-4.9.1-10.el7_7.x86_64
samba-common-libs-4.9.1-10.el7_7.x86_64
samba-libs-4.9.1-10.el7_7.x86_64
samba-client-libs-4.9.1-10.el7_7.x86_64
samba-common-tools-4.9.1-10.el7_7.x86_64
samba-client-4.9.1-10.el7_7.x86_64

3.4 ポート番号の開放

Sambaサーバへのアクセスを許可するため、TCPの445番ポートを開放します。
なお、firewall-cmdコマンドはここ(firewall-cmdコマンドの使い方)を参照してください。

ポート番号の開放
[root@server ~]# firewall-cmd --permanent --add-port=445/tcp
success
設定の反映
[root@server ~]# firewall-cmd --reload
success
ポート番号の確認
[root@server ~]# firewall-cmd --list-ports
445/tcp

3.5 設定ファイルの変更

デフォルトの設定から、以下のように設定内容を変更しました。
なお、smbdプロセス等の動作を指定する設定ファイル(/etc/sysconfig/samba)は
デフォルトのまま使用しました。

設定ファイルの内容
[root@server ~]# cat /etc/samba/smb.conf
-snip-
[global]
        workgroup = WORKGROUP
        security = user
        passdb backend = tdbsam
[homes]
        valid users = user1
        browseable = No
        read only = No

3.5.1 security

securityは、誰がユーザ認証を行うかを設定するパラメータです。

securityの設定値 意味 備考
user ユーザ名とパスワードでローカル認証を行う Sambaサーバ自身が認証を行う
share パスワードだけで認証を行う Sambaサーバ自身が認証を行う
domain ドメインコントローラにより認証を行う 自分以外のサーバが認証を行う

3.5.2 passdb backend

passdb backendは、パスワードを管理するデータベースを指定します。
下記の3種類あります。ここでは、tdbsamを使用しました。

passdb backendの設定値 意味 データベースの場所
tdbsam TDB(Trivial DataBase)を使用する パスワードは/var/lib/samba/private/passdb.tdbに保存されます
ldapsam LDAPを使用する LDAPサーバにユーザ情報を格納する
smbpasswd smbpasswdを使用する Samba2.2系で使用していた方式

3.6 Sambaユーザの登録

pdbeditコマンドを使って、Sambaユーザを登録します。
登録するSambaユーザは、Linuxシステムのユーザアカウントとして登録されている必要があります。

Sambaユーザの登録
[root@server ~]# pdbedit -a user1
new password:
retype new password:
Unix username:        user1
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-4247141089-2889840773-2200950340-1000
Primary Group SID:    S-1-5-21-4247141089-2889840773-2200950340-513
Full Name:
Home Directory:       \\server\user1
HomeDir Drive:
Logon Script:
Profile Path:         \\server\user1\profile
Domain:               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:    水, 22  4月 2020 14:02:15 JST
Password can change:  水, 22  4月 2020 14:02:15 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

登録したSambaユーザを確認します。

Sambaユーザの確認
[root@server ~]# pdbedit -L
user1:1006:

3.7 設定ファイルの構文チェック

設定ファイルの構文に誤りがないかどうか、testparmコマンドを使ってチェックします。

構文チェック結果
[root@server ~]# testparm
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        security = USER
        idmap config * : backend = tdb


[homes]
        browseable = No
        read only = No
        valid users = user1

3.8 Sambaサーバの起動

Sambaサーバを起動します。

サービスの起動
[root@server ~]# systemctl start smb.service

4 Sambaクライアントの設定

4.1 ワークグループの確認

Sambaサーバで、ワークグループ名をWORKGROUPと設定したので、
Sambaクライアントのワークグループ名もWORKGROUPであることを確認します。
samba1.png

4.2 Sambaサーバへのアクセス

赤枠の部分に\\192.168.3.10と入力します。
samba3.png

4.3 ユーザ、パスワードの入力

3.5 sambaユーザの登録で登録した、ユーザ名とパスワードを入力します。
samba2.png

5 Sambaの接続状況確認方法

5.1 サーバ側

smbstatusコマンドを実行すると、192.168.3.3(Windows10)からSambaサーバに
アクセスしていることがわかります。
また、そのアクセスは、PIDが21161のプロセスが処理していることがわかります。

接続の確認結果
[root@server ~]# smbstatus

Samba version 4.9.1
PID     Username     Group        Machine                                   Protocol Version  Encryption           Signing
----------------------------------------------------------------------------------------------------------------------------------------
21161   user1        user1        192.168.3.3 (ipv4:192.168.3.3:52722)      SMB3_11           -                    partial(AES-128-CMAC)

Service      pid     Machine       Connected at                     Encryption   Signing
---------------------------------------------------------------------------------------------
IPC$         21161   192.168.3.3   水  4月 22 19時57分24秒 2020 JST -            -

No locked files

psコマンドを使って、smbdプロセスを確認してみます。
PIDが21161のsmbdは、PIDが20392の子プロセスであることがわかります。
なお、psコマンドはここ(psコマンドの使い方)を参照してください。

psコマンドの実行結果
[root@server ~]# ps -C smbd -o comm,pid,ppid,args
COMMAND            PID   PPID COMMAND
smbd             20392      1 /usr/sbin/smbd --foreground --no-process-group
smbd             21161  20392 /usr/sbin/smbd --foreground --no-process-group

次に、lsofコマンドを使って、smbdプロセスを確認してみます。
445番ポートでListenしているsmbdプロセスが子プロセスを生成していることがわかります。
つまり、Sambaサーバは、子プロセスにSambaクライアントの処理を行わせていることがわかります。
なお、lsofコマンドはここ(lsofコマンドの使い方)を参照してください。

lsofコマンドの実行結果
[root@server ~]# lsof -i:445 -a -P
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
smbd    20392 root   34u  IPv6  74947      0t0  TCP *:445 (LISTEN)
smbd    20392 root   36u  IPv4  74949      0t0  TCP *:445 (LISTEN)
smbd    21161 root   40u  IPv4  77746      0t0  TCP server:445->192.168.3.3:52722 (ESTABLISHED)

5.2 クライアント側

クライアント側でSambaの接続状況を確認してみます。
WindowsでPowerShellを起動します。PowerShellでGet-SmbConnectionコマンドを実行します。
samba4.png

6 ログの出力方法

6.1 基本的な出力方法

デバッグ用に、デフォルトのログとは別の場所にログを出力してみます。
globalセクションに、出力レベル(log level)とログの出力先(log file)を設定します。
・出力レベル:0~5。0がデフォルト。値が大きいほど、詳細なログを出力。
・出力先:ログの出力先を指定。%mはプロセス名に展開。

ここでは、/tmp配下にログを出力してみます。

ログ出力の指定方法
[root@server ~]# cat /etc/samba/smb.conf
[global]
        workgroup = WORKGROUP
        security = user
        passdb backend = tdbsam
        log file = /tmp/sambalog.%m
        log level = 5
[homes]
        valid users = user1
        browseable = No
        read only = No

ログ出力を確認するため、smbを再起動します。

smbの再起動
[root@server ~]# systemctl restart smb

日時の右横の数値(0,3,4,5)がログレベルになります。

ログ内容の確認
[root@server ~]# less /tmp/sambalog.smbd
-snip-

[2020/04/23 22:02:24.609043,  4] ../source3/smbd/sec_ctx.c:320(set_sec_ctx_internal)
  setting sec ctx (0, 0) - sec_ctx_stack_ndx = 1
[2020/04/23 22:02:24.609060,  5] ../libcli/security/security_token.c:53(security_token_debug)
  Security token: (NULL)
[2020/04/23 22:02:24.609089,  5] ../source3/auth/token_util.c:866(debug_unix_user_token)
  UNIX token of user 0
  Primary group is 0 and contains 0 supplementary groups
[2020/04/23 22:02:24.609196,  4] ../source3/smbd/sec_ctx.c:438(pop_sec_ctx)
  pop_sec_ctx (0, 0) - sec_ctx_stack_ndx = 0
[2020/04/23 22:02:24.609894,  0] ../lib/util/become_daemon.c:138(daemon_ready)
  daemon_ready: STATUS=daemon 'smbd' finished starting up and ready to serve connections
[2020/04/23 22:02:24.610775,  5] ../source3/printing/nt_printing.c:92(print_driver_directories_init)
  No print$ share has been configured.
[2020/04/23 22:02:24.610886,  5] ../source3/lib/messages.c:709(messaging_register)
  Registering messaging pointer for type 515 - private_data=(nil)
[2020/04/23 22:02:24.610939,  3] ../source3/printing/queue_process.c:328(start_background_queue)

Z 参考情報

Linux教科書 LPICレベル2 スピードマスター問題集 Version4.5対応
Linux教科書 LPICレベル2 Version 4.5対応 (日本語)
Samba逆引きリファレンス
絶対わかる! Windowsネット超入門 第4版

CentOS7 のsamba設定メモ
CentOS 7: sambaをインストールしてWindows 10とファイル共有する
ログオフなしでファイルサーバーとのセッションを切断するには-資格情報の削除

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
71
Help us understand the problem. What are the problem?