Печать

Программы (Автор: dez)

Что ж, пока срочных дел нет, продолжим историю про хранилище. Прошлая заметка по сути была о впечатлениях от подготовительных работ. В этот же раз будет больше практики, команд и конфигов - речь пойдет о создании RAID-массива и настройке samba для случая обычной шары.

Если в прошлый раз у меня был повод колебаться с выбором, то на этот раз заметка точно пойдет в раздел Программы. Кто в будущем будет просматривать сайт по разделам и не найдет часть 1 - не удивляйтесь, она может быть в другой категории :)

 

RAID

Во всяком деле есть нюансы, но если говорить по-простому, для меня основные свойства сетевого хранилища - большое дисковое пространство и отказоустойчивость. Первое зависит скорее от закупленных дисков, а за второе больше отвечает объединение в массив. Вариантов RAID-массивов существует целый зоопарк, под разные потребности и кошельки. Для домашней экспериментальной коробки с файлами лично мне пока хватит RAID1 из двух дисков, где второй диск - полная копия первого.

Объединить диски можно с помощью отдельной железяки - RAID-контроллера, но делать я этого, конечно, не буду. Вместо этого массив в Linux можно организовать программно и управлять им с помощью программы mdadm.

Конкретно на тему RAID и mdamd в сети немало хорошего материала - начать советую с обычного викиучебника по mdadm, а так же xgu.ru. Затем для чуть более продвинутого чтения загляните на raid.wiki.kernel.org - по всяким нюансам и для "упорядочения картины мира". Например, там есть занимательная страница про типы разделов, из которой я узнал две вещи. Во-первых, можно создать массив из дисков целиком, но лучше все таки создать массив из разделов, причем разделы сделать на пару сотен мегабайт меньше, чем весь объем - это облегчит замену диска в будущем, так как доступный объем может немного отличаться от диска к диску. Во-вторых, инструкции часто предписывают ставить тип раздела FD, но похоже, что для диска с GPT надо ставить FD00.

Не буду слишком сильно вдаваться в подробности, ссылки я уже привел. Если кратко, то для RAID1 весь процесс получается примерно следующий:

  • Сначала на дисках создаются одинаковые разделы, которым присваивается тип FD (для GPT - FD00). Сделать можно с помощью fdisk и/или gdisk.
  • Разделы объединяются командой mdadm --create, при этом указывается имя устройства для создаваемого виртуального раздела (например /dev/md0), уровень RAID, количество входящих в массив дисков (разделов) и список этих дисков (разделов). Викиучебник советует создать /dev/md0 вручную с помощью mknod, но как я понял, в этом нет необходимости и mdadm все сделает сам.
    mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
  • Убедиться, что нет проблем и все работает
    cat /proc/mdstat
  • Форматировать раздел (например, в ext3)
    mkfs.ext3 /dev/md0
  • Если надо, можно создать точку монтирования и прописать строку в /etc/fstab

 

Samba

Теперь, когда с дисковым пространством разобрались, нужно сообразить удаленный доступ к нему и забить его файлами. Когда в локальной сети только линуксы, то можно использовать NFS. А вот если сеть имеет смешанный или преимущественно виндовый характер, логичнее будет поставить samba.

Настроить samba мне удалось достаточно быстро, но не без приключений. Некоторые затыки возникли из-за того, что я пытался следовать слишком старым инструкциям или книгам. Поэтому попытаюсь описать процедуру настолько подробно, насколько мне не лень.

Установить samba на Linux Mint можно командой

sudo apt install samba

Затем проверить, работает ли сервис

sudo systemctl status smbd

После этого можно приступать к настройкам пользователей и их прав. Тут нужно помнить один момент - samba использует локальные учетные записи (UNIX-аккаунты), а вот пароли использует свои собственные, которые нужно добавлять командой smbpasswd.

useradd myname
passwd myname
smbpasswd -a myname

Если заранее известно, что какой-то пользователь будет заходить с винды, люди советуют сделать его samba-пароль таким же, как у его учетки на винде (ну и логин, ясен пень). Тогда можно будет заходить на общие ресуры без ввода пароля - все произойдет "на фоне".

Для анонимного доступа нужна бесправная учетка. Скорее всего у вас с самого начала есть подходящая, в моем случае называлась nobody. Надо только внести ее в базу данных samba (с пустым паролем), и не забыть про нее вспомнить во время ковыряния в конфиге.

smbpasswd -an nobody

Настройка общих папок производится в файле /etc/samba/smb.conf. В верхней части конфига (секция global) прописываются настройки сервера в целом. В нижней части - настройки группируются по конкретным отдельным ресурсам (папки и принтеры). Дефолтный конфиг почти готов и отлично прокомментирован, по сути поменять пару-тройку строк в секции global и можно приниматься за ресуры и права. Но именно эту пару-тройку строк важно было изучить и понять, опираясь на актуальный мануал, а не древний перевод.

