私は Linux、ZFS、Samba を使用してバックアップ サーバーを構築しています。私以外のすべてのクライアントは Windows 10 を使用するため、Windows 10 を適切にサポートすることに重点を置いていますが、これは Linux 側の権限が安全でない (つまり、誰でも読み取りおよび書き込み可能) ことを許可する必要があるという意味ではありません。
POSIX ACL はグループ アクセスを許可するために最初に設定されたものだと思い、誤ってすべてのファイルから削除してしまったため、Windows 側のファイルのすべてのアクセス許可が壊れてしまいました。
この問題は、マニュアルのすべてのオプションを確認して設定をやり直すことで修正されました。必要な動作を得るためにどのオプションを設定すればよいかがわかりました。つまり、UNIX 権限を安全に保ちながら、Windows 側だけで権限を設定するということです。ただし、Samba が UNIX 権限を処理する方法については、まだ 2 つの点が理解できません。
を設定するとacl_xattr:ignore system acls = no
、UNIX 権限が Windows ACL のエントリ (CREATOR、GROUP、EVERYONE エントリ) になりますが、これは望ましくありません。ただし、 に設定するとyes
、所有者、グループ、権限は Windows 側の権限に影響を与えるようですが、それらは Samba によって強制されます。ディレクトリにroot:backup 0660
権限がある場合、Windows ACL に のエントリがあっても、ランダムはDomain User
そのディレクトリにアクセスできませんDomain Users
。グループを から に変更して、backup
NTusers
グループusers
にマップするDomain Users
と、機能します。したがって、明らかに UNIX 権限は強制されています。
Windows ACL が残りを拒否するようにする設定はありますか? つまり、Windows ACL が許可している場合はDomain Users
、UNIX 権限が何を言っているかに関係なく許可されますか? または、UNIX 権限を使用して Samba を無効にするだけでよいですか?
もう 1 つの疑問は、Samba が UNIX 権限をどのように保存するかということです。新しい構成では、 でしたinherit owner = yes
。これは、UNIX グループを別のものに変更しようとした場合を除き、Windows と UNIX の両方で期待どおりに機能しているようでした。当初、setgid ビットは、グループではなく所有者にのみ影響するjohn
と考え、共有にグループ として設定されていましたinherit owner
。ただし、setgid ビットを共有から削除し、グループをusers
再帰的に に変更すると、inherit owner = yes
Windows 10 クライアントから作成された新しいファイルとディレクトリは、引き続きグループ で作成されましたjohn
。ディレクトリ ツリーのどこにもグループ を含むディレクトリが残っていませjohn
んでした。念のため、Windows クライアントと Samba サーバーを再起動してみましたが、何も変わりませんでした。
Samba は UNIX 権限を他の場所に保存するので、ファイル システムから直接 UNIX グループを変更しても、Samba によって追跡されるグループには影響しませんか? または、Samba が新しいファイルとディレクトリにこの古いグループを引き続き使用する原因は何でしょうか?
以下に、Samba バージョン 4.7.6 構成の関連する可能性のあるオプションを示します。さらに情報が必要な場合は、お知らせください。
[global]
access based share enum = yes
acl group control = no
acl map full control = yes
acl_xattr:ignore system acls = yes
acl_xattr:default acl style = windows
create mask = 0775
directory mask = 0775
dos filemode = yes
dos filetime resolution = no
dos filetimes = yes
ea support = no
force create mode = 0600
force directory mode = 0600
force unknown acl user = no
guest account = nobody
guest ok = no
guest only = no
inherit acls = no
inherit owner = unix only
inherit permissions = no
invalid users = root
map acl inherit = yes
map archive = no
map hidden = no
map readonly = no
map system = no
map to guest = never
nt acl support = yes
obey pam restrictions = no
read only = yes
restrict anonymous = 2
security = user
server role = active directory domain controller
store dos attributes = yes
unix extensions = yes
vfs objects = dfs_samba4 acl_xattr shadow_copy2
[backups]
create mask = 0660
directory mask = 0770
ea support = yes
path = /mnt/pool/backups
read only = no
答え1
Samba は UNIX 権限を他の場所に保存するので、ファイル システムから直接 UNIX グループを変更しても、Samba によって追跡されるグループには影響しませんか? または、Samba が新しいファイルとディレクトリにこの古いグループを引き続き使用する原因は何でしょうか?
私はこの 2 番目の質問に対する答えしか見つけることができませんでした。 での実験中に、inherit owner
ある時点で NT ACL の一部として保存されている値が何であるかを知りたいと思ったので、 でディレクトリを調べたところ、samba-tool ntacl get /path/to/dir
驚いたことに の値として古い GID が表示されましたgroup_sid
。また、ファイル システムの他の場所に古い GID への参照がなくなったため、これが Samba が古い UNIX グループを保持している原因である可能性が高く、特に、継承所有者を または に設定するとunix only
、no
古い UNIX グループがなくなるためです。したがって、inherit owner
を に設定するとyes
(つまりunix and windows
)、Samba は UNIX グループを NT ACL に保存されているグループに設定するようです。
最初の質問への回答がまだ欲しいのですが、回避策として、NTグループをDomain Users
優先UNIXグループにマップするPOSIX ACL 経由で他のユーザーの権限を 0 に設定しますsetfacl -Rm d:o:---,o:--- /my/share
。