2 検証環境
2.1 ネットワーク構成
Windows10および、仮想マシン(1台)を使いました。各マシンは以下の役割です。
- 仮想マシン:Sambaサーバ(Samba server)
- Windows10:Sambaクライアント(Samba client)
+------------------- PC ----------------------+ | | | Samba client Samba server | | +-----------+ +-----------+ | | | | | | | | | Windows10 | | CentOS7.9 | | | | | | | | | | | | | | | | | | smbd | | | | | | (445) | | | | | | | | | | | | | | | | | | | | | +-- eth0 ---+ +-- eth0 ---+ | | .12 | | .100 | | | | | | +-------------------------------------+ | | | hypervisor | | | +-------------------------------------+ | | | | | | | | | +---------------------------------------------+ | | ------------------------------------------------ router ------- Internet 192.168.2.0/24 .1
3 Sambaサーバの設定
3.1 Linuxシステムのユーザ作成
テスト用のユーザを作成します。
[root@server ~]# useradd user1
作成したユーザを確認します。
[root@server ~]# id user1 uid=1000(user1) gid=1000(user1) groups=1000(user1)
3.2 パッケージのインストール
sambaパッケージをインストールします。
[root@server ~]# yum -y install samba
Sambaの版数を確認します。
[root@server ~]# smbd -V Version 4.10.16
以下のパッケージがインストールされました。
[root@server ~]# rpm -qa|grep samba samba-common-libs-4.10.16-18.el7_9.x86_64 samba-client-libs-4.10.16-18.el7_9.x86_64 samba-libs-4.10.16-18.el7_9.x86_64 samba-4.10.16-18.el7_9.x86_64 samba-common-4.10.16-18.el7_9.noarch samba-common-tools-4.10.16-18.el7_9.x86_64
3.3 SElinuxの設定
SELinuxのモードを確認します。SELinuxが有効になっていることがわかります。
[root@server ~]# getenforce Enforcing
[root@server ~]# semanage permissive -a smbd_t
無効化したドメインを確認します。
[root@server ~]# semanage permissive -l|grep smbd_t smbd_t
3.4 ポート番号の開放
SambaサーバはTCPの445番ポートでListenするので、445番ポートを解放します。なお、firewall-cmdコマンドの使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# firewall-cmd --add-port=445/tcp success
解放されているポート番号を確認します。
[root@server ~]# firewall-cmd --list-ports 445/tcp
3.5 設定ファイルの変更
samba設定ファイルのバックアップを作成しておきます。
[root@server ~]# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
設定変更した項目は以下です。なお、smbdプロセス等の動作を指定する設定ファイル(/etc/sysconfig/samba)はデフォルトのまま使用しました。
[root@server ~]# diff -Nur /etc/samba/smb.conf.bak /etc/samba/smb.conf --- /etc/samba/smb.conf.bak 2022-02-23 08:54:35.081554354 +0900 +++ /etc/samba/smb.conf 2022-02-23 08:57:06.558858007 +0900 @@ -4,7 +4,7 @@ # you modified it. [global] - workgroup = SAMBA + workgroup = WORKGROUP security = user passdb backend = tdbsam @@ -16,7 +16,7 @@ [homes] comment = Home Directories - valid users = %S, %D%w%S + valid users = user1 browseable = No read only = No inherit acls = Yes
- securityの意味
securityは、誰がユーザ認証を行うかを設定するパラメータです。
securityの設定値 | 意味 | 備考 |
user | ユーザ名とパスワードでローカル認証を行う | Sambaサーバ自身が認証を行う |
share | パスワードだけで認証を行う | Sambaサーバ自身が認証を行う |
domain | ドメインコントローラにより認証を行う | 自分以外のサーバが認証を行う |
- 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システムのユーザアカウントが登録されている必要があります。また、パスワードは"test"と入力しました。
[root@server ~]# pdbedit -a user1 new password: retype new password: Unix username: user1 NT username: Account Flags: [U ] User SID: S-1-5-21-2774913414-1482874662-1355191062-1000 Primary Group SID: S-1-5-21-2774913414-1482874662-1355191062-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: 水, 23 2月 2022 09:12:50 JST Password can change: 水, 23 2月 2022 09:12:50 JST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
登録したSambaユーザを確認します。
[root@server ~]# pdbedit -L user1:1000:
3.7 設定ファイルの構文チェック
設定ファイルの構文に誤りがないかどうか、testparmコマンドを使ってチェックします。
[root@server ~]# testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions -snip-
3.8 Sambaサーバの起動
Sambaサービスを起動します。
[root@server ~]# systemctl start smb.service
Sambaサービスの状態を確認します。smbdが起動できていることがわかります。
[root@server ~]# systemctl status smb.service ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled) Active: active (running) since 水 2022-02-23 09:17:04 JST; 8s ago Docs: man:smbd(8) man:samba(7) man:smb.conf(5) Main PID: 2191 (smbd) Status: "smbd: ready to serve connections..." CGroup: /system.slice/smb.service tq2191 /usr/sbin/smbd --foreground --no-process-group tq2193 /usr/sbin/smbd --foreground --no-process-group tq2194 /usr/sbin/smbd --foreground --no-process-group mq2195 /usr/sbin/smbd --foreground --no-process-group 2月 23 09:17:04 server systemd[1]: Starting Samba SMB Daemon... 2月 23 09:17:04 server smbd[2191]: [2022/02/23 09:17:04.824220, 0] ../../lib/util/become_daemon.c:136(daemon_ready) 2月 23 09:17:04 server smbd[2191]: daemon_ready: daemon 'smbd' finished starting up and ready to serve connections 2月 23 09:17:04 server systemd[1]: Started Samba SMB Daemon.
smbdは139番、445番ポートでListenしていることがわかります。
[root@server ~]# lsof -c smbd -a -i -a -nP COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME smbd 2191 root 34u IPv6 31753 0t0 TCP *:445 (LISTEN) smbd 2191 root 35u IPv6 31754 0t0 TCP *:139 (LISTEN) smbd 2191 root 36u IPv4 31755 0t0 TCP *:445 (LISTEN) smbd 2191 root 37u IPv4 31756 0t0 TCP *:139 (LISTEN)
4 Sambaクライアントの設定
4.1 ワークグループの確認
Sambaサーバで、ワークグループ名をWORKGROUPと設定したので、Sambaクライアントのワークグループ名もWORKGROUPであることを確認します。
4.2 Sambaサーバへのアクセス
赤枠の部分に\\192.168.2.100と入力します。
sambaユーザの登録で登録した、ユーザ名とパスワードを入力します。
5 Sambaの接続状況確認方法
5.1 サーバ側
smbstatusコマンドを実行すると、192.168.2.101(Windows10)からSambaサーバにアクセスしていることがわかります。また、そのアクセスは、PIDが1584のプロセスが処理していることがわかります。
[root@server ~]# smbstatus Samba version 4.10.16 PID Username Group Machine Protocol Version Encryption Signing ---------------------------------------------------------------------------------------------------------------------------------------- 1584 user1 user1 192.168.2.101 (ipv4:192.168.2.101:57569) SMB3_11 - partial(AES-128-CMAC) Service pid Machine Connected at Encryption Signing --------------------------------------------------------------------------------------------- IPC$ 1584 192.168.2.101 水 3月 16 19時05分52秒 2022 JST - - No locked files
psコマンドを使って、smbdプロセスを確認してみます。PID1573が親プロセス、PID1584が子プロセスです。
[root@server ~]# ps -C smbd -o comm,pid,ppid,args COMMAND PID PPID COMMAND smbd 1573 1 /usr/sbin/smbd --foreground --no-process-group smbd 1584 1573 /usr/sbin/smbd --foreground --no-process-group
次に、lsofコマンドを使って、smbdプロセスの状態を確認してみます。PID1573のプロセスはLISTEN状態です。つまり、SambaクライアントからのTCPコネクション確立を待っています。一方、子プロセス(PID1584)は、SambaクライアントとTCPコネクションを確立していることがわかります。なお、lsofコマンドの使い方は、lsofコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# lsof -i:445 -a -nP COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME smbd 1573 root 34u IPv6 26624 0t0 TCP *:445 (LISTEN) smbd 1573 root 36u IPv4 27650 0t0 TCP *:445 (LISTEN) smbd 1584 root 40u IPv4 27751 0t0 TCP 192.168.2.100:445->192.168.2.101:57569 (ESTABLISHED)
5.2 クライアント側
クライアント側でSambaの接続状況を確認してみます。WindowsでPowerShellを起動します。PowerShellでGet-SmbConnectionコマンドを実行します。
6 ログの出力方法
デバッグ用にデフォルトのログ出力場所とはとは違う場所にログを出力してみます。globalセクションに、出力先(log file)と出力レベル(log level)を設定します。
・出力レベル: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 printing = cups printcap name = cups load printers = yes cups options = raw [homes] -snip-
ログ出力を確認するため、smbを再起動します。
[root@server ~]# systemctl restart smb
ログを確認します。日時の右横の数値(0,3,4,5)がログレベルになります。
[root@server ~]# less /tmp/sambalog.smbd -snip- [2022/03/16 19:42:30.396232, 5] ../../source3/printing/print_cups.c:520(cups_async_callback) cups_async_callback: callback received for printer data. fd = 16 [2022/03/16 19:42:30.396315, 3] ../../source3/printing/print_cups.c:536(cups_async_callback) failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL [2022/03/16 19:42:30.396398, 2] ../../lib/util/tevent_debug.c:66(samba_tevent_debug) samba_tevent: EPOLL_CTL_DEL EBADF for fde[0x564448658380] mpx_fde[(nil)] fd[16] - disabling [2022/03/16 19:42:30.397387, 1] ../../source3/printing/printer_list.c:234(printer_list_get_last_refresh) Failed to fetch record!
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