Первейшая, а зачастую и единственная задача, для которой создаётся сервер - это хранение файлов. Если в сети вашего предприятия планируется использовать только рабочие станции на Linux или MacOS, то никаких дополнительных действий для предоставления доступа к файлам не требуется, а вся работа осуществляется по протоколу SFTP. В Windows всё как обычно "немного" не так и ей нужно раздавать файлы с помощью протокола SMB, открытой реализацией которого является Samba.

Устанавливаем. Под рутом мы больше не работаем, так что регистрируемся на сервере как super и не забываем про sudo!

sudo apt install samba samba-common

Я не использую для сервера dhcp, поэтому отвечаю "нет". Если же вы планируете действовать по-другому, то следует ответить "Да". Однако, если вы умеете настраивать DHCP так, чтобы сервер работал правильно с динамическими ip, то вы вряд ли читаете эту статью :-)

Организация у нас небольшая, поэтому структура файлового хранилища будет такая - каждый пользователь будет иметь доступ к собственной папке, кроме того будет отдельный общий ресурс. Организация ресурсов с разбивкой по отделам или кабинетам в небольшой сети не имеет смысла, но по аналогии с примерами ниже можно будет настроить хранилище любого масштаба.
Создадим пользователей, как описано в соответствующей статье. В нашей организации трудятся директор, секретарь, бухгалтер и водитель. Имена пользователей для них будут: director, secretar, buh, voditel. Системные пользователи не могут пользоваться самбой до тех пор, пока не будут добавлены в неё явно:

sudo smbpasswd -a secretar

sudo smbpasswd -a buh

sudo smbpasswd -a director

sudo smbpasswd -a voditel

Пароль пользователя в Самбе может отличаться от системного, а можно сделать так, чтобы при изменении пароля Самбы можно было бы изменять и системный. Но чтобы не путать пользователей, первое мы делать не будем, а второе отложим на потом. Создадим группу, в которую объединим наших пользователей

sudo groupadd smbgrp

добавим пользователей в эту группу:

sudo usermod -aG smbgrp secretar

sudo usermod -aG smbgrp buh

sudo usermod -aG smbgrp director

sudo usermod -aG smbgrp voditel

Примечание: это же можно сделать одним скриптом:
for user in secretar buh director voditel; do sudo usermod -aG smbgrp "$user"; done


Общие файлы мы будем хранить в директории /samba/public, а личные - в домашних директориях пользователей.
Создадим папку для общих файлов:

sudo mkdir -p /samba/public

Установим права доступа к общей папке:

sudo chmod -R 0775 /samba/public

sudo chgrp smbgrp /samba/public

Конфигурационный файл сервера находится по адресу /etc/samba/smb.conf. Сейчас в нём уже находится некоторая первоначальная конфигурация, которая нас устраивает - нужно только добавить собственные ресурсы.

Возможности Самбы огромны, если интересно выяснить, что означает тот или иной параметр конфигурационного файла, предлагаю изучить сайт https://smb-conf.ru/ - он содержит одно из самых полных описаний Самбы на русском языке.

На всякий случай создадим резервную копию конфигурационного файла

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_orig

и откроем его на редактирование

sudo nano /etc/samba/smb.conf

Сначала настроим общую папку. Все ресурсы (часто их называют шарами) описываются в собственных секциях. Создадим секцию public. В самый конец файла дописываем:

[public]
path = /samba/public
valid users = @smbgrp
force group = smbgrp
create mask = 0660
directory mask = 0771
writable = yes
browseable = yes

Цифры в параметрах create_mask и directory_mask - это права UNIX для создаваемых с помощью Самбы файлов и папок. Об этом можно почитать подробнее здесь.

Перезапустим Самба-сервер, чтобы изменения применились

sudo service smbd restart

Теперь организуем персональные директории для каждого пользователя. Добавим ещё одну секцию:

[home]
   path = /home/%u
   guest ok = no
   browseable = yes
   create mask = 0600
   directory mask = 0700
   writable = yes

%u в пути - это переменная, содержащая имя пользователя. Таким образом если к самбе подключается secretar, то шара home будет вести в каталог /home/secretar, а если buh - /home/buh.
Этот подход удобен в том смысле, что является мультиплатформенным - и sftp и smb ведут к одним файлам, так что не важно, с какой ОС и с помощью какого протокола пользователь подключается к серверу - он будет работать с одними и теми же файлами.

Снова перезапускаем Самбу

sudo service smbd restart

Сейчас, если открыть в файловом менеджере адрес smb://192.168.1.40, то мы увидим следующее:

Попытка открыть любой каталог приведёт к запросу пользователя и пароля:

Данные для подключения можно сохранить, конечно.

Если director откроет шару home, то увидит содержимое своей домашней папки на сервере:

Бухгалтер увидит свой домашний каталог:

А содержимое шары public у всех пользователей одинаковое:


Для удобства пользователей можно добавить каждому из них в домашний каталог ссылку на шару public.

ln -s /samba/public /home/director/public

однако ссылка всё равно не будет видна пользователю, потому что в самбе возможность перехода по ссылкам запрещена по умолчанию и её нужно разрешить явно. Для этого в конфиге самбы в секцию global добавляем строку

allow insecure wide links = yes

а секцию пользовательской шары добавляем строками

follow symlinks = yes
wide links = yes

Теперь директор может пользоваться одной шарой home, при этом в ней будет лежать и каталог public.

делаем то же для остальных пользователей

ln -s /samba/public /home/secretar/public

ln -s /samba/public /home/buh/public

ln -s /samba/public /home/voditel/public

Возможные проблемы с Windows XP

Эта операционная система уже давно не поддерживается, не обновляется и использует старые версии сетевых протоколов, которые по умолчанию отключены в новых версиях Самбы. Но если вдруг Вам нужно предоставить доступ XP к сетевым ресурсам, то в секцию GLOBAL конфигурационного файла Самбы нужно добавить строки, разрешающие использование старого способа авторизации:

lanman auth = yes
ntlm auth = yes

и на этом настройку Самбы можно считать законченной.