Сервер в кармане, или просто о сложном!

главная - Статьи - Linux, FreeBSD

Установка и настройка Samba на CentOS 7

Теги: Система Linux Настройка сервера

В статье приведен пример установки файлового сервера Samba в рабочей группе (не в домене) на CentOS 7. Доступ к ресурсам как публичный, так и по логину/паролю. Поехали!

Ставим Samba:

# yum install samba samba-client samba-common

Подготовка

# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

Сначала укажем в конфиге то, что мы планируем сделать, а потом уже создадим нужных пользователей, задаим права доступа на директории и пр. Почти все в этом файле как и в примере ниже, выдумывать или менять мало что нужно:

# nano /etc/samba/smb.conf

[global]
workgroup = WORKGROUP
server string = My Samba Server %v
netbios name = centos

security = user
map to guest = bad user
passdb backend = tdbsam
guest account = samba_guest

dns proxy = no

log file = /var/log/samba/log.%m
max log size = 50

; а вот это мы добавляем в конец конфига:
[Common]
comment = Common share
path = /samba/share
browsable =yes
writable = yes
guest ok = yes
read only = no

WORKGROUP должно совпадать с названием рабочей группы компьютеров у вас дома;

netbios name = centos - имя вашего сервера в сети. У меня это имя прописано в dns на роутере mikrotik, вы же при желании можете прописать centos в файл hosts на рабочих станциях в вашей сети. Главное, чтобы ваш сервер был доступен по имени centos (в этом примере). Если вы еще не заблокировали icmp, выполните команду `ping centos` с рабочей станции. Если разрешение имени не работает, у вас будет вариант использовать такую запись <ip-вашего-сервера> вместо centos.

guest account = samba_guest - определяем имя пользователя (должен быть добавлен в систему), от имени которого будет осуществляться доступ к общим папкам. Этого пользователя мы создадим чуть позже.

map to guest = bad user - означает, что если был указан логин/пароль и такого логина не существует, то будет произведена попытка войти под учеткой гостя.

Если вы сомневаетесь в значении любого параметра из тех, которые я привел выше, лучше ознакомьтесь с их смыслом на этом этапе, т.к. если что-то пойдет не так, лучше вам заранее понимать, что вы сделали. Тем более, что не так и много сделали. И вообще, я могу опечататься, вы можете что-то не скопировать и др.

Да, и еще, я сразу удалил в этом файле дефолтные группы [homes], [printers], [netlogon], [Profiles] и [public]. Особенно я не хотел бы расшаривать домашние директории пользователей системы.

Несмотря на то, что файл настройки samba один, сами шары могут быть раскиданы по дискам и директориям, при просмотре сетевые пользователи не смогут понять, что шара upload указывает в /var/www/htdocs/upload, а шара docs - на /samba/common_docs. Т.е. ваша фантазия в этом плане вам на руку. Вы можете настроить все так, что файлы, которые вы загрузили по локальной сети, будут доступны посетителям вашего сайта. Ну или что угодно еще можете придумать. Главное, обращайте внимание на права доступа к файлам и директориям, которые вы создаете!

Проверяем, все ли правильно отредактировали:

# testparm

Public share

Ранее в конфиге smb.conf мы указали имя пользователя (guest account = samba_guest), от имени которого будет производиться доступ к общедоступным шарам. Т.е. если мы в описании соответствующей группы укажем guest ok = yes, то независимо от ваших текущих привилегий доступ к файлам в соотв. шаре будет произведен от имени samba_guest. Давайте подготовим такого пользователя и директорию с соотв. правами.

# mkdir /samba/share

# ls -ldZ /samba/share
# chcon -t samba_share_t /samba/share
# ls -ldZ /samba/share
drwxr-xr-x. root root unconfined_u:object_r:samba_share_t:s0 /samba/share

# groupadd smbgrp
# useradd -c 'Samba member' -G smbgrp -M -s /sbin/nologin samba_guest
# chmod 775 /samba/share
# chown samba_guest:smbgrp /samba/share

опция -M указывает не создавать домашнюю директорию;
группа smbgrp будет объединять создаваемых в системе пользователей для Samba.

