Время на прочтение9 мин
Количество просмотров143K
Привет Хабр!
После активности шифровальщика Petya 27.06.2017, я отключил SMB1 он же CIFS, и получил производственное оборудование и сетевые МФУ которые не умеют работать на «новых» версиях SMB протокола.
Как тогда получать данные с «старых» устройств? Как показала практика, отдельная «машина» с Windows не выход, во время атаки кроме доменных «машин» пострадали также не включенные в домен, по этому, а также по лицензионным соображениям я решил использовать Linux.
Под катом находится пошаговая инструкция по установке и настройке файлового сервера SAMBA на базе CentOS 7:
— Анонимный доступ
— Аутентификация и авторизация
— Интеграция с Active Directory
Установка CentOS 7
Сервера работают под управлением VMware ESXi, и по этому я установил CentOS 7 1611 на VM, выделив 1 CPU, 1GB RAM и 3GB HDD.
LVM я не использую, SWAP раздел не создаю, на загрузочный раздел выделяю 500MB, а все остальное отдаю под корень файловой системы. В качестве файловой системы использую ext4.
Процесс установки описывать я не буду, даже если вы этого никогда не делали, это не сложно, у вас все получится. Предполагаю что вы уже все установили, тогда можно приступать.
Если вы новичок в линукс, делайте копии оригинальных файлов с конфигами, используйте команду cp.
cp /etc/somefile.conf /etc/somefile.conf.bak
Получение ip адреса по DHCP
Если по какой-то причине в сети нету DHCP сервера, вам стоит его поднять. Работать с большим количеством VM без DHCP не удобно.
Для принудительного обновления или получения ip адреса выполните команду
dhclient
Показать ip адрес
ifconfig
или
nmcli device show
YUM
CentOS 7 использует пакетный менеджер YUM. Шпаргалка по yum находится тут.
Если выход в интернет организован через прокси сервер, добавьте адрес прокси в файл конфигурации /etc/yum.conf, используйте редактор vi или следующую команду
echo proxy=http://your.proxy:8888 >> /etc/yum.conf
В случае использования логина и пароля для доступа к прокси серверу, добавьте следующие параметры:
proxy_username=yum-user
proxy_password=qwerty
Установка на VM агентов для взаимодействия с хост сервером
Для VMware ESXi необходимо установить open-vm-tools
yum install open-vm-tools
Для Hyper-V, hyperv-daemons
yum install hyperv-daemons
Установка обновлений
Очень важно установить все доступные обновления
yum update
Midnight Commander
Редактировать файлы без нормального редактора очень не удобно, и я предлагаю использовать mc и mcedit
yum install mc
Настройка сети
Для настройки статического ip адреса и имени хоста можно использовать утилиту nmtui
В командной строке список сетевых адаптеров можно получить командой
nmcli device status
Статический ip и gateway задается следующей командой, где «ens192» это имя сетевого адаптера
nmcli connection modify “ens192” ipv4.addresses “192.168.1.100/24 192.168.1.1”
Настройка FQDN
Пусть полное имя хоста будет ls01.fqdn.com, выполняем команду
hostnamectl set-hostname ls01.fqdn.com
Перезагружаем службу имен
systemctl restart systemd-hostnamed
Проверить результат можно следующими командами
hostnamectl status
hostname
hostname -s
hostname -f
ipv6
Если протокол ipv6 не используется, логично его отключить, для этого нужно добавить два параметра в файл /etc/sysctl.conf, выполните следующие команды или используйте редактор mcedit
echo net.ipv6.conf.all.disable_ipv6 = 1 >> /etc/sysctl.conf
echo net.ipv6.conf.default.disable_ipv6 = 1 >> /etc/sysctl.conf
Перезагрузите службу сети
service network restart
SELINUX
На данном этапе службу SELINUX необходимо отключить, проверить статус службы SELINUX можно командой
sestatus
Измените значение SELINUX в файле /etc/selinux/config на SELINUX=disabled затем перезагрузите сервер.
reboot
Вернусь к SELINUX в конце статьи.
SAMBA
Установка
yum install samba
Добавление службы в автоматический запуск
chkconfig smb on
Запуск службы и проверка состояния
service smb start
smbstatus
firewallD
По умолчанию CentOS 7 использует брандмауэр firewallD, состояние службы можно узнать командой
firewall-cmd --state
Для получения списка правил и сервисов используйте
firewall-cmd --list-all
firewall-cmd --list-services
Обратите внимание на список сервисов, если вы отключили протокол ipv6, логично также поступить и с dhcpv6-client
firewall-cmd -–permanent -–remove-service=dhcpv6-client
Создаем правило для SAMBA и перезагружаем
firewall-cmd --permanent --add-service=samba
firewall-cmd --reload
Общий ресурс с анонимным доступом
Создаем папку для ресурса /samba/guest
mkdir /samba
mkdir /samba/guest
Меняем владельца и назначаем права
chown nobody:nobody /samba/guest
chmod 777 /samba/guest
Редактируем файл конфигурации SAMBA /etc/samba/smb.conf
mcedit /etc/samba/smb.conf
Меняем содержание оригинального файла на следующее
[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
min protocol = NT1[guest]
path = /samba/guest
guest ok = Yes
writable = Yes
На всякий случай я указал минимальную версию протокола SMB=NT1. Если вы укажите SMB2 или SMB3, клиенты с Windows XP и ниже не смогут получить доступ к ресурсам.
Проверка параметров и перезагрузка службы
testparm
service smb restart
smbstatus
Поздравляю вас, достигнут первый уровень посвящения. Общий ресурс с анонимным доступом настроен, будет работать долго и надежно. Но можно и нужно настроить еще несколько вещей.
Бантики
По умолчанию лог файлы находятся в папке /var/log/samba. При необходимости получить подробные логи, в раздел [global] необходимо добавить параметр log level = 2 или 3. По умолчанию используется значение 1, значение 0 отключает ведение логов.
[global]
log level = 2
Как вы можете знаете, предоставление доступа к файлам это только часть функционала SAMBA. Если на сервере будут только файловые ресурсы, службу печати логично отключить. В разделе [global] добавьте следующие параметры
[global]
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
Конфигурация SAMBA находиться в каталоге /etc/samba, а логи в каталоге /var/log/samba
Мне удобней все инструменты держать по рукой, по этому я монтирую необходимые мне каталоги в /samba
Создаем каталоги, в которые будет все монтироваться
mkdir /samba/smbconf
mkdir /samba/smblogs
Редактируем конфиг файл /etc/fstab, я предполагаю что вы знаете за что отвечает fstab.
mcedit /etc/fstab
Добавляем следующие строки
/etc/samba /samba/smbconf none bind 0 0
/var/log/samba /samba/smblogs none bind 0 0
Монтируем без перезагрузки
mount -a
Подключение диска
Держать ресурс с общим доступом на системном диске без квоты, не лучший выбор. С квотами я решил не связываться, мне проще подключить отдельный «физический» диск.
Для получения списка устройств можно использовать команду lsblk
lsblk
Создание таблицы разделов на диске /dev/sdb
parted /dev/sdb mklabel msdos
или
parted /dev/sdb mklabel gpt
Подробную информация про gpt можно прочитать тут
Создание раздела на весь диск sdb, в лучших традициях жанра я решил сделать отступ 1MiB в начале диска.
parted /dev/sdb mkpart primary ext4 1MiB 100%
Создаем файловую систему ext4
mkfs.ext4 /dev/sdb1
Редактируем fstab
mcedit /etc/fstab
Добавляем еще одну строку
/dev/sdb1 /samba/guest ext4 defaults 0 0
Монтирование
mount –a
Проверяем результат
df -h
Назначение прав
chmod 777 /samba/guest
Подключение образа диска
Если вам не нужны большие объемы, и достаточно ресурса размером ххх мб, можно подключить образ диска из файла.
Создаем каталог для хранения образов
mkdir /samba/smbimg
Создаем файл образа размером 100 мб
dd if=/dev/zero of=/samba/smbimg/100M.img bs=100 count=1M
Про команду dd много интересного можно прочитать тут
В варианте с образом я решил не создавать таблицу разделов, просто создаем файловую систему ext4.
mkfs.ext4 /samba/smbimg/100M.img
Редактируем fstab
mcedit /etc/fstab
Конфиг для монтирования образа
/samba/smbimg/100M.img /samba/guest ext4 defaults 0 0
Монтирование
mount -a
Проверяем результат
df -h
Назначение прав
chmod 777 /samba/guest
Подключение RAM диска
Для временных ресурсов где не нужен большой объем, как мне кажется RAM диск это наилучший вариант, очень быстро и просто настраивается, а скорость работы поражает воображение.
Редактируем fstab
mcedit /etc/fstab
Конфиг для RAM диска
none /samba/guest tmpfs defaults,size=100M 0 0
Монтирование
mount -a
Проверяем результат
df -h
Удаление старых файлов
В случае «файлопомойки» ресурсы нужно как-то освобождать, для этого можно использовать планировщик задач crontab
Просмотр заданий
crontab –l
Редактирование заданий
crontab –e
Пример конфига:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=“”
HOME=/#удалять файлы и каталоги каждый час
* 0-23 * * * rm –R /samba/guest/*#Удалить только файлы старше 1 дня, запуск команды каждые 10 минут
0-59/10 * * * * find /samba/guest/* -type f -mtime +1 -exec rm –f {} \;#удалить файлы старше 50 минут, запуск команды каждые 10 минут
0-59/10 * * * * find /samba/guest/* -type f -mmin +50 -exec rm -f {} \;
Выход из vi
<ESC>
:wq
Логи службы crontab находятся в файле /var/log/cron
Ограничение доступа к SAMBA по ip адресам
Если вам нужно ограничить доступ ко всем ресурсам SAMBA, добавьте ваши списки доступа в разделе global, а если необходимо ограничить только на определенный ресурс, в разделе этого ресурса.
Пример:
[global]
hosts allow = 192.168.1.100, 192.168.1.101
hosts deny = ALL[guest]
hosts allow = 192.168.0.0/255.255.0.0
hosts deny = 10. except 10.1.1.1
Аутентификация и авторизация пользователей
Ограничение доступа по ip адресам не всегда удобно или возможно, тогда можно использовать логины и пароли.
Сначала необходимо создать локального пользователя в системе
adduser user1
Если пользователь будет работать только с SAMBA ресурсами, задавать ему пароль для системы нет необходимости. Пароль для системы и для SAMBA хранятся в разных файлах и могут отличаться.
Затем необходимо добавить системного пользователя в пользователи самбы и задать ему пароль
smbpasswd -a user1
По умолчанию для хранения паролей используется файл формата tdb, которые расположен в каталоге /var/lib/samba/private/
Изменить каталог расположения файла можно глобальным параметром passdb backend
[global]
passdb backend=tdbsam:/etc/samba/smbpassdb.tdb
tdb файлы были созданы для замены «устаревших» текстовых, если вы хотите использовать текстовые файлы, для этого используйте параметр passdb backend=smbpasswd в разделе global
passdb backend=smbpasswd:/etc/samba/smbpasswd
Затем укажите списки пользователей и групп для доступа к ресурсам
[guest]
path = /samba/guest
writable = no
read list = user1, @group2
write list = user2, user3
Интеграция с Active Directory
Также есть возможность получать информацию о пользователей из LDAP, но мне этот вариант не интересен и я сразу перехожу к AD. Подробная инструкция от Microsoft находится тут.
Для AD очень важна синхронизация времени, по этому стоит начать с этого.
Установка соответствующей службы
yum install ntp
Добавляем в конфиг файл /etc/ntp.conf сервера выполняющих роль домен контроллеров
mcedit /etc/ntp.conf
Пример:
server 192.168.1.10
server 192.168.1.20
server someserver.contoso.com
Добавляем службу ntp в автоматический запуск
chkconfig ntpd on
Запускаем службу
service ntpd start
Проверяем синхронизацию времени
ntpq –p
winbind
Для получения информации о пользователях из AD необходимо установить пакет samba-winbind
yum install samba-winbind
Добавляем службу в автоматический запуск
chkconfig winbind on
Запускаем службу
service winbind start
Добавление хоста в AD
Напомню что в начале даной инструкции задали имя хоста ls01.fqdn.com. Будем считать что полное имя домена fqdn.com, а короткое пусть будет fqdn_com
Для внесения всех необходимых параметров в конфигурационные файлы можно воспользоваться утилитой authconfig-tui, установите флажок Use Winbind, затем перейдите на следующее окно
Выберите модель безопасности ADS и укажите имена вашего домена. В поле домен контролер укажите “*”, это необходимо для автоматического поиска доступного домен контроллера. Затем нажмите ОК и закройте утилиту.
Для добавления хоста в AD используйте команду net ads join –U %username%, пользователь должен обладать правами на создание учетной записи ПК в домене
net ads join –U youruser
Если машина не добавляется в домен, добавьте FQDN имя хоста в файл /etc/hosts.
Я несколько раз все проверял, и в файл hosts я вносил изменения когда на этапе настройки сети задавал не полное имя хоста.
Для того чтобы вывести хост из домена используйте команду net ads leave –U %username%
Что делает утилита authconfig-tui?
Утилита добавляет параметры для подключения к AD в следующие файлы, параметров не много и при желании можно забить все руками.
/etc/krb5.conf
[libdefaults]
Default_realm = FQDN.COM[realms]
FQDN.COM = {
kdc = *
}
/etc/nsswitch.conf
passwd: files sss winbind
shadow: files sss winbind
group: files sss winbind
/etc/samba/smb.conf
[global]
workgroup = FQDN_COM
password server = *
realm = FQDN.COM
security = ads
idmap config *: range = 16777216-33554431
template shell = /sbin/nologin
kerberos method = secrets only
winbind use default domain = false
winbind pffline logon = false
Вы могли заметить что данная утилита вносит заметно меньше параметров чем написано в инструкции от Microsoft или других инструкциях, но если так работать – то почему бы и нет?
Из инструкции Microsoft я добавляю следующие параметры в конфиг
[global]
domain master = no
local master = no
preferred master = no
os level = 0
domain logons = no
Настройка прав доступа на ресурс
В качестве примера и для наглядности рекомендую настроить ресурсы с разными правами на одну папку
[domain users read only]
path = /samba/guest
read list = «@fqdn_com\domain users»
force create mode = 777
directory mask = 777[domain users writable]
path = /samba/guest
read list = «@fqdn_com\domain users»
write list = «@fqdn_com\domain users»
force create mode = 777
directory mask = 777
Перезапускаем службу samba
service smb restart
Проверяем
smbstatus
На скриншоте видно пользователя домена который находится в одной из общих папок
THE END
Список полезных ссылок:
Боремся с вирусами и инфраструктурой, или отключение SMB v1
Критическая уязвимость SambaCry: как защититься
How to Fix SambaCry Vulnerability (CVE-2017-7494) in Linux Systems
Yum, шпаргалка
Команда dd и все, что с ней связано
Using Samba, 2nd Edition
Включение Samba-сервера на базе Ubuntu в домен AD
Setting Up Samba and Configure FirewallD and SELinux to Allow File Sharing on Linux/Windows Clients
SELinux — описание и особенности работы с системой. Часть 1
SELinux — описание и особенности работы с системой. Часть 2
P.S.
Вернемся к SELINUX, чтобы SAMBA сервер мог предоставить доступ к любым каталогам необходимо выполнить следующие команды
setsebool -P samba_export_all_ro=1
setsebool -P samba_export_all_rw=1
К сожалению я так и не смог настроить работу winbind при включенном SELINUX, если подскажете как, я буду благодарен.
Все способы:
- Устанавливаем и настраиваем файловый сервер в Linux
- Шаг 1: Предварительная настройка Windows
- Шаг 2: Установка Samba в Linux
- Шаг 3: Создание глобальных настроек
- Шаг 4: Создание общедоступной папки
- Шаг 5: Создание защищенной общедоступной папки
- Вопросы и ответы: 7
Чаще всего файловый сервер в Linux используется в рамках локальной или другой общей сети для взаимодействия с компьютерами на базе Windows. Он может быть установлен в дистрибутивах по умолчанию, но это происходит не всегда, к тому же конфигурация такого сервера будет стандартной. Сегодня предлагаем узнать все об инсталляции и основной настройке файлового сервера на примере самой популярной утилиты под названием Samba. Мы разделим это руководство на шаги, чтобы начинающим пользователям было проще ориентироваться во всех необходимых для выполнения действиях.
Устанавливаем и настраиваем файловый сервер в Linux
Хоть сегодняшний материал и будет сосредоточен на управлении дистрибутивами Linux, не обойдем стороной и Виндовс, поскольку для начала вам придется выполнить простейшие манипуляции в этой ОС, чтобы в будущем настройка прошла успешно и не возникло никаких проблем с подключением к группе. За пример мы взяли связку Windows 10 и Ubuntu. Если вы используете другие ОС, просто придерживайтесь особенностей их реализации, которые не должны значительно отличаться от того, что вы увидите далее.
Шаг 1: Предварительная настройка Windows
При подготовке файлового сервера Samba понажобится указать некоторые данные, связанные с операционной системой Windows. Дополнительно в самом Виндовс требуется разрешить подключение для компьютера с Linux, поскольку изначально соединения будут блокироваться. Все эти процедуры выполняются буквально за несколько кликов и выглядят следующим образом:
- Откройте «Пуск» и запустите оттуда «Командную строку», найдя приложение через поиск.
- Здесь вам потребуется ввести простую команду
net config workstation
и нажать на клавишу Enter. - В отобразившемся списке отыщите строку «Домен рабочей станции» и запомните ее значение.
- Снова в консоли введите
notepad C:\Windows\System32\drivers\etc\hosts
для открытия известного файла hosts через стандартный «Блокнот». - Здесь в конце вставьте строку
192.168.0.1 srvr1.domain.com srvr1
, заменив IP на адрес компьютера с Samba, и сохраните все изменения.
На этом работа с Windows заканчивается. После вы сможете вернуться в эту ОС для настройки общего доступа и управления открывшимися папками, но пока это недоступно, поскольку конфигурация файлового сервера в Линукс еще не произведена. Этим мы и предлагаем заняться в следующих шагах.
Шаг 2: Установка Samba в Linux
Начнем с непосредственной установки Samba в Линукс. Использовать для этого мы будем официальные репозитории, поэтому перед началом убедитесь, что подключение к интернету находится в активном состоянии. После этого следуйте расписанной ниже инструкции.
- Откройте меню приложений и запустите «Терминал».
- Здесь потребуется ввести команду
sudo apt-get install -y samba samba-common python-glade2 system-config-samba
. Она отвечает за инсталляцию дополнительных компонентов вместе с файловым сервером. - Подтвердите подлинность учетной записи суперпользователя, написав пароль. Символы, вводимые в эту строку, на экране не отображаются, поэтому не стоит переживать из-за того, что букв или цифр не видно.
- Затем начнется процедура получения и распаковки архивов. Она может занять несколько минут, во время этой операции лучше не выполнять других действий и не закрывать консоль. Если появилась новая строка ввода, значит, инсталляция успешно завершена.
Больше ничего устанавливать не придется, а сервер будет запущен автоматически, поэтому можно смело переходить к его настройке, чему и посвящены наши следующие шаги.
Шаг 3: Создание глобальных настроек
Сразу же после инсталляции Samba в ней не будет никаких параметров, отвечающих за поведение, поэтому придется добавлять их собственноручно, вводя строки в конфигурационный файл. Неопытным юзерам может показаться, что выполнить эту задачу будет очень сложно. Мы же предлагаем взять наш шаблон, заменив лишь пользовательские значения.
- Иногда какие-то важные параметры в конфигурационном файле все же присутствуют по умолчанию, из-за чего возникает надобность создать его резервную копию, чтобы восстановить ее при возникновении случайных сбоев. Осуществляется это путем ввода всего одной команды
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
. - Все остальные действия будут производиться через текстовый редактор. Оптимальным вариантом в этом случае является nano. Если данное приложение отсутствует в вашем дистрибутиве, добавьте его через
sudo apt install nano
. - После переходите к конфигурационному файлу, используя
sudo nano /etc/samba/smb.conf
. - В открывшемся окне вставьте приведенные ниже строки.
[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
netbios name = Ubuntu Share
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
passdb backend = tdbsam
unix password sync = yes
passwd program = /usr/bin/passwd %u
pam password change = yes
map to guest = bad user
usershare allow guests = yes - Используйте комбинацию Ctrl + O, чтобы сохранить изменения.
- Название файла менять не нужно, достаточно будет просто нажать на клавишу Enter.
- По завершении выйдите из текстового редактора, зажав Ctrl + X.
Теперь давайте более детально остановимся на каждой из введенных строк, чтобы вы в будущем смогли настроить их под себя:
- workgroup — отвечает за имя рабочей группы. Ее мы уже узнавали в Windows, и здесь требуется задать точно такое же название, поскольку оно должно быть одинаковым абсолютно на всех соединенных устройствах.
- netbios name — используется для отображения имени текущего компьютера на устройстве под управлением Windows. Задайте оптимальное для себя значение.
- log file — указывается путь к файлу, куда будут сохраняться отчеты. Создать подобную запись нужно обязательно, чтобы всегда быть в курсе возможных ошибок и других сведений.
- passdb backend — определяет способ хранения паролей учетных записей. Без надобности лучше не изменять и оставить в состоянии по умолчанию.
- unix password sync — при активации выполняет синхронизацию паролей.
- map to guest — отвечает за предоставление гостевого уровня доступа определенным профилям. Если значение установлено в состояние
bad user
, то такая настройка применяется для несуществующих пользователей,bad password
— при неправильном вводе паролей, аnever
— никогда.
На самом деле в Samba присутствует еще множество глобальных параметров, а также реализован графический интерфейс. Если вы заинтересовались всеми этими настройками, советуем обратиться к официальной документации, чтобы узнать о них более детально, поскольку все сведения не уместятся в рамках данной статьи, а также не все они имеют отношение к сегодняшней теме.
Шаг 4: Создание общедоступной папки
Практически для каждой группы юзеров, использующих файловый сервер, важно иметь общедоступную папку, к которой можно получить доступ без предварительной авторизации. По умолчанию такая директория отсутствует, поэтому мы предлагаем ее создать самостоятельно, что осуществляется буквально за несколько минут.
- Запустите «Терминал» и введите там
sudo mkdir -p /samba/allaccess
для создания новой папки. Ее имя вы можете поменять на любое удобное. - Данное действие выполняется вместе с аргументом sudo, а это значит, что придется ввести пароль для подтверждения учетной записи.
- После переходите к настройке общего доступа для созданной директории. Для начала переместимся в корень Samba через
cd /samba
. - Теперь вставьте команду
sudo chmod -R 0755 allaccess
и нажмите на Enter. - Потребуется указать еще одну опцию
sudo chown -R nobody:nogroup allaccess/
, которая отвечает за предоставление доступа абсолютно всем учетным записям. - Осталось внести все изменения в конфигурационный файл. Запустите его через текстовый редактор, используя уже знакомую команду
sudo nano /etc/samba/smb.conf
. - Здесь вставьте указанный ниже блок, отвечающий за определение правил поведения сервера. О значении каждой строки мы также поговорим немного позже.
[allaccess]
path = /samba/allaccess
browsable = yes
writable = yes
guest ok = yes
read only = no - Сохраните изменения и закройте текстовый редактор, используя специально отведенные горячие клавиши.
- Перезапустите сервер через
sudo systemctl restart samba
, чтобы текущие настройки вступили в силу.
Проверка доступа к созданной директории в Windows осуществляется путем перехода по \\srvr1\allaccess
. Сейчас по тому же примеру, который мы привели в предыдущем этапе, разберем значение каждого устанавливаемого параметра:
- path. Как вы видите из значения, здесь указывается путь к созданной общедоступной директории.
- browsable. Этот параметр отвечает за отображение директории в списке разрешенных.
- writable. Отметьте значение
yes
, если вы хотите разрешить создание записей в этой папке. - guest ok. Данная строка отвечает за гостевой доступ.
- read only. Если вы знаете перевод этой фразы, то уже догадываетесь, что произойдет, если активировать параметр. Он отвечает за атрибут «Только чтение» для указанной директории.
Шаг 5: Создание защищенной общедоступной папки
В качестве последнего этапа нашей сегодняшней статьи мы решили взять пример создание защищенной директории для общего доступа. В предыдущем шаге уже рассказано о том, как создаются полностью анонимные папки, однако их недостаток заключается в отсутствии защиты, поэтому в большинстве случаев юзеры предпочитают работать с безопасными каталогами, а их создание осуществляется так:
- Создайте директорию по тому же принципу через
sudo mkdir -p /samba/allaccess/secured
. - Как вы могли догадаться, это действие тоже следует подтвердить, введя пароль суперпользователя.
- После этого создайте группу, куда будут входить разрешенные пользователи, написав
sudo addgroup securedgroup
. - Перейдите к расположению защищенной директории, указав
cd /samba/allaccess
. - Здесь укажите права для пользователей, написав
sudo chown -R richard:securedgroup secured
. Замените richard на требуемое имя учетной записи. - Вторая команда для обеспечения безопасности выглядит так:
sudo chmod -R 0770 secured/
. - Переместитесь к текстовому редактору, открыв там конфигурационный файл и написав уже знакомую команду
sudo nano /etc/samba/smb.conf
. - Вставьте указанный ниже блок и сохраните изменения.
[secured]
path = /samba/allaccess/secured
valid users = @securedgroup
guest ok = no
writable = yes
browsable = yes - Добавьте пользователя в защищенную группу
sudo usermod -a -G securedgroup richard
. Если указанной учетной записи не существует, вы получите соответствующее уведомление. - Создайте пароль, который будет отвечать за открытие доступа через
sudo smbpasswd -a richard
. - Введите ключ безопасности в новую строку, а затем подтвердите его.
После внесения всех изменений не забывайте перезагружать сервер, чтобы все они вступали в действие. Точно таким же образом вы можете создавать неограниченное количество защищенных общедоступных папок, настраивая для них определенные параметры.
Сегодня мы разобрались в теме файлового сервера для Linux на примере пошагового руководства конфигурации соединения через Samba. Теперь вы можете решить, подходит ли вам такая схема предоставления общего доступа или есть смысл найти другой инструмент, способный предоставить более подходящие настройки.
Наша группа в TelegramПолезные советы и помощь
Файловый сервер можно без преувеличения назвать средством первой необходимости, даже в сетях без выделенного сервера вы всегда обнаружите папки с общим доступом, но по мере роста объемов данных появляется потребность в отдельном решении. Вариантов его организации множество, одним из которых является служба Samba на Linux-сервере, это простое, недорогое, но в то же время мощное решение по организации общего доступа к файлам и папкам в Windows сетях. В данной статье мы рассмотрим настройку простого сервера на основе Samba 4 работающего в ОС Debian / Ubuntu.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Несмотря на то, что в данной статье в качестве ОС мы использовали Debain 9, все сказанное будет справедливо для любой ОС на базе Debian или Ubuntu, а с поправкой на работу пакетного менеджера — для любого Linux-дистрибутива. Также мы предполагаем, что читатель имеет базовые навыки работы с Linux-системами на базе Debian.
Подготовка системы
Прежде чем приступать к работе продумайте схему хранения данных и доступа к ним. Существую разные типы данных, которые мы будем характеризовать по интенсивности доступа к ним, скажем «холодные данные» отличаются тем, что обращения к ним происходят крайне редко (а к некоторым вообще никогда), но при этом они могут занимать значительные объемы. Это прежде всего резервные копии, инсталляционные пакеты, образа дисков и т.д. и т.п.
Противоположность им «горячие данные» — это данные которые интенсивно используются и изменяются, для файлового сервера примером таких данных может служить файловая информационная база 1С:Предприятия. Между ними находятся обычные данные, характер доступа к которым не имеет каких-либо особенностей.
Исходя из типа данных следует выбирать диски для хранения, для «горячих данных» это должны быть быстрые диски или SSD, а для «холодных» подойдут экономичные модели с упором на большой объем. Также не забывайте про RAID, для защиты данных от аппаратного выхода дисков из строя.
Продумайте структуру директорий и прав доступа к ним. Разумно будет исходить из следующих соображений: разделяйте диски с данными и системой, чтобы при необходимости можно было заменить их без лишних затруднений или перенести на другой сервер. Храните разные типы данных на разных дисках или разделах, скажем, если на разделе для резервных копий закончится свободное место, то это никак не повлияет на работу баз 1С.
В нашем примере мы будем использовать виртуальную машину с двумя жесткими дисками, один для системы, второй для данных, точку монтирования диска для данных мы указали как /samba, вы можете использовать другое имя и расположение.
Также обратите внимание на имя компьютера, Samba 4 будет использовать его в качестве NetBIOS имени.
После установки ОС следует изменить настройку лимита на количество одновременно открытых файлов, в Linux это 1024, а в Windows 16384. Для этого откройте файл /etc/security/limits.conf и добавьте в конце две строки:
* - nofile 16384
root - nofile 16384
После чего сервер следует перезагрузить.
Установка и базовая настройка Samba 4
Установка Samba предельно проста:
apt install samba
После чего откроем файл /etc/samba/smb.conf и выполним общие настройки. Большинство указанных опций в файле уже есть, многие из них даже не потребуется менять, но их назначение будет полезно знать, поэтому мы прокомментируем наиболее важные из них.
За общие настройки сервера отвечает секция [global], которая, кстати, прекрасно прокомментирована. Обратите внимание на два вида комментариев опций, если для этого используется символ # — то указанное значение применяется по умолчанию, а символ ; обозначает предлагаемый вариант настройки.
Начнем, опции перечисляются в порядке их следования в файле:
workgroup = WORKGROUP
Обозначает рабочую группу Windows, по умолчанию WORKGROUP.
; interfaces = 127.0.0.0/8 eth0
Следующая опция определяет интерфейсы или подсети, с которыми будет работать Samba. Допускается смешанная запись, как в примере выше, либо можно указать только интерфейсы:
interfaces = lo ens33
Или только подсети:
interfaces = 127.0.0.0/8 192.168.16.0/24
Но само по себе указание интерфейсов не ограничивает Samba, для того чтобы ограничения начали действовать нужно включить следующую опцию:
bind interfaces only = yes
Следующая опция указывает расположение логов:
log file = /var/log/samba/log.%m
По умолчанию лог выключен, для того чтобы его включить добавьте в файл опцию:
log level = 1
Если вам нужен более подробный лог — установите более высокий уровень, минимальное значение — 1, максимальное — 5.
Также закомментируйте опцию:
# syslog = 0
В настоящий момент она является не рекомендованной (deprecated).
server role = standalone server
Обозначает простой файловый сервер, не требующий подключения к домену.
map to guest = bad user
Определяет способ определения гостевого доступа, при указанном значении гостем будет считаться любой пользователь, который отсутствует в базе Samba. Также могут использоваться значения never — не использовать гостевой доступ и bad password — в этом случае гостем будет считаться, в том числе, и существующий пользователь если он неправильно введет пароль. Данное значение использовать не рекомендуется, так как при ошибке в пароле пользователь все равно получит доступ, но с гостевыми правами.
На этом общая настройка сервера закончена. Проверим конфигурацию на ошибки:
testparm
И перезапустим сервер
service smbd restart
Настройка общего ресурса с гостевым доступом
Начнем с самого простого варианта — создадим общий ресурс, доступ к которому может иметь любой пользователь. Для этого добавим в конец файла /etc/samba/smb.conf следующие строки.
[public]
comment = Shared for all
path = /samba/public
read only = no
guest ok = yes
В квадратных скобках задаем имя ресурса, все что ниже скобок — секция этого ресурса. В ней мы указали следующие опции:
- comment — описание ресурса, необязательный параметр;
- path — путь к директории;
- read only — режим только чтения, указываем no;
- guest ok — разрешен ли гостевой доступ, указываем yes;
Теперь создадим саму директорию:
mkdir /samba/public
и установим на нее необходимые права, для гостевого ресурса это 777:
chmod 777 /samba/public
Если у вас предполагается только гостевой доступ на этом можно остановиться, в случае наличия ресурсов с требованием аутентификации могут возникнуть проблемы. Дело в том с какими правами будут записаны файлы на общий ресурс, если не указано иного, то по умолчанию Samba использует 0744 для файлов и 0755 для директорий. Т.е. полный доступ остается только у владельца файла, остальные получают права только на чтение. Чтобы исправить это следует явно указать режим для новых файлов и папок, для этого добавим в секцию еще две строки:
create mode = 0777
directory mode = 0777
В этом случае итоговые права будут рассчитаны с учетом отображения прав доступа DOS в разрешения UNIX, что имеет некоторые особенности, в частности права на файлы будут установлены как 766 или rwx-rw-rw. Это значит, что запустить исполняемый файл сможет только тот, кто является его владельцем. Остальные получат сообщение об отсутствии прав доступа:
На файлы не являющиеся исполняемыми это никак не влияет, но оставлять этот момент без внимания тоже не следует. Вообще к возможности запускать файлы непосредственно с общего ресурса нужно относиться с осторожностью и в целях безопасности неплохо было бы вообще запретить эту возможность, для этого установите:
create mode = 0666
Это полностью снимет права на выполнение для всех, но оставит полный доступ к исполняемым файлам. Если же требуется разрешить возможность запуска, то вместо create mode следует использовать опцию force create mode, которая будет устанавливать разрешения без учета прав доступа DOS:
force create mode = 0777
Теперь перезапускаем Samba и пробуем получить доступ с любого Windows-клиента.
Если все сделано правильно, то сервер появится в сетевом окружении, и вы без проблем получите доступ к созданной нами общей папке.
Настройка общего ресурса с парольным доступом
Гостевой доступ это просто и удобно, но не всегда приемлемо. Существуют ситуации, когда доступ к общему ресурсу должны иметь только определенные пользователи. В нашем примере создадим два таких ресурса: для бухгалтерии и для IT-отдела.
Снова откроем конфигурационный файл и добавим в него две секции:
[buch]
path = /samba/buch
read only = no
guest ok = no[adm]
path = /samba/adm
read only = no
guest ok = no
Они предельно просты и отличаются запретом гостевого доступа — guest ok = no. Для того, чтобы разделить доступ к ресурсам будем использовать группы пользователей, создадим две новые группы для наших подразделений:
groupadd smbbuch
groupadd smbadm
Теперь создадим каталоги:
mkdir /samba/buch
mkdir /samba/adm
и изменим группу владельца:
chgrp smbbuch /samba/buch
chgrp smbadm /samba/adm
Затем установим права:
chmod 2770 /samba/buch
chmod 2770 /samba/adm
Значение 2770 обозначает что мы предоставляем полные права владельцу и группе, для остальных доступ запрещен. А первая двойка устанавливает SGID для каталога, что обеспечивает присвоение группы каталога каждому создаваемому в нем файлу.
В некоторых случаях определенный интерес представляет выставление для каталога sticky bit, который означает, что удалить или переименовать файл может только его владелец, но работать с ним, в том числе изменять, может любой пользователь, имеющий права записи в каталог. Для этого вместо набора прав 2770 используйте права 3770.
Не забываем указать права для вновь создаваемых файлов и директорий, здесь справедливо остается все то, о чем мы говорили выше. Например, можно использовать такой набор опций (с правом запуска исполняемых файлов):
force create mode = 0770
directory mode = 2770
Обратите внимание, что мы устанавливаем SGID только для каталогов, для файлов в данной схеме выставлять его не имеет смысла. А вот если вы установили sticky bit, то его нужно указать в обоих случаях:
force create mode = 1770
directory mode = 3770
Не забываем, что данные опции следует добавить в каждую секцию.
На этом настройки закончены, после чего следует сохранить конфигурационный файл и перезапустить Samba. Но в наших группах пока нет пользователей, давайте добавим их туда.
Начнем с уже существующих пользователей, в нашем случае это пользователь andrey, который является главным администратором и должен иметь доступ к обоим ресурсам. Поэтому добавим его в обе группы:
usermod -aG smbbuch andrey
usermod -aG smbadm andrey
Затем добавим его в базу Samba:
smbpasswd -a andrey
При этом потребуется установить пароль для доступа к Samba-ресурсам, он должен совпадать с основным паролем пользователя. После чего включим эту учетную запись:
smbpasswd -e andrey
Проверяем, после ввода пароля мы должны получить доступ к созданным нам ресурсам. Также обратите внимание, после аутентификации в списке общих ресурсов появилась папка с именем пользователя, подключенная только на чтение.
С настройками по умолчанию Samba предоставляет каждому существующему пользователю доступ только на чтение к его домашнему каталогу. На наш взгляд это довольно удобно и безопасно. Если вас не устраивает такое поведение — удалите из конфигурационного файла секцию [homes].
Теперь о других пользователях. Скажем у нас есть бухгалтер Иванова и админ Петров, каждый из которых должен иметь доступ к своему ресурсу. В то же время иметь доступ к самому Samba-серверу им необязательно, поэтому создадим новых пользователей следующей командой:
useradd -M -s /sbin/nologin ivanova
useradd -M -s /sbin/nologin petrov
Ключ -M заводит пользователя без создания домашнего каталога, а -s /sbin/nologin исключает возможность входа такого пользователя в систему.
Поместим каждого в свою группу:
usermod -aG smbbuch ivanova
usermod -aG smbadm petrov
Затем добавим их в базу Samba, при этом потребуется установить им пароли:
smbpasswd -a ivanova
smbpasswd -a petrov
И включим эти учетные записи
smbpasswd -e ivanova
smbpasswd -e petrov
Если все сделано правильно, то пользователь будет иметь доступ к своим ресурсам и не иметь к чужим.
Также обратите внимание, что несмотря на то, что общий ресурс с именем пользователя создан, доступ он к нему получить не сможет, так как физически его домашняя директория не существует.
Настройка общего ресурса со смешанным доступом
Теперь рассмотрим более сложную схему, ресурс со смешанным доступом. Например, вы хотите организовать общую папку с инсталляционными пакетами программ, которые может запустить каждый, но не хотите, чтобы кто-либо мог изменять его содержимое, оставив эту привилегию только участникам группы smbadm.
Добавим в конфигурационный файл следующую секцию:
[distr 1C]
path = /samba/distr-1c
read only = no
guest ok = yes
Здесь все понятно, стандартное описание ресурса. Теперь создадим директорию и изменим группового владельца:
mkdir /samba/distr-1c
chgrp smbadm /samba/distr-1c
Теперь подумаем о правах, владелец и группа adm должны иметь полный доступ — rwx (7) плюс установленный SGID для директорий, а остальные должны иметь право чтения и выполнения, т.е. r-x (5), для файлов следует использовать force create mode, иначе вместо желаемых 0775 вы получите 0764, все тоже самое, только без права выполнения для группы и остальных.
force create mode = 0775
directory mode = 2775
Перезапускаем Samba и проверяем, без аутентификации пользователь может только копировать и запускать файлы, а прошедшие проверку подлинности пользователи могут изменять и удалять содержимое общего ресурса.
Настройка скрытого общего ресурса
Еще одна часто встречающаяся задача — скрыть общий ресурс из отображаемого списка. Например, служебные ресурсы, используемые в административных целях. Нет ничего проще, достаточно добавить в секцию ресурса еще одну опцию:
browseable = no
После чего ресурс будет скрыт из отображения, но попасть в него можно будет явно указав путь к нему:
Во всем остальном такие ресурсы ничем не отличаются от обычных и к ним применимо все вышесказанное.
Настройка корзины для общего ресурса
Полезность корзины на файловом сервере, пожалуй, не будет отрицать никто. Человеку свойственно ошибаться и будет очень обидно, если ценой ошибки окажется несколько часов работы, но, к счастью, Samba позволяет помещать удаленные файлы в корзину.
Для активации корзины добавьте в секцию к общему ресурсу следующие строки:
vfs objects = recycle
recycle:repository = .recycle
recycle:versions = yes
recycle:keeptree = yes
Первая опция добавит в общий ресурс новый объект — корзину, вторая укажет ее расположение — скрытая папка в корне. Две следующих включают сохранение структуры папок при удалении и сохранение нескольких версий файла с одним и тем же именем. Это позволяет максимально обезопасить себя от ситуаций, когда в разных папках лежали одноименные файлы с разным содержимым или на место удаленного файла скопировали еще один такой же и тоже удалили.
Выше мы везде говорили о правах, корзина не исключение, если у вас включено сохранение структуры папок, то по умолчанию она будет создана с правами 0700, т.е. восстановить файл сможет только тот, кто его удалил. Рекомендуется изменить это поведение и установить права аналогичные указанным в directory mode, для этого добавим еще одну опцию (права указаны для директории buch):
recycle:directory_mode = 2770
Перезапустим Samba и попробуем что-нибудь удалить.
Несмотря на грозное предупреждение Проводника удаляемые файлы перемещаются в корзину, откуда мы их можем восстановить.
Как видим, работать с Samba не просто, а очень просто, при том, что мы оставили за кадром многие возможности тонкой настройки, многие из которых требуют отдельных статей. Надеемся, что данный материал окажется вам полезным и поможет быстро и без проблем развернуть файловый сервер на Linux.
Также рекомендуем ознакомиться со статьей Linux — начинающим. Часть 4. Работаем с файловой системой. Теория для более подробного ознакомления с системой прав файловой системы Linux.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Samba — программа, которая позволяет обращаться к сетевым дискам на различных операционных системах по протоколу SMB/CIFS.
Простыми словами Samba — это программное обеспечение для реализации файлового сервера, а с 4-й версии и контроллера домена (аналог Windows Active Directory). Устанавливается как на Windows, так и Linux/FreeBSD. Также может быть установлена на некоторые модели роутеров для реализации простого домошнего файлового хранилища.
В качестве клиентской части для подключения к файловому серверу Samba может выступать программное обеспечение, работающее по протоколу SMB. В Linux/FreeBSD это samba client, в Windows — проводник.
Samba использует 137-139 порты UDP и Порты TCP. Что такое TCP / IP порт.
В руководстве описана установка и настройка автономного файлового сервера под управлением Samba Ubuntu Server 20.04 для доступа клиентов Windows, Linux, macOS.
Компьютеры под управлением Windows и Ubuntu должны быть членами локального домена или рабочей группы под названием WORKGROUP.
Для проверки в Windows к какой рабочей группе принадлежит компьютер используйте команду:
net config workstation
На скриншоте видно, что мой клиентский компьютер имеет правильное название рабочей группы.
Обновляем пакеты и устанавливаем Samba сервер. Также установим клиента Samba — пригодится для тестирования настроек сервера.
sudo apt update sudo apt install samba smbclient
Мы начнем со свежего чистого файла конфигурации smb.conf, удалив все закоментированные строки. А также сохраним файл конфигурации по умолчанию в качестве резервной копии для справочных целей. Выполните следующие команды linux, чтобы сделать копию существующего файла конфигурации и создать новый файл конфигурации /etc/samba/smb.conf:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup sudo bash -c 'grep -v -E "^#|^;" /etc/samba/smb.conf_backup | grep . > /etc/samba/smb.conf'
У Samba есть собственная система управления пользователями. Однако любой пользователь, существующий в списке пользователей samba, также должен быть системным, то есть существовать в файле /etc/passwd. Если ваш системный пользователь еще не существует и, следовательно, не может быть расположен в файле /etc/passwd, сначала создайте нового пользователя с помощью команды useradd, прежде чем создавать любого нового пользователя Samba.
Создадим системного пользователя
sudo useradd -m -c "Name_User" -s /bin/bash buhnasmb sudo passwd buhnasmb
Возьмем для примера имя buhnasmb, допустим что он уже есть в системе (проверить командой id), надо внести его в базу данных SMB и назначить пароль для доступа к общим ресурсам, сделаем это командой:
$ sudo id buhnasmb uid=1003(buhnasmb) gid=1003(buhnasmb) groups=1003(buhnasmb) $ sudo smbpasswd -a buhnasmb New SMB password: Retype new SMB password: Added user buhna.
Создадим директорию для хранения расшаренных файлов и папок:
mkdir -p /home/hdd2backup/smb/buhnasmb
Добавьте в конец файла /etc/samba/smb.conf следующие строки, buhnasmb замените на имя пользователя компьютера с Samba. Папка будет открыта для чтения и записи.
[BackupWork] comment = Samba Share path = /home/hdd2backup/smb/buhnasmb guest ok = yes browsable =yes writable = yes read only = no force user = buhnasmb force group = buhnasmb
Не забудьте поставить правильного владельца и права доступа на папку, которую вы расшариваете, например так:
sudo chmod ug+rwx /home/hdd2backup/smb/buhnasmb sudo chown root:"пользователи домена" /home/hdd2backup/smb/buhnasmb
Перезапуск Samba:
sudo systemctl restart smbd.service
Теперь вы знаете, как создавать общедоступные общие ресурсы Samba. Теперь приступим к созданию частных и защищенных общих ресурсов.
Для того чтобы защитить открытую папку, вашего файлового сервер Samba, паролем достаточно изменить параметр guest ok на no и если вы хотите скрыть в обзоре сети вашу папку параметр browsable на no.
То есть настройка идентична ШАГ 4. Хорошо давайте повторю.
И так создаем новую директорию:
mkdir -p /home/hdd2backup/smb/protected
Пользователь тот же buhnasmb, напоминаю, что пароль для доступа к smb- ресурсам мы пользователю buhnasmb задали на ШАГ 3.
Добавьте в конец файла /etc/samba/smb.conf следующие строки, buhnasmb замените на имя пользователя компьютера с Samba. Папка будет доступна по логину и паролю.
[ProtectedSamba] comment = Samba Protected Share path = /home/hdd2backup/smb/protected guest ok = no browsable =yes writable = yes read only = no force user = buhnasmb force group = buhnasmb
Задайте права на папку как в ШАГ 4:
sudo chmod ug+rwx /home/hdd2backup/smb/protected sudo chown root:"пользователи домена" /home/hdd2backup/smb/protected
Перезапуск Samba:
sudo systemctl restart smbd.service
# testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_STANDALONE
- smb.conf
-
[global] workgroup = WORKGROUP server string = %h server (Samba, Ubuntu) log file = /var/log/samba/log.%m max log size = 1000 logging = file panic action = /usr/share/samba/panic-action %d server role = standalone server obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user netbios name = back20 usershare allow guests = yes [PublicSamba] comment = Samba Anonymous Share path = /home/hdd2backup/smb/buhnasmb guest ok = yes browsable =yes writable = yes read only = no force user = buhnasmb force group = buhnasmb [ProtectedSamba] comment = Samba Protected Share path = /home/hdd2backup/smb/protected guest ok = no browsable =yes writable = yes read only = no force user = buhnasmb force group = buhnasmb
Проект Samba продолжает активно развиваться. Скорость работы Samba в условиях многопользовательского доступа в качестве ролей файлового и принт-сервера более чем в два раза выше по сравнению с Windows Server.
Начиная с четвёртой версии, Samba может выступать в роли контроллера домена и сервиса Active Directory, совместимого с реализацией Windows 2000, и способна обслуживать все поддерживаемые Microsoft версии Windows-клиентов, в том числе Windows 10.
К сожалению, для более углубленного изучения Samba в интернете практический нет информации.
Установка и настройка файлового сервера Samba на Ubuntu или Debian
Обновлено:
Опубликовано:
Используемые термины: Samba, Ubuntu, SMB.
Samba позволяет настроить файловое хранилище различных масштабов — от малых офисов для крупных организаций. В данной инструкции мы рассмотрим процесс настройки файлового сервера. Сначала мы выполним установку и базовую настройку с предоставлением гостевого доступа. После будет приведены примеры разграничения доступа по пользователям, группам и пользователям Active Directory. Инструкция протестирована на системах Ubuntu и Debian.
Подготовка сервера к работе
Настройка времени
Брандмауэр
Установка и запуск сервиса Samba
Создание первой шары с гостевым доступом
Настройка доступа к папке по логину и паролю
Доступ к папке для пользователей и групп
Помещение удаленных файлов в сетевую корзину
Настройка клиентов для подключения к шаре
Windows
Linux
Некоторые полезные опции Samba
hosts allow
hosts deny
interfaces
force user/group
include
Читайте также
Подготовка сервера
Прежде чем перейти к установке файлового серера, выполним подготовку.
1. Время
Для корректного отображения дат, необходимо позаботиться о синхронизации времени. Для этого будем использовать демон chrony. Установим его:
apt update
apt install chrony
Разрешим автозапуск сервиса:
systemctl enable chrony
2. Брандмауэр
По умолчанию, в системах на базе Debian брандмауэр разрешает все соединения. Но если в нашем случае мы используем брандмауэр, необходимо открыть порты:
iptables -I INPUT -p tcp —dport 445 -j ACCEPT
iptables -I INPUT -p udp —dport 137:138 -j ACCEPT
iptables -I INPUT -p tcp —dport 139 -j ACCEPT
* где порт 445 используется для samba, а порты 137, 138 и 139 — для работы NetBIOS (использование имени компьютера для доступа).
Применяем настройки:
apt install iptables-persistent
netfilter-persistent save
Установка выполняется из репозитория одной командой:
apt update
apt install samba
И проверим, что сервис запустился:
systemctl status smbd
Проверяем, что сервер самба позволяет к себе подключиться. Для этого можно с компьютера обратиться к серверу по SMB, например, на компьютере с Windows это можно сделать из проводника, прописав путь к серверу с двух слэшей:
* в данном примере мы подключаемся к серверу Samba с IP-адресом 192.168.1.15.
Если мы настроили сервер правильно, система откроет пустую папку. На данном этапе проверка закончена и мы можем переходить к созданию первой шары.
Разберем самый простой пример предоставления доступа к папке — анонимный доступ всем пользователям без запроса пароля.
Открываем на редактирование конфигурационный файл samba:
vi /etc/samba/smb.conf
И добавляем настройку для общей папки:
[Общая папка]
comment = Public Folder
path = /data/public
public = yes
writable = yes
read only = no
guest ok = yes
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
* где:
- [Общая папка] — имя общей папки, которое увидят пользователи, подключившись к серверу.
- comment — свой комментарий для удобства.
- path — путь на сервере, где будут храниться данные.
- public — для общего доступа. Установите в yes, если хотите, чтобы все могли работать с ресурсом.
- writable — разрешает запись в сетевую папку.
- read only — только для чтения. Установите no, если у пользователей должна быть возможность создавать папки и файлы.
- guest ok — разрешает доступ к папке гостевой учетной записи.
- create mask, directory mask, force create mode, force directory mode — при создании новой папки или файла назначаются указанные права. В нашем примере права будут полные.
Создаем каталог на сервере и назначим права:
mkdir -p /data/public
chmod 777 /data/public
Применяем настройки samba, перезагрузив сервис:
systemctl restart smbd
Пробуем подключиться к папке. Мы должны зайти в нее без необходимости ввода логина и пароля.
Теперь создадим каталог, в который вход будет разрешен только авторизованным пользователям.
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
Добавляем настройку для новой папки:
[Папка сотрудников]
comment = Staff Folder
path = /data/staff
public = no
writable = yes
read only = no
guest ok = no
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
* эти настройки, во многом, похожи на те, что использовались в примере выше. Вот основные различия:
- path = /data/staff — используем новый путь до папки.
- public = no — запрещаем публичный доступ.
- guest ok = no — не разрешаем гостевое подключение.
Создаем каталог для новой папки:
mkdir /data/staff
Задаем права на созданный каталог:
chmod 777 /data/staff
Создаем пользователя в системе Linux:
useradd staff1
* где staff1 — имя пользователя.
Задаем пароль для пользователя:
passwd staff1
Теперь создадим пользователя в samba:
smbpasswd -a staff1
Перезапускаем samba:
systemctl restart smbd
Пробуем зайти на сервер — общую папку мы должны открыть без авторизации, а при попытке открыть папку сотрудников должно появиться окно ввода логина и пароля.
Если мы авторизованы на компьютере, с которого пытаемся подключиться к серверу, под той же учетной записью, что создали для доступа к папке, samba может и не потребовать аутентификации.
Теперь создадим папку, доступ к которой будут иметь ограниченное количество пользователей.
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
Добавляем настройку для новой папки:
[Приватная папка]
comment = Private Folder
path = /data/private
public = no
writable = no
read only = yes
guest ok = no
valid users = admin, staff2, staff3, @privateusers
write list = admin, staff2
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
inherit owner = yes
* стоит обратить внимание на следующие настройки:
- path = /data/private — используем новый путь до папки.
- writable = no и read only = yes — в данном примере мы разрешим запись в каталог только некоторым пользователям. Поэтому общие настройки, разрешающие запись в папку, должны быть запрещены.
- valid users — список пользователей, которым разрешено подключаться к каталогу. В данном примере разрешения работают для пользователей admin, staff2 и staff3, а также для всех, кто входим в группу privateusers.
- write list — список пользователей, которые имеют доступ к папке на чтение и запись. В данном примере мы разрешаем это только для пользователей admin и staff2.
- inherit owner — опция позволяем включить наследование владельца при создании папок и файлов.
* если мы хотим, чтобы доступ к каталогу был полный у определенных пользователей (без разделения на тех, кто может только читать и тех, кто может также писать в папку), то опцию write list можно не указывать, а опции writable и read only оставить как в примерах выше.
Создаем каталог для новой папки:
mkdir /data/private
Задаем права на созданный каталог:
chmod 777 /data/private
Для применения настроек перезапускаем samba:
systemctl restart smbd
Создать группу пользователей можно командой:
groupadd privateusers
Добавить ранее созданного пользователя в эту группу:
usermod -a -G privateusers staff1
Подробнее о работе с учетными записями в Linux.
Проверяем возможность работы с новым каталогом.
Сетевая корзина
При удалении файлов из общей папки, данные удаляются навсегда. Но мы можем настроить сетевую корзину — скрытый каталог, в который будут перемещаться удаляемые с самбы объекты.
Открываем конфигурационный файл:
vi /etc/samba/smb.conf
Создаем шару:
[Recycle]
comment = Snap Directories
path = /data/recycle
public = yes
browseable = yes
writable = yes
vfs objects = recycle
recycle:repository = .recycle/%U
recycle:keeptree = Yes
recycle:touch = Yes
recycle:versions = Yes
recycle:maxsize = 0
recycle:exclude = *.tmp, ~$*
recycle:exclude_dir = /tmp
* где:
- vfs objects = recycle — использовать подсистему recycle.
- recycle:repository — где хранить удаленные объекты. В данном примере удаленные файлы попадут в скрытый каталог .recycle к котором создастся каталог с именем пользователя, удалившего файл или папку.
- recycle:keeptree — удалять объекты с сохранение дерева каталогов.
- recycle:touch — изменить ли дату изменения файла при его перемещении в корзину.
- recycle:versions — при удалении файлов с совпадающими именами, добавлять номер версии.
- recycle:maxsize — не помещать в корзину файлы, размер которых больше заданного параметра (в байтах). В данном примере, помещать файлы любого размера.
- recycle:exclude — исключить файлы.
- recycle:exclude_dir — исключить каталог.
Создаем каталог и задаем права:
mkdir /data/recycle
chmod 777 /data/recycle
Перезапускаем самбу:
systemctl restart smbd
Пробуем зайти в сетевой каталог Recycle и создать, а после удалить файл. Он должен оказаться к скрытой папке .recycle.
Для автоматической чистки сетевой корзины можно создать скрипт:
mkdir /scripts
vi /scripts/cleanrecycle.sh
#!/bin/bash
recyclePath=»/data/recycle/.recycle»
maxStoreDays=»30″
/usr/bin/find $recyclePath -name «*» -ctime +$maxStoreDays -exec rm {} \;
* в данном скрипте мы ищем все файлы в каталоге /data/recycle/.recycle, которые старше 30 дней и удаляем их.
Разрешаем запуск скрипта:
chmod +x /scripts/cleanrecycle.sh
Создаем задание в планировщике:
crontab -e
0 5 * * * /scripts/cleanrecycle.sh
* в данном примере мы будем запускать скрипт по очистке сетевой корзины каждый день в 05:00.
Подключение к шаре
Теперь разберем примеры подключения к нашим шарам из разных систем.
Windows
Для разового подключения можно использовать проводник, прописав в нем адрес сервера через косые линии:
Для подключения сетевого диска, который будет автоматически создаваться при запуске системы, в проводнике сверху нажимаем Простой доступ — Подключить как диск:
В открывшемся окне прописываем путь до сетевой папки и выбираем имя диска:
Сетевой диск настроен.
Но мы может сделать те же действия из командной строки:
net use x: \\samba.dmosk.local\AD ACL /persistent:yes
* где x: — имя сетевого диска; \\samba.dmosk.local\AD ACL — путь до сетевого каталога; persistent:yes — указывает на то, что нужно восстанавливать данный диск каждый раз при входе в систему.
Linux
Монтирование
В Linux мы можем монтировать удаленный каталог с помощью команды mount, например:
mount -t cifs «//192.168.1.15/ad» /mnt -o user=dmosk
* где 192.168.1.15 — IP-адрес сервера; mnt — каталог, куда монтируем сетевую шару; dmosk — пользователь, под которым выполняем подключение к сетевому каталогу.
** в систему должен быть установлен пакет cifs-utils.
Подробнее, процесс монтирования описан в инструкции Как в Linux монтировать шару CIFS.
SMB Browser
Также мы можем увидеть содержимое удаленных папок на samba при помощи клиента smb. Для начала установим данного клиента:
а) на Red Hat / CentOS / Fedora:
yum install samba-client
б) на Debian / Ubuntu / Mint:
apt install samba-client
После вводим команду:
smbclient -L 192.168.1.15 -U staff@dmosk.local
* где 192.168.1.15 — сервер samba, к которому мы пытаемся подключиться; staff@dmosk.local — учетная запись, под которой выполняется подключение.
… мы получим список каталогов, которые расшарены на сервере.
Также мы можем подключиться к конкретной папке, например:
smbclient \\\\192.168.1.15\\ad -U staff@dmosk.local
Мы подключимся клиентом samba — можно выполнить запрос на показ содержимого:
smb: \> ls
Или полный список возможных команд:
smb: \> help
Некоторые опции Samba
Рассмотрим некоторые полезные опции, которые могут пригодится при настройке Samba.
1. hosts allow
Параметр задает список разрешенных хостов или сетей, с которых можно подключаться к серверу. Если его прописать в секцию с настройкой шары, то он будет действовать только для нее, если прописать в [global], то для всех общих папок.
Пример использования параметра.
hosts allow = comp1, 192.168.1., 192.168.160.0/255.255.252.0
* в нашем примере мы разрешим доступ только для компьютера comp1, компьютеров из сетей 192.168.1.0/24 и 192.168.160.0/22.
2. hosts deny
Параметр аналогичный hosts allow, только он наоборот — запрещает доступ для хостов и сетей. Например:
hosts deny = comp2, 192.168.2., 192.168.164.0/255.255.252.0
hosts deny = ALL EXCEPT 192.168.3.
3. interfaces
По умолчанию samba использует все сетевые интерфейсы, кроме локальной петли (127.0.0.1). Параметр interfaces позволит указать, на каком сетевом адаптере файловый сервер должен принимать запросы. Пример:
interfaces = ens32 192.168.1.15/24 192.168.2.15/255.255.255.0
4. Force User/Group
Опции force user и force group позволяют задать пользователя и группу, от которых будет работать подключение пользователя к samba. Параметр может оказаться полезным для создания шары из каталога с уже назначенным владельцем, которого мы не хотим менять.
Прописывается для шары:
force user = apache
force group = apache
* данная настройка позволит подключаться к шаре под пользователем apache.
5. Include
Позволяет подключить дополнительный файл с конфигурацией.
include = /etc/samba/conf.d/shares.conf
* данная опция будет дополнительно подключать конфигурацию из файла /etc/samba/conf.d/shares.conf (прописывается полный путь).
Читайте также
Возможно, эти инструкции будут также Вам полезны:
1. Как в Linux монтировать шару CIFS.
2. Как настроить автоматическое монтирование дисков в Linux.
3. Настройка дисковых квот в Linux.
4. Установка и настройка samba в Linux CentOS.