◆ゲスト認証によるファイル共有へのアクセス
WindowsにはGuestという特殊ユーザーが必ず存在しており、Guestユーザーを有効にすると、該当サーバー上に存在しないユーザーとしてアクセスした際に、自動的にGuestユーザーとして認識されます。これを便宜上ゲスト認証と言います。
⑴ゲスト認証の有効化とmap to guest パラメータ
Sambaでもmap to guestパラメータの設定により、ゲスト認証を有効化出来ます。
[global]
map to guest = bad user #デフォルトは「never」でゲスト認証無効。「 bad user」で有効化。
guest account = nobody #指定したユーザーとしてアクセスが行われる。デフォルトは「nobody」。
「map to guest = bad user」を設定することで、Sambaサーバーに対するゲスト認証が有効となります。しかし、セキュリティ上ゲスト認証による各ファイル共有へのアクセスは禁止されています。
ゲスト認証によるファイル共有へのアクセスを許可するには、以下の様な設定を各ファイル共有で設定します。
[share3]
guest ok = yes #ゲスト認証に成功したユーザーはゲストとして共有内リソースへアクセス。
guest only = yes #全てのアクセスをゲスト認証として扱う。
例)誰でもアクセス可能な共有ファイル
# vi /etc/samba/smb.conf
; simple smb.conf file for checking
[global]
map to guet = bad user
[tmp]
path = /tmp
guest ok = yes
;EOF
例)ダウンロード用のファイルの共有
[global]
map to guest = baduser #Sambaユーザーが存在しない場合でもゲスト認証可能。
[public]
path = /var/lib/samba/shares/public
guest ok = yes
writeable = no
writelist = @publicadm #publicadmグループ書き込み可能
force create mode = 664
force directory mode = 775
force group = publicadm
;EOF
publicadmグループに所属するユーザーが誰でもファイルを更新出来るようにpublicディレクトリを作成します。
# mkdir -p /var/lib/samba/shares/public
# groupadd publicadm
# chgrp publicadm /var/lib/samba/shares/public/
# ls -l /var/lib/samba/shares | grep -i publicadm
drwxr-xr-x 2 root publicadm 6 10月 9 18:29 public
# systemctl restart smb.service
◆ファイルやディレクトリの表示禁止
Sambaでファイル共有を構築すると、デフォルトではpathパラメータで指定したディレクトリ以下のファイルをWindowsから閲覧可能になり、場合により制御のファイルが表示されたり、ファイルの内容をみせたくないといったケースも想定されます。
また、誤って.exeファイルを実行することを避けたい場合、等、veto files パラメータを使用することで、指定の名前やディレクトリの作成やアクセスそのものを禁止させることが出来ます。
例)
veto files = /.?*/*.exe/*damedame*/ #禁止したいファイルは「/」で区切り。ファイル名にはワイルドカード文字「?」「*」が使用可能。
上記の場合、
・.(ドット)から始まる2文字のファイル
・拡張子が「.exe」ファイル。
・ファイル名途中に「damedame」が含まれるファイル
のアクセスや表示を禁止します。
・veto filesパラメータ無しの場合。
・veto filesパラメータを設定した場合。
・.exeファイルを共有ディレクトリにコピーしようとしてもエラーが発生して失敗する。
・特殊ファイルの表示、読み取り禁止。
/tmpや/devなどに共有を設定した場合、特殊ファイルの表示を防ぐ。
hide special files = yes #FIFO、ソケットなどの表示、アクセス禁止
・アクセス権の無いファイルの表示、読み取り禁止。
hide unreadable = yes #読み取り権の無いファイル一覧が表示されなくなる。
◆ファイル属性
WindowsにはUnixのファイルシステムには無い概念としてファイル属性という概念があります。例えばThums.dbやdesktop.iniといったシステムが使用するファイルを一般ユーザーから隠すために使われています。
〇ファイル属性一覧
属性:略字:意味
読み取り専用:R:ファイルを読み取り専用にする
アーカイブ:A:ファイルがバックアップ済みか如何かの情報を保持する。主にバックアップツールが用いる。
隠しファイル:H:ファイル一覧で表示されないようにする。主にシステムが利用するファイル。
システムファイル:S:ファイルシステムの使用するものであることを明示する。
ディレクトリ:D:ディレクトリであることを示す特殊な属性
属性なし:N:属性が設定されていないファイル。便宜上の属性。
〇拡張属性を用いたファイル属性の有効化
Sambaのデフォルトでは、読み取り専用属性とアーカイブ属性のみがサポートされ、その他のファイル属性は無視されます。ファイル属性に関するデフォルトのパラメータは以下になります。
map archive = yes #アーカイブ属性のマッピングを行う。
map hidden = no # 隠し属性のマッピングは行わない。
map system = no #システム属性のマッピングは行わない。
又、最近のSambaではExtend Attributes(拡張属性)という領域にファイル属性の情報を格納する機能がサポートされており、store dos attributes パラメータで有効化が可能で、上記よりもこちらの使用が推奨されています。
store dos attributes = yes #拡張属性にファイル属性を格納を有効化する。
「store dos attributes」を有効化すると上記の「map ~」が無効化される。
◆時刻精度とディレクトリの作成時刻をWindows互換にする。
WindowsとUnixのファイルシステムでは、ファイルシステム中の時刻情報の扱いに差があります。その為、Samba共有上にVisual Studioのビルド環境などを置く場合は、以下の様な設定を行わないと不具合(再コンパイル不要なファイルが毎回再コンパイル)が生じます。
dos filetime resolution = yes #2秒単位というFAT互換の精度の低い時刻分解能のサポート
fake directory create times = yes #ディレクトリの作成時間が常に1980年1月1日で返される。
◆シンボリックリンクの追跡
UNIXでは、シンボリックリンクを作成することで、ファイルやディレクトリが実際の名前、パスと別の名前、パスで存在するかのように扱う手法が広く使われています。
便利な機能ですが、ファイル共有外へのシンボリックリンク作成を許可してしまうとサーバー内の任意のパスが実質的に共有されてしまい、セキュリティ上好ましくない面もあるため、Sambaのデフォルトでは同一ファイル共有内へのシンボリックリンクのみが有効となっています。
ファイル共有内に、ファイル共有外へのシンボリックリンクを作成したうえで、Windowsクライアントからアクセスしようとしても、エラーになりシンボリックリンクを辿ることは出来ません。
何らかの理由でファイル共有外へのシンボリックリンクを有効したい場合は以下の設定を行います。
wide links = yes
allow insecure wide links = yes
ファイル共有内へのシンボリックリンクを含め、Sambaのシンボリックリンクの解析を全面的に無効にするには以下のパラメータの設定を行います。
follow symlinks = no #共有内を含め、シンボリックリンクのリンク先へのアクセスを全面禁止。
◆VFSによるファイル共有の機能拡張
Sambaではファイルシステムへのアクセスを仮想化するVFSという機能が実装されています。VFSモジュールを使うことで、Sambaが行うほぼすべてのファイル操作に対して、処理のフックや代替処理の呼び出しなどが可能になります。
〇主なVFSモジュール( vfs objects = ・・・形式)
モジュール名:機能
acl_tdb:NTFS情報をTDBに格納することでNTFS互換アクセス許可。
acl_xattr:NTFS情報を拡張属性に格納することでNTFS互換アクセス許可。
audit:簡単な監査機能。ユーザーのアクセスログ機能(syslogへ出力)
extd_audit:ユーザーのアクセスログ機能(syslog+Sambaのログへも出力)
full_audit:auditモジュールよりも詳細なログを出力
recycle:ごみ箱機能
shadow_copy:ボリュームシャドウコピー機能。
vscan-fsav:ウィルススキャン機能。
例1)ごみ箱機能の有効化
[home]
vfs objects = recycle #ごみ箱機能の有効化
recycle : keeptree = yes #ディレクトリの構造を保持する。
recycle : version = yes #同一ファイル名のファイルを上書きしない。
recycle : touch = yes #ごみ箱に入れたファイルの最終アクセス時刻を更新する。
recycle : maxsize = 20000000 #指定したサイズよりも大きなファイルはごみ箱に入らず削除。
recycle : exclude = *.tmp ~$* #ごみ箱に入れないファイルの指定。ここでは一時ファイル(*.tmp)やWordが生成する一時ファイルがごみ箱に入らず即時に削除される。
例2)アクセスの監査
[shared]
vfs objects = full_audit
full_audit : facility = local1
上記設定をした場合、rsyslog.confファイルに次のような行を追加する。
# vi /etc/rsyslog.conf
;*.info;mail.none;authpriv.none;cron.none /var/log/messages #以下の内容に変更
*.info;local1.none;mail.none;authpriv.none;cron.none /var/log/messages
local1.* /var/log/samba/audit.log #local1のファシリティログを適切なファイルに出力。
;EOF
# touch /var/log/samba/audit.log
# systemctl restart rsyslog.service smb.service
# systemctl is-active rsyslog.service smb.service
active