見出し画像

393.2 Linuxファイルシステムと共有/サービスのパーミッション

主題393:Sambaの共有の設定
393.2 Linuxファイルシステムと共有/サービスのパーミッション

LinuC300の試験範囲である主題390~397まであるうちの「主題393:Sambaの共有の設定」から「393.2 Linuxファイルシステムと共有/サービスのパーミッション」についてのまとめ

  • 重要度:3

  • 説明:
    混在環境においてLinuxファイルシステムのファイル許可について理解すること。

  • 主要な知識範囲
    - ファイル / ディレクトリ許可の制御に関する知識
    - SambaがLinuxファイルシステムのパーミッションおよび ACLを操作する方法について理解する
    - Samba VFSを使用してWindows ACLを保存する

  • 重要なファイル、用語、ユーティリティ:
    - smb.conf
    - chmod、 chown
    - create mask、 directory mask、 force create mode、 force directory mode
    - smbcacls
    - getfacl、 setfacl
    - vfs_acl_xattr、 vfs_acl_tdb および vfs objects


(補足)
Sambaユーザーは事前に作成されています。
(別記事 Appendix (準備その4)ユーザーを作成する 参照)


ファイル / ディレクトリ許可の制御に関する知識

~smb.confでのアクセスできるネットワークを制限する設定~
(別記事 393.1 ファイルサービス 参照)

  • hosts allow(allow hosts) =

  • hosts deny(deny hosts) =

~smb.confでのアクセスできるユーザーを制限する設定~
(別記事 393.1 ファイルサービス 参照)

  • valid users =

  • invalid users =

  • guest ok(public) = No

  • guest only = No

~smb.confでの所有者や所有グループに関する設定~
(別記事 393.1 ファイルサービス 参照)

  • force user =

  • force group(group) =

  • inherit owner = No

~smb.confでの読み書き権限に関する設定~
(別記事 393.1 ファイルサービス 参照)

  • read only = Yes / writeable = No

  • read list =

  • write list =

  • inherit permissions = No

  • veto files =

  • delete veto files = No

~smb.confでの表示に関する設定~
(別記事 393.1 ファイルサービス 参照)

  • hide dot files = No

  • hide files =

  • hide special files = No

  • hide unreadable = No

  • hide unwriteable files = No

~Linuxシステムでのアクセス権の設定~
Sambaでどのような設定をしてもファイルやディレクトリに対する読み書き権限はLinuxシステムのパーミッションによって決まるため、Linuxで所有者・所有グループの変更やアクセス権の変更をするコマンド操作が必要になる場面は必ず出てくる。

  • chmod
    アクセス権を設定するコマンド
    (LinuC101試験範囲のため解説は割愛)

  • chown
    所有者、所有グループを設定するコマンド
    (LinuC101試験範囲のため解説は割愛)


SambaがLinuxファイルシステムのパーミッションおよび ACLを操作する方法について理解する

~smb.confの共有セクションで設定するパラメータ~

  • create mask(create mode) = 0744
    ファイルを作成する際のパーミッションを決定する要素。
    ファイルのパーミッションに対してAND演算をすることで特定の権限を取り除くことができる。

  • directory mask(directory mode) = 0755
    ディレクトリを作成する際のパーミッションを決定する要素。
    ディレクトリのパーミッションに対してAND演算をすることで特定の権限を取り除くことができる。

  • force create mode = 000
    ファイルを作成する際のパーミッションを決定する要素。
    ファイルのパーミッションに対してcreate maskの適用後にOR演算をすることで特定の権限を与えることができる。

  • force directory mode = 000
    ディレクトリを作成する際のパーミッションを決定する要素。
    ディレクトリのパーミッションに対してdirectory maskの適用後にOR演算をすることで特定の権限を与えることができる。

  • inherit owner = No
    新たに作成するディレクトリやファイルの所有者について親ディレクトリの設定を引き継ぐ。

  • inherit permissions = No
    新たに作成するディレクトリやファイルのパーミッションについて親ディレクトリの設定を引き継ぐ。

  • dos filemode = No
    UNIXではファイルのパーミッションを変更できるはrootかファイルの所有者に限定されるが、Yesにするとファイルへの書き込み権限があればパーミッションの変更が可能である。

  • acl group contorol = No
    Yesにすると所有グループに属しているユーザーであればパーミッションの変更が可能になる。

