システム奮闘記:その112

SMB1.0とWindows10の問題



Tweet

(2020年8月2日に掲載)

はじめに  2020年1月14日で、マイクロソフト社はWindows7のサポートを終了した。  そのため、勤務先のパソコンもWindows7からWindows10への移行が迫られた。  そこで発生した問題を書きます。

Sambaの中身が見えない

 2020年の初めWindows10のパソコンを導入する事になった。  設定が終わった後、ファイルサーバーのSambaを見にいくと
Sambaに接続する様子
Sambaに接続する様子
普段通り、ファイルサーバーのSambaに接続する事にした。

 開かれへん!!

 だった。

Sambaが見えていない様子
Sambaが見えていない様子
お問い合わせフォームを選ぶ。

 ホスト名で接続できないなら、IPアドレスで接続してみたが・・・

 IPアドレスでも開かれへん!!


 だが、思い当たる節がない。
 ファイルサーバーの中身が見れないと困る。

 そこで検索サイトで調べていくと・・・

 Windows10は初期設定ではSMB1.0に対応してへん!!

 だった。


 だが、この時・・・

 SMB1.0って何やねん!!


 だった。

 ファイル転送に関する知識がないのがバレバレだった。

 そこでSMB1.0を調べてみた。

 SMBはServer Message Block」の略で、Windowsネットワークの標準のファイル共有のプロトコルだ。

 知らへんかった!!

 バージョンの違いがあるので、それも調べてみた。
 すると以下のサイトを見つけた。

 第7回 ファイル共有プロトコルSMBの概要:Windowsネットワークの基礎 - @IT(アットマークIT)

 SambaのSMBプロトコルのサポート状況

SMBのバージョンの違いと対応関係
SMB1.0 WindowsXP以降から実装された。
セキュリティー上の問題からWindows10では初期設定では無効にしている。
SMB2.0 Windowsw Vistaから実装された。
Samba3.6から対応。
SMB2.1 Windows7から実装された。
SMB3.0 Windows8から実装された。
Samba4.0から対応。
SMB3.02 Windows8.1から実装。
Samba4.2から対応。
SMB3.11 Windows10から実装。
Samba4.3から対応

 こんな変化が起こっていたとは知らへんかった!!

 近年、システムを触っていないのがバレバレだ。お陰で浦島太郎になっている。


 勤務先のSambaのバージョンといえば・・・

 バージョン3.5やん!!

 SMB2.0の対応していない。


 そこでSamba3.6をインストールしようと考えた。


Sambaのデーモンが起動しない

 現在のファイルサーバーを設定したのはいつかと考えると・・・  8年ぐらい使っている!!  だった。  OSは・・・  CentOS5系だった  だった。  OSが古くなっているため、Samba4系をインストールしてもライブラリが古すぎて、 コンパイルが通らないかもしれない。  そこでSamba3.6をインストールして、とりあえずSMB2.0に対応する事にした。  コンパイルは成功した物の・・・  デーモンが起動せぇへん!!  だった。  デーモンが動かない以上、どうしようもない。

Windows10でSMB1.0を有効にする

 Samba3.6に置き換える事ができないため、Windows10側の設定を変更して Windows10でSMB1.0に対応可能にする事にした。  そしてネット検索で、設定方法の変更を調べてみる。見つかった。
コントロールパネル
コントロールパネルからプログラムを選ぶ
赤く囲んだプログラムを選ぶ。


プログラムと機能を選ぶ
コントロールパネルからプログラムと機能を選ぶ
赤く囲んだ「プログラムと機能」を選ぶ。



Windowsの機能の有効化または無効化
コントロールパネルからWindowsの機能の有効化または無効化を選ぶ
赤く囲んだ「Windowsの機能の有効化または無効化」を選ぶ


Windowsの機能の画面(1)
Windowsの機能の画面
赤く囲んだ「SMB 1/0/CIFS file Sharing Support」に印が入っていない。
SMB1.0が初期状態では無効になっている事を意味する。

 SMB1.0を有効にする。

Windowsの機能の画面(2)
Windowsの機能の画面からSMB1.0を有効にする
赤く囲んだ「SMB 1/0/CIFS file Sharing Support」に関する項目を全て有効にする。

 これでSMB1.0を有効にした。

 そしてSambaを見にいく。

