🌊

サーバ構築まで(Part.12)

に公開

こんにちは、HESの川添です。

前回は Samba について書く予定でしたが、予期せぬトラブルにより PC を初期化、クリーンインストールすることになってしまいました…。
今回は改めて、Samba の設定ファイル smb.conf を実際に確認しながら、何がどう設定されているのかを深掘りしていきます。

今回確認したconfig抜粋

[public]
writable = yes
path = /srv/samba/public
guest ok = yes
guest only = yes
creat mask=0664
directory mask = 0775
force group = samba

これだけ見ると「共有フォルダの設定なんだろうな」とは思うのですが、それぞれの設定項目が具体的に何を意味しているのかを再度1つずつしっかりと調べてみました。

[public] って何?

この [public] は「セクション名」であり、Windowsから見たときの共有フォルダ名を意味します。
Samba のsmb.conf ファイル内で [public] と書かれている箇所について、実はこれが Windowsクライアントから見たときの「共有フォルダ名」になります。

たとえば、自分の Linux サーバーのホスト名がowner-Virtual-Machineだった場合、Windows のエクスプローラーからは以下のようにアクセスできるようになります。
\owner-Virtual-Machine\public
ここでいうpublicはあくまで Samba 側の設定ファイルで定義された「セクション名」であり、実際に Linux 上に存在するディレクトリ名(例:/srv/samba/public)とは関係ありません。

では実際に Windows からアクセスしたときに「どこのフォルダの中身」が見えるのか?というと、それは smb.conf 内のpath =によって指定されていることがわかりました。

path =/srv/samba/public の意味
以下のような設定がありましたが、

このとき、Windows 側からは \owner-Virtual-Machine\public という共有として見えますが、実際にアクセスしているデータは Linux 側の /srv/samba/public フォルダの中身です。

つまり:

見えている名前(Windows) 実際の中身(Linux)
\\owner-Virtual-Machine\public /srv/samba/public

このように、Sambaが「見た目の共有名」と「中の実体」を橋渡ししてくれる仕組みになっています。

実際に上記のようにまとめて書いてますが、Sambaの役割について最初は全然わかっておらず、この架け橋になっている意味が全然分かっていなかったです。この記事を読んでいる方からするとそんなの当たり前じゃんと思われるもしれないですが、理解できるのに少し時間がかかりました。

/srv ってどんな意味?

/srv は「サービス用データを置く場所」であり、WebやSambaなどのサービスがクライアント向けに公開するデータを配置するディレクトリです。これは FHS(Filesystem Hierarchy Standard)で定義されています。
参考:https://koanacademy.jp/srv_fhs

writable = yes の意味

これは、「この共有に書き込みを許可するかどうか」を指定するものです。
yes:ファイル作成・削除などが可能(ただし、ファイルシステムのパーミッションも要確認)
no:読み取り専用
補足:パーミッションの設定が適切でないと、writable = yes にしても書き込めない場合があります。
参考記事:https://xtech.nikkei.com/it/article/COLUMN/20061101/252430/

guest ok = yes の意味

この設定は「ゲストアクセスを許可するかどうか」を意味します。
guest ok = yes → ユーザー名・パスワードなしでアクセス可能。guestでアクセス可能とする。
guest ok = no → Sambaに登録されたユーザーとしてログインが必要

guest onlyの意味

このオプションを有効にすると、アクセスは常に「guest」ユーザー扱いになります。
ファイルが作成されるときの所有者は:
 ユーザ:nobody
グループ:nogroup

参考記事:https://self-development.info/【ubuntu】sambaの設定(ユーザー追加・パスワード設定な/
|

creat mask=0664の意味

ここで使われているmaskは制限をかけるフィルターみたいなもの
つまり、作成されるファイルのパーミッションを制限するルールになります。
0=なし、4=読み、2=書、1=実行なので 自分と同じグループの人は読み書きできますが、それ以外の人は読み取り専用になります。権限については以前、下記記事でも記載しました。
https://zenn.dev/he_service/articles/2b1804381de2dc

directory mask = 0775

フォルダ内で新しく作られるフォルダ(ディレクトリ)の権限を決める設定です。
自分と同じグループの人はそのフォルダにアクセスして編集できるが、それ以外の人は中を見るだけになります。

force group = samba の意味

共有フォルダにアクセスしてくるすべてのユーザーが、
Linux のsambaというグループに属しているかのように振る舞います。

その結果:
ファイルを新規作成した場合、そのファイルの「グループ所有者」はsamba になります。
実際のユーザーがsambaグループに属していなくても、強制的に samba グループの権限が使われる形になります。

具体的に何が起こるか
たとえば、以下のように設定したとします:
[public]
path = /srv/samba/public
writable = yes
force group = samba
そして、user1 というユーザー(グループは user1)がファイルを作成したとします。

  • 通常の場合(force groupなし):
    -rw-r--r-- 1 user1 user1 0 Jun 10 10:00 example.txt

  • force group = samba の場合:
    -rw-r--r-- 1 user1 samba 0 Jun 10 10:00 example.txt
    → 所有者は user1 のままですが、グループがsambaに強制されるようになります。

使い道
チームでファイル共有する際に、誰が作っても「同じグループ権限」でファイルが管理されるようにしたいときに便利。
これにより、別ユーザーが作ったファイルでも、同じグループでアクセス・編集しやすくなる

注意点
force group を使う前に、対象となる samba グループが Linux上に実在する必要があります。
このforce groupの意味をしっかり理解できていなかったのでうまくログインができなったときに
対処方法がわかっていませんでした。

参考記事:http://leo.ec.t.kanazawa-u.ac.jp/manuals/samba-2.2.7b-ja-1.0/ja-htmldocs/smb.conf.5.html#FORCEGROUP

まとめ
今回の記事では、以下のような点を自分なりに整理しました。

  • [public] はWindowsから見たときの共有名
  • path はLinux側の実体フォルダ
  • writable, guest ok, create mask, force group など、共有に関わる細かな設定
    ファイルやディレクトリの所有者・グループ管理の考え方

設定の1行1行には意味があるということを、実際に設定して、アクセスして、確認して…を繰り返すことで少しずつ理解が深まってきました。まだ理解できていないことも多いですが、地道に積み上げていきます。

HESI :技術や日々のお仕事などを紹介します

Discussion