web-dev-qa-db-ja.com

Windowsのアクセス許可を維持しながらLinuxにWindows共有をマウントする

ドメインに適切に参加しているLinuxマシン(LINUXJOE)にバックアップしたいwindows2003サーバー(WINJOE)にWindows共有があります。私の目標は、Windowsのアクセス許可/所有者を維持しながら、WINJOEの共有フォルダーをLINUXJOEにバックアップすることです。関連する文献を読んだ後、私はこれが不可能であるという印象を受けています...

とにかく、理想的な世界では、(読み取り専用として)勝利シェアをマウントしたいと思います。 LINUXJOEで\\ WINJOE\important_folderを実行し、そこからバックアップディレクトリまでrsyncを実行します。

私がこれまでに持っているもの:

\\ WINJOE\important_folder->バックアップする共有フォルダ
LINUXJOE:/ mnt/important-> LINUXJOE上の\\ WINJOE\important_folderのマウントポイント
LINUXJOE:/ backup/$ DATE-重要->バックアップターゲットディレクトリ

現時点では、Windowsドメインアカウントを使用してLINUXJOEにログインできます。また、LINUXJOEのファイルシステムにファイルを作成すると、所有者が「somewinuser」ドメインユーザーとして表示されるため、WindowsからLinuxへのユーザーマッピングは問題なく機能します。次のコマンドを使用して\\ WINJOE\important_folderをマウントすると:

linuxjoe# mount.cifs //WINJOE/important_folder /mnt/important \
-o ro,user=backitup,dom=TODOMAIN,cifsacl,nounix  --verbose

私は得る:

ls -latrh

linuxjoe# ls -latrh /mnt/important
total 518M
-r-xr-xr-x 0 root root         518M Sep 28 01:19 test.mkv
-rwxr-xr-x 0 root root            0 Oct 25 19:04 testlalala
-rwxr-xr-x 0 root root            0 Oct 25 19:05 testkoko
drwxrwxrwx 1 root domain users    0 Oct 25 19:05 .
drwxr-xr-x 5 root root         4.0K Oct 29 16:29 ..


getcifsacl

linuxjoe# getcifsacl /mnt/important/test.mkv
REVISION:0x1
CONTROL:0x8404
OWNER:BUILTIN\Administrators
GROUP:TODOMAIN\Domain Users
ACL:Everyone:ALLOWED/I/FULL
ACL:NT AUTHORITY\SYSTEM:ALLOWED/I/FULL
ACL:BUILTIN\Administrators:ALLOWED/I/FULL
ACL:TODOMAIN\lukeskywalker:ALLOWED/I/FULL

rsyncing:

linuxjoe# rsync -apvXAgo /mnt/important/koko.mkv  /root/test/

linuxjoe# ls -latrh  /root/test/
total 518M
-rwxrwxrwx 1 root domain users 518M Sep 28 01:19 test.mkv
drwx------ 8 root root         4.0K Oct 29 18:29 ..
drwxr-xr-x 2 root root         4.0K Oct 29 18:29 .

Windows共有からLinuxバックアップボックスにrsyncするときに、Windows共有上のファイルの適切な所有者を表示し、その所有者をすべてのWindowsセキュリティ属性とともに保持することは可能ですか?

smb.conf

[global]
workgroup = TODOMAIN
realm=SOMEOFFICE.SOMEWHERE.GR
server string = %h server
wins support = no
security = ads
encrypt passwords = yes
obey pam restrictions = yes
template Shell = /bin/bash
template homedir = /home/%D/%U
password server=winjoe.someoffice.somewhere.gr
domain master = no
local master = no
prefered master = no

idmap config * : backend = rid
idmap config * : range = 5000-3000000000
idmap config * : base_rid = 0

idmap config TODOMAIN : backend = rid
idmap config TODOMAIN : range = 5000-3000000000
idmap cache time = 900
algorithmic rid base = 5000
client schannel = no
disable spoolss=yes

winbind separator=+
winbind use default domain=yes
winbind nested groups=yes
winbind enum users=yes
winbind enum groups=yes
winbind cache time= 300
winbind refresh tickets = yes

inherit acls = Yes
map acl inherit = Yes
acl group control = yes
3
manjiki

残念ながら、LinuxACLとWindowsACLは大きく異なります。 Sambaを介してWindowsからLinuxファイルシステムにアクセスすると、Sambaは、多くの情報を失うことなく、より単純なLinuxACLをWindowsACLにマップすることができます。これを機能させるには、smb.confにあるオプションの多くがすでに必要です。

特にLinuxマウントはWindowsマップ共有とは異なるセマンティクスを持っているため、その逆ははるかに難しく、おそらく不可能ですらあります。また、マウントは、ACLをまったく実装していないカーネルドライバーで発生します。私たちが持っている唯一の方法は、getcifsaclのような追加のプログラムで情報を取得することです。

したがって、rsyncのような通常のLinuxツールはWindows ACLについて何も知らず、それらを保存することはできません。これらのACLを復元する必要がある場合は、getcifsaclを使用して自分で保存し、setcifsaclを使用して復元する必要があります。残念ながら、これらのコマンドは単一のファイルでのみ機能し、setcifsaclはgetcifsaclの出力を直接処理できないため、これらのACLをバックアップ/復元するには高度なスクリプトのセットが必要になります。クイック検索では、既存のソリューションは表示されませんでした。

これを回避する1つの方法は、Windowsにバックアップを実行させ、Linux共有をバックアップファイル(個々のファイルではなく)のストレージとして使用することです。

1