●共有フォルダの設定目標
ActiveDirectoryに登録されているユーザを使用してSambaで作成した共有フォルダの権限わけを行います。既にwinbindを利用してActiveDirectoryとKerberos連携しているという前提です。
仮に以下のような環境を想定し、この要件をどのように実現してくかを考えてみることにします。ドメイン名はいずれも「AD-DOMAIN.LOCAL」です。
・自由共有フォルダ
説明 | 全ユーザが読み書きできる共有 |
共有フォルダ名 | public |
パス | /var/samba/public |
読み書き可能 | 全ユーザ |
読み取り専用 | – |
特記事項 | 他のユーザが作成したファイルも読み書きできるようにする |
・情報提供フォルダ
説明 | 全ユーザに情報を提供するための共有 |
共有フォルダ名 | info |
パス | /var/samba/info |
読み書き可能 | admin |
読み取り専用 | 全ユーザ |
特記事項 | メンテナンス担当のadmin以外は全員読取り専用でのアクセスになる |
・技術部共有フォルダ
説明 | 技術部だけの共有 |
共有フォルダ名 | gijutu |
パス | /var/samba/gijutu |
読み書き可能 | sato, suzuki |
読み取り専用 | 技術部全員 |
特記事項 | 技術部以外のユーザは一切アクセス不可。読み書き可能ユーザ は他のユーザが作成したファイルも読み書き可能とする。 |
・営業部共有フォルダ
説明 | 営業部だけの共有 |
共有フォルダ名 | eigyou |
パス | /var/samba/eigyou |
読み書き可能 | 営業部全員 |
読み取り専用 | – |
特記事項 | 営業部以外のユーザは一切アクセス不可。eigyoフォルダ直下に 各営業部ユーザーは自分のフォルダを持ち、その内部はその ユーザーのみ書き換え可能、他営業部社員は、読み取り専用で アクセス可能。eigyoフォルダ直下にkokyakuフォルダを作成 し、その内部はその営業部社員全員が書き換え可能とする。 |
■自由共有フォルダ
以下のようにコマンドを入力し、「/var/samba/public」フォルダを作成します。続いて「/var/samba/public」フォルダを作成し、権限設定を行います。
# cd /var/samba # mkdir public # chmod 777 public |
作成が終了したら、lsコマンドで以下のようにディレクトリが作成されていることを確認してください。
# ls -l drwxrwxrwx root root public |
続いてsmb.confの設定内容を以下に示します。
[public] path = /var/samba/public create mask = 0777 directory mask = 0777 |
このように設定された状態で、ユーザー「sato」が、「public」内にファイル/ディレクトリを作成した場合、以下のような権限でファイル/ディレクトリが作成されることを確認してください。
ユーザーが作成したディレクトリに設定される権限
drwxrwxrwx sato sato |
ユーザーが作成したファイルに設定される権限
-rwxrw-rw- sato sato |
全ユーザーがアクセス、読み書き可能で、どのユーザーも、他ユーザーの作成したフォルダ、ファイルを自由に読み書き可能となります。 誰でも書き換え、削除が可能なので、運用にはその点注意が必要となる設定です。
■情報提供フォルダ
読み書き可能:admin
読み取り専用:全ユーザー
と、ユーザーにより権限を変えてやる必要があります。この部分が、Sambaにおける認証、権限設定が担う部分なります。具体的には、Sambaの設定項目である、「write list」を使います。
write list | write listに設定されたユーザ、およびグループは共有上のファイルに対し て更新権と参照権が与えられます。このパラメータに設定されたユーザは read onlyパラメータがyesにされていてもファイルの更新権を持ちます。 一人一人ユーザ名で指定するのが大変な場合はグループ名による指定を行 うこともできます。 |
read list | read listに指定されたユーザはread onlyのパラメータの設定に関係なく参 照権しか与えてくれません。write listと同様にグループ名での指定も可能 です。 |
今回は、 read only = yes write list = admin とすることで、基本は「read only」ですが、「write list」に設定したadminユーザーだけは例外で、書き込み可能となる設定です。具体的に順を追って設定方法を説明します。
・ ディレクトリの作成
「/var/samba/public」と同様に、端末で「/var/samba/info」フォルダを作成します。
# cd /var/samba # mkidr info # chmod 777 info |
smb.confの内容は次のようになります。
[info] path = /var/samba/info read only = yes create mask = 0777 directory mask = 0777 write list = AD-DOMAIN+admin ---ディレクトリ権限--- drwxrwxrwx root root /var/samba/info |
ユーザーが作成したディレクトリに設定される権限
drwxrwxrwx admin admin |
ユーザーが作成したファイルに設定される権限
-rwxrw-rw- admin admin |
この設定により、「admin」だけが書き込み可能で、他全ユーザーは読み取り専用でアクセス可能な共有ができあがります。
ただし、この設定は少し考察が必要です。 まず、「create mask」「directory mask」は必要か、ということです。 これらの設定を、SWATで「ディフォルト値」ボタンを押しディフォルト値に戻すと、「admin」が作成したファイル、フォルダ権限は以下のようになります。 ※create mask のデフォルト値は「0744」、directory maskのデフォルト値は「0755」です。
ユーザーが作成したディレクトリ
drwxr-xr-x admin admin |
ユーザーが作成したファイル
-rwxr--r-- admin admin |
この状態でも、一般ユーザーは全ファイル、ディレクトリを読み取り可能でアクセスできるので要件上問題はありません。しかし、今は担当が「admin」ですが、担当が変わることもあり、また、担当者を追加することもあるかと思います。その時に備えて、「create mask」「directory mask」を残しておくことにします。 例えば、担当者が「suzuki」に変わり、「write list = suzuki」に変更したとします。この場合、
-rwxr--r-- admin admin |
という権限設定のされたファイルを、「suzuki」は変更できなくなります。
-rwxrw-rw- admin admin |
という状態であれば、「write list」の変更だけで、個別ファイル/ディレクトリの権限はそのままで済みます。
他の方法として、担当者が変わったらファイルの所有者を一斉に入れ替えることも可能ですし、もう一つ新たな設定「force user/force group」を使って以下のような方法も選択肢として考えられます。
force user / group | どのユーザーが書き込みを行っても、ファイル/ディレクトリのユーザー、 グループを、強制的にforce user/force group指定のユーザー、グループ にしてしまう設定です。 この設定を行っても、Sambaにおける認証、 「write list」による書き込み権限の付与などはあくまでログインユーザー で行われ、Linuxファイルシステムに対する権限として指定したユーザー/ グループが使用されることに注意が必要です。 |
この設定を使うことにより、担当者、つまり「write list」がどのように変わろうとも、内部のファイルは一定の権限状態で維持できるメリットがあります。 新たにこの共有フォルダ管理専用に「info」ユーザーを作成し(「ユーザー用にプライベートグループを作成」のチェックはONのまま)、以下のような設定を行います。「info」ユーザーでログインしてという方法もありますが、「info」ユーザーは、root管理者のみが知る、内部管理用とした方がいいでしょう。
[info] path = /var/samba/info read only = yes write list = AD-DOMAIN+admin force user = AD-DOMAIN+info force group = @AD-DOMAIN+infogroup ---ディレクトリ権限--- drwxr-xr-x info info /var/samba/info ユーザーが作成したディレクトリに設定される権限 drwxr-xr-x info infogroup ユーザーが作成したファイルに設定される権限 -rwxr--r-- info infogroup |
ディレクトリ権限の変更は、端末を開き以下のように行います。所有者の変更は「chown」、グループの変更は「chgrp」コマンドを使用します。
# cd /var/samba # chmod 755 info # chown info # chgrp infogroup |
この設定により、「write list」が今度どのように変わろうとも、「write list」ユーザーのみ、かつ、「write list」ユーザーなら誰でも書き換え可能な共有フォルダが出来上がります。
■技術部共有フォルダ
「技術部全員」いう指定と、指定外ユーザーのアクセスを不可にする指定方法です。 「技術部全員」を設定するのに、グループという概念を用います。AD側に「Gijutsu」というグループを作成し、そのグループにユーザ「sato」と[suzuki」を所属させているという前提です。
指定外ユーザーのアクセスを不可にする指定方法としては、「valid users」設定を使います。
invalid users | invalid usersパラメータに指定されたユーザはその共有にアクセスできな くなります。 |
valid users | このパラメータにユーザが指定されていなければ全てのユーザが共有にア クセスできます。しかしいったんvalid usersにユーザが指定されると、指 定されていないユーザは共有にアクセスすることが禁止されます。invalid とvalidの両方に同じユーザが指定されている場合はinvalidの設定が優先されます。 |
admin users | admin usersに設定したユーザはこの共有内ではroot権限をもってファイ ル操作を行うことができます。ファイル共有に対する全ての操作が許可さ れることになるため、ユーザの指定には注意が必要です。 |
smb.confの設定は以下のようになります。
[gijutsu] path = /var/samba/gijutsu read only = yes create mask = 0777 directory mask = 0777 valid users = @AD-DOMAIN+gijutsu write list = AD-DOMAIN+sato, AD-DOMAIN+suzuki ---ディレクトリ権限--- drwxrwxrwx root root /home/public/gijutsu ユーザーが作成したディレクトリに設定される権限 drwxrwxrwx sato sato ユーザーが作成したファイルに設定される権限 -rwxrw-rw- sato sato |
この設定で、「gijutsu」グループのみがアクセス可能で、その中で「write list」に列挙されたユーザーのみが書き込み可能、その他の「gijutsu」グループのユーザーは読み取り専用となります。この設定も少し考察を加えてみます。「給与や、経理情報のような機密情報が、rwx-rw-rw-とすべてのユーザーが読み書き可能な状態では少々都合が悪いです。
ファイル自体の権限をもう少し厳しくしておくには、以下の設定を行います。
[gijutsu] path = /var/samba/gijutsu read only = yes create mask = 0770 directory mask = 0770 valid users = @AD-DOMAIN+gijutsu write list = AD-DOMAIN+sato, AD-DOMAIN+suzuki force group = @AD-DOMAIN+gijutsu ---ディレクトリ権限--- drwxrwx--- root root /var/samba/gijutsu ユーザーが作成したディレクトリに設定される権限 drwxrwx--- sato gijutsu ユーザーが作成したファイルに設定される権限 -rwxrw---- sato gijutsu |
「create mask」「directory mask」「force group」の変更、ディレクトリ権限の変更を行っています。 今回のディレクトリの権限設定は、端末を開き以下のように行います。
--- su cd /var/samba chmod 770 gijutsu chgrp gijutsu gijutsu --- |
この変更により、Sambaを経由せずSambaサーバーに直接ログインしたとしても、「gijutsu」グループのユーザー、あるいは所有者以外は内容を見ることはできなくなりました。
■営業部共有フォルダ
少し複雑な営業部フォルダを作成します。 但し書きの部分がわかりにくと思いますので、図示して説明します。
営業部社員として、sato、yamashita、tanaka、suzukiがいるとします。 「eigyo」ディレクトリ以下に、それぞれのユーザー毎のディレクトリがあり、権限としては以下のようになります。
eigyo ┗ sato ・・・・・ satoは読み書き可能。他は読み取り専用。 ┗ yamashita ・・・ yamashitaは読み書き可能。他は読み取り専用。 ┗ tanaka ・・・・・ tanakaは読み書き可能。他は読み取り専用。 ┗ suzuki ・・・ suzukiは読み書き可能。他は読み取り専用。 ┗ kokyaku ・・・ 全営業部社員が読み書き可能。 |
これらeigyo直下のディレクトリは、あらかじめ管理者が作成し用意しておくのが簡単でしょう。以下のように作成します。「/var/samba/eigyo」ディレクトリは、root以外変更不可とし、勝手にフォルダが作成できないようにしています。 「/var/samba/eigyo/[各ユーザー]」ディレクトリは、所有ユーザー以外変更不可、eigyoグループのみ参照可能としています。 「/var/samba/eigyo/kokyaku」ディレクトリは、eigyoグループの書き換えを可能にしています。
---ディレクトリ権限--- drwxr-x--- root eigyo /var/samba/eigyo drwxr-x--- sato eigyo /var/samba/eigyo/sato drwxr-x--- yamashita eigyo /var/samba/eigyo/yamashita drwxr-x--- tanaka eigyo /var/samba/eigyo/tanaka drwxr-x--- suzuki eigyo /var/samba/eigyo/suzuki drwxrwx--- root eigyo /var/samba/eigyo/kokyaku |
設定は以下のように行います。
[eigyo] path = /var/samba/eigyo read only = no create mask = 0750 directory mask = 0750 valid users = @AD-DOMAIN+eigyo force group = @AD-DOMAIN+eigyo |
ユーザーが作成したディレクトリに設定される権限
drwxr-x--- sato eigyo |
ユーザーが作成したファイルに設定される権限
-rwxr----- sato eigyo |
となります。
さて、ここで問題です。確かに各ユーザーのディレクトリに作成されたファイル/ディレクトリ関しては、要件どおり、各ユーザーのみ書き換え可能で、他営業部社員は読み取り専用となりました。しかし「kokyaku」ディレクトリではどうでしょう。これでは、作成したユーザーのみ書き換え可能で、他営業部社員の書き換えができません。
この問題を解消するために、別に「eigyo_kokyaku」という共有フォルダを作成し、こちらをその用途で使ってくださいと、営業部長にお願いするのも一つの方法です。しかしそれもくやしいので、もうひとつ新しい設定を使って、解消してくことにします。
inherit permissions |
あるディレクトリ内に作成されたファイル/ディレクトリは、
親ディレクトリの権限設定を継承(inherit)するという設定です。
inherit permissions = yes
とした場合、例えば「drwxrw-r--」という権限を持ったディレクトリ内では、
新しく作成されるファイル/ディレクトリの権限は以下のようになります。
rwxrw-r-- 新たに作成されるファイル
drwxrw-r-- 新たに作成されるディレクトリ
この設定は「create mask/directory mask」の指示よりも優先されます。
また、適用されるのは、当然Sambaを経由した場合だけで、Linux上での操作、ftp、nfsなど
他のアクセス方法の場合は適用されません。
|
「inherit permissions」を使って、設定を以下のように変更します。
[eigyo] path = /var/samba/eigyo read only = no inherit permissions = yes valid users = @AD-DOMAIN+eigyo force group = @AD-DOMAIN+eigyo |
この設定により、 satoが「sato」ディレクトリに作成したファイル
-rwxr----- sato eigyo |
satoが「kokyaku」ディレクトリに作成したファイル
-rwxrw---- sato eigyo |
となることを確認してください。 これで、要件を満たす設定ができました。