CentOS6 Sambaのアクセス権設定

スポンサーリンク

共有フォルダの設定目標

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


となることを確認してください。 これで、要件を満たす設定ができました。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする