(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

Linux/UNIXファイルのアクセス制限

図2●Linux/UNIXファイルのアクセス制限

 Sambaの説明に入る前に,まずLinux/UNIXの基本的なファイルのアクセス制限について再確認しておこう。

 Linux/UNIXのファイル属性は,3けた(または4けた)の8進数(0~7の数値)で表現される。それぞれのけたが,「所有者」「グループ」「その他」ユーザーのアクセス権限を示している。そして,各けたの左側のビットから,順に「参照権限」「更新権限」「実行権限」を表している(図2[拡大表示])。

 また,ディレクトリの属性において,「実行権」は「ディレクトリに移動(読み取り)」を意味しているので,アクセスする際は必ず「実行権」が必要である。以下に例を挙げよう。

【例1】ファイル属性700(rwx------)は,「所有者」のみが参照・更新・実行権限を持ち,他のユーザーはアクセスできない
【例2】ファイル属性740(rwxr-----)は,「所有者」は参照・更新・実行権限を持ち,同一「グループ」は参照のみができる。「他のユーザー」はアクセスできない
【例3】ファイル属性774(rwxrwxr--)は,「所有者」と同一「グループ」は参照・更新・実行権限を持ち,他のユーザーは参照のみが可能である

 ファイル属性を変更するにはchmodコマンド,ファイルの所有者を変更するにはchownコマンド,ファイルのグループを変更するにはchgrpコマンドを用いる。これらコマンドの使い方を示す。

chmod ファイル属性 ファイル名
【例】chmod 775 file2.doc
chown ユーザー名 ファイル名
【例】chown odagiri file3.xls
chgrp グループ名 ファイル名
【例】chgrp kaihatsu file4.ppt

 コマンドの詳細については,manコマンドやhttp://linux.nikkeibp.co.jp/command/などを参考にしていただきたい。

Samba共有のアクセス制限

 Sambaでアクセス制限をかける上で関連のある,smb.confのパラメータを以下で解説する。

●全体設定[global]

●map to guest = never | bad user | bad password

 Samba全体でゲスト(登録されていないユーザーの)接続を許すかどうかを指定する。

 map to guest = never(デフォルト)では,ゲスト接続が許されず,登録されていないユーザーやパスワードが正しくないユーザーはアクセスできない。

●map to guest = bad user では,登録されていないユーザーであっても,guest ok = Yesと定義された共有であればアクセスできる。

●map to guest = bad passwrod では,登録されたユーザーがパスワードを間違えた場合,ゲストとして接続されることを意味する。したがって,guest ok = Yesと定義された共有であればアクセスできる。この設定をした場合,暗号化パスワードの設定が誤っているユーザー(Sambaが暗号化パスワード対応になっていない,ユーザーの暗号化パスワードsmbpasswdが設定されていないなど)もゲスト・アクセスになるので注意が必要である。

●各共有の設定(以下のパラメータを全体設定[global]中に指定すると,各共有での初期値となる)

●guest ok = Yes / No

 共有のゲストアクセスを許すかどうか指定する。この設定は,map to guestの指定がなされていないと有効にならない。

●guest only = Yes

 共有のアクセスをすべてゲスト権限にするかどうか指定する。この設定は,map to guestの指定がなされていないと有効にならない。

●writeable=yes/no

 共有を更新可能にするかどうかを指定する。

●write list = ユーザー名 や @グループ名

 writeable=noとした共有でも更新可能なユーザーやグループを指定する。グループ名は,@記号に続けて指定する。

●read list = ユーザー名 や @グループ名
 writeable=yesとした共有でも参照しかできないユーザーやグループを指定する。グループ名は,@記号に続けて指定する。

●create mask = 4けたの8進数

 ファイルを作成するときのファイル属性のマスクを指定する。デフォルトは0744であり,ここに設定されていないビットは,作成されたファイルの属性から削除される。

 作成されるファイルに対して特定の属性ビットを強制的に設定するには "force create mode" パラメータ使用する。作成されるディレクトリに対する属性のマスクについては "directory mask" パラメータを使用する。

●directory mask = 4けたの8進数

ディレクトリを作成するときの属性のマスクを指定する。デフォルトは0755であり,ここに設定されていないビットは,作成されたディレクトリの属性から削除される。

 作成されるディレクトリに対して特定の属性ビットを強制的に設定するには "force directory mode" パラメータ使用する。

●force user = ユーザー名

 接続する際に自動的(強制的)に設定されるユーザー名を指定する。

●force group = グループ名

 接続するすべてのユーザーが所属する,(既定値のプライマリ・グループとしての)Linux/UNIXのグループ名を指定する。

●inherit permissions = yes/no

 ディレクトリを作成した場合,上位ディレクトリのアクセス権を引き継ぐというオプション。

●username

 このパラメータはsecurity=shareのときだけ有効。複数のユーザーをカンマで区切ったユーザー・リストとして指定できる。入力したパスワードが(左から右に)個々のユーザー名に対して次々にテストされ,認証されるとアクセス可能になる。

 Usernameに指定するユーザー数が多いほどセキュリティ強度が落ちていく。

 では,これらのパラメータを用いて実際に共有を設定する実例を紹介する。どの例でも「/home/kikakuというディレクトリを“企画”の名称で共有」するものとする。また,全体設定[global]では,明示的な指定がなければ以下が指定されているものとする。

[global]
coding system = euc
client code page = 932
encrypt passwords = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
【例1】決まったユーザー(グループ)だけが,アクセス可能な共有の設定

 /home/kikakuの属性を775(rwxrwxr-x)とし,ディレクトリの所有者もグループもkikakuだとすると,同一のグループkikakuのユーザーだけが更新でき,他のグループは参照のみ可能な共有は以下のようにsmb.confに記述すればよい。なお,グループ内のユーザーをvalid usersとinvalid usersによって区別し,制限をかけることも可能だ。

[企画]
comment = 企画の共有フォルダ
path = /home/kikaku
writeable=yes
force create mask = 0664
force directory mask = 0775
inherit permissions = yes
【例2】アカウントを持つユーザーはだれでもアクセス(更新・参照)可能な共有の設定

 アカウントを持つユーザーはだれでもアクセスできるが,逆にLinuxにアカウントのない者はアクセスできない。/home/kikaku の属性を755(rwxr-xr-x)とし,ディレクトリの所有者をkikauというLinuxユーザーとしたときのsmb.confの指定例は次の通り。なお,この場合は全員がkikakuというLinuxユーザーとしてアクセスすることになる。

[企画]
comment = 企画の共有フォルダ
path = /home/kikaku
writeable=yes
force user = kikaku
【例3】だれでもアクセス可能な共有の設定
 アカウントがあっても,なくてもアクセス(更新・参照)できる。/home/kikaku の属性を 755(rwxr-xr-x)とし,ディレクトリの所有者をnobodyというユーザーとしたときのsmb.confの指定例は次の通り。なお,この場合はLinuxアカウントの有無にかかわらず全ユーザーがguest(=nobody)でアクセスすることになる。
[global]
map to guest = bad user
[企画]
comment = 企画の共有フォルダ
path = /home/kikaku
writeable=yes
guest only = Yes
guest ok = Yes

 だれでもアクセスできる共有はセキュリティ上危険なので,差し支えなければbrowseable = Noとして共有を見えなくしたり,全体設定[global]でbrowse list =noとしてコンピュータ自体を見えなくするなどの処置を施すと良いだろう。

(ミラクル・リナックス 小田切 耕司)