Установка и настройка SAMBA-сервера в Ubuntu Server 12.04 LTS
Первоочередная возможность компьютера, находящегося в сети, будь то сервер, или просто рабочая станция, которая должна быть реализована — общий доступ к файлам. В Ubuntu это можно реализовать посредством различных протоколов. В этой заметке я расскажу о настройке SAMBA-сервера в Ubuntu Server 12.04 LTS для работы в домашней сети.
SAMBA — это open-source реализация протокола SMB/CIFS, который имеет Windows корни. Собственно поэтому наилучшим образом подходит для доступа к файлам с Windows-компьютеров. Все необходимое о настройке SAMBA и даже больше можно узнать в из статьей на сайте IBM developerWorks:
- [urlspan]Основные принципы[/urlspan],
- [urlspan]Управление учетными записями пользователей и групп[/urlspan],
- [urlspan]Управление доступом к файловой системе и общим ресурсам Linux[/urlspan],
- [urlspan]Аутентификация и авторизация[/urlspan],
- [urlspan]Конфигурация Samba[/urlspan],
- [urlspan]Файловые службы[/urlspan].
Итак, по порядку.
Установка
Делается командой:
sudo apt-get install samba
Подготовка и основные принципы
Прежде всего на сервере необходимо создать учетные записи пользователей, которые будут им пользоваться. Создавать их нужно дважды: учетную запись Linux и учетную запись Samba. Затем необходимо определить какие папки предоставлять для общего доступа, установить желаемые права доступа к файлам и пользоваться. Все просто, если не лезть в глубины конфигурации.
Для того чтобы все работало необходимо навести порядок с правами доступа к файлам на сервере. Чтобы сделать это нужно создать на сервере пользователей, соответствующих пользователям на компьютерах с которых будет производиться доступ к файлам сервера.
Добавляем учетную запись пользователя UNIX:
sudo useradd -c 'комментарий' -m user_name -g group_name
Здесь:
user_name — имя пользователя;
— g group_name — основная группа пользователя, от лица которой он будет производиться все действия пользователя, группа должна существовать;
— c 'комментарий' — комментарий к учетной записи;
— m указывает на необходимость создания домашней директории пользователя, если ее не существует (обычно это /home/user-name).
Создать группу можно командой groupadd:
sudo groupadd group_name
где group_name — имя создаваемой группы.
Если понадобиться изменять учетную запись пользователя, то делается это командой usermod, удаление — командой userdel. Аналогично и с группами: нужно использовать команды groupadd и groupadd соответственно, главное случайно не удалить всех пользователей из групп, имеющих права пользоваться командой sudo.
Добавляем учетную запись пользователя SAMBA
SAMBA умеет хранить информацию об учетных записях пользователей различными способами, мы будем использовать базу данных tdbsam. И если количество учетных записей на сервере меньше 250, то этого нам будет достаточно с головой.
Тут все делается командой smbpasswd. Для добавления учетной записи пользователя user_name:
sudo smbpasswd -a user_name
для удаления учетной записи пользователя пользователя user_name:
sudo smbpasswd -x user_name
После добавления учетной записи пользователя user_name, ее надо активировать командой:
sudo smbpasswd -e user_name
для деактивации учетной записи пользователя user_name:sudo smbpasswd -d user_name
После того, как с пользователями мы разобрались можно приступать непосредственно к настройке сервера.
Я написал bash-скрипт для добавления учетных записей UNIX и SAMBA:
#Добавляет пользователя в группу, группа должна существовать.
echo «Для добавления учетных записей пользователя Linux и SAMBA введите Имя Пользователя и Название его рабочей группы (группа должна существовать).»
user_name=""
while [ "${user_name}" = "" ]
do
echo Введите имя добавляемого пользователя:
read user_name
done
echo Введите название группы, в которую добавить пользователя:
read group_name
if [ "`cat /etc/group | grep ${group_name}`" = "" ]
then
Группы с таким именем не существует.
else
echo Добавление учетной записи пользователя ${user_name} в группу ${group_name}...
sudo useradd -m -g ${group_name} ${user_name}
echo Добавление учетной записи пользователя ${user_name} SAMBA...
sudo smbpasswd -a ${user_name}
echo Включение учетной записи SAMBA ${user_name}...
sudo smbpasswd -e ${user_name}
fi
bash-скрипт для добавления учетных записей UNIX и SAMBA
Запустить его можно командой:
sudo bash /path/script
где /path/script путь к скрипту.
Просмотр информации о пользователях и группах
Полезно знать как посмотреть информацию о всех учетных записях пользователей существующих в системе.
Информацию об учетной записи пользователя можно получить с помощью команды id:
id user_name
Информация об учетных записях UNIX хранится в файле /etc/passwd, каждая строка файла содержит информацию об одной из учетных записей, посмотреть его можно, например, командой:
cat /etc/passwd
Информация о группах UNIX хранится в файле /etc/group, посмотреть файл можно командой:
cat /etc/passwd
Информация об учетных записях SAMBA, хранящихся в базе данных получается командой:
sudo pdbedit -L
Настройка SAMBA-сервера
Настройки хранятся в файле smb.conf в папке /etc/samba. Для его редактирования можно воспользоваться командой:
sudo nano /etc/samba/smb.conf
Файл smb.conf состоит из разделов, которые начинаются с названия, заключенного в квадратные скобки. Существуют три специальных раздела: global, homes и printers. Приведу цитату из статьи 5:
- global. Все параметры, содержащиеся в этом разделе, влияют на работу всего сервера. При необходимости параметры раздела global можно переопределить на уровне общего ресурса.
- homes . Этот раздел является шаблоном для домашних директорий пользователей; Samba самостоятельно сопоставляет имена пользователей в соответствии с настройками этого раздела, избавляя от необходимости настраивать отдельный общий ресурс каждый раз, когда необходимо предоставить пользователю доступ к его домашней директории.
- printers. Этот раздел аналогичен разделу homes, но используется для принтеров.
Разделы с другими именами относятся к общим файловым ресурсам или принтерам.
В каждом разделе могут находиться те или иные параметры, список которых можно посмотреть на [urlspan]man-странице smb.conf[/urlspan].
Давайте посмотрим на файл smb.conf, который использовал я:
[global]
log file = /var/log/samba/log.%m
max log size = 2000
log level = 2
syslog = 2
passdb backend = tdbsam
passwd program = /usr/bin/passwd %U
obey pam restrictions = yes
pam password change = yes
unix password sync = yes
domain master = no
hosts allow = 192.168.1. 127.
dns proxy = no
workgroup = WORKGROUP
security = user
panic action = /usr/share/samba/panic-action %d
[HOMES]
; комментарий
comment = Home directories
; Доступ к директории только самим пользователям
valid users = %U
; запись разрешена?
writable = yes
; права создаваемых файлов и папок
create mask = 0600
directory mask = 0700
; отображать в списке ресурсов в сетевом окружении?
browseable = no
; общая папка SharedSpace, доступная всем для записи и чтения, гостевого доступа нет.
[SharedSpace]
; комментарий к создаваемой папке
comment = Public files
; путь к папке
path = /home/SharedFiles
; разрешаем запись всем
writable = yes
; права создаваемых файлов и папок
create mask = 0777
directory mask = 0777
; скрывать файлы, недоступные для чтения
hide unreadable = yes
; пользователи, которые имеют административные привилегии над ресурсом
admin users = admin_user
В данной конфигурации каждый пользователь будет видеть два общих ресурса: его домашнюю папку на сервере, доступную только ему и ресурс с именем SharedSpace, доступный всем пользователям. Символы с % являются заменяемыми переменными, и, например, %m заменяется на имя клиентского компьютера.
Далее указаны параметры на которые следует обратить особое внимание:
Раздел global:
passdb backend = tdbsam — указывает, что информацию об учетных записях пользователей будет храниться в базе данных tdbsam.
security = user — означает, что для пользования сервером пользователь должен «залогиниться» под имеющейся на сервере учетной записью для получения доступа к соответствующим общим ресурсам.
workgroup = WORKGROUP — рабочая группа, членом которой будет SAMBA-сервер.
Разделы homes и SharedSpace:
path = /path/to/resource — путь к общему ресурсу.
create mask, directory mask = 0777 — файлы и директории, соответственно, будут создаваться как минимум с указанными правами. Именно эти параметры устанавливают будут ли файлы и папки доступны для всех пользователей, только хозяев или их групп (подробнее о правах доступа к файлам в статье номер 3).
admin users = admin_user — пользователи, которые могут делать с ресурсом любые действия, независимо от установленных разрешений.
Процессы, отвечающие за работу сервера
Работа обеспечивается двумя демонами: smbd, обеспечивающий доступ к общим ресурсам, и
nmbd, обеспечивающий работу сетевой службы имен. Для вступления в действие изменений файла smb.conf необходим их перезапуск, это делается командами:
sudo restart smbd
sudo restart nmbd
Можно воспользоваться командами start и stop.
Итого
Здесь описана лишь малая часть возможностей, предоставляемых SAMBA, узнать о которых можно на сайте [urlspan] https://www.samba.org/[/urlspan]. Тем не менее, проделав описанные действия можно реализовать один из множества способов общего доступа к файлам. Главным его достоинством является кроссплатформенность — будь у пользователя OS X, Windows или Linux, он сможет получить доступ к общим файлам.
Скорость доступа к серверу, реализованному указанным образом, может варьироваться в широких пределах: с Winsows-компьютера, по гигабитному проводу скорость загрузки на сервер больших файлов у меня около 60 Мб/с, с мака она раз в 10 меньше. Поэтому ограничивать общий доступ к файлам лишь SAMBA сервером имеет смысл, если у Вас дома все компьютеры имеют ОС Windows.