2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

Sambaでアクセス制御!

Samba3.0(以降、お産婆さんと言う)になってから、Windows鯖を完璧に近くエミュレートすることが出来るようになった。PDCはもちろんのことDirectoryサービスを使って統合管理も出来るようになった。ただし、Windows鯖がDomainコントローラになり認証鯖になる場合に限っては、Windows側のクライアントアクセスライセンス(以降、CALと言う)に依存される。変わって、LDAPを使ってSambaをPDCとして統合管理する場合は、CALは関係なくなりライセンスは無制限となる。これだけでも十分に利用価値有りだ。
さらに、お産婆さんの良いところとしてWindows鯖はセキュリティパッチ更新後に再起動を求められることが多い、正直これは非常に迷惑な話だ。連続稼働で運用している鯖を再起動させることは社員の作業効率を低下させる要因になるからだ。しかし、お産婆さんは訂正パッチを当てても再起動させることはまず無い。
このような背景から、俺の会社でSambaでサーバを立て共有ディレクトリを作成してのアクセス制御の実際を紹介する。弊社では、ネットワークの規模がさほど大きくないのでLDAPは使わずお産婆さんで単独のsmbpasswdを使ってユーザ認証を行う方式で話を進める。
ただし、ここではお産婆さんのアクセス制御の実際の説明のみでお産婆さんの インストール方法 は割愛するので了解願いたい。

お産婆さん運用環境)
マシンスペック:
school:~# lspci
0000:00:00.0 Host bridge: Intel Corp. 82815 815 Chipset Host Bridge and Memory Controller Hub (rev 04)
0000:00:01.0 PCI bridge: Intel Corp. 82815 815 Chipset AGP Bridge (rev 04)
0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev 02)
0000:00:1f.0 ISA bridge: Intel Corp. 82801BA ISA Bridge (LPC) (rev 02)
0000:00:1f.1 IDE interface: Intel Corp. 82801BA IDE U100 (rev 02)
0000:00:1f.2 USB Controller: Intel Corp. 82801BA/BAM USB (Hub #1) (rev 02)
0000:00:1f.3 SMBus: Intel Corp. 82801BA/BAM SMBus (rev 02)
0000:00:1f.4 USB Controller: Intel Corp. 82801BA/BAM USB (Hub #2) (rev 02)
0000:01:00.0 VGA compatible controller: NVidia / SGS Thomson (Joint Venture) Riva128 (rev 10)
0000:02:09.0 Ethernet controller: Silicon Integrated Systems [SiS] SiS900 PCI Fast Ethernet (rev 02)

OS:Debian Linux Sarge
Linux school 2.6.8-2-386 #1 Tue Aug 16 12:46:35 UTC 2005 i686 GNU/Linux


1.アクセス制御のポリシー
今回のアクセス制御は、以下のようなポリシーで行う。

1)サーバ登録ユーザは個人フォルダ( home )を設置、他の人にはアクセス拒否&ブラウズできないようにする。
2)共有フォルダ( InfoSystemCommonFolder )を設置、usersグループのメンバーしかアクセス許可しない。さらに、taro hanako kenjiの各ユーザは書き込み許可、readusersユーザは参照のみ許可とする。


2.smb.confの設定
1項の条件より、以下にそれを満たしたsmb.confの設定の内容を示す。さらに、アクセス制御に必要なところの説明を同時に掲載している。大切な設定は、青の太字で示している。

[global]
workgroup = Manager
netbios name = school
load printers = no
disable spoolss = yes
passdb backend = smbpasswd
unix charset = EUCJP-MS
dos charset = CP932
display charset = EUCJP-MS
server string = Samba Server
security = user
smb passwd file = /etc/samba/smbpasswd

map to guest = Never
;ゲストアクセス拒否、登録されていないユーザのアクセス拒否及びパスワード間違いは拒否

;map to guest = Bad User
;guest ok = Yesとして共有設定した場合のみ、登録されていないユーザはアクセス許可

;map to guest = Bad Password
;guest ok = Yesとして共有設定した場合のみ、登録ユーザがパスワードを間違ったときゲストアクセス許可
;尚、暗号化パスワードの設定間違いで、受付拒否された場合も同じ

hosts allow = 192.168.0. 192.168.10. 127.
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
log file = /var/log/samba/log.%m
max log size = 50
dos filetimes = Yes
dos filetime resolution = Yes

