◆ファイル共有の基本
⑴単にファイル共有するだけの場合。
# vi /etc/samba/smb.conf
[share1]
path = /var/lib/samba/shares/share1
read only = No #或いは「writeable = yes」も同じ
;EOF
# chmod 1777 /var/lib/samba/shares/share1
# echo test > /var/lib/samba/shares/share1/test.txt
# systemctl restart smb.service
この場合、Windowsクライアントからアクセスすると以下の様になる。

⑵共有一覧における表示制限
# vi /etc/samba/smb.conf
[share1-2]
path = /var/lib/samba/shares/share1
comment = %S on %L #共有名とNetBIOS名をコメントに表示。
[share1-3]
path = /var/lib/samba/shares/share1
browseable = no
[share1-4$]
path = /var/lib/samba/shares/share1
;EOF
# systemctl restart smb.service
この場合、Windowsクライアントからアクセスすると以下の様になる。
share1-3は「browseable = no」、share1-4$は「$」で隠し共有となっている為表示されません。
上記表示を詳細に変えると以下になります。

share1-2はcommentパラメータを設定している為、コメントが表示され、それはSamba変数も使用可能です。
⑶複数用のファイル共有
# vi /etc/samba/smb.conf
[shared]
path = /var/lib/samba/shares/shared
hosts allow = 10.0.1.0/255.255.255.0
writeable = no
write list = @project1
valid users = @project1 @users
writeable = yes
force group = project1 #所有グループは必ずproject1になる
force create mode = 664 #ディレクトリ内に新規に作成されるファイルは必ず644
force directory mode = 775 #ディレクトリ内に新規に作成されるディレクトリは必ず775
;EOF
# mkdir -p /var/lib/samba/shares/shared
# groupadd project1
# chgrp project1 /var/lib/samba/shares/shared
# chmod g+w /var/lib/samba/shares/shared
# ls -l /var/lib/samba/shares | grep -i shared
drwxrwxr-x 2 root project1 6 10月 8 18:04 shared
複数ユーザー用のファイル共有において、
①ファイル(ディレクトリ)へのアクセス、作成、編集時に適用される所有グループが常に一定になる。
②作成、編集したファイル(ディレクトリ)に対して常に所有グループの書き込み権が設定される。
という設定を行います。
①の設定を行うにはforce groupというパラメータがあり、このパラメータによりファイル共有内ファイルやディレクトリへのアクセス、作成、編成時に強制的に適用される所有グループを指定できます。
②の設定を行うにはforce create mode と force directory mode パラメータを使用します。両パラメータにより、ファイル共有内に新規に作成するファイルやディレクトリに特定のパーミッションを強制的に設定することが出来ます。
⑷最低限の複数ユーザー用ファイル共有の設定
# vi /etc/samba/smb.conf
[global]
#文字コード関連の設定
dos charset = CP932
# ホームディレクトリの共有設定
[home]
browseable = no
writeable = yes
# 複数ユーザー用のファイル共有設定
[shared]
path = /var/lib/samba/shares/shared
writeable = yes
force group = project1 #ファイルやディレクトリ作成時のグループはproject1になる。
force create mode = 664 #create mask = 664 と同じ
force directory mode = 775 #directory mask = 775 と同じ
;EOF
# useradd user1
# pdbedit -a user1
# useradd user2
# pdbedit -a user2
# systemctl restart smb.service
続いてWindowsクライアントからuser1でSAMBAサーバーの共有フォルダにアクセスします。
(前回共有フォルダへログオンしたユーザーのアクセスした情報が残っておりユーザー変更出来ない?
具体的には
# smbstatus
Samba version 4.19.4
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
2109 testuser1 testuser1 10.0.1.1 (ipv4:10.0.1.1:63781) SMB3_11 - partial(AES-128-CMAC)
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------------
No locked files
# smbcontrol 2109 close-share shared #←smbcontrol <dest> close-share <sharename>なので
これでセッション切断できなかった
smbstutsを確認しながら何回か試す。
# smbstatus
Samba version 4.19.4
PID Username Group Machine Protocol Version Encryption Signing
----------------------------------------------------------------------------------------------------------------------------------------
Service pid Machine Connected at Encryption Signing
---------------------------------------------------------------------------------------------
No locked files
これでもログオン情報を覚えているのでWindowsクライアントから
net use \\10.0.1.12\ /USER:user
これでもダメだった
暫く経つとセッションアウトになってた……。仮想マシンとPC両方シャットダウンすれば情報は消えた。)
user1でWindowsクライアントからsharedフォルダへアクセスし、user1フォルダを作成します。
作成したuser1フォルダ内にuser1.txtを作成します。
続いてuser2でSambaサーバーのsharedフォルダにアクセス出来ることを確認し(仮想マシンとPCシャットダウンしてから?)

user1.txtが編集出来ることを確認します。
user1フォルダの中でuser2フォルダを作成出来ることを確認し
user2フォルダの中でuser2.txtを作成出来ることを確認します。
これをUnixサーバー側から確認すると以下のようになります。
# ls -lR /var/lib/samba/shares/shared/
/var/lib/samba/shares/shared/:
合計 0
drwxrwxr-x 3 user1 project1 36 10月 9 01:24 user1
/var/lib/samba/shares/shared/user1:
合計 4
-rwxrw-r-- 1 user1 project1 5 10月 9 01:18 user1.txt
drwxrwxr-x 2 user2 project1 23 10月 9 01:28 user2
/var/lib/samba/shares/shared/user1/user2:
合計 0
-rwxrw-r-- 1 user2 project1 0 10月 9 01:28 user2.txt
先程定義した通り、全てのファイル、ディレクトリの所有グループがproject1になっており、書き込み権が設定されていることが確認出来ます。
⑸共有単位のアクセス制御
◆一部のIPアドレスからアクセスのみ許可する。
・ネットワークアドレス(x.x.x.x)/サブネットマスク(x.x.x.x)
・x.x.x.x(特定ホストを指定する場合)
〇設定例
hosts allow = 192.168.1.0/255.255.255.0 192.168.10.1
・hosts allowパラメータ:複数の条件を列挙して指定できる。
また、EXCEPTというキーワードを設定することで、192.168.1.0/24の範囲のIPアドレスからのアクセスを原則許可するが、192.168.1.1からのアクセスは例外として拒否するといった要件を実現出来る。以下設定例。
hosts allow = 192.168.1.0/255.255.255.0 EXCEPT 192.168.1.1
hosts deny パラメータも文法は同じ。hosts allowとhosts denyの両方から指定されたIPアドレスはアクセス拒否されます。
⑹ファイル共有にアクセス可能なグループを制御する
valid usersパラメータにより、共有アクセス可能なユーザーの制限が出来ます。
以下、共有アクセス可能なユーザーを、test1、project1グループのメンバー、usersグループのメンバーに限定する設定。
vaild users = @project1 +users test1 #グループ名を指定する場合は名前の前に「+」か「@」
逆に拒否するパラメータは、Invalid usersで、このパラメータで設定されたユーザーやグループは例え vaild usersが設定されていてもアクセス拒否されます。
⑺一部のユーザー、グループに対してのみ書き込みを許可する。
write listパラメータにより、一部のユーザーやグループのみ書き込みを許可するファイル共有を作成することも出来ます。
writeable = no
write list = test1 @project1 #valid usersパラメータと同じ。
writeable = noとwrite listを設定することでユーザーtest1及びproject1グループは書き込み。それ以外のユーザーは読み込みのみ可能となります。
⑺複雑なアクセス制御
writeable = no
write list = @project1