SMB1.0を有効化するとSambaを見にいく事ができた
SMB1.0を有効化するとSambaを見にいく事ができた
無事、Sambaのフォルダーを見にいく事ができた。

 とりあえずは回避法が見つかった。
 だが安心するのも束の間だった。


元の木阿弥

 だが、しばらくすると  Sambaが見えへんようになった!!  だった。  調べてみると・・・  WindowsUpdateを行うとSMB1.0が無効化される場合がある!!  だった。  これでは不便で仕方がない。

Samba3.6のインストール

 そこでOSごと入れ替える事にした。  CentOS6系で、Samba3.6をインストールする事にした。
Samba4系にしなかった理由
この7,8年、Sambaの設定を触っていないため、すっかり設定方法を忘れてしまった。
そのためSamba3.5と設定が似ているであろうSamba3.6のインストールをする事にした。
昔と違い、馬力がないため、安全策をとることにした。これを老化という。

 CentOS6の場合、初期設定に注意する必要がある。

 まずはSElinuxが有効になっているかどうかの確認だ。

SELinuxが有効かどうかの確認
[root@samba]# getenforce
Enforcing
[root@samba]# 
Enforcingとなっていたので、SELinuxが有効になっている。

 SELinuxを無効にする必要がある。

設定ファイルのディレクトリー
[root@samba# cd /etc/selinux/
SElinuxの設定ファイルがあるディレクトリへ移動する。

 設定ファイルを確認する。

SElinuxの設定を記述しているファイルを見る
[root@samba]# more config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 


[root@samba]# 
青い部分を見ると有効になっていた。

 そこで以下のように変更する。

SElinuxの設定を記述しているファイルの記述変更
[root@samba]# more config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disable
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 


[root@samba]# 
ピンクの部分。SElinuxを無効にする設定だ。


 次にパケットフィルタリングの設定を無効にする。
 

パケットフィルタリングの設定を無効にする
[root@samba]# chkconfig iptables off
[root@samba]# 
Linuxの起動時に、iptablesを無効にするコマンド

 これで再起動を行えば、SElinuxもパケットフィルタリングも無効になる。


 Samba3.5をインストールした時もソースコンパイルだった。
 ソースコンパイルの際、オプションなどをファイルに記録しているためオプションは残っている。

Samba3.6.25の展開
[root@samba]# tar xvfz samba-3.6.25.tar.gz 
samba-3.6.25/
samba-3.6.25/nsswitch/
samba-3.6.25/nsswitch/winbind_nss_solaris.h
samba-3.6.25/nsswitch/winbind_nss_netbsd.h
samba-3.6.25/nsswitch/wb_reqtrans.h
samba-3.6.25/nsswitch/winbind_nss_irix.h
samba-3.6.25/nsswitch/wbinfo.c
samba-3.6.25/nsswitch/tests/

(途中省略)

samba-3.6.25/testdata/samba3/secrets.tdb
samba-3.6.25/testdata/samba3/share_info.tdb
samba-3.6.25/testdata/minschema_classes.txt
samba-3.6.25/MAINTAINERS.txt
[root@stream src]# 
tar.gz形式のファイルを展開した。

 つぎにコンパイルを行うディレクトリーに移動する。

ディレクトリーに移動
[root@samba]# cd samba-3.6.25/source3
[root@samba]# pwd
/usr/local/src/samba-3.6.25/source3
[root@samba]# 
tar.gzファイルをどこで展開するかでディレクトリーが変わる。
展開した後、「source3」のディレクトリーに移動すれば良い。

 次にコンパイルの前段階のライブラリ依存を考慮した
コンパイルソースの作成を行う。

configureコマンドを使ってコンパイルの準備
[root@samba]# ./configure  --prefix=/usr/local/samba --with-pam --with-acl-support --with-lib--with-libiconv=/usr

configure: WARNING: unrecognized options: --with-lib
SAMBA VERSION: 3.6.25
-
-
#    define SAMBA_VERSION_STRING SAMBA_VERSION_OFFICIAL_STRING
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
LIBREPLACE_LOCATION_CHECKS: START
LIBREPLACE_LOCATION_CHECKS: END
LIBREPLACE_CC_CHECKS: START

(途中、省略)

checking for zlibVersion in -lz... yes
checking for zlib >= 1.2.3... yes
Using libraries:
    LIBS = -lresolv -lnsl -ldl -lrt
    KRB5_LIBS =  -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err
    LDAP_LIBS = -lldap -llber 
    DNSSD_LIBS = 
    AUTH_LIBS =  -lcrypt  -lpam 
checking configure summary... yes
configure: creating ./config.status
config.status: creating Makefile
config.status: creating script/findsmb
config.status: creating smbadduser
config.status: creating script/gen-8bit-gap.sh
config.status: creating script/installbin.sh
config.status: creating script/uninstallbin.sh
config.status: creating lib/netapi/examples/Makefile
config.status: creating lib/netapi/tests/Makefile
config.status: creating pkgconfig/smbclient.pc
config.status: creating pkgconfig/wbclient.pc
config.status: creating pkgconfig/netapi.pc
config.status: creating pkgconfig/smbsharemodes.pc
config.status: creating ../examples/libsmbclient/Makefile.internal
config.status: creating include/config.h
config.status: executing rm-stdint.h commands
config.status: executing rm-stdbool.h commands
config.status: executing default-1 commands
[root@samba]# 
configureを使って、取り込むライブラリ、不要なライブラリの指定。
Samba用の設定ファイルやライブラリファイルの格納場所などの指定ができる。
そのため、オプションはそれぞれの環境によって変わってくる。

 次にコンパイル作業を行う。

makeでコンパイルを行う
[root@samba]# make
Using CFLAGS     = -O -I. -I/usr/local/src/samba-3.6.25/source3 -I/usr/local/src/samba-3.6.25/source3/../lib/iniparser/src -Iinclude -I./include  -I. -I. -I./../lib/replace -I./librpc -I./.. -I./../lib/talloc -I./../lib/tevent -I../lib/tdb/include -DHAVE_CONFIG_H  -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Iinclude -I./include -I. -I. -I./../lib/replace -I./librpc -I./.. -I./../lib/popt -DLDAP_DEPRECATED  -I/usr/local/src/samba-3.6.25/source3/lib -I.. -D_SAMBA_BUILD_=3 -D_SAMBA_BUILD_=3
      PICFLAG    = -fPIC
      LIBS       = -lresolv -lnsl -ldl -lrt
      LDFLAGS    = -pie -Wl,-z,relro -L./bin
      DYNEXP     = -Wl,--export-dynamic
      LDSHFLAGS  = -fPIC -shared -Wl,-Bsymbolic -Wl,-z,relro -L./bin -lc -Wl,-z,defs
      SHLIBEXT   = so



(途中、省略)

Linking ../nsswitch/libnss_wins.so
Compiling pam_smbpass/pam_smb_auth.c
Compiling pam_smbpass/pam_smb_passwd.c
Compiling pam_smbpass/pam_smb_acct.c
Compiling pam_smbpass/support.c
Linking shared library bin/pam_smbpass.so
Compiling ../nsswitch/pam_winbind.c
Linking shared library bin/pam_winbind.so
Compiling ../nsswitch/winbind_krb5_locator.c
Linking bin/winbind_krb5_locator.so
[root@samba]# 
コンパイル成功だ。

 次にインストールを行う。

インストール作業
[root@samba]# make install
Using CFLAGS     = -O -I. -I/usr/local/src/samba-3.6.25/source3 -I/usr/local/src/samba-3.6.25/source3/../lib/iniparser/src -Iinclude -I./include  -I. -I. -I./../lib/replace -I./librpc -I./.. -I./../lib/talloc -I./../lib/tevent -I../lib/tdb/include -DHAVE_CONFIG_H  -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -Iinclude -I./include -I. -I. -I./../lib/replace -I./librpc -I./.. -I./../lib/popt -DLDAP_DEPRECATED  -I/usr/local/src/samba-3.6.25/source3/lib -I.. -D_SAMBA_BUILD_=3 -D_SAMBA_BUILD_=3
      PICFLAG    = -fPIC
      LIBS       = -lresolv -lnsl -ldl -lrt
      LDFLAGS    = -pie -Wl,-z,relro -L./bin
      DYNEXP     = -Wl,--export-dynamic
      LDSHFLAGS  = -fPIC -shared -Wl,-Bsymbolic -Wl,-z,relro -L./bin -lc -Wl,-z,defs
      SHLIBEXT   = so



Installing /usr/local/src/samba-3.6.25/source3//locale/pam_winbind/sv.po as ///usr/local/samba2/share/locale/sv/LC_MESSAGES/pam_winbind.mo
Installing /usr/local/src/samba-3.6.25/source3//locale/pam_winbind/zh_CN.po as ///usr/local/samba2/share/locale/zh_CN/LC_MESSAGES/pam_winbind.mo
Installing /usr/local/src/samba-3.6.25/source3//locale/pam_winbind/zh_TW.po as ///usr/local/samba2/share/locale/zh_TW/LC_MESSAGES/pam_winbind.mo
==============================================================
MO files for pam_winbind are installed.
==============================================================
==============================================================
All MO files for Samba are installed. You can use "make uninstall"
or "make uninstallmo" to remove them.
==============================================================
[root@samba]# 
これでインストールは終わった。

 無事、インストールが終わった。
 あとはデーモンを動かすだけだ。

 ソースコンパイルでインストール。
 浦島太郎のように思えた。


Samba3.6のインストール

 次にSambaの設定ファイルを触る。  久々にmonyoさんこと高橋基信さんの著書  サーバ構築の実例がわかるSamba「実践」入門  を取り出す。
サーバ構築の実例がわかるSamba「実践」入門
サーバ構築の実例がわかるSamba「実践」入門



 バラバラとめくる。ある事に気づいた。

 以前、Sambaを設定した時、本の内容を理解してへんかった!!

 うそのような話だが、当時よりも今の方が理解力が上がっている。
 そのため本の内容を見ても、ひっかかる事がなく読める上、
この設定は、こんな意味だったのかと思う所がある度に、あの時は理解してなかったと感じた。


 今回は単純にファイル共有をするだけのため、非常に設定が簡単になる。

smb.confの設定 (プロトコル)
max protocol = SMB2
通信プロトコルの設定だ。
「max」がついているので、最大(最新)のプロトコルの指定になる。
ここでは「SMB2」とした。

もし「SMB1.0」を廃止したい場合は、最低のプロトコルをSMB2.0にすれば良いので
「min protocol = SMB2」とすれば良い。

 社内の不特定の利用者がSambaへ接続できるようにするため、ゲスト認証を有効にする。

smb.confの設定 (ゲスト認証)
map to guest = bad user

guest account = nobody
赤い部分はゲスト認証を有効にする設定。
初期設定ではゲスト認証は認めていないので、この記述が必要になる。

その下の青い部分は、ゲスト認証した時に付加されるアカウントだ。
nobodyというユーザー名でSambaに接続するという設定になる。
付加されるアカウントを「nobody」にする場合は省略も可能だ。

 利用者がSambaに接続した時に、ファイル共有するディレクトリーなどの設定を行う。

smb.confの設定 (ファイル共有のディレクトリの設定)
[public]
   comment = Public Stuff
   path = /home/samba
   writable = yes
   guest ok = yes
   guest only = yes
上から説明すると[public]は共有名だ。
「comment」は自由に書ける部分だ。
「path」は、Linuxのどのディレクトリーをファイル共有先にするかの指定だ。
「writable」はファイルの書き込みで、ここでは有効(yes)にする。
「guest ok = yes」はゲストの接続を認めるという設定だ。
「guest only = yes」はゲストのみ接続許可という意味だ。

 これでSambaを動かしてみた。

Sambaを見にいく事ができた
Sambaを見にいく事ができた
フォルダーの名前が「public」となっているのは、smb.confで共有名を「public」にしたからだ。

 これで設定完了だ。



SMB1.0を継続せざる得ない事情

 だが、社内では一つ頭の痛い問題があった。  Windows98が現役で動いている  色々、事情がある。  セキュリティーの専門家から「アカンやろ」と言われても、私には何も権限がない。  Windows98はSMB2.0は使えない。  そのためWindows98とWindows10ではファイル共有ができなくなる問題が出てきた。  そこで・・・  SambaでSMB1.0を有効にする  という選択肢になった。
最後に  Samba-3.6のインストールが成功し、Windows10からでもSambaのフォルダーを見れるようになった。  Samba4だが、以前、インストールした事がある。  社内でActiveDirectoryの試験導入を行った事があるのだ。  「システム奮闘記:その102」(Samba4入門 インストールと設定)だ。  2014年だったので、6年経っている。  ここで、もうひと踏ん張りだと思いつつ、Samba4にあげる利点がないので、このままにする事にした。  昔と違って、馬力がなくなっているのだ。  それだけでなく、諸事情によって、ファイルサーバーとしてSambaを使わない方向に向かっている。  その話は後日、紹介します。

前章:「スパムメール認定、スパムメールの発信源」を読む
目次:システム奮闘記に戻る