В офисе несколько компьютеров с Windows, а файлы нужно хранить централизованно. Можно использовать расшаренную папку на одном из компьютеров, но тогда этот компьютер должен быть постоянно включён. Доступы настраивать вручную на каждой машине сложно. Производительность страдает, а безопасность оставляет желать лучшего.
Хочется выделить отдельный сервер. Надёжный, быстрый и нетребовательный к ресурсам. Windows Server требует лицензий, мощного железа и капризен в настройке. Если взять старый компьютер и установить на него Linux, можно быстро, бесплатно и с отличной производительностью. Но как сделать так, чтобы Windows клиенты видели этот сервер в сети, открывали общие папки и работали с ними как с обычными сетевыми дисками?
Эта статья похожа на быструю настройку Samba, которая уже была описана в блоге. Но здесь мы будем работать с фаерволом, и быстрая настройка Samba подходит больше для расшаривания папки на своём ПК с Linux, а не для сервера.
Немного о Samba
Samba это свободная реализация протоколов SMB и CIFS. Она позволяет Linux серверу выступать в роли файлового сервера для Windows клиентов, а также принт-сервера и даже контроллера домена. Samba умеет предоставлять общие папки, доступные через сетевое окружение. Аутентифицировать пользователей (можно использовать локальных Linux пользователей или отдельную базу Samba). Разграничивать права доступа на уровне папок и файлов. Работать с доменами Windows при необходимости.
Мы настроим Samba на Ubuntu Server. Инструкции подойдут и для Debian, CentOS, Astra Linux с небольшими изменениями. Настроим простой файловый сервер для небольшого офиса. Создадим общую папку, настроим доступ по логину и паролю, а также покажем, как монтировать эту папку на Windows клиентах.
Пошаговая инструкция
Шаг 1. Установка Samba
Подключитесь к серверу по SSH и выполните обновление пакетов, затем установите Samba.
Ubuntu, Debian.
text
sudo apt update
sudo apt install samba -y
CentOS, RHEL.
text
sudo yum install samba samba-client -y
После установки служба Samba запустится автоматически. Проверьте статус.
text
sudo systemctl status smbd
Если не запущена, запустите и добавьте в автозагрузку.
text
sudo systemctl start smbd
sudo systemctl enable smbd
Шаг 2. Создание общей папки
Создадим директорию, которая будет доступна по сети. Например для общего отдела.
text
sudo mkdir -p /srv/samba/share
sudo chmod 777 /srv/samba/share
chmod 777 даёт полный доступ всем, но мы ограничим доступ на уровне Samba. Если нужно более тонкое управление правами, можно создать отдельную группу.
Шаг 3. Добавление пользователей Samba
Samba использует собственный файл паролей, отдельный от системных. Для каждого пользователя нужно создать запись в Samba. Удобно использовать системных пользователей (они уже есть), но для Samba нужно задать отдельный пароль.
Создадим системного пользователя, если его нет.
text
sudo useradd -m -s /bin/bash sambauser
sudo passwd sambauser # задаём пароль для входа в систему (если нужно)
Теперь добавим этого пользователя в базу Samba с тем же паролем (или другим).
text
sudo smbpasswd -a sambauser
Будет запрошен пароль. Можно задать тот же, что и системный, или другой. Для доступа к общим папкам Samba будет использовать именно этот пароль.
Если нужно добавить несколько пользователей, повторяем команду для каждого.
Шаг 4. Настройка Samba (редактирование конфигурации)
Основной конфигурационный файл Samba это /etc/samba/smb.conf. Сделаем его резервную копию.
text
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
Отредактируем файл.
text
sudo nano /etc/samba/smb.conf
В конец файла добавим описание нашей общей папки.
text
[share]
comment = Общая папка отдела
path = /srv/samba/share
browseable = yes
read only = no
guest ok = no
valid users = sambauser, andrey
create mask = 0660
directory mask = 0770
Пояснения параметров.
[share] имя общего ресурса, которое увидят клиенты.
comment описание.
path путь к папке на сервере.
browseable показывать ресурс в списке общих папок.
read only = no разрешить запись.
guest ok = no запретить гостевой доступ (требовать аутентификацию).
valid users список пользователей, которым разрешён доступ.
create mask и directory mask маски прав на создаваемые файлы и папки (обеспечивают, чтобы новые файлы имели нужные права).
Проверьте, что глобальные настройки (в начале файла) задают правильную рабочую группу. Для Windows сети часто используется workgroup = WORKGROUP. Если в вашей сети используется домен, укажите соответствующий.
Шаг 5. Проверка конфигурации и перезапуск Samba
Проверьте синтаксис конфигурации.
text
testparm
Если ошибок нет, перезапустите службу.
text
sudo systemctl restart smbd
Также рекомендуется перезапустить службу nmbd (для NetBIOS имён).
text
sudo systemctl restart nmbd
Шаг 6. Настройка брандмауэра
Samba использует несколько портов. 137-139 (UDP и TCP) и 445 (TCP). Откройте их в брандмауэре.
Для Ubuntu с ufw.
text
sudo ufw allow samba
Или конкретнее.
text
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp
sudo ufw allow 137/udp
sudo ufw allow 138/udp
Для CentOS с firewalld.
text
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
Шаг 7. Подключение с Windows клиента
Теперь с любого компьютера в той же сети можно подключиться к общей папке.
Откройте Проводник. В адресной строке введите \\IP-адрес-сервера\share (например \\192.168.1.100\share). Если Samba настроена с аутентификацией, появится окно входа. Введите имя пользователя (sambauser) и пароль, который задавали через smbpasswd. Если всё правильно, откроется папка. Можно создавать, копировать, удалять файлы (в зависимости от прав).
Если хотите подключить папку как сетевой диск, выберите «Подключить сетевой диск» в проводнике и укажите путь.
Шаг 8. Настройка прав доступа на уровне файловой системы
Samba использует права файловой системы Linux. Даже если в конфигурации Samba разрешена запись, файловая система может запрещать. Убедитесь, что пользователь Samba имеет права на запись в папку.
Мы создали папку с правами 777, но это небезопасно. Лучше создать группу, добавить в неё пользователей и назначить права для группы.
Пример.
text
# Создаём группу
sudo groupadd smbgroup
# Добавляем пользователей в группу
sudo usermod -aG smbgroup sambauser
sudo usermod -aG smbgroup andrey
# Меняем владельца папки на группу
sudo chown -R root:smbgroup /srv/samba/share
# Устанавливаем права: владелец и группа имеют полный доступ, остальные ничего
sudo chmod 770 /srv/samba/share
Теперь только пользователи из группы smbgroup могут читать и писать в эту папку.
Шаг 9. Автоматическое монтирование сетевой папки на Windows (опционально)
Чтобы сетевая папка подключалась автоматически при входе в систему на Windows клиенте, можно использовать скрипт или настроить подключение через групповые политики (если есть домен). Для одиночного компьютера проще настроить вручную.
Откройте Проводник. Нажмите «Подключить сетевой диск». Укажите букву диска и путь \\сервер\share. Отметьте «Восстанавливать при входе в систему». Если нужно автоматически вводить пароль, можно сохранить учётные данные (но это менее безопасно).
Шаг 10. Устранение распространённых проблем
ПроблемаВозможная причинаРешениеНе видно сервер в сетиБрандмауэр блокирует порты или служба nmbd не работаетПроверьте порты, перезапустите nmbd, убедитесь, что сервер и клиент в одной рабочей группеОшибка «Доступ запрещён»Неверный логин или пароль, пользователь не в списке valid usersПроверьте пароль через smbpasswd, убедитесь, что пользователь добавлен в valid usersПапка открывается, но не пишетПрава файловой системы запрещают записьПроверьте права на папку: ls -ld /srv/samba/shareМедленная работаПроблемы с DNS или NetBIOSЛучше подключаться по IP адресу, проверить настройки сети
Расширенные возможности
Samba может выступать как контроллер домена. Это позволяет заменить Windows Server DC в небольших сетях. Домашние каталоги пользователей можно автоматически расшарить. Интеграция с LDAP для централизованного хранения учётных записей. Настройка журналирования для отслеживания доступа и ошибок.
Samba это инструмент, который превращает любой Linux сервер в полноценный файловый сервер для Windows среды. Настройка проста, не требует лицензий и отлично работает даже на скромном оборудовании. Освоив базовую конфигурацию, вы сможете гибко управлять общими ресурсами, разграничивать доступ и обеспечить централизованное хранение файлов в офисе.
Пример конфигурационного файла (отправная точка)
Ниже приведён конфиг, который может стать для вас отправной точкой. В него можно добавлять секции для папок и другие настройки по вашему желанию.
text
# /etc/samba/smb.conf
# Базовая конфигурация Samba для файлового сервера в сети с Windows
[global]
# Имя сервера в сети (будет отображаться в сетевом окружении)
netbios name = SERVER
# Рабочая группа (должна совпадать с группой Windows клиентов)
workgroup = WORKGROUP
# Описание сервера
server string = Samba File Server
# Безопасность: требуем аутентификацию пользователей
security = user
# Хранить пароли в файле /etc/samba/smbpasswd
passdb backend = tdbsam
# Маски прав для новых файлов и папок (пользователь может писать)
create mask = 0644
directory mask = 0755
# Включаем поддержку широковещательных запросов NetBIOS
name resolve order = bcast host lmhosts wins
# Логи (полезно для отладки)
log file = /var/log/samba/log.%m
max log size = 1000
# Отключаем поддержку старых протоколов SMB (безопасность)
server min protocol = SMB2
client min protocol = SMB2
# Если сервер используется как PDC (контроллер домена) – дополнительные настройки
# domain master = no
# local master = yes
# preferred master = yes
# os level = 65
# Общая папка для отдела (доступ по паролю)
[share]
comment = Общая папка отдела
path = /srv/samba/share
browseable = yes
read only = no
guest ok = no
valid users = sambauser, andrey
# Права на создаваемые внутри папки файлы
create mask = 0660
directory mask = 0770
force group = smbgroup
force create mode = 0660
force directory mode = 0770
# Гостевая папка для публичных файлов (доступ без логина)
[public]
comment = Публичные файлы
path = /srv/samba/public
browseable = yes
read only = yes
guest ok = yes
# Разрешить гостям только чтение
writeable = no
# Домашние каталоги пользователей (автоматически расшаривает каждый домашний каталог)
[homes]
comment = Домашние папки
browseable = no
read only = no
create mask = 0700
directory mask = 0700
valid users = %S