Samba – это набор софта для Linux, который обеспечивает взаимодействие с операционными системами Windows. Данное ПО является свободным программным продуктом с открытым исходным кодом и лицензировано по GNU General Public License. Начиная с 1992 года Samba предоставляет услуги по работе с файлами для различных клиентов. Такие клиенты используют протокол SMB/CIFS и работают в том числе на DOS и Windows всех версий.
Samba имеет ключевое значение для гладкой интеграции Linux/Unix-серверов и компьютеров со средой Active Directory. Кроме того, Samba может работать как контроллер домена, либо как обычный член домена.
Проще говоря, Samba позволяет создать файловое хранилище, которое обеспечивает общий доступ с возможностью настройки прав доступа к директориям для групп пользователей, авторизованных пользователей, а также предоставляет анонимный доступ без авторизации.
В нашем примере мы будем использовать виртуальный выделенный сервер, работающий под управлением Ubuntu 20.04. Предварительно на нашем сервере должны быть произведены настройки, описанные в соответствующей статье нашего справочника.
Также, поскольку мы используем удалённый VPS, мы будем придерживаться рекомендации не открывать прямой доступ к нашему серверу по его IP-адресу. Исходя из чего, для дальнейшей работы мы организуем VPN-туннель. Данный формат доступа будет использовать такое программное обеспечение, как OpenVPN, и его настройка на Ubuntu 20.04 также описана в специальном руководстве, размещённом в нашем справочнике.
Подготовка виртуального сервера
При создании файлового хранилища важной задачей станет настройка даты и времени. Это необходимо сделать, чтобы в дальнейшем избежать проблем при проведении поиска требуемых файлов и каталогов.
Для настройки даты и времени довольно часто используется утилита chrony
. Поэтому перед началом установки нового софта обновите индекс пакетов до последних изменений:
$ sudo apt update
После чего следующей командой установите непосредственно саму утилиту chrony
:
$ sudo apt install chrony
По окончании процесса установки добавьте утилиту в автозагрузку:
$ sudo systemctl enable chrony
И запустите её:
$ sudo systemctl start chrony
Теперь установите соответствующий часовой пояс. В нашем примере мы будем использовать Europe/Moscow
:
$ sudo timedatectl set-timezone Europe/Moscow
Проверить текущее время и дату, а также настройки часового пояса можно командой date
:
$ date
Установка Samba
Далее переходим непосредственно к установке Samba. Для чего используйте следующую команду:
$ sudo apt install samba
Для своей работы утилита использует службу smbd
, поэтому команда добавления службы в автозагрузку будет выглядеть как:
$ sudo systemctl enable smbd
После чего запустите службу smbd
:
$ sudo systemctl start smbd
Соответственно для просмотра текущего состояния демона используйте команду:
$ sudo systemctl status smbd
Если на своём виртуальном сервере во время предварительной настройки вы включили брандмауэр, то добавьте разрешающее правило для установленной утилиты:
$ sudo ufw allow Samba
Настройка Samba
Практически все настройки Samba производятся при помощи файла конфигурации smb.conf
. Данный файл расположен в директории /etc/samba/
. Для того, чтобы у вас была возможность вернуть конфигурацию Samba в первоначальное состояние, перейдите в каталог /etc/samba/
и сохраните файл smb.conf
в качестве резервной копии под именем, например, smb_bak.conf
.
$ cd /etc/samba
$ sudo cp smb.conf smb_bak.conf
Теперь, когда у вас есть резервная копия конфигурационного файла, вы можете корректировать его, имея возможность в любой момент отменить все внесённые изменения.
Поскольку в файле smb.conf
используется довольно большое количество строк, содержащих комментарии и затрудняющих визуальное восприятие действительно нужной информации, то для вывода текущей конфигурации Samba используйте команду testparm
. Вот так, например, выглядит вывод данной команды до внесения каких-либо изменений в конфигурационный файл:
Настройка каталога для анонимного доступа
Создание нашего небольшого файлового сервера на основе Samba начнём с настройки ресурса, общедоступного для анонимных пользователей. Другими словами, мы создадим директорию и откроем доступ к ней таким образом, чтобы клиент мог иметь возможность подключиться к ней без авторизации на сервере. Анонимный пользователь не сможет редактировать или удалять файлы и каталоги, находящиеся в общей директории, а также у него не будет возможности создавать в ней свои директории или файлы. Таким образом, вы можете предоставить доступ, например, к каталогу, содержащему журналы событий для того, чтобы изучать логи без подключения непосредственно к серверу.
При этом, данный формат использования общего каталога не является безопасным. Исходя из чего, следует применять его только в крайних обстоятельствах и исключительно в небольших офисных или домашних локальных сетях.
Сначала создайте директорию, которую будете использовать для общего доступа. Например:
$ sudo mkdir /var/share_anon
Теперь перейдите в каталог /etc/samba/
и откройте для редактирования конфигурационный файл:
$ cd /etc/samba
$ sudo nano smb.conf
В конец файла smb.conf
добавьте следующий раздел:
[share_anon]
comment = Directory For Anonymous Users
path = /var/share_anon
public = yes
writable = no
read only = yes
guest ok = yes
Здесь:
[share_anon]
– имя ресурса, которое будет видеть клиент;comment
– комментарий к данному разделу конфигурационного файла (в нашем случае –Directory For Anonymous Users
);path
– каталог, к которому предоставлен общий доступ (в нашем примере –/var/share_anon
);public
– признак возможности доступа гостевым пользователям и пользователям, прошедшим авторизацию (значениеyes
подразумевает предоставление доступа на чтение для данных пользователей);writable
– возможность внесения изменений в содержимое общего каталога;read only
– право только на чтение (в нашем примере значениеyes
говорит о том, что все пользователи имеют право исключительно на чтение содержимого директории);guest ok
– признак возможности доступа гостевой учётной записи.
После окончания редактирования закройте файл с сохранением изменений. Для этого нажмите Ctrl x
, затем y
и Enter
. Для того, чтобы внесённые в конфигурацию изменения применились, перезапустите службу smbd
:
$ sudo systemctl restart smbd
При помощи команды testparm
проверьте, что внесённые изменения стали частью конфигурации Samba.
Теперь вы сможете проверить возможность подключения к созданной директории. Для чего в проводнике введите IP-адрес, по которому доступен ваш VPS, в формате \\XXX.XXX.XXX.XXX
.
Настройка каталога для доступа авторизованного пользователя
На следующем шаге мы настроим каталог, к которому авторизованные учётные записи будут иметь полный доступ. То есть, пользователи, прошедшие авторизацию на сервере смогут редактировать, создавать и удалять файлы и директории в данном каталоге.
Как и в предыдущем разделе, сначала создайте директорию, к которой будет предоставлен общий доступ:
$ sudo mkdir /var/share_access
Созданной директории необходимо дать права, позволяющие вносить изменения в её содержимое:
$ sudo chmod 777 /var/share_access
После чего, перейдите в каталог /etc/samba/
и откройте для редактирования файл конфигурации:
$ cd /etc/samba
$ sudo nano smb.conf
Далее, в конец конфигурационного файла добавьте следующий раздел:
[share_access]
comment = Directory For Registered Users
path = /var/share_access
public = no
writable = yes
read only = no
guest ok = no
create mask = 0775
directory mask = 0775
force create mode = 0775
force directory mode = 0775
Здесь:
[share_access]
– имя ресурса, которое будет видеть клиент при подключении;comment
– комментарий к разделу конфигурационного файла (в нашем примере –Directory For Registetred Users
);path
– каталог, к которому будет предоставлен общий доступ (в нашем случае –/var/share_access
);public
– признак возможности доступа гостевым пользователям и всем учётным записям, прошедшим авторизацию (значениеno
подразумевает отсутствие публичного доступа);writable
– возможность внесения изменений в содержимое общей директории;read only
– право только чтение (в нашем примере значениеno
говорит о том, что всем пользователям, прошедшим авторизацию будет предоставлены права на создание, удаление и редактирование файлов и каталогов в общей директории;guest ok
– признак возможности доступа гостевой учётной записи;- параметры
create mask
,directory mask
,force create mode
иforce directory mode
определяют права, назначаемые создаваемым файлам и каталогам в общей директории.
По окончании редактирования закройте файл с сохранением внесённых изменений (Ctrl x
, затем y
и Enter
).
Далее создайте в системе пользователя, под именем которого вы будете подключаться к общей директории. В нашем примере такой пользователь будет иметь имя samba-user
.
$ sudo useradd samba-user
Теперь добавьте созданную учётную запись в Samba. Именно она будет иметь полный доступ к каталогу /var/share_access/
. При выполнении команды нужно создать пароль для данного пользователя. При помощи этого пароля пользователь будет подключаться к общей директории.
$ sudo smbpasswd -a samba-user
Для применения изменений, внесённых в конфигурацию Samba, перезапустите демон smbd
:
$ sudo systemctl restart smbd
Проверить доступ к каталогу /var/share_access/
вы сможете набрав соответствующий IP-адрес в строке проводника. Далее, для того, чтобы попасть непосредственно в директорию share_access
, система попросит вас ввести имя и пароль пользователя, имеющего доступ к ресурсам, настроенным при помощи Samba. В нашем примере таким пользователем является samba-user
.
Настройка каталога для доступа определённых пользователей и групп
В этом разделе рассмотрим, как настроить доступ к общей директории для строго определённых учётных записей и групп.
Также, как и на предыдущем шаге, сначала создайте каталог и присвойте ему соответствующие права:
$ sudo mkdir /var/share_group
$ sudo chmod 777 /var/share_group
Теперь перейдите в каталог /etc/samba/
и откройте для редактирования конфигурационный файл Samba:
$ cd /etc/samba
$ sudo nano smb.conf
В конец файла smb.conf
добавьте следующий раздел:
[share_group]
comment = Directory For Users And Groups
path = /var/share_group
public = no
writable = no
read only = yes
guest ok = no
valid users = your-user, @your-group
write list = samba-user1
create mask = 0775
directory mask = 0775
force create mode = 0775
force directory mode = 0775
inherit owner = yes
Здесь:
[share_group]
– имя ресурса, которое будет показано в проводнике при подключении;comment
– комментарий к данному разделу конфигурационного файла (в нашем случае –Directory For Users And Groups
);path
– путь к общему каталогу (в нашем примере –/var/share_group
);public
– признак возможности доступа гостевым пользователям и всем учётным записям, прошедшим авторизацию (значениеno
подразумевает отсутствие публичного доступа);writable
– возможность внесения изменений в содержимое общего каталога;read only
– право только чтение (в нашем примере значениеyes
говорит о том, что все пользователи имеют право исключительно на чтение содержимого общего каталога);guest ok
– признак возможности доступа гостевой учётной записи;valid users
– учётные записи и группы пользователей, имеющие доступ к общему каталогу (переменные, начинающиеся с символа@
, являются названиями групп);write list
– учётные записи, которым предоставляются права на редактирование содержимого директории;- параметры
create mask
,directory mask
,force create mode
иforce directory mode
определяют права, назначаемые создаваемым файлам и каталогам в общей директории; inherit owner
– признак, определяющий наследование владельца при создании файлов и каталогов.
После окончания редактирования файла конфигурации закройте его с сохранением изменений и перезапустите демон smbd
.
$ sudo systemctl restart smbd
Для получения полноценного доступа к директории /var/share_group/
создайте пользователя, указанного в строке write list
:
$ sudo useradd samba-user1
Исходя из конфигурации в нашем примере, доступ к общему каталогу будет иметь учётная запись your-user
и группа your-group
. При этом полные права на каталог share_group
должен иметь пользователь, указанный в строке write list
. Таким образом, необходимо сначала создать группу your-group
, после чего добавить в неё учётную запись samba-user1
.
$ sudo groupadd your-group
$ sudo usermod -aG your-group samba-user1
После чего добавьте созданного пользователя ещё и в локальный файл smbpasswd
с изменением пароля данной учётной записи в Samba:
$ sudo smbpasswd -a samba-user1
Теперь, подключившись к общей директории со своего локального компьютера через проводник, проверьте возможность доступа к каталогу share_group
при помощи пользователя samba-user1
.