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

Установка в Linux Ubuntu/Debian:

sudo apt install samba

Создание резервной копии конфигурационного файла на всякий случай:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

Открытие конфига для редактирования, например в редакторе nano:

sudo nano /etc/samba/smb.conf

Коротко опишу параметры стандартного конфига:

[global]
# netbios имя
netbios name = ИМЯ
# Имя рабочей группы
workgroup = WORKGROUP
# Описание сервера
server string = %h server (Samba, Ubuntu)
# Включение функций WINS (Windows Internet Name Service) сервера. WINS сервер регистрирует связки NETBIOS-имени с IP-адресом.
# wins support = no
# Адрес другого существующего в сети WINS сервера.
;   wins server = w.x.y.z
# Делать ли запрос к DNS серверу если WINS сервер не смог разрешить NetBIOS имя
 dns proxy = no
# Параметр определяет в каком порядке использовать сервисы имен для получения IP адреса (lmhosts - искать IP в файле lmhosts самбы, host - /etc/hosts, wins - через wins сервер указанный в "wins server", bcast - послать широковещательный запрос на все сетевые интерфейсы)
;   name resolve order = lmhosts host wins bcast
 
# Определяет какие будут использоваться интерфейсы
;   interfaces = 127.0.0.0/8 eth0
# Указывает что нужно строго использовать только интерфейсы указанные в "interfaces"
;   bind interfaces only = yes
 
# Адрес размещения файла логов
log file = /var/log/samba/log.%m
# Более детальный уровень логов
log level = 3
debug timestamp = yes
# Максимальный размер файла в килобайтах, если размер превышен, то создается новый, а к существующему добавляется расширение .old, "0" - без ограничения по размеру)
 max log size = 1000
# Записывать ли логи в системный журнал syslog
#   syslog only = no
# Уровень логов которые будут писаться в системный журнал syslog (0 - LOG_ERR, 1 - LOG_WARNING, 2 - LOG_NOTICE, 3 - LOG_INFO)
   syslog = 0
# Доступ к ресурсам осуществляется по: user - имени пользователя и паролю, share - паролю, server - переадресация проверки на другой сервер (если не получится будет использоваться "security = user", domain - имитация работы сервера домена Windows
# security = user
# Шифрование передающихся между клиентом и сервером паролей
   encrypt passwords = true
# Механизм хранения информации о пользователях (smbpasswd, tdbsam, ldapsam)
   passdb backend = tdbsam
# Использование PAM для аутентификации
   obey pam restrictions = yes
# Cинхронизация пароля UNIX с паролем SMB при изменении зашифрованного пароля SMB в файле smbpasswd
   unix password sync = yes
# Программа которая будет использоваться для смены паролей UNIX
   passwd program = /usr/bin/passwd %u
# Строка управляющая обменом “chat” между демоном smbd и программой смены паролей
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
# Использование PAM для смены паролей UNIX вместо указанной программы в "passwd program"
   pam password change = yes
# (Never - запросы с неправильным паролем отклоняются; Bad User - запросы с неправильным паролем отклоняются, но если имя пользователя существует, будет произведена попытка входа гостем; Bad Password - запросы с неправильным паролем обрабатываются как попытка зайти гостем; Bad Uid - в режиме security = domain/ads когда пользователь прошел аутентификацию, но не имеет учетной записи UNIX будет считаться гостем.
   map to guest = bad user
 
########## Domains ###########
# Поддержка службы входа в сеть для Windows 9X
;   domain logons = yes
# Путь к директории где будут хранится пользовательские профили (Application Data, Рабочий стол, NTuser.dat, ...)
;   logon path = \\%N\profiles\%U
#   logon path = \\%N\%U\profile
# Путь присоединения домашней директории для рабочих станций Windows NT
;   logon drive = H:
# Домашняя директория при авторизации клиента
#   logon home = \\%N\%U
# Файл сценария, который будет скачан и выполнен на клиентском компьютере при входе в систему.
;   logon script = logon.cmd
# Путь к сценарию, который будет выполнен демоном smbd от пользователя root при обстоятельствах описанных ниже
; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u
# Путь к сценарию который запускается при добавлении учетной записи компьютера в домен SAMBA
; add machine script  = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u
# Путь к сценарию который запускается от root пользователя smbd при создании новай группы
; add group script = /usr/sbin/addgroup --force-badname %g
 
########## Printing ##########
# Отображение всех принтеров
#   load printers = yes
# Определяет какая статусная информация о принтере будет интерпретироваться в системе.
;   printing = bsd
# Переопределение вкомпилированного printcap name
;   printcap name = /etc/printcap
;   printing = cups
;   printcap name = cups
 
