web-dev-qa-db-ja.com

Samba:特定のユーザーのサブフォルダーを非表示にする

1人(または1人を除くすべて)のユーザーのパターンに一致する共有内のすべてのサブフォルダーを非表示にする方法はありますか?

_private_dataには表示され、user1には表示されないサブディレクトリ(user2と呼びましょう)が欲しいのですが。しかし、私はこのディレクトリがどこにあるかを事前に知ることができません。 user1がディレクトリShareThis/LookHereを作成してから、ディレクトリShareThis/LookHere/_private_dataを作成する可能性があります。 'user2'は、ShareThis/LookHereおよびすべてのサブディレクトリを読み取る権限も持っていますが、_private_dataサブディレクトリを表示できないはずです。

どういうわけかそれは可能ですか? hide filesveto files、およびdont descendオプションはすでに見つかりました。これは私が望むものと非常によく似ていますが、それらを一部のユーザーにのみ割り当てる方法と、共有の任意のサブディレクトリでそれらを一致させる方法がわかりません。

1
exilit

ついに私は解決策を見つけました。これは、ユーザー名に基づいてファイルを含めることによって機能します。 _privディレクトリの閲覧を許可するすべてのユーザーに対してファイルを作成(またはsymlink)する必要がありますが、私にはそれで問題ありません。

以下は、「画像」と呼ばれる共有の例です。

smb.conf:

[Images]
comment = Shared Images
path = /path/to/images
write list = user1, user2
valid users = user1, user2

# make sure the _priv directory cannot be accessed
hide files = /_priv/
veto files = /_priv/

# The following line allows to revert hide and veto options so that
# specific users are allowed to view private directories
include = /etc/samba/allowprivate.conf.%U

次に、ディレクトリにアクセスできる必要があるすべてのユーザーに対して、allowprivate.confを作成します。 (例:allowprivate.conf.user1)以下の内容:

# This reverts the settings from smb.conf, so that this user
# can access all files
hide files =  
veto files =

サブディレクトリでも機能するため、「特権」ユーザーは_privディレクトリを作成するだけで、非特権ユーザーはそのディレクトリにアクセスできません。

2
exilit

ディレクトリは非表示にする必要があるため、他のユーザーが読み取れないようにする必要があると思います。ユーザーが読み取ることを許可されていないファイルとディレクトリを本質的に非表示にするパラメータhide unreadableを調べることをお勧めします。これは1株当たりで設定できます。

0
Andreas Rogge