[homes]
comment = %U さん専用のフォルダです
;public = no
guest ok = no
browseable = no
writable = yes
create mask = 0640
directory mask = 0750
valid users = %U
;この設定( [ home ] )は、ユーザ個別のホームフォルダの設定。各ユーザのみしか利用できない設定になっている

[InfoSystemCommonFolder]
comment = public directories
;共有ディレクトリのコメント

path = /usr/common
;共有ディレクトリとなるUnixパス

;public = yes
;guest ok = と同じ意味

browseable = yes
;この共有ディレクトリをブラウズさせるか否か

guest ok = no
;この共有設定に対して、ゲストアクセスを許可するか否か

guest only = no
;この共有設定に対して、アクセスを全てゲストユーザのみにするか否か

writable = yes
;この共有設定に対して、書き込みを許可するか否か

directory mask = 0770
;ディレクトリを作成するときの属性を指定する、指定は4桁の8進数で行う

create mask = 0770
;ファイルを新規作成するときの属性を指定する、指定は4桁の8進数で行う

write list = taro hanako kenji
;この共有設定に対して、書き込み許可にするユーザもしくはグループの指定

read list = readusers
;writable = Yesになっていても、この共有設定に対して、参照のみとするユーザもしくはグループの指定

inherit permissions = yes
;Yesを指定すると、ディレクトリ作成時に上位ディレクトリの属性をこのディレクトリへ引き継ぐ

valid users = @users
;この共有設定に対してのアクセス制限をユーザもしくはグループ毎に設定する


3.実際にテストしてみる

1)taro(リードライト許可)ユーザでloginしてみる
図1の共有ディレクトリアクセスへリード、ライトしてみたが問題なく行えた。

図1

2)readusers(参照しか出来ないユーザ)でloginしてみる
■ まず、共有ディレクトリへアクセスしてディレクトリにsshd_configファイルをコピーしたら以下図2のエラーメッセージが表示され書き込みが拒否されることを確認した。

図2

■ 次に、既存のsshd_configファイルを削除しようとしたら、以下図3のエラーメッセージが表示され削除が拒否されることを確認した。

図3

3)クライアントからのSambaファイル鯖ブラウズの注意点
自分のクライアントがSambaファイル鯖のドメイン外に居る場合のSambaファイル鯖へのアクセスに関して、ログインする場合は以下の要領でloginする。ユーザー名・パスワード入力ダイアログが出たら、

ユーザー: <ドメイン名>\<ユーザー名>
パスワード:********

ユーザ名の前にドメイン名を入力する、ユーザー名のみではlogin出来ないので優位が必要だ。俺はよく間違える(笑)。


4.2項を応用したsmb.confの設定

1)或る会社のファイルサーバのアクセス制御のポリシーを表に示す

社内共通文書オリジナル書式部門別文書
superadmin(管理者のみ)参照権/書込権参照権/書込権参照権/書込権
admin(本部長のみ)参照参照権/書込権参照権/書込権
manager(課長以上)参照参照参照権/書込権
shain(一般社員)参照参照参照

グループ別メンバー: honbuグループ(superadmin,admin,manager)、usersグループ(shain)

説明 : superadmin(管理者のみ)は、社内共通文書ディレクトリ、オリジナル書式ディレクトリ、部門別文書ディレクトリへ参照及び書込が可能、admin(本部長のみ)は、社内共通文書ディレクトリは参照のみ可能、オリジナル書式ディレクトリ、部門別文書ディレクトリへ参照及び書込が可能、manager(課長以上)は、社内共通文書ディレクトリ、オリジナル書式ディレクトリへ参照のみ可能、部門別文書ディレクトリへ参照及び書込が可能、shain(一般社員)は、社内共通文書ディレクトリ、オリジナル書式ディレクトリ、部門別文書ディレクトリへ参照のみ可能、以上の条件でファイルサーバのアクセス権を設定する。

2)1を基にしたsmb.confの設定

[global]
workgroup = kaisya
netbios name = faile_server
load printers = no
disable spoolss = yes
passdb backend = smbpasswd
unix charset = EUCJP-MS
dos charset = CP932
display charset = EUCJP-MS
server string = Samba Server
security = user
smb passwd file = /etc/samba/smbpasswd
map to guest = Never
hosts allow = 192.168.0. 192.168.10. 127.
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
log file = /var/log/samba/log.%m
max log size = 50
dos filetimes = Yes
dos filetime resolution = Yes