#Фрагмент действующего конфига
[global]
server role = standalone server
security = user
map to guest = bad user
guest account = nobody

Старые статьи могут советовать установить параметр security равным share. Не надо так делать, это значение устарело!

Если вы хотите сделать часть шар анонимными, часть - закрытыми, установите map to guest в значение bad user. Тогда несуществующие пользователи будут получать права гостевой учетки, а существующие логины с неправильным паролем будут получать отказ. Если установить значение bad password, любая ошибка в пароле тихо и без объявления войны превратит юзера в гостя. Мануал гласит, что если у вас есть служба техподдержки, то за это она будет вас ненавидеть.

Теперь к настройке ресурсов. Ниже пример настройки семейной папки, где члены семьи имеют права на чтение и запись, а гостевого доступа нет вообще.

[Family]
comment = Family RW no anons
path = /raid/samba/family
valid users = @family
read only = no
writeable = yes
create mask = 0660
directory mask = 0770
guest ok = no
browseable = yes

В принципе, назначение большинства строк должно быть сразу ясно. Имя ресурса (эдакий псевдоним, понятный для клиента) пишется в начале в квадратных скобках. Список разрешенных пользователей valid users может быть длинным, тогда юзеры и группы разделяются пробелами. Имена групп пишутся с собакой @. Маски задают максимально допустимые разрешения на создаваемые удаленным пользователем файлы и папки. Если понимаете команду chmod - поймете и эти цифры.

Свойство browseable позволяет ресурсу отображаться в проводнике если yes, или быть скрытым если no. К скрытому ресурсу можно обратиться только напечатав путь к нему в адресной строке.

Еще один пример настройки ресурса. На этот раз у группы доступ только на чтение, и лишь один юзер имеет права на запись.

[User1_dir]
comment = user1 RW family RO
path = /raid/samba/user1
valid users = @family
write list = user1
read only = yes
create mask = 0640
directory mask = 0750
guest ok = no
browseable = yes

Ну и после того, как выполнили правку конфига, может понадобиться перезапустить службу

sudo systemctl restart smbd

 

Samba - повторная настройка прав

Кое-что про samba (точнее, около нее), пожалуй, выделю в отдельный пункт. Однажды мне понадобилось поменять настройки персональной шары, в которой я один имел полный доступ, и добавить возможность чтения другому пользователю. К тому времени у меня успело накопиться немало папок и файлов, что создало немножко дополнительных хлопот.

Когда удаленный пользователь копается в общих папках, он делает это от имени локального (с точки зрения сервера) пользователя с таким же именем. И за правами доступа следит не только samba, но и операционная система (угадайте, кто главнее). Свойства create mask и directory mask влияют на права доступа к новым файлам и папкам, созданным удаленным пользователем. Изначально у меня стояли маски 0600 и 0700 соответственно, значит, я насоздавал кучу всего, к чему имею доступ только я (владелец). Группа и остальные идут лесом, и даже если другой пользователь прописан в valid users, получит он все равно фигу, и никакой read only и writeable ему не поможет.

Получается, что после замены маски на 0644 и 0755 в /etc/samba/smb.conf надо еще и права у существующих файлов починить. Вызывать chmod для каждого файла и папки - можно руки до плеч стереть. К счастью, есть решение получше:

find /search/location -type d -print0 | xargs -0 chmod 0755
find /search/location -type f -print0 | xargs -0 chmod 0644

Строка с -type d выполняет chmod над всеми найдеными внутри /search/location папками. Строка с -type f делает примерно то же самое, но с файлами.

А что если установить маски 0640 и 0750? Тогда к новым файлам и папкам будет доступ только у владельца (полный) и группы (чтение). Тут можно словить еще один прикол - ранее созданным файлам может быть назначена не та группа. Например, группа имени владельца. В таком случае надо менять еще и настройки владения - можно тем же способом с find, только вместо chmod написать chown с нужными аргументами. Но эта мера будет иметь смысл лишь до следующего новосозданного файла, у которого снова может оказаться не та группа.

Так я узнал про бит setgid. Если установить этот бит в разрешениях на папку, то созданные в ней файлы будут наследовать от папки группу. Сделать это можно одним из следующих способов (в буквенной и цифровой нотации)

chmod 2750 /dir/path
chmod g+s /dir/path

Первая строка явно задает все права, вторая только добавляет setgid к уже существующим.

 

Это все?

Вообще-то нет, но на этот раз пока хватит. Остается еще FTP, про который я скорее всего напишу потом отдельно. Изначально хотел все три темы кратко осветить одним постом, но теперь думаю, что если все смешать в одном месте, то получится длинная неудобная в использовании простыня.

Так что удачи и до следующего раза.

Статья опубликована 2022-01-06 08:21:41, её прочитали 1907 раз(а).