Первейшая, а зачастую и единственная задача, для которой создаётся сервер - это хранение файлов. Если в сети вашего предприятия планируется использовать только рабочие станции на 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