Назад | Перейти на главную страницу

монтирование общих ресурсов Windows в Linux с сохранением разрешений Windows

У меня есть общий ресурс Windows на сервере Windows2003 (WINJOE), который я хочу создать резервную копию на машине Linux (LINUXJOE), которая правильно присоединена к домену. Моя цель - сделать резервную копию общих папок WINJOE в LINUXJOE, сохранив права / владельцев Windows. После прочтения соответствующей литературы у меня сложилось впечатление, что это невозможно ...

В любом случае, в идеальном мире я хотел бы установить долю выигрыша (только для чтения), например \\ WINJOE \ important_folder в LINUXJOE и запустите rsync оттуда в каталог резервных копий.

Что у меня есть на данный момент:

\\ WINJOE \ important_folder -> общая папка для резервного копирования
LINUXJOE: / mnt / important -> точка монтирования \\ WINJOE \ important_folder на LINUXJOE
LINUXJOE: / backup / $ DATE-important -> целевой каталог резервного копирования

На данный момент я могу войти в LINUXJOE, используя свою учетную запись домена Windows, и если я создаю файлы в файловой системе 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 и сохранить этого владельца вместе со всеми атрибутами безопасности Windows, когда я выполняю rsync из общего ресурса Windows в свой ящик резервного копирования Linux?

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

К сожалению, списки ACL для Linux и Windows очень разные. Когда вы получаете доступ к файловой системе Linux из Windows через Samba, Samba удается сопоставить более простые списки ACL Linux с ACL Windows, не теряя слишком много информации. Чтобы это работало, вам уже понадобятся многие параметры, которые есть в вашем smb.conf.

Обратный путь намного сложнее и, вероятно, даже невозможен, тем более что монтирование Linux имеет другую семантику, чем сопоставленный общий ресурс Windows. И монтирование происходит с драйвером ядра, который вообще не реализует списки управления доступом. Единственный способ, который у нас есть, - это получить информацию с помощью дополнительных программ, таких как getcifsacl.

Таким образом, обычные инструменты Linux, такие как rsync, ничего не знают о списках ACL Windows и не могут их хранить. Если вам нужно восстановить эти ACL, вам нужно будет сохранить их самостоятельно с помощью getcifsacl и восстановить с помощью setcifsacl. Поскольку эти команды, к сожалению, работают только с отдельными файлами, а setcifsacl не может работать напрямую с выводом getcifsacl, вам понадобится сложный набор скриптов для резервного копирования / восстановления этих ACL. Быстрый поиск не показал никакого существующего решения.

Один из способов обойти это - позволить Windows выполнять резервное копирование и использовать общий ресурс Linux в качестве хранилища для файлов резервных копий (а не отдельных файлов).

Как насчет создания большого файла в каталоге samba и монтирования его как цикла? Вот как это могло бы работать, на основе отличной статьи http://users.softlab.ntua.gr/~ttsiod/backup.html

dd if=/dev/zero of=/mnt/windows/BigFile bs=1M count=1 seek=150000

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

По умолчанию при монтировании Samba размер файла ограничен 2 ГБ (или 4 ГБ, не уверен). Вот почему "lfs"опция используется при монтировании, чтобы учесть файлы большего размера.

mount -o loop /mnt/important/BigFile /mnt/backup

losetup /dev/loop0 /mnt/windows/BigFile

опционально с использованием шифрования: losetup -e aes256

mkfs.ext4 /dev/loop0
mount /dev/loop0 /mnt/important/BigFile
cd /mnt/important/BigFile
rsync -avz --exclude /proc --exclude /sys root@server:/ ./