############ Misc ############
# Присоединение и обработка другого конфигурационного файла
;   include = /home/samba/etc/smb.conf.%m
#         SO_RCVBUF=8192 SO_SNDBUF=8192
# Параметры сокета для обслуживания клиентов
#   socket options = TCP_NODELAY
# Команда выполняющаяся при получении сервером сообщения WinPopup
;   message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' &
# Сопоставление списка просмотра сети. Мастер браузеры в изолированных подсетях передадут свои локальные списки просмотра и запросят законченную копию списка для всей глобальной сети.
#   domain master = auto
# Диапазон пользовательских идентификаторов для сопоставления SIDов UNIX пользователей SIDам NT пользователей.
;   idmap uid = 10000-20000
# Диапазон групповых идентификаторов для сопоставления SIDов UNIX групп SIDам NT групп
;   idmap gid = 10000-20000
;   template shell = /bin/bash
;   winbind enum groups = yes
;   winbind enum users = yes
;   usershare max shares = 100
# Разрешить не аутентифицированным пользователям получить доступ к общим ресурсам пользователей
   usershare allow guests = yes
 
#======================= Share Definitions =======================
;[homes]
# комментарий к папке
;   comment = Home Directories
# Общий ресурс отображаться в списке доступных общих ресурсов в сетевом окружении и в списке просмотра
;   browseable = no
# Запрет на изменение и создание файлов
;   read only = yes
# Права доступа для создаваемого файла
;   create mask = 0700
# Права доступа для создаваемой директории
;   directory mask = 0700
# Список пользователей, которым разрешен доступ
;   valid users = %S
;[netlogon]
;   comment = Network Logon Service
;   path = /home/samba/netlogon
# Не требовать для подключения пароль
;   guest ok = yes
;   read only = yes
;[profiles]
;   comment = Users profiles
;   path = /home/samba/profiles
;   guest ok = no
;   browseable = no
;   create mask = 0600
;   directory mask = 0700
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no
;   write list = root, @lpadmin
;[cdrom]
;   comment = Samba server's CD-ROM
;   read only = yes
;   locking = no
;   path = /cdrom
;   guest ok = yes
 
# Команда запускаемая при подключении к сервису
;   preexec = /bin/mount /cdrom
# Команда запускаемая при отключении от сервиса
;   postexec = /bin/umount /cdrom
 
# Разрешает только указанными IP адресам присоединяться к Samba-серверу, по умолчанию всем разрешено, можно не ограничивать - закомментировать строку, а ограничить фаерволом, например iptables
hosts allow = 172.16. 192.168.1. 192.168.0. 127. 10.

Приведу пример конфигурации шары пользователя «ixnfo»:

[ixnfo]
path = /srv/samba/ixnfo
comment = ixnfo
browseable = yes
writable = yes
read only = no
create mask = 0770
directory mask = 0770

Проверить корректность параметров конфигурации можно командой:

testparm

Проверка демона:

netstat -nlp

Узнать версию samba можно так:

smbd --version

Пример создания директории для шары:

sudo mkdir -p /srv/samba/anonymous_share
sudo chown nobody.nogroup /srv/samba/anonymous_share/

Просмотр привилегий на файлы и папки:

ls -l /srv/samba

Добавление пользователя «ixnfo» в Ubuntu:

sudo useradd ixnfo

Добавление samba пользователя (пользователь с таким именем уже должен быть создан в системе командой выше):

sudo smbpasswd -a ixnfo

Активация пользователя:

sudo smbpasswd -e ixnfo

Создание файла пользователей:

sudo touch /etc/samba/smbusers
sudo nano /etc/samba/smbusers
ixnfo = Admin

Пример указания привилегий:

sudo chown ixnfo:ixnfo -R /srv/samba/ixnfo/
sudo chmod -R 0770 /srv/samba/ixnfo/

Применим изменения:

sudo smbcontrol all reload-config

Или перезагрузим samba:

sudo service samba restart
sudo restart smbd
sudo restart nmbd

Или так перезагрузим:

sudo /etc/init.d/smbd restart
sudo /etc/init.d/nmbd restart
sudo systemctl restart smbd
sudo systemctl restart nmbd

Пример просмотра сетевой информации компьютера в Windows:

net config workstation

Пример команды подключения сетевого диска в Windows (можно добавить в автозагрузку bat файлом)

net use K: \\192.168.1.5\dir /persistent:no /user:USER PASSWORD

Смотрите также мои статьи:
IPTables правила для Samba
Детальные логи в Samba
system-config-samba

Решение ошибок:
Проблемы с автозапуском Samba в Linux
WARNING: The «syslog» option is deprecated
System error 1231 has occurred
«Unable to connect to CUPS server» и «failed to retrieve printer list»
«rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)»

Вливайтесь в общение

1 комментарий

Добавить комментарий

  1. Спасибо огромное за отличную статью, мне очень помогли ваши рекомендации.