- Резервное копирование в Linux на примере файлового сервера
- Защита от дурака
- Создание основного архива файлов
- «Защита от дурака» или как запретить изменение/удаление важных папок
- «Защита от дурака» или как запретить изменение-удаление важных папок
- «Защита от дурака» или как запретить изменение/удаление важных папок
Резервное копирование в Linux на примере файлового сервера
Файловый сервер — громко сказано.
Будем рассматривать файловую помойку, где всем разрешён полный доступ к файлам и нет разграничения прав.
То есть — наиболее распространённый вариант хранения важной документации в компаниях.
Наше резервное копирование будет многоуровневым.
- RAID Файлы должны находиться не на одном жёстком диске, а, как минимум, на зеркальном RAID-массиве. Уже здесь пойдёт дублирование файлов на физически разные устройства.
- Защита от дурака Например, задумчиво вращая мышкой над структурой папок человек случайно ткнул левую кнопку и переместил какой-то каталог в другой, сам того не заметив. Или удалил файл и тут же спохватился. Надо иметь возможность восстановить такие «потери» без обращения к основному архиву.
- Резервное копирование Создание основного архива файлов.
/mnt/storage/ | Точка монтирования для RAID, на котором лежат файлы |
---|---|
/mnt/storage/smb/ | Расшаренная папка |
/mnt/storage/bk/ | Резервные копии «защиты от дурака» |
/mnt/bk/ | Точка монтирования для хранилища архива. Это может быть сторонний samba-сервер, FTP-сервер или просто отдельный винчестер. |
Защита от дурака
Эта команда создаст в /mnt/storage/bk подкаталог smb с меткой текущей даты и времени в формате +%y%m%d-%H%M%S (6 цифр — год, месяц и день, минус, 6 цифр — часы, минуты и секунды), в который вместо файлов зальёт жёсткие ссылки на них.
Другими словами, мы создадим «образ» структуры нашего файлового хранилища.
- Такой «образ» практически не занимает места на жёстком диске и быстро создаётся, потому что файлы не копируются, на них просто ставятся жёсткие ссылки.
- При «случайном удалении» файла он останется на диске и будет доступен (man ln), то есть его восстановление займёт секунды.
- Структуру папок и файлов можно отследить с той актуальностью, с которой создаётся такой «бэкап».
- При удалении откровенно ненужного файла он будет продолжать занимать дисковое пространство, ровно до тех пор, пока не будет удалена последняя жёсткая ссылка на него.
- Жёсткие ссылки можно создавать только в пределах одной файловой системы.
- Не забывайте удалять старые «образы», автоматически или вручную. Иначе старые файлы будут накапливаться и место на разделе закончится.
- Отредактированный пользователем файл изменится сразу по всем жёстким ссылкам! Это способ хранения структуры каталогов, а не содержимого файлов!
Создание основного архива файлов
Можно использовать способ в лоб:
Сколько файлов пользователи успеют изменить с предыдущего резервного копирования? Нужно ли тратить дисковое пространство на файлы, которые не изменились?
Поэтому воспользуемся программой rsync.
-a | Режим архивной синхронизации. Симлинки копируются как симлинки, копирование происходит рекурсивно, сохраняются права доступа, владелец и время изменения файла. |
---|---|
-b | Делать копии изменённых файлов. Старый файл переименовывается: к имени добавляется суффикс. Новый файл ложится на его место. |
-v | Показывать подробности операций (см. ниже) |
-x | Не выходить за пределы файловой системы (игнорируются некоторые символические ссылки и mount —bind) |
—suffix | будет дописан в конец старого файла в архиве |
При первом запуске этой команды в /mnt/bk/smb/ ляжет полная копия файлов из /mnt/storage/smb.
При следующих запусках rsync будет копировать только изменённые файлы, причём в архиве будут оставаться и старые версии — с другими именами (со штампом времени в конце). То есть, при желании можно будет проследить эволюцию каждого изменяемого файла и восстановить его за любую дату архивирования.
Модифицируем команду, чтобы вести логи операций — по ним удобно отслеживать изменения в архивной копии.
rsync -abvx —suffix=»-`date +%y%m%d-%H%M%S`» /mnt/storage/smb /mnt/bk/smb/>/mnt/bk/smb/backup-`date +%y%m%d-%H%M%S`.txt
Если архивирование идёт на удалённый сервер, то лучше не монтировать его в /mnt/bk/, а настроить на нём ещё один rsync и не гонять лишний трафик по сети.
Осталось теперь добавить нужные задания в crontab и только изредка проверять как оно работает.
Внимание! В файле /etc/crontab символы «%» надо экранировать: «\%».
Файл /etc/crontab:
. # В 0 часов 1 минуту со вторника по субботу, от имени пользователя bkuser делаем сохранение структуры файлов и каталогов 1 0 * * 2-6 bkuser cp -lr /mnt/storage/smb /mnt/storage/bk/smb-`date +\%y\%m\%d-\%H\%M\%S`/
# В 0 часов 5 минут в те же дни и от того же пользователя делаем инкрементный архив всех файлов нашей файлопомойки. 5 0 * * 2-6 bkuser rsync -abvx —suffix=»-`date +\%y\%m\%d-\%H\%M\%S`» /mnt/storage/smb /mnt/bk/smb/>/mnt/bk/smb/backup-`date +\%y\%m\%d-\%H\%M\%S`.txt
. [Mon] [Day] 00:01:01 gw /USR/SBIN/CRON[. ]: (bkuser) CMD (cp -lr /mnt/storage/smb /mnt/storage/bk/smb-`date +%y%m%d-%H%M%S`/) [Mon] [Day] 00:05:01 gw /USR/SBIN/CRON[. ]: (bkuser) CMD (rsync -abvx —suffix=»-`date +%y%m%d-%H%M%S`» /mnt/storage/smb /mnt/bk/smb/>/mnt/bk/smb/backup-`date +%y%m%d-%H%M%S`.txt) .
«Защита от дурака» или как запретить изменение/удаление важных папок
Исторически так сложилось, что для своих мелких проектов держу виртуалку. Однако, так как я не использую ее ресурсы на 100%, решил не жадничать и пустил похоститься несколько друзей. Сайтов не много, деньги за хостинг не беру, поэтому ставить что-то вроде cpanel счел перебором. К тому же я их тех, кто предпочитает настраивать все вручную. Структуру выбрал следующую:
/home/hostuser/vhosts/sitename.ru/
И тут возник вопрос: как запретить пользователю удалять/переименовывать папки в sitename.ru? Если будет отсутствовать папка web, то и apache и nginx выдадут предупреждение, но все-равно загрузятся. Но если удалить/переместит папку logs, то и apache и nginx не запустятся из-за ошибки (по мне довольно странное поведение). Папка hostuser полностью принадлежит данному пользователю и его личной группе (hostuser:hostuser), а это означает, что при желании он сможет удалить любую внутреннюю папку/файл, даже если она будет принадлежать суперпользователю. Так как же запретить удаление/перемещение, чтобы пользователь (случайно или специально) не сломать весь хостинг?
После недолгого гугления решение было найдено. По мимо стандартных разрешений и acl, в файловых системах типа ext2, ext3, ext4 для файла можно выставлять дополнительные атрибуты. Подробней о всех атрибутах прочитать на Wiki, либо man chattr. Нас же интересует атрибут immutable. Данный атрибут для файла или папки может выставить только суперпользователь. Если назначит атрибут immutable на файл, то данный файл нельзя будет изменить или удалить (причем даже суперпользователь это не сможет сделать, пока не уберет данный атрибут). Если назначит атрибут immutable на папку, то данную папку нельзя будет удалить, а так же нельзя будет изменить структуру внутри нее. Тем самым получается, что если нам нужно защитить папку sitename.ru и структуру внутри нее, нам необходимо выполнить простую команду:
chattr +i /home/hostuser/vhosts/sitename.ru
Для снятия атрибута необходимо использовать флаг -i.
Если же нужно защитить только одну папку (например, logs), можно поступить следующим образом:
touch /home/hostuser/vhosts/sitename.ru/logs/.keep chattr +i /home/hostuser/vhosts/sitename.ru/logs/.keep
Собственно так можно поставить «защиту от дурака» (даже с правами суперпользователя).
Важно понимать, данная статья не об информационной безопасности. Замок на почтовом ящике — это информационная безопасность. Стекло на кнопке пожарной сигнализации — это защита от дурака.
Если создать файл .keep и дать ему атрибут -i, саму папку можно перенести и файл можно перенести. Нельзя удалить сам файл и структуру папок до этого файла.
Если вам требуется более надежный уровень безопасности, используйте атрибут immutable совместно с mount —bind. С помощью этой связки можно настроить защиту от намеренного изменения структуры.
«Защита от дурака» или как запретить изменение-удаление важных папок
2014-11-30 в 20:10, admin , рубрики: acl, linux, Настройка Linux
Исторически так сложилось, что для своих мелких проектов держу виртуалку. Однако, так как я не использую ее ресурсы на 100%, решил не жадничать и пустил похоститься несколько друзей. Сайтов не много, деньги за хостинг не беру, поэтому ставить что-то вроде cpanel счел перебором. К тому же я их тех, кто предпочитает настраивать все вручную. Структуру выбрал следующую:
/home/hostuser/vhosts/sitename.ru/
И тут возник вопрос: как запретить пользователю удалять/переименовывать папки в sitename.ru? Если будет отсутствовать папка web, то и apache и nginx выдадут предупреждение, но все-равно загрузятся. Но если удалить/переместит папку logs, то и apache и nginx не запустятся из-за ошибки (по мне довольно странное поведение). Папка hostuser полностью принадлежит данному пользователю и его личной группе (hostuser:hostuser), а это означает, что при желании он сможет удалить любую внутреннюю папку/файл, даже если она будет принадлежать суперпользователю. Так как же запретить удаление/перемещение, чтобы пользователь (случайно или специально) не сломать весь хостинг ?
После недолгого гугления решение было найдено. По мимо стандартных разрешений и acl, в файловых системах типа ext2, ext3, ext4 для файла можно выставлять дополнительные атрибуты. Подробней о всех атрибутах прочитать на Wiki, либо man chattr. Нас же интересует атрибут immutable. Данный атрибут для файла или папки может выставить только суперпользователь. Если назначит атрибут immutable на файл, то данный файл нельзя будет изменить или удалить (причем даже суперпользователь это не сможет сделать, пока не уберет данный атрибут). Если назначит атрибут immutable на папку, то данную папку нельзя будет удалить, а так же нельзя будет изменить структуру внутри нее. Тем самым получается, что если нам нужно защитить папку sitename.ru и структуру внутри нее, нам необходимо выполнить простую команду:
chattr +i /home/hostuser/vhosts/sitename.ru
Для снятия атрибута необходимо использовать флаг -i.
Если же нужно защитить только одну папку (например, logs), можно поступить следующим образом:
touch /home/hostuser/vhosts/sitename.ru/logs/.keep chattr +i /home/hostuser/vhosts/sitename.ru/logs/.keep
Собственно так можно поставить «защиту от дурака» (даже с правами суперпользователя).
«Защита от дурака» или как запретить изменение/удаление важных папок
Исторически так сложилось, что для своих мелких проектов держу виртуалку. Однако, так как я не использую ее ресурсы на 100%, решил не жадничать и пустил похоститься несколько друзей. Сайтов не много, деньги за хостинг не беру, поэтому ставить что-то вроде cpanel счел перебором. К тому же я их тех, кто предпочитает настраивать все вручную. Структуру выбрал следующую:
/home/hostuser/vhosts/sitename.ru/
И тут возник вопрос: как запретить пользователю удалять/переименовывать папки в sitename.ru? Если будет отсутствовать папка web, то и apache и nginx выдадут предупреждение, но все-равно загрузятся. Но если удалить/переместит папку logs, то и apache и nginx не запустятся из-за ошибки (по мне довольно странное поведение). Папка hostuser полностью принадлежит данному пользователю и его личной группе (hostuser:hostuser), а это означает, что при желании он сможет удалить любую внутреннюю папку/файл, даже если она будет принадлежать суперпользователю. Так как же запретить удаление/перемещение, чтобы пользователь (случайно или специально) не сломать весь хостинг?
После недолгого гугления решение было найдено. По мимо стандартных разрешений и acl, в файловых системах типа ext2, ext3, ext4 для файла можно выставлять дополнительные атрибуты. Подробней о всех атрибутах прочитать на Wiki, либо man chattr. Нас же интересует атрибут immutable. Данный атрибут для файла или папки может выставить только суперпользователь. Если назначит атрибут immutable на файл, то данный файл нельзя будет изменить или удалить (причем даже суперпользователь это не сможет сделать, пока не уберет данный атрибут). Если назначит атрибут immutable на папку, то данную папку нельзя будет удалить, а так же нельзя будет изменить структуру внутри нее. Тем самым получается, что если нам нужно защитить папку sitename.ru и структуру внутри нее, нам необходимо выполнить простую команду:
chattr +i /home/hostuser/vhosts/sitename.ru
Для снятия атрибута необходимо использовать флаг -i.
Если же нужно защитить только одну папку (например, logs), можно поступить следующим образом:
touch /home/hostuser/vhosts/sitename.ru/logs/.keep chattr +i /home/hostuser/vhosts/sitename.ru/logs/.keep
Собственно так можно поставить «защиту от дурака» (даже с правами суперпользователя).
Важно понимать, данная статья не об информационной безопасности. Замок на почтовом ящике — это информационная безопасность. Стекло на кнопке пожарной сигнализации — это защита от дурака.
Если создать файл .keep и дать ему атрибут -i, саму папку можно перенести и файл можно перенести. Нельзя удалить сам файл и структуру папок до этого файла.
Если вам требуется более надежный уровень безопасности, используйте атрибут immutable совместно с mount —bind. С помощью этой связки можно настроить защиту от намеренного изменения структуры.