главная - Статьи - Linux, FreeBSD
Установка и настройка Samba на CentOS 7
Дата обновления: 23.09.2020Теги: Система Linux Настройка сервера Samba
В статье приведен пример установки файлового сервера Samba в рабочей группе (не в домене) на CentOS 7. Доступ к ресурсам как публичный, так и по логину/паролю. Последнее обновление: 06.09.2017.
Ставим 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 min protocol = SMB2 ntlm auth = ntlmv2-only 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
- означает, что если был указан логин/пароль и такого логина не существует, то будет произведена попытка войти под учеткой гостя.
ntlm auth = ntlmv2-only (то же, что и ntlm auth = no)
- не разрешать NTLMv1, использовать NTLMv2. С версии Samba 4.5 это дефолт.
Если вы сомневаетесь в значении любого параметра из тех, которые я привел выше, лучше ознакомьтесь с их смыслом на этом этапе, т.к. если что-то пойдет не так, лучше вам заранее понимать, что вы сделали. Тем более, что не так и много сделали. И вообще, я могу опечататься, вы можете что-то не скопировать и др.
Да, и еще, я сразу удалил в этом файле дефолтные группы [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.
# 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
Если все ок и вы можете войти в публичную шару и создать в ней файл, то можно попробовать создать запароленную директорию для отдельного пользователя. Если что-то не так, скорее всего проблема в правах на папки, iptables или с 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/~*/
Iptables для Samba
Лучший способ узнать, что нужно разрешить в iptables - это посмотреть, какие порты слушает Samba:
# netstat -tulpn | egrep "samba|smbd|nmbd|winbind" tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 13107/smbd tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 13107/smbd tcp6 0 0 :::139 :::* LISTEN 13107/smbd tcp6 0 0 :::445 :::* LISTEN 13107/smbd udp 0 0 192.168.88.255:137 0.0.0.0:* 13119/nmbd udp 0 0 192.168.88.2:137 0.0.0.0:* 13119/nmbd udp 0 0 0.0.0.0:137 0.0.0.0:* 13119/nmbd udp 0 0 192.168.88.255:138 0.0.0.0:* 13119/nmbd udp 0 0 192.168.88.2:138 0.0.0.0:* 13119/nmbd udp 0 0 0.0.0.0:138 0.0.0.0:* 13119/nmbd
Соответственно, в iptables надо добавить следующие правила:
-A INPUT -s 192.168.88.0/24 -p udp -m udp --dport 137 -m state --state NEW -j ACCEPT -A INPUT -s 192.168.88.0/24 -p udp -m udp --dport 138 -m state --state NEW -j ACCEPT -A INPUT -s 192.168.88.0/24 -p tcp -m tcp --dport 139 -m state --state NEW -j ACCEPT -A INPUT -s 192.168.88.0/24 -p tcp -m tcp --dport 445 -m state --state NEW -j ACCEPT
где 192.168.88.0/24 - ваша локальная сеть.
LOG-файл Samba
Можно тюнинговать логирование бесконечно долго, но если быстро и достаточно полезно, то приведу пример, как выводить в лог информацию о том, кто, откуда, что переименовал, что смотрел, что удалил. Открываем файл /etc/samba/smb.conf:
... [global] log file = /var/log/samba/log.%m log level = 1 auth_audit:3 auth_json_audit:3 max log size = 10000 [Common] ... vfs objects = full_audit full_audit:prefix = %u|%I full_audit:success = mkdir rmdir read pread write pwrite sendfile rename unlink lock full_audit:failure = mkdir rmdir read write rename unlink full_audit:facility = LOCAL7 full_audit:priority = ALERT ...
# systemctl restart smb.service && systemctl restart nmb.service
Попробуйте открыть файлы на шаре, удалить папку, создать файл. Потом посмотрите файл /var/log/messages:
Sep 4 17:50:19 centos smbd_audit: samba_guest|192.168.3.3|rename|ok|files/open_server_5_2_5_basic.exe|files/_open_server_5_2_5_basic.exe Sep 4 17:50:40 centos smbd_audit: samba_guest|192.168.3.3|rename|ok|files/_open_server_5_2_5_basic.exe|files/open_server_5_2_5_basic.exe Sep 4 18:01:11 centos smbd_audit: samba_guest|192.168.3.3|mkdir|ok|files/Новая папка Sep 4 18:01:13 centos smbd_audit: samba_guest|192.168.3.3|rename|ok|files/Новая папка|files/333 Sep 4 18:01:16 centos smbd_audit: samba_guest|192.168.3.3|rmdir|ok|files/333
Все ясно. Кто-то с ip 192.168.3.3 переименовал файл open_server_5_2_5_basic.exe, причем дважды. Потом создал папку, переименовал ее и удалил.
Играясь со списком "mkdir rmdir read pread write pwrite sendfile rename unlink lock
" можно реагировать на разные события, а можно вообще так full_audit:success = all !open
(все, кроме открытия).
Можно до бесконечности писать про всякие отдельные фишки. Но в целом зада выполнена.
[global]
workgroup = WORKGROUP
server string = File Server
netbios name = nikiv64
interfaces = lo enp2s0 192.168.8.3/24
hosts allow = 127. 192.168.8.
security = user
passdb backend = tdbsam
map to guest = bad user
min protocol = smb2
log file = /var/log/samba/log.%m
max log size = 50
encrypt passwords = yes
security = user
dns proxy = no
dos charset = 866
unix charset = UTF-8
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
[home]
comment = My Files
path = /home/user
force user = user
force group = user
guest ok = yes
writable = yes
create mask = 0775
directory mask = 0775
Всё работает, однако проблема №1, которая появилась сегодня утром, осталась. Я нашёл способ подключения к общим ресурсам сервера при помощи утилиты cifs, через конфигурационный файл fstab, однако подключение происходит примерно за 40 секунд, подозреваю, что оно осуществляется, не через Samba, а через SSH.
public
interfaces enp2s0
Получается, мне нет необходимости активизировать эту зону. Хотя стоит попробовать, ведь получится, что я принудительно её открою и привяжу её к Samba. Возможно именно из-за этого у меня идёт свистопляска с доступом , через Самбу. Большое спасибо.
Авторизуйтесь для добавления комментариев!