自分用の備忘録です。
Samba を使用して、Linux 仮想ホスト間でフォルダを共有します。また、共有フォルダをマウントします。
Samba は Windows からもアクセスできるため、パーミッションまわりが複雑です。この記事の手順を踏んだ場合、Linux にマウントした際、共有元と異なるパーミッションになります。
Linux 内のみで共有する場合は NFS, SSHFS をまず検討しましょう。
参考
- Rocky Linux 9 / AlmaLinux 9にSambaサーバーをインストールする方法 - Qiita
- MX Linux における Samba 共有フォルダの永続マウント手順書 - Qiita
環境
- AlmaLinux 9
- Oracle VM VurtialBox の仮想マシンに構築
- 「最小インストール」でインストール済
構成
マシン等の構成は下記のとおりです。
LSF 構築の一環で作業をしていたのでファイル名やユーザ名が引っ張られていますが、当然、ほかのファイル名・ユーザ名でもかまいません。
仮想マシン構成
| ホスト名 | IPアドレス | 補足 |
|---|---|---|
| lsf01 | 192.168.56.33 | Samba サーバを立てる。 |
| lsf02 | 192.168.56.34 |
- 上記の各マシンの
/etc/hostsに全仮想マシンのホスト名を登録する
ユーザ
各ホストに下記のユーザを作成しておく。
| ユーザ名 | UID | 主グループ | ホームディレクトリ | 補足 |
|---|---|---|---|---|
| se | なんでも | なんでも | なんでも | 主にこのユーザで構築作業をする。sudo 権が必要。名前は違っていてもよい。 |
| lsf | なんでも | なんでも | なんでも | Sambaのログインユーザとして使う。SSH ログインできる必要は無い |
共有フォルダとマウント先
ホスト lsf01 の /usr/share/lsf を、ホスト lsf02 の /usr/share/lsf にマウントする1。
1. Samba によるファイル共有を準備 (ホスト: lsf01)
LSF では連携するノード間で同じファイルを共有するために、ファイルを共有できるようマウントします。今回は、lsf01 に /usr/share/lsf を作成し、それを他のホストの /usr/share/lsf2 にマウントします3。
そのために、まず lsf01 で samba をインストールしセットアップします。その後、lsf02 で cifs-utils を使用して lsf01 の共有ディレクトリをマウントします。
Samba 用のディレクトリの作成
下記のように、Samba で共有する予定のディレクトリを作成します。
# mkdir /usr/share/lsf
# chown lsf:users /usr/share/lsf
# chmod 755 /usr/share/lsf
# chcon -t samba_share_t /usr/share/lsf
また、接続確認をしやすくするために、適当なファイルを一つ作っておきます。
$ sudo -u lsf touch /usr/share/lsf/tmp.txt
samba のインストール
lsf01 で、次のように samba をインストールします。
# dnf install samba samba-common samba-client
(略)
アップグレード済み:
libldb-4.21.3-7.el9_6.x86_64 libtalloc-2.4.2-1.el9.x86_64 libtdb-1.4.12-1.el9.x86_64 libtevent-0.16.1-1.el9.x86_64
インストール済み:
avahi-libs-0.8-22.el9_6.x86_64 cups-libs-1:2.3.3op2-33.el9.x86_64
libicu-67.1-9.el9.x86_64 libnetapi-4.21.3-7.el9_6.x86_64
libsmbclient-4.21.3-7.el9_6.x86_64 libtirpc-1.3.3-9.el9.x86_64
libwbclient-4.21.3-7.el9_6.x86_64 samba-4.21.3-7.el9_6.x86_64
samba-client-4.21.3-7.el9_6.x86_64 samba-client-libs-4.21.3-7.el9_6.x86_64
samba-common-4.21.3-7.el9_6.noarch samba-common-libs-4.21.3-7.el9_6.x86_64
samba-common-tools-4.21.3-7.el9_6.x86_64 samba-dcerpc-4.21.3-7.el9_6.x86_64
samba-ldb-ldap-modules-4.21.3-7.el9_6.x86_64 samba-libs-4.21.3-7.el9_6.x86_64
完了しました!
samba の設定
Samba を起動する前に設定を変更します。
設定ファイル /etc/samba/smb.conf を次のように編集します。
[global]
workgroup = LSF
security = user
[lsf]
comment = Shared directory for LSF
path = /usr/share/lsf
valid users = lsf
browseable = yes
read only = no
guest ok = no
今回は Windows との共有やプリンタの共有を想定していないため、既存の設定はほとんど削除しました。[lsf] のセクションで今回共有するディレクトリを設定しています。今回は lsf として Samba にログインした場合のみ使用できるようにするため、guest ok = no, valid users = lsf を指定しています。
設定を変更したら、testparm コマンドで設定にエラーが無いことを確認します。
# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
パスワードの設定
lsf ユーザは Samba の /lsf へログインするときに使用します。このログインのためのパスワードをここで設定します。
# smbpasswd -a lsf
New SMB password:
Retype new SMB password:
Added user lsf.
この記事では、ここで lsf00 をパスワードに設定したつもりで進めます。
OS の lsf ユーザのログインパスワードがすでに設定されていて Samba にも同じパスワードでログインしたい場合、この操作は必要ありません。また、匿名ユーザでも共有ディレクトリを見られるよう設定する場合も不要です。
samba の起動と登録
設定ができたら、Samba のサービスを起動・登録します。下記のコマンドでは起動と登録(自動起動設定)を同時に実施しています。
# systemctl enable --now smb
samba のインストール時に nmb というサービスも追加されていますが、今回は Linux のみを対象とするため不要です。そのため起動・登録しません。
ローカルで動作確認
下記のように smbclient //<ホスト名>/<共有名> で接続を確認します。パスワードを聞かれるので、上の作業で smbpasswd で設定したパスワードを入力します。
$ smbclient //lsf01/lsf -U lsf
Password for [LSF\lsf]:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sat Jul 19 20:53:15 2025
.. D 0 Sat Jul 19 20:53:15 2025
tmp.txt N 0 Sat Jul 19 20:53:15 2025
17756160 blocks of size 1024. 16011620 blocks available
smb: \>
上の例では smbclient の対話コンソールで ls コマンドを使用することで、事前に共有ディレクトリ内に作成しておいた tmp.txt が見えることを確認しています。-U <ユーザ> を無くしたり誤ったパスワードを入力したりするとエラーになることもここで確認できます。
ファイアーウォールの設定
他のホストからのアクセスを遮断してしまっては期待通りに動作しないため、Samba がアクセスを受け付けるポートを開放します。
# firewall-cmd --add-port=445/tcp --permanent
# firewall-cmd --reload
2. Samba の共有ディレクトリのマウント (ホスト: lsf02)
Samba サーバの準備ができたので、各ホストから Samba の共有ディレクトリを参照し、マウントします。
この記事では、この段階では lsf01, lsf02 のみを作成していて、lsf03 以降は後で lsf02 の仮想マシンを複製して作成する想定です。そのためこの工程を lsf02 のみに対して実施しています。
もし実マシンを使用しているなどの理由で3つ目以降のホストもすでに作成している場合、lsf01 以外の全ホストでこの作業を実施してください。
samba-client のインストール
Samba にアクセスするためのクライアントソフトウェアと、そのマウントに使用するライブラリをインストールします。
# dnf install samba-client cifs-utils
(略)
アップグレード済み:
libldb-4.21.3-7.el9_6.x86_64 libtalloc-2.4.2-1.el9.x86_64 libtdb-1.4.12-1.el9.x86_64 libtevent-0.16.1-1.el9.x86_64
インストール済み:
avahi-libs-0.8-22.el9_6.x86_64 cifs-utils-7.1-2.el9.x86_64 keyutils-1.6.3-1.el9.x86_64
libicu-67.1-9.el9.x86_64 libsmbclient-4.21.3-7.el9_6.x86_64 libtirpc-1.3.3-9.el9.x86_64
libwbclient-4.21.3-7.el9_6.x86_64 samba-client-4.21.3-7.el9_6.x86_64 samba-client-libs-4.21.3-7.el9_6.x86_64
samba-common-4.21.3-7.el9_6.noarch samba-common-libs-4.21.3-7.el9_6.x86_64
完了しました!
インストール出来たら、動作を確認します。
$ smbclient //lsf01/lsf -U lsf
lsf01 で試したときと同じように lsf01 へ接続して動作するはずです。
共有フォルダのマウントテスト (一時的なマウントで動作確認)
この共有フォルダを今回は /usr/share/lsf として使えるようにしたいので、そこへマウントします。
マウントするためにはマウントポイントにディレクトリがある必要があるので作成します。
# mkdir -m 755 /usr/share/lsf
まずはマウントそのものができることを確認するために、簡単な方法(再起動で解除される方法)でマウントしてみます。lsf00 は前の工程で決めたパスワードです。
# mount -t cifs -o username=lsf,password=lsf00,uid=10600,gid=100 //lsf01/lsf /usr/share/lsf
実際にマウントできたことを確認してみましょう。マウント時のオプションに uid=10600,gid=100 を指定しているので所有者・所有グループが lsf (10600) と users (100) になっています。
# ls -la /usr/share/lsf
合計 4
drwxr-xr-x. 2 lsf users 0 7月 19 20:53 .
drwxr-xr-x. 80 root root 4096 7月 20 13:42 ..
-rwxr-xr-x. 1 lsf users 0 7月 19 20:53 tmp.txt
では、一時的なマウントをできることが確認できたので一度アンマウントします。
# umount /usr/share/lsf
# ls -la /usr/share/lsf
合計 4
drwxr-xr-x. 2 root root 6 7月 20 13:42 .
drwxr-xr-x. 80 root root 4096 7月 20 13:42 ..
共有フォルダの恒久的なマウント
次は、再起動しても継続するマウントを設定します。
設定は /etc/fstab に書くのですが、このファイルは全ユーザに読み取り権限があるため lsf のログインパスワードを書くべきではありません。そこで、Samba への認証情報を書いたファイルを用意します。
$ sudo -u lsf touch /home/lsf/samba_credencials
$ sudo -u lsf chmod 600 /home/lsf/samba_credencials
中には次のようにSambaへのログインに使用するユーザ名とパスワードを記載します。
username=lsf
password=lsf00
ここまでの準備ができたら、マウント設定を /etc/fstab の末尾に追加します。
+ //lsf01/lsf /usr/share/lsf cifs credentials=/home/lsf/samba_credencials,uid=10600,gid=100 0 0
その後、編集した /etc/fstab を次のようにロードさせることで、新しい設定どおりにマウントされます。
# systemctl daemon-reload
# mount -a
マウントされたことを確認しましょう。
# ls -la /usr/share/lsf
合計 4
drwxr-xr-x. 2 lsf users 0 7月 19 20:53 .
drwxr-xr-x. 80 root root 4096 7月 20 13:42 ..
-rwxr-xr-x. 1 lsf users 0 7月 19 20:53 tmp.txt
再起動してみてもマウントが維持されるはずなので、可能なら確認しましょう。