[全社ファイルサーバ]
comment = public directories
path = /usr/iso
                   ;全社のファイルサーバの大元のディレクトリ
public = yes
browseable = no
                   ;ブラウズが出来ないようになっている
guest ok = no
guest only = no
writable = yes
                    ;書込可能としている
directory mask = 0755
              ;ディレクトリ作成は、755
create mask = 0755
                ;新規ファイル作成も、755
write list = superadmin
              ;書込オーナーはsuperadmin
read list = @honbu @users
           ;参照グループは、honbuグループとusersグループ
inherit permissions = yes
valid users = @honbu @users
         ;このディレクトリは、honbuグループとusersグループがアクセスできる

[社内共通文書]
comment = public directories
path = /usr/iso/2006年度/社内共通文書
public = yes
browseable = yes
                  ;ブラウズが出来る
guest ok = no
guest only = no
writable = yes
                    ;書込可能としている
directory mask = 0755
              ;ディレクトリの作成は、755
create mask = 0755
                ;新規ファイル作成も、755
write list = superadmin
              ;書込オーナーはsuperadmin
read list = @honbu @users
           ;参照グループは、honbuグループとusersグループ
inherit permissions = yes
valid users = @honbu @users        
;このディレクトリは、honbuグループとusersグループがアクセスできる

[部門別文書]
comment = public directories
path = /usr/iso/2006年度/部門別文書
public = yes
browseable = yes
                  ;ブラウズが出来る
guest ok = no
guest only = no
writable = yes
                    ;書込可能としている
directory mask = 0775
              ;ディレクトリの作成は、775
create mask = 0775
                ;新規ファイル作成も、775
write list = @honbu
                 ;書込オーナーは、honbuグループメンバー
read list = @users                
;参照グループは、honbuグループとusersグループ
inherit permissions = yes
valid users = @honbu @users
         ;このディレクトリは、honbuグループとusersグループがアクセスできる

[オリジナル書式]
comment = public directories
path = /usr/iso/オリジナル書式
public = yes
browseable = yes
                  ;ブラウズが出来る
guest ok = no
guest only = no
writable = yes                  
;書込可能としている
directory mask = 0775
              ;ディレクトリの作成は、775
create mask = 0775
                ;新規ファイルの作成も、775
write list = superadmin admin
         ;書込オーナーは、superadminユーザとadminユーザのみ
read list = @honbu @users
           ;参照グループは、honbuグループとusersグループ
inherit permissions = yes
valid users = @honbu @users
         ;このディレクトリは、honbuグループとusersグループがアクセスできる


5.Samba鯖追加構築の注意点(バックアップ鯖として運用する場合)

1)バックアップサーバを運用する
Sambaでファイル鯖を作って共有フォルダ化して運用していく場合には、必ずバックアップが取りたくなる。俺の場合は必ず同じ構成の鯖をもう一台構築して平行運用してミラーリングを行う。同じ鯖にバックアップを取ってもハードウェア障害時には何の意味も持たないからだ。そこで俺からのお勧めは、 ここ のようなWindowsクライアントを利用したミラーリングツールを使うと良いかも知れない。
したがって、Samba鯖が完成したら、そのsmb.confでもう一台同じ鯖を作ると安全だと考える。

2)Samba鯖追加構築の注意点
4項の2)のsmb.confの設定では、同じディレクトリ直下のサブディレクトリへアクセス権限を設定している。この状態でsambaを起動して、ディレクトリへバックアップデータを一機に流そうとすると怒られてしまうから注意が必要だ。つまり、あらかじめsmb.confで設定されているパスのディレクトリが無いのに、バックアップのためのTree構造になってるデータをいきなり流し込んだのが原因だ。
したがってこの場合は、smb.confの設定でトップディレクトリ[全社ファイルサーバ]のパスのディレクトリのみ設定し、その他アクセス制限する設定はコメントにして、実際に /usr/iso ディレクトリを作成してsambaをリスタートして/usr/isoディレクトリへのアクセスを確認してから、バックアップファイルを一機に流す。その後、バックアップファイルの確認をしたら、smb.confの[全社ファイルサーバ]以外のアクセス制御を行うpublicセクションをコメントアウトして元に戻して、sambaをリスタートする。これで、旨くいくはずだ。

以上

コメント