古いSamba3への接続

2022年9月22日

もはやSamba3は使われておらず、サポートもされていないようだが、未だにSamba3を載せたCentOS6.3サーバが複数台ある。これで問題無いと思いこんでいたのだが、問題が持ち上がった。

これは、互いのプロトコルが異なるせいである。旧プロトコルと新プロトコルは互換性がないらしく、互いに通信することができない。もちろんこれは、マイクロソフトがそのように決めてしまったからだ。

  • このCentOS6.3のSamba3から、新しいDebian11のSamba4共有にアクセスできない
  • 逆に、Samba4からSamba3にアクセスできない
  • Windows10からSamba3にアクセスできない。

なお、SMBやらCIFSやらの規格はややこしく、なおかつ混乱もある。参考としては以下。

ファイル共有プロトコル、SMBとCIFSの違いを正しく理解できていますか?(前編)

Samba3からSamba4にアクセスできない

Samba3を走らせているCentOS6.3をSamba4に変更しようと思ったのだが、当時のAlpha版しか無いようだ。ビルドするのもの面倒なので、諦めることにした。

そこで、Samba3側からSamba4側にアクセスさせるには、以下で良いようだ。

  • 後述するSamba4側のclient/server min protocolを設定する

/etc/auto.miscに以下を設定

artemis-public          -fstype=cifs,password=  ://192.168.30.2/public

そして、「ls /misc/artemis-public」等でアクセスできる。

Window10からSamba3にアクセスできない

これは、Windows10から古いSambaに接続できないで解決した。しかし、SambaもWindowsもそうなのだが、この古いプロトコルは廃止する方向のようだ。仕方がない。それはその時に考えよう。

Samba4からSamba3にアクセスできない

現在のSamba4にはWindows10と同様に古いプロトコルをサポートしているのだが、これを有効にするためには若干の設定が必要になる。

Samba4の設定

前提として、samba、autofs、cifs-utilsをインストールしておく。

以下のように、古いプロトコル(正式には何と呼ぶのかわからない)をサポートするために、client min protocol, server min protocolをnt1もしくは、coreにするようだ。なぜかSMB1ではないらしい。

[global]
  map to guest = Bad User
  log file = /var/log/samba/%m
  log level = 1
  client min protocol = nt1
  server min protocol = nt1

[public]
  path = /home/public
  read only = no
  guest ok = yes

ただ、これだけでは、smbclientプログラムしかまともには動かない。これは面倒だ。例えばコマンドライン上で「cp something //192.168.30.96/public」などと気軽に使うことができない。

autofsの設定

そこでautofsの設定をするのだが、上に書いた所望の「cp something //192.168.30.96/public」のやり方はわからないのだが、代わりに「cp something /smb/192.168.30.96/public」などとすることはできる。

※もちろん設定ファイルを変更したら、autofsデーモンを再起動する必要がある。

/etc/auto.masterに以下を追加。

/misc   /etc/auto.misc
/smb    /etc/auto.smb

/etc/auto.smbのoptsを以下に変更。ここでvers=1.0を指定する必要がある。パスワード無しなので「pass=」を追加。

opts="-fstype=cifs,vers=1.0,pass="

これで以下のアクセスができるようになる。

 ls  /smb/192.168.30.96/public

次に、/etc/auto.miscに以下を追加する

hermes-public   -fstype=cifs,vers=1.0,password= ://192.168.30.96/public

これで以下のアクセスができる。

 ls /misc/hermes-public

最初に書いたが、以下はできない。この理由はわからない。

ls //192.168.30.96/public
ls: cannot access '//192.168.30.96/public': No such file or directory