Здесь небольшая ремарка: часто в интернете в мануалах права на публичные шары предлагается давать 755 (т.е. запись только для пользователя, для группы и остальных - чтение и выполнение). И все здорово, до тех пор, пока вы не авторизуетесь для входа в другую папку, на которую установлен пароль (см. ниже). При этом вы будете уже не samba_guest:smbgrp, а, скажем, user1:smbgrp и вы сможете войти в свою директорию, но не сможете войти в общедоступную share (или войти сможете, но создать ничего не получиться - прав на запись у вас не будет)! Скажу честно, я не совсем понял, это я не так что-то понимаю или все так и есть. Но в моем случае именно права 775 на паблики выправили ситуацию (и я выше дал этому объяснение. Если я ошибаюсь - прошу прощения, что ввел вас в заблуждение. Но я честно вас предупредил :)

# systemctl enable smb.service && systemctl enable nmb.service
# systemctl restart smb.service && systemctl restart nmb.service

# firewall-cmd —permanent —zone=public —add-service=samba
# firewall-cmd —reload

Пробуем с рабочей станции в сети открыть шару share и создать пробный файл. Создав, проверьте на сервере, с какими правами создан файл:

# ls -al /samba/share

Если все ок и вы можете войти в публичную шару и создать в ней файл, то можно попробовать создать запароленную директорию для отдельного пользователя. Если что-то не так, скорее всего проблема в правах на папки или с SELinux.

Шары с паролем

Общая идея такова: если нам надо создать пользователя user1 для шары Samba, нам надо сначала создать пользователя с таким логином в системе Linux, а потом создать такого же пользователя в Samba. По моему разумению, системный пользователь, создаваемый для Samba, не должен иметь возможность входа в систему, а также иметь домашнюю директорию. Собственно, зачем ему это?

# useradd -c 'Samba member' -G smbgrp -M -s /sbin/nologin user1

Вообще говоря, пока вы не создадите пароль для этого пользователя, зайти им в систему нельзя, но представьте себе, когда через год или три вы забудете, ставили вы пароль или нет, и при просмотре /etc/passwd конкретно так вздрогнете, если оставить шелл по-умолчанию ;) Так что в любом случае проверьте файл /etc/passwd после выполнения команды. Хотя бы один разок.

А это уже внутренний пользователь Samba:

# smbpasswd -a user1

Создаем пользовательскую папку. Для директории user1 права можно ставить уже не 775, а 755:

# mkdir /samba/user1
# chcon -t samba_share_t /samba/user1
# chown user1:smbgrp /samba/user1
# chmod 755 /samba/user1

# ls -al /samba/
total 16
drwxr-xr-x.  4 root         root   4096 Feb 28 15:50 .
dr-xr-xr-x. 21 root         root   4096 Feb 28 14:54 ..
drwxr-xr-x.  2 user1        smbgrp 4096 Feb 28 15:50 user1
drwxrwxr-x.  2 samba_guest  smbgrp 4096 Feb 28 15:12 share

# nano /etc/samba/smb.conf
...
[User1 Share]
comment = User1's files
path = /samba/user1
;valid users = @smbgrp
valid users = user1
guest ok = no
writable = yes
browsable = yes
create mask = 0640
directory mask = 0750

параметр create mask = 0640 указывает, что создаваемые в этой шаре файлы будут для владельца с правами на запись, для группы - на чтение, всем остальным - фиг;
параметр directory mask = 0750 указывает аналогично, только для директорий.

В принципе, в личной шаре никто не мешает вам использовать маски 0600 и 0700 соотв. Хотите, поиграйтесь :) Но никогда без явно обозначенной цели не делайте маски 0777 ни для чего, даже если после этого все работает.

# systemctl restart smb.service && systemctl restart nmb.service

Проверяйте работу, все должно быть ок. В сетевом окружении должны быть две сетевые папки: share и user1.

Создайте еще пользователя, проверьте, как работают права доступа к пабликам и персональным директориям. Если что-то идет не так, проверяйте права доступа на директории и встроенные механизмы защиты, в данном случае SELinux.

Дополнительно

Ну и напоследок некоторые полезные команды.

Список пользователей Samba:

# pdbedit -L
user1:1001:Samba member

Расширенные данные по пользователям:

# pdbedit -L -v

Смена пароля у существующего пользователя:

# smbpasswd <User_name>

Удаление существующего пользователя:

# smbpasswd -x <User_name>

Приостановление учетной записи без удаления:

# smbpasswd -d <User_name>

Не хотите видеть в сетевой папке всякие временные файлы? В конфиге smb.conf добавьте к группе [User1 Share] что-то вроде:

hide files = /$RECYCLE.BIN/desktop.ini/lost+found/Thumbs.db/~*/

Можно до бесконечности писать про всякие отдельные фишки. Но в целом зада выполнена.

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?