~smbcacls~
(別記事 Appendix smbcaclsコマンド 参照)

smbcaclsコマンドを使用することで、Sambaサーバー側からWindowsマシン上にあるファイルのアクセス許可(ACL)の表示、修正や所有者および所有グループの変更が可能です。

改訂版 Sambaのすべて』(翔泳社)

(補足)ACL(Access Control List)について

chmodコマンドで変更するパーミッションは所有者と所有グループに対するアクセス権を設定できる。
一方、ACL(Access Control List)では一つのファイルに対してユーザーごとにアクセス権を設定できる。
ACLを利用するにはファイルシステムのマウントオプションに "acl" が含まれている必要がある。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# df -h
ファイルシス                      サイズ  使用  残り 使用% マウント位置
default/containers/rocky9-samba31    47G  882M   46G    2% /
none                                492K  4.0K  488K    1% /dev
udev                                1.9G     0  1.9G    0% /dev/tty
tmpfs                               100K     0  100K    0% /dev/lxd
tmpfs                               100K     0  100K    0% /dev/.lxd-mounts
tmpfs                               2.0G     0  2.0G    0% /dev/shm
tmpfs                               785M  8.2M  777M    2% /run
tmpfs                               4.0M     0  4.0M    0% /sys/fs/cgroup
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# mount | grep default/containers/rocky9-samba31
default/containers/rocky9-samba31 on / type zfs (rw,relatime,xattr,posixacl)
[root@rocky9-samba31 ~]#

~getfacl~
(別記事 Appendix gefacl,setfacl コマンド 参照)

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /var/samba_share/share1/
   :
-rw-r--r-- 1 user00 user00 17  611 23:04 windows10-user00.txt
-rw-r--r-- 1 user01 user01 17  611 23:04 windows10-user01.txt
-rw-r--r-- 1 user02 user02 17  611 23:05 windows10-user02.txt
   :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cat /var/samba_share/share1/windows10-user00.txt
edited by user00
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cat /var/samba_share/share1/windows10-user01.txt
edited by user01
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# cat /var/samba_share/share1/windows10-user02.txt
edited by user02
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfacl /var/samba_share/share1/windows10-user00.txt
getfacl: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user00.txt
# owner: user00
# group: user00
user::rw-
group::r--
other::r--

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfacl /var/samba_share/share1/windows10-user01.txt
getfacl: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user01.txt
# owner: user01
# group: user01
user::rw-
group::r--
other::r--

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfacl /var/samba_share/share1/windows10-user02.txt
getfacl: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user02.txt
# owner: user02
# group: user02
user::rw-
group::r--
other::r--

[root@rocky9-samba31 ~]#

