Установка и настройка файлового сервера 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.
Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров12K
Всем привет я всегда хотел вести свой мини блог и решил начать его на Хабре. Я очень вдохновлен этой платформой, потому что я могу её использовать, как для развития самого себя, так и помогать начинающим специалистам в области IT совершенствовать свои навыки. На данном этапе я не могу писать какие-то сверхсложные статьи в данной области, но я постепенно развиваюсь и буду освещать необычные темы в своей блоге. А пока решил начать с чего-то очень простого чтобы самому въехать, и понять как все будет развиваться.
Samba — это программный комплекс, который позволяет компьютерам на базе Linux и UNIX взаимодействовать с системами Windows через протокол SMB/CIFS (Server Message Block/Common Internet File System). Основное
Основное предназначение Samba — обеспечить совместный доступ к файлам, папкам, принтерам и другим ресурсам между разными операционными системами.
Нам необходимо представить доступ к общей папке и к папке «приватных пользователей» на базе astra linux 1.6. Для этого мы создадим 2 общие папки, к которым в целях безопасности смогут подключаться только пользователи Samba, вторая же папка будет «приватная» к которой смогу подключатся только пользователи Samba, но главное отличие в том, что эти пользователи дополнительно будут аутентифицироваться по паролю. Так же если вам необходимо что бы присутствовал пользователь с правами администратора и имел доступ ко всем папкам то выполняйте команды со звездочкой*
«Samba_users» — где доступ имеют только пользователи Samba без пароля
«Samba_private» — где привилегированные пользователи Samba имеют доступ по паролю.
1. Настройка сети
Для начала назначим статические IP-адреса для сервера и клиентских хостов
-
Сервер Samba —
192.168.1.200/24
(Astra Linux 1.6/1.7) -
Хост №1 (Windows 7) —
192.168.1.10, уч. запись vadim
-
Хост №2 (Windows 10) —
192.168.1.11, уч. запись dima
-
*Хост №3 (Windows 10) —
192.168.1.12, уч. запись admin
2. Настройка доменного имени
Присваиваем серверу корректное доменное имя, например: ds1.domain.local
. Выполняем команды:
sudo -i
hostnamectl set-hostname ds1.domain.local
hostname // проверить заданное имя
mcedit /etc/hosts // привести к виду
127.0.0.1 localhost
#127.0.0.1 ds
192.168.1.200 ds1.domain.local ds1
cat /etc/resolv.conf //проверить что бы были указаны правильные DNS сервераПроверяем наличие сетевого взаимодействия
ping (ip - хоста в сети)
3. Установка Samba
Установите Samba на сервере
Fly-admin-samba — Это специальный инструмент, разработанный для Astra Linux. Его основное назначение — упрощение администрирования Samba через
графический интерфейс.
Astra-samba — Это модифицированная версия Samba, интегрированная специально для Astra Linux. Она включает в себя некоторые изменения, специфичные для ОС Astra Linux 1.6— упрощение администрирования Samba через графический интерфейс. Astra-samba — Это модифицированная версия Samba, интегрированная специально для Astra Linux. Она включает в себя некоторые изменения, специфичные для ОС Astra Linux 1.6 хотя fly-admin-samba и astra-samba разработаны для Astra Linux, их использование зависит от вашего сценария:
-
Если вы работаете через графический интерфейс, fly-admin-samba может быть полезным.
-
Если вы хотите использовать полную функциональность Samba и её расширения, то astra-samba будет предпочтительнее.
-
В некоторых случаях может потребоваться ручная настройка через консоль (например, тонкая настройка прав, которая может быть недоступна через GUI).
После установки графического инструмента он станет доступен в меню
«Пуск» > «Панель управления» > «Сеть» > «Общие папки (Samba)«
sudo apt install fly-admin-samba //Установить графический инструмент
apt install astra-sambadc// Установить инструмент командной строки
4. Проверьте, что Samba установлена и работает
sudo systemctl status smbd
sudo systemctl enable smbd //Включить автозапуск службы с ОС
5. Необходимо произвести настройки в конфигурационном файле smb.conf
sudo -i
cp -v /etc/samba/smb.conf /var/backups
systemctl stop smbd
mcedit (nano) /etc/samba/smb.conf
Приводим файл к такому виду, остальное содержание можно оставить без изменений или удалить, но вскоре вам понадобится прописать в этом файле сетевые принтеры или что-то ещё, поэтому в контексте данного задания я показываю часть файла, которая отвечает на заданную нами тему.
[global]
log file = /var/log/samba/%m.log
max log size = 1000
workgroup = WORKGROUP
netbios name = SAMBASERVER
wins support = yes
logging = file
panic action = /usr/share/samba/panic-action %d
server role = standalone server
obey pam restriction = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = Enter\snew\s\spasswdord:* %n\n Retype\snew\s\spasswdord:* %n\n password\supdated\ssuccessfully
pam password change = yes
map to guest = bad user
security = user
comment = Home Directories
encrypt passwords = yes
[samba_users]
comment = Общая папка для пользователей Samba
path = /srv/samba_users
read only = no
guest ok = yes
browseable = yes
writable = yes
valid users = @samba_users, @admin //*добавляем @admin если нужен admin над всеми папками
[samba_private]
comment = Приватная папка
path = /srv/samba_private
browseable = yes
guest ok = no
writable = yes
valid users = @samba_private, @admin
Сохранение в редакторе mcedit/nano
mcedit — Выйти и сохранить — F10
nano — ctrl+X
Обозначение команд в конфигурационном файле
comment = Общая папка Samba
• Описание: Указывает описание ресурса, которое будет отображаться в сетевом окружении.
path = /srv/samba
• Описание: Указывает путь к каталогу на сервере, который предоставляется в общем доступе.
• Пример: Файлы, хранящиеся в /srv/samba, будут видны через этот ресурс.
read only = no
• Описание: Определяет, доступен ли ресурс только для чтения.
• no: Разрешает запись в папку.
guest ok = yes
• Описание: Разрешает доступ к папке без аутентификации (гостевой доступ).
• yes: Любой пользователь может получить доступ к ресурсу без ввода логина и пароля.
browseable = yes
• Описание: Показывать ли папку в сетевом окружении.
• yes: Папка будет видна в списке общих ресурсов.
writable = yes
• Описание: Разрешать ли запись в папку.
• yes: Пользователи смогут добавлять и изменять файлы.
valid users = @samba_private
• Описание: Ограничивает доступ к папке только для указанных пользователей или групп.
• @samba_private: Указывает, что доступ имеют только пользователи из группы samba_private.
• Пример: Если пользователь не принадлежит к этой группе, доступ будет запрещён.
6. Проверка конфигурации на ошибки
testparm
7. Создадим группы пользователей
groupadd samba_users
groupadd samba_private
groupadd admin //*
groupadd samba_del
groupdel samba_del//удалите если добавили лишнюю группу
8. Добавим пользователей Linux и создадим учетные записи Samba
adduser vadim //пароль задаем такие же как у учеток windows
adduser dima
adduser admin //*пользователь, имеющий права ко всем папкам
adduser kiril
smbpasswd -a vadim
smbpasswd -a dima
smbpasswd -a admin
userdel kiril // если случайно дабавили пользователя
9. Добавим пользователей в группы
usermod -aG samba_users dima
usermod -aG samba_private vadim
usermod -aG admin admin//*добавление пользователя админ в группу
gpasswd --delete <пользователь> <группы через запятую> // если необходимо удалить пользователя из группы
10. Создаем папку samba_users с общим доступом для пользователей Samba
sudo -i
mkdir /srv/samba_users (папка с общим доступом где только пользователи Samba могут и читать и записывать)
chmod -R 770 /srv/samba_users
chown -R root:samba_users /srv/samba_users
10.1 Расширение прав и отладка
Практика показала, что пользователи имеют доступ к папкам и все работает отлично.
В моей ситуации получилось так, что данные я переносил с компьютера windows и все файлы получили права admin в группе admin, в связи с чем пользователи не могли получить доступ к файлам внутри расшаренных папок.
Потому если вы столкнулись с данной проблемой или вам необходим доступ как пользователя так и администратора тоже, то это должно вам помочь:
Настройка прав с помощью ACL
Теперь вам необходимо назначить права одновременно для обеих групп.
Добавьте права для группы admin:
sudo setfacl -R -m g:admin:rwx /srv/samba_users
sudo setfacl -R -m g:samba_users:rwx /srv/samba_users
Настраиваем так, что бы новые файлы и папки наследовали права:
sudo setfacl -R -d -m g:admin:rwx /srv/samba_users
sudo setfacl -R -d -m g:samba_users:rwx /srv/samba_users
Проверка текущих ACL
Проверьте, что права настроены правильно:
getfacl /srv/samba_users
Вы должны увидеть что-то вроде:
makefile
# file: /srv/samba_users
# owner: root
# group: samba_users
user::rwx
group::rwx
group:admin:rwx
group:samba_users:rwx
mask::rwx
other::r-x
Аналогично для папки samba_private
sudo -i
mkdir /srv/samba_private (папка с доступом для пользователей Samba по паролю)
chmod -R 770 /srv/samba_private
chown -R root:samba_private /srv/samba_private
Настройка прав с помощью ACL
Теперь вам необходимо назначить права одновременно для обеих групп.
Добавьте права для группы admin:
sudo setfacl -R -m g:admin:rwx /srv/samba_private
sudo setfacl -R -m g:samba_private:rwx /srv/samba_private
Настраиваем так, что бы новые файлы и папки наследовали права:
sudo setfacl -R -d -m g:admin:rwx /srv/samba_private
sudo setfacl -R -d -m g:samba_private:rwx /srv/samba_private
Проверка текущих ACL
Проверьте, что права настроены правильно:
getfacl /srv/samba_private
Вы должны увидеть что-то вроде:
makefile
# file: /srv/samba_private
# owner: root
# group: samba_private
user::rwx
group::rwx
group:admin:rwx
group:samba_private:rwx
mask::rwx
other::r-x
11. Проверка работы службы
Необходимо перезапустить службу Samba и проверить с сервера доступ к конкретной папке
systemctl restart smbd// перезапуск службы
systemctl status smbd //Проверка работы службы
smbclient //localhost/samba_users -U dima
smbclient //localhost/samba_private -U vadim
12. Подключение к общим папкам с хостов Windows
В проводнике отобразится общая папка после чего вы можете создать ярлык этой папки и вынести на рабочий стол для удобства.
Когда вы проверите доступ к папкам с разных компьютеров, то убедитесь что Vadim имеет доступ к 2-м папкам, а dima только к одной (samba_users). При подключении vadim к samba_private, будет затребован пароль для аутентификации, после его ввода он сохраниться и вы будете заходить без дополнительного ввода (Есть смысл делать пароли от учетных записей Windows и Astra Linux одинаковыми).
Вывод
В результате выполнения данной настройки сервера Samba были успешно созданы и настроены общие ресурсы с различными уровнями доступа. Настроены две папки:
-
samba_users — доступна всем пользователям Samba без ввода пароля,
-
samba_private — доступна только определённым пользователям после аутентификации.
Проверка с сервера и клиентских хостов (Windows 7 и Windows 10) подтвердила корректную работу настроек, включая разграничение доступа. Такой подход обеспечивает удобство управления доступом для различных пользователей, а использование групп позволяет гибко управлять правами в будущем. Данный алгоритм демонстрирует простоту настройки Samba и её возможности в организации файлового хранилища с контролем доступа.
Введение
В этом мануале разберем последовательную установку и настройку программного обеспечения Samba на Ubuntu 20.04. Шаги данной инструкции выполним на облачной инфраструктуре Selectel.
Samba — стандартный набор программ для взаимодействия с Windows для Linux и Unix. Это свободное программное обеспечение, лицензированное по GNU General Public License. С 1992 года Samba предоставляет безопасные, стабильные и быстрые услуги по работе с файлами и печатью для всех клиентов, использующих протокол SMB/CIFS, таких как все версии DOS и Windows, OS/2, Linux и многие другие.
Samba — важный компонент для беспрепятственной интеграции Linux/Unix-серверов и настольных компьютеров в среду Active Directory. Она может функционировать как в качестве контроллера домена, так и в качестве обычного члена домена.
Говоря простыми словами, программное обеспечение Samba позволяет настроить файловое хранилище для совместного доступа с возможностью расширенной настройки прав доступа к директориям для групп, авторизованных пользователей, а также анонимный доступ без авторизации.
Подготовка виртуального сервера
Для этой инструкции используется виртуальная среда Selectel. Панель управления расположена по адресу: https://my.selectel.ru/.
В разделе Облачная платформа во вкладке Серверы создадим новый сервер.
Используем минимальную конфигурацию:
- 1 CPU,
- 1 ГБ оперативной памяти,
- 5 ГБ памяти на универсальном диске.
В настройках надо выбрать образ операционной системы для установки.
В данном случае это Ubuntu 20.04 LTS 64-bit из списка готовых конфигураций.
Оставим себе root-пароль и создадим сервер. После этого в панели управления появится IP-адрес сервера.
Подключимся к серверу по ssh и начнем настройку.
Создание пользователя
Создадим простого пользователя для дальнейшего тестирования подключения к настроенным директориям.
sudo useradd -p password selectel
Опция -p разрешит задать пароль пользователя сразу, password — созданный пароль, selectel — создаваемый пользователь.
Перед дальнейшей настройкой обновим репозитории. Сделать это можно командой:
sudo apt update -y
Настройка даты и времени
При первоначальной настройке файлового хранилища очень важно уделить внимание настройке даты и времени, чтобы избежать проблем в будущем при поиске необходимых файлов и директорий.
Для настройки даты и времени используется утилита chrony. Ее демона можно добавить в автозагрузку сервера и время всегда будет актуальным. Отправим в терминал команду установки пакета:
sudo apt install chrony -y
Вывод установки:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
systemd-timesyncd
The following NEW packages will be installed:
chrony
0 upgraded, 1 newly installed, 1 to remove and 5 not upgraded.
Need to get 220 kB of archives.
After this operation, 287 kB of additional disk space will be used.
Get:1 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 chrony amd64 3.5-6ubuntu6.2 [220 kB]
Fetched 220 kB in 0s (6903 kB/s)
dpkg: systemd-timesyncd: dependency problems, but removing anyway as you requested:
systemd depends on systemd-timesyncd | time-daemon; however:
Package systemd-timesyncd is to be removed.
Package time-daemon is not installed.
Package systemd-timesyncd which provides time-daemon is to be removed.
Package ntp which provides time-daemon is not installed.
systemd depends on systemd-timesyncd | time-daemon; however:
Package systemd-timesyncd is to be removed.
Package time-daemon is not installed.
Package systemd-timesyncd which provides time-daemon is to be removed.
Package ntp which provides time-daemon is not installed.
(Reading database ... 57118 files and directories currently installed.)
Removing systemd-timesyncd (245.4-4ubuntu3.13) ...
Selecting previously unselected package chrony.
(Reading database ... 57105 files and directories currently installed.)
Preparing to unpack .../chrony_3.5-6ubuntu6.2_amd64.deb ...
Unpacking chrony (3.5-6ubuntu6.2) ...
Setting up chrony (3.5-6ubuntu6.2) ...
Creating '_chrony' system user/group for the chronyd daemon…
Creating config file /etc/chrony/chrony.conf with new version
Creating config file /etc/chrony/chrony.keys with new version
Created symlink /etc/systemd/system/chronyd.service → /lib/systemd/system/chrony.service.
Created symlink /etc/systemd/system/multi-user.target.wants/chrony.service → /lib/systemd/system/chrony.service.
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for dbus (1.12.16-2ubuntu2.1) ...
Processing triggers for systemd (245.4-4ubuntu3.13) ...
Добавим в автозагрузку сервера:
sudo systemctl enable chrony
Вывод:
Synchronizing state of chrony.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable chrony
Запустим утилиту:
sudo systemctl start chrony
Установим часовой пояс. Для данной инструкции используется Europe/Moscow. Команда:
sudo timedatectl set-timezone Europe/Moscow
Проверим дату и время командой:
date
Вывод:
Mon Dec 6 07:13:49 UTC 2021
Установка Samba
Перейдем непосредственно к установке Samba на Ubuntu. Отправим в терминал команду:
sudo apt install samba -y
Вывод:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libldb2 libtalloc2 libtevent0 libwbclient0 python3-crypto python3-dnspython
python3-ldb python3-samba python3-talloc python3-tdb samba-common samba-common-bin samba-libs tdb-tools
Suggested packages:
cups-common bind9 bind9utils ctdb ldb-tools smbldap-tools winbind heimdal-clients python3-markdown
Recommended packages:
python3-gpg attr python3-markdown samba-dsdb-modules samba-vfs-modules
The following NEW packages will be installed:
libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libldb2 libtalloc2 libtevent0 libwbclient0 python3-crypto python3-dnspython
python3-ldb python3-samba python3-talloc python3-tdb samba samba-common samba-common-bin samba-libs tdb-tools
0 upgraded, 19 newly installed, 0 to remove and 5 not upgraded.
Need to get 11.1 MB of archives.
After this operation, 71.6 MB of additional disk space will be used.
Get:1 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libtalloc2 amd64 2.3.1-0ubuntu0.20.04.1 [29.5 kB]
Get:2 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libtevent0 amd64 0.10.2-0ubuntu0.20.04.1 [35.6 kB]
Get:3 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libwbclient0 amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [208 kB]
Get:4 http://mirror.selectel.ru/ubuntu focal/main amd64 python3-dnspython all 1.16.0-1build1 [89.1 kB]
Get:5 http://mirror.selectel.ru/ubuntu focal/main amd64 python3-crypto amd64 2.6.1-13ubuntu2 [237 kB]
Get:6 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libldb2 amd64 2:2.2.3-0ubuntu0.20.04.2 [140 kB]
Get:7 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 python3-ldb amd64 2:2.2.3-0ubuntu0.20.04.2 [38.3 kB]
Get:8 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 python3-tdb amd64 1.4.3-0ubuntu0.20.04.1 [13.4 kB]
Get:9 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libavahi-common-data amd64 0.7-4ubuntu7.1 [21.4 kB]
Get:10 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libavahi-common3 amd64 0.7-4ubuntu7.1 [21.7 kB]
Get:11 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libavahi-client3 amd64 0.7-4ubuntu7.1 [25.5 kB]
Get:12 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libcups2 amd64 2.3.1-9ubuntu1.1 [233 kB]
Get:13 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 python3-talloc amd64 2.3.1-0ubuntu0.20.04.1 [12.2 kB]
Get:14 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 samba-libs amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [5753 kB]
Get:15 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 python3-samba amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [2575 kB]
Get:16 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 samba-common all 2:4.13.14+dfsg-0ubuntu0.20.04.2 [68.3 kB]
Get:17 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 samba-common-bin amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [556 kB]
Get:18 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 tdb-tools amd64 1.4.3-0ubuntu0.20.04.1 [24.9 kB]
Get:19 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 samba amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [1065 kB]
Fetched 11.1 MB in 0s (43.4 MB/s)
Preconfiguring packages ...
Selecting previously unselected package libtalloc2:amd64.
(Reading database ... 57147 files and directories currently installed.)
Preparing to unpack .../00-libtalloc2_2.3.1-0ubuntu0.20.04.1_amd64.deb ...
Unpacking libtalloc2:amd64 (2.3.1-0ubuntu0.20.04.1) ...
Selecting previously unselected package libtevent0:amd64.
Preparing to unpack .../01-libtevent0_0.10.2-0ubuntu0.20.04.1_amd64.deb ...
Unpacking libtevent0:amd64 (0.10.2-0ubuntu0.20.04.1) ...
Selecting previously unselected package libwbclient0:amd64.
Preparing to unpack .../02-libwbclient0_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking libwbclient0:amd64 (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package python3-dnspython.
Preparing to unpack .../03-python3-dnspython_1.16.0-1build1_all.deb ...
Unpacking python3-dnspython (1.16.0-1build1) ...
Selecting previously unselected package python3-crypto.
Preparing to unpack .../04-python3-crypto_2.6.1-13ubuntu2_amd64.deb ...
Unpacking python3-crypto (2.6.1-13ubuntu2) ...
Selecting previously unselected package libldb2:amd64.
Preparing to unpack .../05-libldb2_2%3a2.2.3-0ubuntu0.20.04.2_amd64.deb ...
Unpacking libldb2:amd64 (2:2.2.3-0ubuntu0.20.04.2) ...
Selecting previously unselected package python3-ldb.
Preparing to unpack .../06-python3-ldb_2%3a2.2.3-0ubuntu0.20.04.2_amd64.deb ...
Unpacking python3-ldb (2:2.2.3-0ubuntu0.20.04.2) ...
Selecting previously unselected package python3-tdb.
Preparing to unpack .../07-python3-tdb_1.4.3-0ubuntu0.20.04.1_amd64.deb ...
Unpacking python3-tdb (1.4.3-0ubuntu0.20.04.1) ...
Selecting previously unselected package libavahi-common-data:amd64.
Preparing to unpack .../08-libavahi-common-data_0.7-4ubuntu7.1_amd64.deb ...
Unpacking libavahi-common-data:amd64 (0.7-4ubuntu7.1) ...
Selecting previously unselected package libavahi-common3:amd64.
Preparing to unpack .../09-libavahi-common3_0.7-4ubuntu7.1_amd64.deb ...
Unpacking libavahi-common3:amd64 (0.7-4ubuntu7.1) ...
Selecting previously unselected package libavahi-client3:amd64.
Preparing to unpack .../10-libavahi-client3_0.7-4ubuntu7.1_amd64.deb ...
Unpacking libavahi-client3:amd64 (0.7-4ubuntu7.1) ...
Selecting previously unselected package libcups2:amd64.
Preparing to unpack .../11-libcups2_2.3.1-9ubuntu1.1_amd64.deb ...
Unpacking libcups2:amd64 (2.3.1-9ubuntu1.1) ...
Selecting previously unselected package python3-talloc:amd64.
Preparing to unpack .../12-python3-talloc_2.3.1-0ubuntu0.20.04.1_amd64.deb ...
Unpacking python3-talloc:amd64 (2.3.1-0ubuntu0.20.04.1) ...
Selecting previously unselected package samba-libs:amd64.
Preparing to unpack .../13-samba-libs_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking samba-libs:amd64 (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package python3-samba.
Preparing to unpack .../14-python3-samba_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking python3-samba (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package samba-common.
Preparing to unpack .../15-samba-common_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_all.deb ...
Unpacking samba-common (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package samba-common-bin.
Preparing to unpack .../16-samba-common-bin_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking samba-common-bin (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package tdb-tools.
Preparing to unpack .../17-tdb-tools_1.4.3-0ubuntu0.20.04.1_amd64.deb ...
Unpacking tdb-tools (1.4.3-0ubuntu0.20.04.1) ...
Selecting previously unselected package samba.
Preparing to unpack .../18-samba_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking samba (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Setting up samba-common (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Creating config file /etc/samba/smb.conf with new version
Setting up libtalloc2:amd64 (2.3.1-0ubuntu0.20.04.1) ...
Setting up python3-tdb (1.4.3-0ubuntu0.20.04.1) ...
Setting up libtevent0:amd64 (0.10.2-0ubuntu0.20.04.1) ...
Setting up libavahi-common-data:amd64 (0.7-4ubuntu7.1) ...
Setting up tdb-tools (1.4.3-0ubuntu0.20.04.1) ...
update-alternatives: using /usr/bin/tdbbackup.tdbtools to provide /usr/bin/tdbbackup (tdbbackup) in auto mode
Setting up python3-dnspython (1.16.0-1build1) ...
Setting up python3-crypto (2.6.1-13ubuntu2) ...
Setting up libldb2:amd64 (2:2.2.3-0ubuntu0.20.04.2) ...
Setting up python3-talloc:amd64 (2.3.1-0ubuntu0.20.04.1) ...
Setting up libavahi-common3:amd64 (0.7-4ubuntu7.1) ...
Setting up libwbclient0:amd64 (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Setting up python3-ldb (2:2.2.3-0ubuntu0.20.04.2) ...
Setting up libavahi-client3:amd64 (0.7-4ubuntu7.1) ...
Setting up libcups2:amd64 (2.3.1-9ubuntu1.1) ...
Setting up samba-libs:amd64 (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Setting up python3-samba (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Setting up samba-common-bin (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Checking smb.conf with testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE
Done
Setting up samba (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Adding group `sambashare' (GID 121) ...
Done.
Samba is not being run as an AD Domain Controller: Masking samba-ad-dc.service
Please ignore the following error about deb-systemd-helper not finding those services.
(samba-ad-dc.service masked)
Created symlink /etc/systemd/system/multi-user.target.wants/nmbd.service → /lib/systemd/system/nmbd.service.
Failed to preset unit: Unit file /etc/systemd/system/samba-ad-dc.service is masked.
/usr/bin/deb-systemd-helper: error: systemctl preset failed on samba-ad-dc.service: No such file or directory
Created symlink /etc/systemd/system/multi-user.target.wants/smbd.service → /lib/systemd/system/smbd.service.
samba-ad-dc.service is a disabled or a static unit, not starting it.
Processing triggers for ufw (0.36-6ubuntu1) ...
Rules updated for profile 'Squid'
Skipped reloading firewall
Processing triggers for systemd (245.4-4ubuntu3.13) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
Демон или сервис Samba называется smbd. Под таким именем и будем к нему обращаться.
Добавим сервис smbd в автозапуск:
sudo systemctl enable smbd
Запустим:
sudo systemctl start smbd
Проверим текущий статус:
sudo systemctl status smbd
Далее перечислим оставшиеся команды управления сервисом smbd. Они могут потребоваться в дальнейшем в процессе эксплуатации Samba.
Остановить сервис:
sudo systemctl stop smbd
Перезапуск демона:
sudo systemctl restart smbd
Убрать из автозапуска:
sudo systemctl disable smbd
Перечитать конфигурацию:
sudo systemctl reload smbd
Результат проверки статуса:
● smbd.service - Samba SMB Daemon
Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-12-06 09:50:18 UTC; 26s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 83137 (smbd)
Status: "smbd: ready to serve connections..."
Tasks: 4 (limit: 1105)
Memory: 7.2M
CGroup: /system.slice/smbd.service
├─83137 /usr/sbin/smbd --foreground --no-process-group
├─83139 /usr/sbin/smbd --foreground --no-process-group
├─83140 /usr/sbin/smbd --foreground --no-process-group
└─83141 /usr/sbin/smbd --foreground --no-process-group
Dec 06 09:50:18 apachi systemd[1]: Starting Samba SMB Daemon...
Dec 06 09:50:18 apachi systemd[1]: Started Samba SMB Daemon.
Dec 06 09:50:28 apachi systemd[1]: Reloading Samba SMB Daemon.
Dec 06 09:50:28 apachi systemd[1]: Reloaded Samba SMB Daemon.
Если в настраиваемой системе включен брандмауэр ufw, необходимо добавить разрешающее правило для Samba:
sudo ufw allow Samba
или:
sudo ufw allow 445
sudo ufw allow 137
sudo ufw allow 138
sudo ufw allow 139
В каждом правиле указан порт из диапазона, в котором работает Samba.
Предварительная подготовка доступа
В этой инструкции используется удаленный сервер, расположенный в интернете. Открывать прямой доступ по IP-адресу к ресурсам в таком случае нельзя. Поэтому перед дальнейшей настройкой будет организован VPN-туннель. Настраивать VPN для удаленного доступа в локальной сети не потребуется. Настройку мы произвели, следуя этой инструкции.
После получения доступа к удаленному серверу с использованием VPN-туннеля, сервер имеет адрес 10.8.0.1
Дальнейшие действия будут производиться с использованием этого адреса.
Настройка Samba
Конфигурационный файл Samba расположен по следующему пути:
/etc/samba/smb.conf
Лучше скопировать файл конфигурации по умолчанию, чтобы всегда оставлять себе возможность откатиться до дефолтных настроек Samba на Ubuntu.
Копируем командой:
sudo cp /etc/samba/smb.conf /etc/samba/res_smb.conf
Далее оставим в файле конфигурации только те строки, которые используются в работе и не являются комментарием.
grep -v '^ *#\|^ *$' /etc/samba/smb.conf | sudo tee /etc/samba/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
usershare allow guests = yes
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
После сохранения конфигурации рекомендуется проверить ее работоспособность с помощью команды:
testparm
Вывод:
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
log file = /var/log/samba/log.%m
logging = file
map to guest = Bad User
max log size = 1000
obey pam restrictions = Yes
pam password change = Yes
panic action = /usr/share/samba/panic-action %d
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
passwd program = /usr/bin/passwd %u
server role = standalone server
server string = %h server (Samba, Ubuntu)
unix password sync = Yes
usershare allow guests = Yes
idmap config * : backend = tdb
[printers]
browseable = No
comment = All Printers
create mask = 0700
path = /var/spool/samba
printable = Yes
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
Настройка анонимного доступа к директории
Для множества задач самым оптимальным и простым решением является настройка анонимного доступа к ресурсу. Это значит, что клиент имеет возможность обратиться к ресурсу на сервере без авторизации. Например, можно создать директорию с общим доступом, в которой хранится информация, которой не требуется безопасность.
Важно: данный способ используется очень редко. Это крайне небезопасно оставлять ресурс в таком состоянии. Обычно это делается для маленькой soho-сети в самых крайних случаях.
Создадим директорию, к которой будет предоставлен доступ:
sudo mkdir /var/anonimus_share
И добавим директории полные права для всех:
sudo chmod 775 /var/anonimus_share
Директория var использована как пример, в реальных задачах может быть предоставлен доступ к папке с логами, чтобы их изучить без подключения к серверу, или создание папки с общим доступом для обмена файлами. Такие права также назначены в ознакомительных целях.
Следующим шагом будут внесены изменения в директивы конфигурационного файла, в данной инструкции для этих целей использован текстовый редактор nano.
sudo nano /etc/samba/smb.conf
Добавим в файл следующий директивы:
[anonimus_share]
comment = Directory anonimus
path = /var/anonimus_share
public = yes
writable = yes
read only = no
guest ok = yes
create mask = 0775
directory mask = 0775
force create mode = 0775
force directory mode = 0775
Рассмотрим более подробно:
[anonimus_share] 一 имя ресурса, отображаемое клиенту при подключении;
comment = Directory anonimus 一 комментарий;
path = /var/anonimus_share 一 директория, к которой предоставляем доступ;
public = yes 一 доступ на чтение всем авторизованным пользователям, также гостевым;
writable = yes 一 право записи в сетевой ресурс;
read only = no 一 право на чтение, при значении директивы no 一 все пользователи получают право на создание директорий и файлов;
guest ok = yes 一 доступ гостевой учетной записи;
- create mask = 0775;
- directory mask = 0775;
- force create mode = 0775;
- force directory mode = 0775.
Эти директивы задают права доступа, назначаемые при создании новой директории или файла.
Конфигурационный файл теперь выглядит следующим образом:
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
usershare allow guests = yes
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
[anonimus_share]
comment = Directory anonimus
path = /var/anonimus_share
public = yes
writable = yes
read only = no
guest ok = yes
create mask = 0775
directory mask = 0775
force create mode = 0775
force directory mode = 0775
После внесения изменений перезапускаем демона Samba:
sudo systemctl restart smbd
Произведем проверку подключения к ресурсу с операционной системы Windows.
Доступ к созданной директории есть.
Настройка доступа по учетным данным пользователя
Следующим этапом станет настройка доступа к директории по комбинации логин/пароль.
Для начала создадим директорию, которая станет тестовой, и назначим ей полный права:
sudo mkdir /var/acc_pass | sudo chmod 777 /var/acc_pass
Внесем изменения в файл конфигурации:
sudo nano /etc/samba/smb.conf
Добавим следующий блок директив:
[acc_pass]
comment = acc_pass
path = /var/acc_pass
public = no
writable = yes
read only = no
guest ok = no
create mask = 0775
directory mask = 0775
force create mode = 0775
force directory mode = 0775
Большая часть указанных здесь настроек разобраны в предыдущем блоке.
Остановимся только на новых:
path = /var/acc_pass 一 путь до директории;
public = no 一 запрет на публичный доступ к папке;
guest ok = no 一 запрет гостевого подключения.
Добавим пользователя Samba:
sudo smbpasswd -a selectel
Проверим подключение к директории:
При попытке подключения происходит запрос комбинации логин/пароль. Вводим.
После успешной авторизации происходит получение доступа к директории:
Настройка доступа для пользователей и групп
Следующим этапом разберем доступ к директории для определенных пользователей и групп.
Создадим директорию и назначим ей полные права:
sudo mkdir /var/acc_gr_and_user | sudo chmod 777 /var/acc_gr_and_user
Откроем файл конфигурации и добавим в него следующий блок директив:
[acc_gr_and_user]
comment = acc_gr_and_user
path = /var/acc_gr_and_user
public = no
writable = no
read only = yes
guest ok = no
valid users = vlan48, selectel, @groupe1
write list = selectel
create mask = 0775
directory mask = 0775
force create mode = 0775
force directory mode = 0775
inherit owner = yes
Разберем директивы:
[acc_gr_and_user] 一 имя ресурса, отображаемое клиенту при подключении;
comment = acc_gr_and_user 一 комментарий;
path = /var/acc_gr_and_user 一 директория, к которой предоставляем доступ;
public = no 一 запрет на публичный доступ к папке;
writable = no и read only = yes 一 разрешение на запись мы добавим для пользователей, перечисленных в директиве write list, а для остальных оставим с запрет на запись, разрешив только чтение;
guest ok = no 一 доступ гостевой учетной записи;
valid users = vlan48, selectel, @groupe1 一 пользователи и группы, которые имеют доступ к директории, где vlan48, selectel 一пользователи, а @groupe1 一группа пользователей.
write list = selectel 一 пользователи, которым разрешена запись в директории;
- create mask = 0775;
- directory mask = 0775;
- force create mode = 0775;
- force directory mode = 0775;
Эти 4 директивы задают права доступа назначаемые при создании новой директории или файла.
inherit owner = yes 一 директива включает наследование владельца во время создания директорий и файлов.
Сохраняем файл, перезапускаем демона Samba:
sudo systemctl restart smbd
Подключение к ресурсу
Для подключения к созданному ресурсу из операционной системы Windows используется проводник. Быстро открыть его можно, применив комбинацию клавиш Ctrl+E. Вводим необходимый путь в адресную строку проводника.
Путь в системах Windows пишется через обратный слеш, путь к сетевому ресурсу 一 через двойной обратный слеш. Можно также подключать ресурс как диск, если это не противоречит вашим правилам безопасности. В таком случае при включении рабочей станции не требуется каждый раз устанавливать соединение с ресурсом.
Для выполнения этой процедуры в проводнике выберем вкладку Простой доступ, подключить как диск.
В открывшемся окне настроим букву для обозначения диска в системе и путь к ресурсу. Если учетная запись для авторизации в Samba отличается от учетной записи, под которой работает пользователь, можно использовать чекбокс Использовать другие учетные данные.
Теперь ресурс станет отображаться как диск при включении компьютера.
Linux
Подключение из операционных систем Linux-семейства производится с использованием набора утилит cifs. Установим cifs-утилиты на Ubuntu.
sudo apt install cifs-utils -y
Вывод установки:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
keyutils smbclient winbind
The following NEW packages will be installed:
cifs-utils
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 82.5 kB of archives.
After this operation, 306 kB of additional disk space will be used.
Get:1 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 cifs-utils amd64 2:6.9-1ubuntu0.1 [82.5 kB]
Fetched 82.5 kB in 0s (2439 kB/s)
Selecting previously unselected package cifs-utils.
(Reading database ... 45851 files and directories currently installed.)
Preparing to unpack .../cifs-utils_2%3a6.9-1ubuntu0.1_amd64.deb ...
Unpacking cifs-utils (2:6.9-1ubuntu0.1) ...
Setting up cifs-utils (2:6.9-1ubuntu0.1) ...
update-alternatives: using /usr/lib/x86_64-linux-gnu/cifs-utils/idmapwb.so to provide /etc/cifs-utils/idmap-plugin (idmap-plugin) in auto mode
Processing triggers for man-db (2.9.1-1) ...
Монтирование ресурса выглядит так:
mount.cifs {ресурс} {путь к директории в которую монтируем } {-o опции}
Как пример рассмотрим подключение к директории anonimus_share, расположенной на ресурсе 10.8.0.1 в директорию mnt:
mount.cifs //10.8.0.1/anonimus_share /mnt
Автоматическое монтирование директории происходит с использованием файла fstab. Для начала создадим дополнительный файл с учетными данными пользователя для авторизации. Оправданно будет создать этот файл в директории root.
sudo nano /root/.smbselus
Внесем в файл следующие директивы:
username=selectel
password=uspass
Сохраняем и переходим к конфигурационному файлу fstab.
sudo nano /etc/fstab
Добавляем в него следующий блок инструкций:
//10.8.0.1/acc_gr_and_user /mnt cifs user,rw,credentials=/root/.smbselus 0 0
Конкретизируем каждый пункт:
//10.8.0.1/acc_gr_and_user 一 директория, которую необходимо смонтировать;
/mnt 一 директория, в которую необходимо смонтировать;
cifs user 一 разрешает монтировать любому пользователю;
rw 一 предоставляет права на чтение и запись;
credentials=/root/.smbselus 一 файл с учетными данными пользователя;
0 используется утилитой dump 0 一 выключен;
0 используется утилитой fsck 0 一 выключен.
В некоторых случаях требуется добавить директиву domain в файл .smbselus.
Для более тонкой и детальной настройки всегда можно обратиться к документации продукта.
Настройка сетевой корзины
По умолчанию файлы из директории удаляются совсем. При определенных условиях необходимо иметь возможность восстановить эти файлы. В Samba данная возможность реализована с использованием сетевой корзины. Алгоритм работы следующий: настраивается скрытый каталог, в который при удалении перемещаются файлы.
Первым этапом создадим директорию для корзины и назначим ей права:
sudo mkdir /var/recycle | sudo chmod 777 /var/recycle
Внесем блок директив в конфигурационный файл:
sudo nano /etc/samba/smb.conf
[Recycle]
comment = rec_dir
path = /var/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
Значения директив:
[Recycle] 一 имя ресурса, отображаемое клиенту при подключении;
comment = rec_dir 一 комментарий;
path = /var/recycle 一 директория, в которой размещена сетевая корзина.
public = yes 一 доступ на чтение всем авторизованным пользователям, также гостевым;
browseable = yes 一 параметр устанавливает, будет ли общий ресурс отображаться в списке доступных общих ресурсов в сетевом окружении и в списке просмотра;
writable = yes 一 право записи в сетевой ресурс;
vfs objects = recycle 一 использование подсистемы recycle;
recycle:repository = .recycle/%U 一 место хранения удаленных объектов. В этой директиве настроено попадание удаленных файлов в каталог с именем пользователя, который создается автоматически в директории .recycle;
recycle:keeptree = Yes 一 удаление с сохранением дерева каталогов;
recycle:touch = Yes 一 изменение даты при перемещении файла в сетевую корзину;
recycle:versions = Yes 一 добавление номера версии при удалении файлов с одинаковыми именами;
recycle:maxsize = 0 一 параметр отвечает за максимальный размер файла, который может быть перемещен в корзину. При текущем значении возможно переместить файл любого размера;
recycle:exclude = *.tmp, ~$* 一 исключение файлов заданного типа;
recycle:exclude_dir = /tmp 一 исключение директории заданного типа.
Заключение
Мы разобрали процесс установки и настройки программного обеспечения Samba. В данном мануале также указаны ресурсы, на которых можно более детально увидеть значение необходимых директив.
Настройка Samba-сервера в Ubuntu 24.04 позволяет организовать общий доступ к файлам и папкам между компьютерами с разными операционными системами (Windows, macOS, Linux) в вашей сети. Вот подробная инструкция:
Откройте терминал и выполните следующие команды для установки Samba и необходимых инструментов:
sudo apt update sudo apt install samba samba-common python3-dnspython
2. Настройка Samba (Редактирование файла smb.conf):
Основной файл конфигурации Samba находится по адресу /etc/samba/smb.conf. Рекомендуется создать резервную копию этого файла перед внесением изменений:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Теперь откройте файл smb.conf для редактирования с помощью текстового редактора (например, nano или vim):
sudo nano /etc/samba/smb.conf
Основные параметры конфигурации:
[global]
секция: Содержит глобальные настройки Samba-сервера. Вот пример основных параметров:
[global] workgroup = WORKGROUP ; Замените на имя вашей рабочей группы Windows server string = Samba Server %v ; Описание сервера (отображается в сети Windows) netbios name = UBUNTU-SAMBA ; Имя сервера в сети (можно изменить) security = user ; Режим безопасности (user - требуется аутентификация) map to guest = bad user ; Что делать, если пользователь не найден name resolve order = bcast host lmhosts wins ; Порядок разрешения имен dns proxy = no ; Отключить проксирование DNS # Добавьте следующие строки для поддержки SMB3 (рекомендуется) server min protocol = SMB3 client min protocol = SMB3
Создание общего ресурса (Share): Чтобы предоставить доступ к определенной папке, необходимо создать секцию для этого ресурса. Например, для создания общего ресурса для папки /home/user/share
, добавьте следующие строки в конец файла smb.conf:
[share] comment = Shared Folder path = /home/user/share ; Замените на путь к вашей папке browseable = yes ; Отображать ресурс в сетевом окружении writable = yes ; Разрешить запись guest ok = no ; Запретить гостевой доступ read only = no ; Разрешить чтение и запись create mask = 0777 ; Права для создаваемых файлов directory mask = 0777 ; Права для создаваемых директорий valid users = user ; Замените на имя пользователя, которому разрешен доступ
- path: Укажите абсолютный путь к папке, которую вы хотите сделать общедоступной.
- browseable: Определяет, будет ли ресурс виден в сетевом окружении.
- writable: Разрешает или запрещает запись в общий ресурс.
- guest ok: Разрешает или запрещает гостевой доступ (без аутентификации). Рекомендуется установить no для безопасности.
- read only: Определяет, будет ли ресурс доступен только для чтения.
- create mask и directory mask: Устанавливают права доступа для создаваемых файлов и директорий. 0777 предоставляет полные права (чтение, запись, выполнение) для всех пользователей. Будьте осторожны с этим значением и используйте более строгие права, если это необходимо.
- valid users: Укажите список пользователей, которым разрешен доступ к ресурсу. Замените user на имя пользователя Ubuntu.
3. Создание пользователя Samba:
Samba использует отдельную базу данных пользователей. Необходимо создать пользователя Samba и установить для него пароль. Имя пользователя должно совпадать с именем пользователя Ubuntu.
sudo smbpasswd -a user ; Замените 'user' на имя вашего пользователя Ubuntu
Вам будет предложено ввести пароль для пользователя Samba. Этот пароль может отличаться от пароля пользователя Ubuntu.
4. Настройка прав доступа к папке:
Убедитесь, что у пользователя Ubuntu есть права на чтение и запись в папку, которую вы сделали общедоступной.
sudo chown user:user /home/user/share ; Замените 'user' и '/home/user/share' sudo chmod 777 /home/user/share ; Предоставляет полные права (будьте осторожны)
5. Перезапуск Samba:
После внесения изменений в файл smb.conf, необходимо перезапустить Samba-сервер, чтобы изменения вступили в силу:
sudo systemctl restart smbd sudo systemctl restart nmbd
6. Настройка брандмауэра (UFW):
Если у вас включен брандмауэр UFW, необходимо разрешить Samba-трафик:
sudo ufw allow samba sudo ufw enable
7. Подключение к общему ресурсу с Windows:
Откройте «Проводник» (File Explorer) в Windows. В адресной строке введите \\<IP-адрес_сервера>
или \\<имя_сервера>
. Например, \\192.168.1.100
или \\UBUNTU-SAMBA.
Вам будет предложено ввести имя пользователя и пароль Samba. Используйте имя пользователя и пароль, которые вы создали с помощью smbpasswd. Вы должны увидеть общий ресурс share.
8. Подключение к общему ресурсу с macOS:
В Finder выберите «Go» (Переход) -> «Connect to Server» (Подключиться к серверу). Введите smb://<IP-адрес_сервера>
или smb://<имя_сервера>
. Например, smb://192.168.1.100
или smb://UBUNTU-SAMBA
. Нажмите «Connect» (Подключиться). Вам будет предложено ввести имя пользователя и пароль Samba. Выберите общий ресурс share.
9. Подключение к общему ресурсу с Linux:
Использование командной строки:
sudo mount -t cifs //192.168.1.100/share /mnt -o user=user,password=password
Замените 192.168.1.100, share, user и password на соответствующие значения. /mnt — это точка монтирования (папка, куда будет подключен общий ресурс). Убедитесь, что эта папка существует.
Использование графического интерфейса (Nautilus, Thunar, etc.):
Откройте файловый менеджер. В адресной строке введите smb://<IP-адрес_сервера>/<имя_ресурса>. Например, smb://192.168.1.100/share. Вам будет предложено ввести имя пользователя и пароль Samba.
Важные замечания по безопасности:
- Не используйте guest ok = yes в производственной среде. Это открывает общий ресурс для неавторизованного доступа.
- Используйте строгие права доступа к файлам и папкам. Не предоставляйте пользователям ненужные права.
- Регулярно обновляйте Samba. Устанавливайте последние обновления безопасности.
- Рассмотрите возможность использования Kerberos для аутентификации. Kerberos обеспечивает более безопасную аутентификацию, чем стандартная аутентификация Samba.
- Используйте шифрование SMB3 (server min protocol = SMB3, client min protocol = SMB3). Это обеспечивает шифрование трафика между клиентом и сервером.
Устранение неполадок:
Не удается подключиться к общему ресурсу:
- Убедитесь, что Samba-сервер запущен.
- Проверьте правильность IP-адреса или имени сервера.
- Убедитесь, что брандмауэр не блокирует Samba-трафик.
- Проверьте правильность имени пользователя и пароля Samba.
- Проверьте права доступа к папке.
- Не удается записать файлы в общий ресурс:
- Убедитесь, что у пользователя есть права на запись в общий ресурс (writable = yes).
- Проверьте права доступа к папке.
- Проверьте значения create mask и directory mask.
Общий ресурс не отображается в сетевом окружении:
- Убедитесь, что browseable = yes.
- Проверьте настройки name resolve order.
Следуя этим инструкциям, вы сможете успешно настроить Samba-сервер в Ubuntu 24.04 и организовать общий доступ к файлам и папкам в вашей сети. Не забывайте о безопасности и принимайте необходимые меры для защиты ваших данных.
Файловый сервер можно без преувеличения назвать средством первой необходимости, даже в сетях без выделенного сервера вы всегда обнаружите папки с общим доступом, но по мере роста объемов данных появляется потребность в отдельном решении. Вариантов его организации множество, одним из которых является служба 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.