Opening Windows to a Wider World.
слоган на www.samba.org
Samba - реализация сетевых протоколов Server Message Block (SMB) и Common Internet File System (CIFS). Основное предназначение - расшаривание файлов и принтеров между Linux и Windows системами.
Samba состоит из нескольких демонов, работающих в фоновом
режиме и предоставляющих сервисы и ряд инструментов командной строки для
взаимодействия со службами Windows:
- smbd - демон, являющийся SMB-сервером файловых служб и служб печати;
- nmbd - демон, предоставляющий службы имен NetBIOS;
- smblient - утилита предоставляет доступ из командной строки
к ресурсам SMB. Она также позволяет получить списки общих ресурсов на
удаленных серверах и просматривать сетевое окружение;
- smb.conf - конфигурационный файл, содержащий настройки для всех инструментов Samba;
Список портов, используемых Samba
Порт |
Протокол |
Служба |
Демон |
Описание |
137 |
UDP |
netbios-ns |
nmbd |
служба имен NetBIOS |
138 |
UDP |
netbios-dgm |
nmbd |
служба датаграмм NetBIOS |
139 |
TCP |
netbios-ssn |
smbd |
NetBIOS over TCP (служба сеансов) |
445 |
TCP |
microsoft-ds |
smbd |
NetBIOS over TCP (служба сеансов) |
Вводная статья про основные принципы расшаривания файлов и принтеров.
Установка и настройка сервера
# под Arch Linux, сервер
yaourt -S samba
# под Arch Linux, клиент
yaourt -S smbclient
# под Ubuntu, сервер
sudo apt-get install samba samba-common system-config-samba
Скопируем файл с настройками smb.conf
sudo cp /etc/samba/smb.conf.default /etc/samba/smb.conf
По умолчанию создаются ресурсы для домашних каталогов пользователей (раздел homes в smb.conf) и принтеров (раздел printers).
Доступ к ресурсу может быть по паролю или анонимный. Для первого способа есть пара моментов:
- пользователь должен существовать в системе (создан с помощью команды
adduser username
и установлен пароль passwd username
); - пользователь должен быть добавлен как пользователь Samba (с помощью команды
sudo smbpasswd -a username
);
Просмотр пользователей
sudo pdbedit -L -v
Необходимо что-бы компьютеры принадлежали к одной рабочей группе, в Windows по умолчанию это WORKGROUP, вот её и будем использовать.
Ниже приведен пример простого файла smb.conf с настройками для анонимного доступа к директории /srv/samba/public.
sudo mkdir -p /srv/samba/public
sudo chmod -R 0777 /srv/samba/public
Имена параметров не чувствительны к регистру. Для некоторых
распространенных параметров существуют синонимы, а для некоторых –
антонимы. Например, writable и writeable – это синонимы, а read only – антоним для них, т.е. опция read only = yes эквивалентна опции writable = no.
[global]
workgroup = WORKGROUP
server string = Samba Server
log file = /var/log/samba/%m.log
max log size = 50
security = user
map to guest = Bad User
dns proxy = no
# следовать по симлинкам
unix extensions = no
wide links = yes
follow symlinks = yes
# utf кодировка
dos charset = cp866
unix charset = UTF8
# отключаем принтеры
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
# hosts allow = 127. 192.168.24.
# по умолчанию все файлы, начинающиеся с точки будут иметь атрибут "скрытый"
hide dot files = yes
[public]
comment = public folder
path = /home/proft/public
read only = no
locking = no
browsable = yes
# разрешить гостевой доступ
guest ok = yes
force user = nobody
force group = nobody
# guest only = yes
# create mode = 0777
# directory mode = 0777
# разрешить доступ только user1, user2
# valid users = user1, user2
Проверим корректность настроек с помощью команды testparm
testparm -s
Опция -v
указывает testparm
выводить также значения по умолчанию.
Запустим Samba-сервер
# под Arch Linux
sudo systemctl start smbd
# под Ubuntu, сервер
sudo service start smbd
Проверим подключению к Samba на порт 139 с помощью telnet
telnet 192.168.24.100 139
В Samba имеется ряд параметров, связанных с аутентификацией пользователей. Наиболее важным из них является параметр security, который может принимать пять различных значений источник:
- share - этот режим безопасности эмулирует метод
аутентификации, используемый операционными системами Windows 9x/Windows
Me. В этом режиме имена пользователей игнорируются, а пароли назначаются
общим ресурсам. В этом режиме Samba пытается использовать
предоставленный клиентом пароль, которым могут пользоваться разные
пользователи.
- user* - этот режим безопасности установлен по
умолчанию и использует для аутентификации имя пользователя и пароль, как
это обычно делается в Linux. В большинстве случаев в современных
операционных системах пароли хранятся в зашифрованной базе данных,
которую использует только Samba.
- server - этот режим безопасности используется
тогда, когда необходимо, чтобы Samba выполняла аутентификацию, обращаясь
к другому серверу. Для клиентов этот режим выглядит так же, как
аутентификация на уровне пользователя (режим user), но фактически для
выполнения аутентификации Samba обращается к серверу, указанному в
параметре password server.
- domain - используя этот режим безопасности, вы
можете полностью присоединиться к домену Windows; для клиентов это
выглядит так же, как аутентификация на уровне пользователя. В отличие от
аутентификации на уровне сервера, доменная аутентификация использует
более защищенный обмен паролями на уровне домена. Для полного
присоединения к домену требуется выполнить дополнительные команды в
системе Samba и, возможно, на контроллере домена.
- ads - этот режим безопасности похож на метод
аутентификации в домене, но требует наличия контроллера домена Active
Directory Domain Services.
Полный список параметров Samba есть в manpages.
Выше был приведен пример с доступом для директории с общим доступом.
Рассмотрим еще пример с приватной директорией, к которой доступ только
по логину и паролю.
Создадим группу и добавим в нее пользователя
sudo groupadd smbgrp
sudo usermod -a -G smbgrp proft
Создадим директорию для пользователя и установим права
sudo mkdir -p /srv/samba/proft
sudo chown -R proft:smbgrp /srv/samba/proft
sudo chmod -R 0770 /srv/samba/proft
Создадим samba-пользователя
sudo smbpasswd -a proft
Добавим в /etc/samba/smb.conf новый ресурс
[proft]
path = /srv/samba/proft
valid users = @smbgrp
guest ok = no
writable = yes
browsable = yes
Перезапустим сервер
sudo systemctl restart smbd
Пример настройки ресурса в котором есть симлинк на папку пользователя (/srv/samba/media/video » /home/proft/video)
[media]
path = /srv/samba/media
guest ok = yes
read only = yes
browsable = yes
force user = proft
Настройка клиента
Просмотр общих ресурсов компьютера
smbclient -L 192.168.24.101 -U%
Еще один способ подключения для анонимного пользователя с командной строкой
smbclient -U nobody //192.168.24.101/public
ls
Если на сервере настроен более высокий уровень безопасности, то может
потребоваться передать имя пользователя или домена с помощью параметров
-W
и -U
соответственно.
smbclient -L 192.168.24.101 -U proft -W WORKGROUP
Монтирование samba-ресурса
# создание точки монтирования
mkdir -p ~/shares/public
# монтирование ресурса
# для анонимного пользователя nobody
mount -t cifs //192.168.24.101/public /home/proft/shares/public -o user=nobody,password=,workgroup=WORKGROUP,ip=192.168.24.101,utf8
# для пользователя proft
mount -t cifs //192.168.24.101/public /home/proft/shares/public -o user=proft,password=1,workgroup=WORKGROUP,ip=192.168.24.101,utf8
Еще лучше пароли хранить в отдельном файле
# sudo vim /etc/samba/sambacreds
username=proft
password=1
username=noboy
password=
Выставим права доступа 0600
sudo chmod 0600 /etc/samba/sambacreds
Новая строка для монтирования
mount -t cifs //192.168.24.101/public /home/proft/shares/public -o user=proft,,credentials=/etc/samba/sambacreds,workgroup=WORKGROUP,ip=192.168.24.101
И пример для /etc/fstab
//192.168.24.101/public /home/proft/shares/public cifs noauto,username=proft,credentials=/etc/samba/sambacreds,workgroup=WORKGROUP,ip=192.168.24.101 0 0
Открыть ресурс в файловом менеджере Nautilus/Nemo/etc можно по такому пути smb://192.268.24.101.
Если Nemo пишет Nemo cannot handle "smb" locations. значит не хватает пакета gvfs-smb.
Доступ к серверу с Windows и Android клиента
Под Windows узнать рабочую группу с консоли можно с помощью
net config workstation
Открыть ресурсы на удаленной машине можно набрав в строке Explorer (Проводник) или в Run (Start - Run) UNC-адрес: \192.168.24.101.
Под Android подключится к серверу можно с помощью ES File Explorer,
на вкладке Network добавляем сервер, просто по IP (без указания схемы,
smb). После чего можно открывать расшаренные ресурсы. Для статистики:
HDRIP-фильм идет без подтормаживания.
Дополнительное чтиво
http://proft.me/2013/09/1/samba-nastrojka-fajlovogo-obmena-mezhdu-windows-i-/