~setfacl~
(別記事 Appendix gefacl,setfacl コマンド 参照

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /var/samba_share/share1/
   :
-rw-r--r-- 1 user00 user00 17  611 23:04 windows10-user00.txt
-rw-r--r-- 1 user01 user01 17  611 23:04 windows10-user01.txt
-rw-r--r-- 1 user02 user02 17  611 23:05 windows10-user02.txt
   :
[root@rocky9-samba31 ~]#


★ user00に切り替えてファイルを編集する ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# su - user00
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ cat /var/samba_share/share1/windows10-user00.txt
edited by user00
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 AAA" >> /var/samba_share/share1/windows1
0-user00.txt
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ cat /var/samba_share/share1/windows10-user00.txt
edited by user00
edited by user00 AAA
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 AAA" >> /var/samba_share/share1/windows10-user01.txt
-bash: /var/samba_share/share1/windows10-user01.txt: 許可がありません
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 AAA" >> /var/samba_share/share1/windows10-user02.txt
-bash: /var/samba_share/share1/windows10-user02.txt: 許可がありません
[user00@rocky9-samba31 ~]$


★ user01のファイルにuser00の書き込み権を付与する ★
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ exit
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# setfacl -m user:user00:rw- /var/samba_share/share1/windows10-user01.txt
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /var/samba_share/share1
   :
-rw-r--r--  1 user00 user00 38  611 23:07 windows10-user00.txt
-rw-rw-r--+ 1 user01 user01 17  611 23:04 windows10-user01.txt <--- ACLが設定され「+」表示が追加される
-rw-r--r--  1 user02 user02 17  611 23:05 windows10-user02.txt
   :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfacl /var/samba_share/share1/windows10-user01.txt
getfacl: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user01.txt
# owner: user01
# group: user01
user::rw-
user:user00:rw-  <--- 追加されたACL
group::r--
mask::rw-        <--- 追加されたACL
other::r--

[root@rocky9-samba31 ~]#


★ user00に切り替えてuser01のファイルにuser00で書き込めるか確認する ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# su - user00
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 BBB" >> /var/samba_share/share1/windows10-user00.txt
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ cat /var/samba_share/share1/windows10-user00.txt
edited by user00
edited by user00 AAA
edited by user00 BBB  <--- user00によって追加された行
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 BBB" >> /var/samba_share/share1/windows10-user01.txt
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ cat /var/samba_share/share1/windows10-user01.txt
edited by user01
edited by user00 BBB  <--- user00によって追加された行
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 BBB" >> /var/samba_share/share1/windows10-user02.txt
-bash: /var/samba_share/share1/windows10-user02.txt: 許可がありません
[user00@rocky9-samba31 ~]$


★ user01のファイルに設定したuser00の書き込み権を削除する ★
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ exit
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfacl /var/samba_share/share1/windows10-user01.txt
getfacl: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user01.txt
# owner: user01
# group: user01
user::rw-
user:user00:rw-  <--- 削除するACL
group::r--
mask::rw-        <--- 削除するACL
other::r--

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# setfacl -x mask:,u:user00 /var/samba_share/share1/windows10-user01.txt
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfacl /var/samba_share/share1/windows10-user01.txt
getfacl: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user01.txt
# owner: user01
# group: user01
user::rw-
group::r--
other::r--

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /var/samba_share/share1
   :
-rw-r--r-- 1 user00 user00 80  611 23:19 windows10-user00.txt
-rw-r--r-- 1 user01 user01 38  611 23:13 windows10-user01.txt  <--- ACLが削除され「+」が消えた
-rw-r--r-- 1 user02 user02 17  611 23:05 windows10-user02.txt
   :
[root@rocky9-samba31 ~]#


★ user00に切り替えてuser01のファイルにuser00で書き込めなくなることを確認する ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# su - user00
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 CCC" >> /var/samba_share/share1/windows10-user00.txt
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ cat /var/samba_share/share1/windows10-user00.txt
edited by user00
edited by user00 AAA
edited by user00 BBB
edited by user00 CCC  <--- user00によって追加された行
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 CCC" >> /var/samba_share/share1/windows10-user01.txt
-bash: /var/samba_share/share1/windows10-user01.txt: 許可がありません
[user00@rocky9-samba31 ~]$
[user00@rocky9-samba31 ~]$ echo "edited by user00 CCC" >> /var/samba_share/share1/windows10-user02.txt
-bash: /var/samba_share/share1/windows10-user02.txt: 許可がありません
[user00@rocky9-samba31 ~]$

Samba VFSを使用してWindows ACLを保存する

~VFSとは~
VFS(Virtual File System)はSamnaを拡張するための機能。
拡張できる機能はモジュールとして提供される。
(別記事 Appendix VFSモジュール 参照)

~acl_xattr~
拡張属性(EA)中にNTFSのアクセスコントロールリスト(ACL)を保存する。
有効化するにはグローバルセクション([grobal])に vfs objects = acl_xattr を追加する。
Samba3 マニュアル 日本語訳 vfs_acl_xattr
Samba4 マニュアル 日本語訳 vfs_acl_xattr

※Samba4 マニュアル 日本語訳より
このモジュールは以下のパラメータの既定値(No)を上書きする。
- inherit acls = Yes
- dos filemode = Yes
- force unknown acl user = Yes

~acl_tdb~
NTFSのアクセスコントロールリスト(ACL)をtdbファイルに保存する。
有効化するにはグローバルセクション([grobal])に vfs objects = acl_tdb を追加する。
tdbファイルは $LOCKDIR/file_ntacls.tdb に保存される。
Samba3 マニュアル 日本語訳 vfs_acl_tdb
Samba4 マニュアル 日本語訳 vfs_acl_tdb

※Samba4 マニュアル 日本語訳より
このモジュールは以下のパラメータの既定値(No)を上書きする。
- inherit acls = Yes
- dos filemode = Yes
- force unknown acl user = Yes

(補足)
$LOCKDIRはインストールする環境より異なる。
smbd -b | grep LOCKDIR コマンドで確認できる。

★ ソースからインストールしたSamba3の場合 ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# smbd -b | grep LOCKDIR
               :
   LOCKDIR: /usr/local/samba/var/locks
               :
[root@rocky9-samba31 ~]#
★ dnfコマンドでインストールしたSamba4の場合 ★
[root@rocky9-samba41 ~]#
[root@rocky9-samba41 ~]# smbd -b | grep LOCKDIR
               :
   LOCKDIR: /var/lib/samba/lock
               :
[root@rocky9-samba41 ~]#

~関連するパラメータ~

  • ea support = No
    この設定を有効(Yes)にすると、拡張属性(Extended Attribute, xattr, EA)が使用可能となる。
    拡張属性を使用する際にはファイルシステムでも user_xattr というオプションが有効になっている必要がある。

  • store dos attributes = No
    この設定を有効(Yes)にすると、Windowsのファイル属性は拡張属性のuser.DOSATTRIB に格納されgetfaclコマンドで確認できる。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# testparm
 :
[global]
        :
        ea support = Yes
        store dos attributes = Yes
        :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -l /var/samba_share/share1/
   :
-rw-r--r-- 1 user00 user00 80  611 23:19 windows10-user00.txt   <--- 拡張属性有効化する前に作成されたファイル
-rw-r--r-- 1 user00 user00  0  612 01:19 windows10-user00a.txt  <--- 拡張属性有効化した後に作成されたファイル
-rw-r--r-- 1 user01 user01 38  611 23:13 windows10-user01.txt
-rw-r--r-- 1 user02 user02 17  611 23:05 windows10-user02.txt
   :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfacl  /var/samba_share/share1/windows10-user00.txt
getfacl: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user00.txt
# owner: user00
# group: user00
user::rw-
group::r--
other::r--

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfattr -d  /var/samba_share/share1/windows10-user00.txt
※拡張属性有効化する前に作成されたファイルには拡張属性がない※
[root@rocky9-samba31 ~]#

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# getfacl  /var/samba_share/share1/windows10-user00a.txt
getfacl: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user00a.txt
# owner: user00
# group: user00
user::rw-
group::r--
other::r--

[root@rocky9-samba31 ~]# 
[root@rocky9-samba31 ~]# getfattr -d  /var/samba_share/share1/windows10-user00a.txt
getfattr: Removing leading '/' from absolute path names
# file: var/samba_share/share1/windows10-user00a.txt
user.DOSATTRIB=0sMHgyMAAAAwADAAAAEQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJnX23KAnNkBAAAAAAAAAAA=
※拡張属性有効化した後に作成されたファイルには拡張属性「user.DOSATTRIB」が付加されている※

[root@rocky9-samba31 ~]#

参考文献


この記事が気に入ったらサポートをしてみませんか?