それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

samba のインストールと初期設定と接続テスト

今回やること、Sambaをインストールして初期設定。HOMEフォルダの共有macOSのタイムマシン作る。

samba のインストール

apt install avahi-daemon samba samba-vfs-modules

samba-vfs-modulesは入れてないと、VFS 関連のオプションが使えない、後で困る。最初に入れておく。

Sambaユーザーの有効化

Sambaをインストールするとスタンドアロンサーバーで起動される。

スタンドアロンの場合、ユーザを作る必要がある。

一般的に、Windowsユーザとパスワードと同じものを設定する。

## 有効化
smbpasswd -e takuya
## 無効化
smbpasswd -d takuya
## ユーザー作成
smbpasswd -a takuya

サンプル

## 作る前
root@raspi-ubuntu:~# smbpasswd -e takuya
Failed to find user takuya in passdb backend.
## 作成
root@raspi-ubuntu:~# smbpasswd -a takuya
New SMB password:
Retype new SMB password:
Added user takuya.

デフォルトのスタンドアロンモードでは、Sambaの接続可能ユーザーがtdb に保存されており、 tdb のファイルにユーザーを登録する必要がある。

登録後は、パスワードはUNIXのパスワードコマンドと同期させられるのだが、、sudo passwd takuya などで変えたら同期されないし、いつでも同期されているとは限らない。なので明示的に 同期しないと思うことにしてる。

スタンドアロンサーバーとはWindows10/7のネットワーク・ファイル共有を実現するようなもの。

ホームフォルダを共有する。

Sambaをインストールしたサーバーのユーザのホームフォルダを共有する。

[homes]
    browseable = No
    comment = Home Directories
    create mask = 0700
    directory mask = 0700
    valid users = %S

任意のフォルダを共有する。

[MyShare]
    comment = ゲストも使える。
    guest ok = Yes
    path = /opt/samba-share/
    read only = No

ゲストユーザーをユーザーID

何も指定しなればば、anonymous(匿名)ユーザーになる、そのユーザーが作ったファイルは nobody:nogroup になる。

簡易的なゴミ箱

次の記述を足すと、サーバー側のゴミ箱が有効になる。

[MyShare]
    ## 略
    recycle:repository = .recycle
    recycle:keeptree = yes
    recycle:versions = yes

削除したファイルは .recycle に残される。

簡易的なゴミ箱なので、利用者(クライアント)側からは見えない。

Windowsのボリューム・シャドウコピーなどは、専用の設定を書く必要ががる。

接続テスト

macOS

## ユーザー指定
smbutil view //takuya@192.168.1.140
## Gesut
smbutil view //192.168.1.140

Linux

## ユーザー指定
smbclient -L 192.168.1.100 -U takuya
## 指定省略すると現在のユーザー
smbclient -L 192.168.1.100 -

linux でのゲスト接続

## パスワードを省略するとゲスト(anonymous)
takuya@raspi-ubuntu:~$ smbclient  -L 192.168.1.100 -h
Enter WORKGROUP\takuya's password:
Anonymous login successful

windows

今どきのWindowsはどうやるんだろう。昔からある net コマンドだとこうする。

接続

net use \\192.168.1.100 /user:takuya PASSWORD

切断

net use /delete * 

サーバー側で現在の接続状態を見る

サーバーに誰がつないできてるのかを見ておく。

smbstatus -b
smbstatus -d

mac 用 VSFをオンにすると、タイムマシンで使える。

[global]
    ## 略
    fruit:encoding = native
    fruit:metadata = netatalk
    idmap config * : backend = tdb
    vfs objects = catia fruit streams_xattr
[TimeMachine]
    comment = Backup for Mac Computers
    guest ok = Yes
    path = /opt/samba/
    read only = No
    fruit:time machine max size = 1T
    fruit:time machine = yes

f:id:takuya_1st:20211110012215p:plain

