У меня есть общий ресурс 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:/ ./