Linux ACL で Samba 共有のサブディレクトリを探索できない

Linux ACL で Samba 共有のサブディレクトリを探索できない

基本的な問題は、ドメイン接続された QNAP があり、ユーザーがバックアップから自分のファイルを復元できるように、Samba 経由で RSnapshot スナップショットを公開したいということです。(元の RSnapshot HowTo によると:http://rsnapshot.org/rsnapshot/docs/docbook/rest.html#バックアップの復元

ただし、新しいスナップショットが継承するデフォルトの ACL (setfacl -mg:MYDOM\Domain\ Users:rx) を設定しない限り、共有スナップショットの内容を参照することはできません。

RSnapshotの概要

時間別/日別/週別/月別のスナップショットを作成し、標準および拡張 Linux ACL を正しく保存します。スナップショットは次のディレクトリに保存されます。

/share/CACHEDEV1_DATA/Local Backups

権限の変更を防ぐために、そのディレクトリのデフォルトの ACL をクリアし、デフォルトの権限を設定しました。権限は次のとおりです。

# ls -al
drwxrwxrwx    4 admin    administ      4096 Nov 22 17:00 Local Backups/

# getfacl Local\ Backups/
# file: Local Backups/
# owner: admin
# group: administrators
user::rwx
user:admin:rwx
user:guest:---
group::rwx
group:MYDOM\domain\040users:r-x
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::rwx

つまり、スナップショット サブディレクトリ (hourly.0、hourly.1 など) のデフォルトの権限は次のようになります。

# cd hourly.0

# ls -al
drwxrwxrwx    3 admin    administ      4096 Nov 22 16:02 ./

# getfacl .
# file: .
# owner: admin
# group: administrators
user::rwx
group::rwx
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::rwx

この時点で、RSnapshot は完全にテストされ、期待どおりに動作しています。(FS 権限または Samba に問題があるかどうかを判断するために、権限はかなり緩やかになっています。)

サンバの概要

WebGUI から LocalBackups という共有を作成し、smb.conf ファイルを確認すると、変更しなくても動作するはずです。LocalBackups ディレクトリには問題なくアクセスできますが、バックアップ (hour.0、hourly.1 など) にアクセスしようとするたびに、「\192.168.1.20\LocalBackups\hourly.0 にアクセスする権限がありません」というエラー メッセージが表示されます。

smb.conf の [global] セクションは次のとおりです。

[global]
# Add this, apparently Windows 7 Bug.
# acl allow execute always = yes
log level = 3
passdb backend = smbpasswd
workgroup = MYDOM
security = ADS
server string =
encrypt passwords = Yes
username level = 0
#map to guest = Bad User
null passwords = yes
max log size = 10
socket options = TCP_NODELAY SO_KEEPALIVE
os level = 20
preferred master = no
dns proxy = No
smb passwd file=/etc/config/smbpasswd
username map = /etc/config/smbusers
guest account = guest
directory mask = 0777
create mask = 0777
oplocks = yes
locking = yes
disable spoolss = no
load printers = yes
veto files = /.AppleDB/.AppleDouble/.AppleDesktop/:2eDS_Store/Network Trash Folder/Temporary Items/TheVolumeSettingsFolder/.@__thumb/.@__desc/:2e*/.@__qini/.Qsync/.@upload_cache/.qsync/.qsync_sn/.@qsys/.streams/.digest/
delete veto files = yes
map archive = no
map system = no
map hidden = no
map read only = no
deadtime = 10
server role = auto
use sendfile = yes
unix extensions = no
store dos attributes = yes
client ntlmv2 auth = yes
dos filetime resolution = no
wide links = yes
#force unknown acl user = yes
force unknown acl user = yes
template homedir = /share/homes/DOMAIN=%D/%U
inherit acls = yes
domain logons = no
min receivefile size = 256
case sensitive = auto
domain master = auto
local master = no
enhance acl v1 = yes
remove everyone = yes
conn log = no
kernel oplocks = no
max protocol = SMB2_10
smb2 leases = yes
durable handles = yes
kernel share modes = no
posix locking = no
lock directory = /share/CACHEDEV1_DATA/.samba/lock
state directory = /share/CACHEDEV1_DATA/.samba/state
cache directory = /share/CACHEDEV1_DATA/.samba/cache
printcap cache time = 0
acl allow execute always = yes
server signing = disabled
aio read size = 1
aio write size = 0
streams_depot:delete_lost = yes
streams_depot:check_valid = no
fruit:nfs_aces = no
fruit:veto_appledouble = no
winbind expand groups = 1
pid directory = /var/lock
printcap name = /etc/printcap
printing = cups
show add printer wizard = no
realm = mydom.local
ldap timeout = 5
password server = mydc001.mydom.local
pam password change = yes
winbind enum users = Yes
winbind enum groups = Yes
winbind cache time = 3600
idmap config * : backend = tdb
idmap config * : range = 400001-500000
idmap config MYDOM : backend = rid
idmap config MYDOM : range = 10000001-20000000
host msdfs = yes
vfs objects =  shadow_copy2 acl_xattr catia fruit qnap_macea streams_depot aio_pthread

[LocalBackups] セクションは次のとおりです。

[LocalBackups]
comment =
path = /share/CACHEDEV1_DATA/Local Backups
browsable = yes
oplocks = yes
ftp write only = no
recycle bin = no
recycle bin administrators only = no
qbox = no
public = yes
#invalid users = "guest"
#read list = @"MYDOM\Domain Users"
#write list = "admin"
#valid users = "root","admin",@"MYDOM\Domain Users"
guest ok = yes
read only = yes
inherit permissions = no
shadow:snapdir = /share/CACHEDEV1_DATA/_.share/LocalBackups/.snapshot
shadow:basedir = /share/CACHEDEV1_DATA/Local Backups
shadow:sort = desc
shadow:format = @GMT-%Y.%m.%d-%H:%M:%S
smb encrypt = disabled
strict allocate = yes
streams_depot:check_valid = yes
mangled names = yes
admin users =
admin only = "admin"
#nt acl support = no

この構成を使用すると、LocalBackupds ディレクトリには入ることができますが、スナップショットのサブディレクトリ (hourly.0、hourly.1 など) には入ることができません。

コメントアウトされた行は、違いがあるかどうかを確認するために試したものですが、コメントアウトされた行の有無にかかわらず、動作は一貫しています。

スナップショット ディレクトリの 1 つ (つまり hourly.0) の ACL を変更して MYDOM\Domain Users を含めると、Samba 経由でそのディレクトリ (つまり hourly.0) に入ることが許可されます。ディレクトリの権限は次のようになります。

# cd hourly.0

# ls -al
drwxrwxrwx    3 admin    administ      4096 Nov 22 18:00 ./

# getfacl .
# file: .
# owner: admin
# group: administrators
user::rwx
group::rwx
group:MYDOM\domain\040users:rwx
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::rwx

現時点では、QNAP で適切なログを有効にする方法がわかりません。基本的な WebUI ログ情報から、ユーザー名などとともに SMB 接続要求が渡されていることがわかります。Samba 構成は FS アクセス許可よりも厳格であるように思われますが、推測にすぎません。

この段階では、ACL、Samba、またはその両方に関する私の知識が不足しているかどうかはわかりません。何かアイデアはありますか?

答え1

Samba でこの問題を解決しようとする代わりに、QNAP が作成したデフォルトに Samba 構成をリセットしました。(つまり、コメント アウトされた行のコメントを解除しました。また、smb.conf自分や他の管理者によって新しい共有などが作成された場合に Web GUI が調整されたファイルを上書きする可能性があるため、長期的にはより安全であると思われます。)

次に、ファイル システムのアクセス許可を変更して、ディレクトリのMYDOM\Domain Users読み取り権限を持つグループの拡張 ACL を追加します。r+x

/share
/share/CACHEDEV1_DATA
/share/CACHEDEV1_DATA/homes

この方法では、ファイルがバックアップされると、ドメイン ユーザーはディレクトリまで移動できますhomes。ただし、スナップショット ディレクトリ ( ) から継承されるデフォルトの ACL はなく/share/CACHEDEV1_DATA/Local Backups、ユーザーのホーム ディレクトリも変更されていないため、元のユーザーのみが自分のホーム ディレクトリにアクセスできます。

RSnapshotの変更

拡張 ACL は保持されていると思っていましたが、そうではありませんでした。ホーム ディレクトリの標準 ACL がドメイン ユーザーとグループで設定されているため、正しく見えるだけでした。つまり、標準 ACL は保持されましたが、拡張 ACL は保持されませんでした。これを修正するために、rsnapshot スクリプトを編集し、-A次のように変更して rsync にフラグを追加しました。

my $default_rsync_short_args = '-a';

my $default_rsync_short_args = '-aA';

スナップショット ディレクトリ (hourly.0 など) へのアクセスを修正するために、create_backup_point_dir関数の一番下に次のコードを追加して、関数に権限の変更も加えました。

system("setfacl -m g:MYDOM\\\\Domain\\ Users:rx \"$destpath\"");

今では期待通りに動作し、ユーザーはバックアップから自分のプライベートファイルを復元できます。 :)

さらにテストを行った後、これを rsnapshot のパッチに組み込むつもりです。

関連情報