タイムマシンで見えないとき、Samba-VFSを確認する。

わたしは、VFSエラーになっていた。

VFSがないときは、次のように vfs が cannot open shared object になっている。

[2021/11/09 16:19:55.858644,  0] ../../lib/util/modules.c:49(load_module)
  Error loading module '/usr/lib/aarch64-linux-gnu/samba/vfs/streams_xattr.so': /usr/lib/aarch64-linux-gnu/samba/vfs/streams_xattr.so: cannot open shared object file: No such file or directory

Ubuntu/Debianは別パッケージになっているが、 個人的に、VFSなしでSambaを使うとか考えられないので、VFSを入れておく。

apt install samba-vfs-modules 

TimeMachineやmacOSとの接続は次が詳しかった→https://wiki.samba.org/index.php/Configure_Samba_to_Work_Better_with_Mac_OS_X

設定の確認

設定が有効かどうか、確認するコマンド

testparm -s  /etc/samba/smb.conf

Debian/Ubuntuは設定例がたくさんあって、どこが有効か探すのが手間なので、testparm を使って有効な設定だけを表示すると設定がやりやすい。

takuya@raspi-ubuntu:~$ testparm -s  /etc/samba/smb.conf
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

# Global parameters
[global]
    log file = /var/log/samba/log.%m
    logging = file
    map to guest = Bad User
    max log size = 1000
    obey pam restrictions = Yes
    pam password change = Yes
    panic action = /usr/share/samba/panic-action %d
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    passwd program = /usr/bin/passwd %u
    server role = standalone server
    server string = %h server (Samba, Ubuntu)
    unix password sync = Yes
    fruit:encoding = native
    fruit:metadata = netatalk
    idmap config * : backend = tdb
    vfs objects = catia fruit streams_xattr


[homes]
    browseable = No
    comment = Home Directories
    create mask = 0700
    directory mask = 0700
    valid users = %S


[TimeMachine]
    comment = Backup for Mac Computers
    guest ok = Yes
    path = /opt/samba/
    read only = No
    fruit:time machine max size = 1T
    fruit:time machine = yes

samba をマウントする

mount -t cifs -o username=USERNAME,password=PASS //192.168.1.1/share /mnt/to/path

rclone で マウントして Samba で共有する。

rclone は samba をサポートしてないっぽいので、samba とミラーリングするとしたら、

rclone でマウントしたフォルダをSambaで共有するか、

Sambaマウントしたフォルダを、rclone でローカルとして使うか

rclone でマウントしたフォルダをSambaに使わせるとき、

vfs cache と、パーミッションと、ユーザーマッピングが必要になる。

--allow-other --uid=1001 --vfs-cache-mode=full

サンプル

sudo rclone --config /home/takuya/.config/rclone/rclone.conf --allow-other --uid=1001 --vfs-cache-mode=full mount  gdrive:/server/samba-mount /opt/samba

感想

クラウドが使えるし、NASとかで手軽にSambaが使えるせいか、自宅鯖でSambaとかあまり流行らないですよねぇ。そのせいか、ネット上にSambaの情報がなくて困ります。

Sambaを使って、WindowsのADサーバーにして移動プロファイルやネットワークドライブのマウントとか、一般のご家庭らしくドメインログオンやりたいのですが。ドメインログイン自体もう古いんでしょうか。仮想マシンで大量にホスト作ってたらLDAPしたくならないんですかね。Dockerでrootでうごかすから気にならないんですかネェ。

私は、macOSのタイムマシンで使うので、どうしてもSambaを設定する必要があった。いままではAFPとnetatalk で使ってたのだが、ついにOS X から macOSに移行することになって、ついにafp よりSmbになってしまった。

ネットワークのファイル共有とかホント便利だと思うし、家庭用機器の家電はクラウド対応とかじゃなくて単純にSMBに対応すれば相当改善すると思うんですがねぇ。

その他の情報

過去記事