Samba (Русский)
Samba - это реализация сетевого протокола SMB/CIFS. Эта программа облегчает организацию общего доступа к файлам и принтерам из систем Linux и Windows и является альтернативой NFS. Некоторые пользователи говорят, что Samba легко и очень просто настраивается. Однако, много новых пользователей сталкиваются с проблемами, связанными с ее сложностью и неинтуитивностью. Советуем строго придерживаться указаний, данных в этой статье.
Contents
- 1 Настройка сервера
- 2 Настройка клиента
- 3 Решение проблем
- 3.1 Проблемы подключения к Windows 7 - mount error(12): cannot allocate memory
- 3.2 Проблемы получения доступа к ресурсам, защищенным паролем, из Windows
- 3.3 Диалоговое окно появляется с большой задержкой
- 3.4 Ошибка: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
- 3.5 Не удается предоставить общий доступ к папке
- 3.6 "Просмотр" сети выдает ошибку "Не удалось получить список ресурсов с сервера" (Failed to retrieve share list from server)
- 3.7 Вы не являетесь владельцем каталога
- 3.8 protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
- 3.9 Подключение к серверу завершилось неудачей: (Error NT_STATUS_UNSUCCESSFUL)
- 4 Смотрите также
- 5 Больше информации
Настройка сервера
Для обеспечения общего доступа к файлам при помощи Samba установите пакет samba из официальных репозиториев.
Сервер Samba настраивается в файле /etc/samba/smb.conf
. Скопируйте файл настроек по умолчанию в файл /etc/samba/smb.conf
:
# cp /etc/samba/smb.conf.default /etc/samba/smb.conf
Создание ресурсов для общего доступа
Откройте файл /etc/samba/smb.conf
и прокрутите текст вниз до секции Share Definitions. В конфигурации по умолчанию автоматически предоставляется общий доступ к домашним каталогам всех пользователей. Также по умолчанию он предоставляется для принтеров. Здесь есть несколько закомментированных примеров конфигурации. Больше информации о доступных опциях для ресурсов с общим доступом можно найти на странице руководства smb.conf(5), которая также доступна в онлайн версии.
Со стороны Windows не забудьте изменить файл smb.conf
для Windows Workgroup (в Windows по умолчанию: WORKGROUP).
Запуск служб
Для организации базовых возможностей обмена файлами при помощи SMB запустите/включите службы smbd.service
и nmbd.service
. Для получения дополнительной информации смотрите страницы справочного руководства (man) smbd и nmbd.
Создание ресурсов общего доступа от имени обычного пользователя
"Usershare" - это возможность, позволяющая обычным пользователям добавлять, изменять и удалять собственные ресурсы общего доступа.
Эта команда создает необходимый каталог в /var/lib/samba
:
# mkdir -p /var/lib/samba/usershare
Эта команда создает группу sambashare:
# groupadd sambashare
Эта команда меняет владельца и группу каталога, который вы только что создали, на суперпользователя:
# chown root:sambashare /var/lib/samba/usershare
Эта команда меняет разрешения каталога usershares таким образом, что пользователи, входящие в группу sambashare, могут читать, записывать и выполнять файлы:
# chmod 1770 /var/lib/samba/usershare
Задайте эти переменные в конфигурационном файле smb.conf
:
/etc/samba/smb.conf
... [global] usershare path = /var/lib/samba/usershare usershare max shares = 100 usershare allow guests = yes usershare owner only = yes ...
Добавьте вашего пользователя в группу sambashares. Замените ваше_имя_пользователя
на имя вашего linux-пользователя:
# usermod -a -G sambashare ваше_имя_пользователя
Перезапустите службы smbd
и nmbd
.
Завершите сеанс и войдите в него вновь. Теперь у вас должна появиться возможность настраивать общий доступ samba, используя графический интерфейс. Например, в Thunar вы можете нажать правую кнопку мыши на любом каталоге и предоставить для него общий доступ в сети.
Добавление пользователя
Создайте учетную запись пользователя Linux для пользователя samba. При необходимости замените пользователь_samba
на желаемое имя:
# useradd пользователь_samba
Затем создайте учетную запись пользователя Samba с тем же именем:
# pdbedit -a -u пользователь_samba
Смена пароля Samba-пользователя
Чтобы сменить пароль пользователя, используйте smbpasswd
:
# smbpasswd пользователь_samba
Требуемые порты
Если у вас запущен межсетевой экран, не забудьте открыть необходимые для работы Samba порты.
Настройка клиента
Для доступа к файлам с использованием сервера Samba/SMB/CIFS необходим только пакет smbclient. Он доступен в официальных репозиториях.
Вы можете получать доступ и монтировать локально ресурсы, предоставленные для общего доступа другими компьютерами сети, используя графический интерфейс или интерфейс командной строки. Графический способ ограничен, так как большинство легковесных окружений рабочего стола не имеет родных средств настройки доступа к этим ресурсам.
Существует две "части" предоставления общего доступа. Первая лежит в основе механизма работы файловой системы, а вторая является интерфейсом, который позволяет пользователю выбирать монтируемые ресурсы общего доступа. В некоторых окружениях первая часть уже встроена.
Ручное монтирование
Установите пакет smbclient из официальных репозиториев. Если вы желаете получить более легкий подход и не нуждаетесь в возможности вывода списка общедоступных ресурсов, необходимо установить только cifs-utils, чтобы предоставить файл /usr/bin/mount.cifs
.
Чтобы вывести список общедоступных ресурсов на сервере:
$ smbclient -L hostname -U%
Создать точку монтирования для ресурса:
# mkdir /mnt/точка_монтирования
Примонтируйте ресурс, используя в качестве образца файл mount.cifs
. Не все опции из перечисленных ниже необходимы или хороши (например, password
).
# mount -t cifs //СЕРВЕР/имя_ресурса /mnt/точка_монтирования -o user=имя_пользователя,password=пароль,workgroup=рабочая_группа,ip=IP_сервера
SERVER
- Имя системы Windows.
имя_ресурса
- Каталог общего доступа.
точка_монтирования
- Локальный каталог, в который будет примонтирован ресурс.
-o [options]
- Смотрите страницу руководства mount.cifs(8) для получения информации.
Добавление ресурса в /etc/fstab
Самый простой способ добавить запись в fstab - использовать что-то вроде этого:
/etc/fstab
//СЕРВЕР/имя_ресурса /mnt/точка_монтирования cifs username=имя_пользователя,password=пароль 0 0
Однако, хранение паролей в легкочитаемом файле не рекомендуется! Более безопасным методом является использование файла полномочий. Например, создайте файл и выполните команду chmod 600 имя_файла
, в результате чего только пользователь-владелец файла сможет читать и писать в него. Файл должен содержать следующую информацию:
/путь/к/полномочиям/sambacreds
username=имя_пользователя password=пароль
а запись в вашем fstab должна выглядеть примерно так:
/etc/fstab
//СЕРВЕР/ИМЯ_РЕСУРСА /mnt/точка_монтирования cifs credentials=/путь/к/полномочиям/sambacreds 0 0
При использовании systemd (современные установки) можно использовать опцию comment=systemd.automount
, которая увеличивает скорость загрузки сервиса на несколько секунд. Также можно указать текущего пользователя и группу, чтобы сделать жизнь немного проще, используя опции uid
и gid
.
/etc/fstab
//СЕРВЕР/ИМЯ_РЕСУРСА /mnt/точка_монтирования cifs credentials=/путь/к/полномочиям,comment=systemd.automount,uid=имя_пользователя,gid=группа_пользователя 0 0
Монтирование пользователями
/etc/fstab
//СЕРВЕР/ИМЯ_РЕСУРСА /mnt/точка_монтирования cifs users,credentials=/путь/к/полномочиям,workgroup=рабочая_группа,ip=IP_сервера 0 0
Это позволит пользователям монтировать ресурс, если точка монтирования находится в каталоге, владельцами которого они являются, например, в свою домашнюю директорию. Чтобы пользователи могли монтировать и размонтировать ресурсы Samba в точках монтирования, владельцами которых они не являются, используйте smbnetfs или дайте им необходимые привилегии с помощью sudo.
Имена хостов WINS
Пакет smbclient предоставляет драйвер для использования имен хостов WINS. Чтобы его включить, добавьте “wins” в строку “hosts” файла /etc/nsswitch.conf.
Автоматическое монтирование
Есть несколько способов легко просматривать ресурсы общего доступа:
smbnetfs
Для начала удостоверьтесь, что вам доступны все ресурсы, которые вам нужны для монтирования:
$ smbtree -U удаленный_пользователь
Если это не работает, найдите и измените следующую строку в /etc/samba/smb.conf
подобным образом:
domain master = auto
Теперь перезапустите службы smbd.service
и nmbd.service
.
Если все работает, как и ожидалось, установите пакет smbnetfs из официальных репозиториев.
Затем добавьте следующую строку в файл /etc/fuse.conf
:
user_allow_other
и загрузите модуль ядра fuse
:
# modprobe fuse
Скопируйте каталог /etc/smbnetfs/.smb
в вашу домашнюю директорию:
$ cp -a /etc/smbnetfs/.smb ~
Затем создайте ссылку на файл smb.conf
:
$ ln -sf /etc/samba/smb.conf ~/.smb/smb.conf
Если для доступа к некоторым общим каталогам необходимы имя пользователя и пароль, отредактируйте файл ~/.smb/smbnetfs.auth
, включив одну или несколько записей, как эта:
~/.smb/smbnetfs.auth
auth "hostname" "имя_пользователя" "пароль"
Также возможно добавление записей для специфичных хостов, чтобы они были примонтированы smbnetfs, если это необходимо. Больше информации можно найти в ~/.smb/smbnetfs.conf
.
Когда вы закончите настройку, необходимо выполнить
$ chmod 600 ~/.smb/smbnetfs.*
В противном случае smbnetfs пожалуется: 'insecure config file permissions'.
Наконец, чтобы примонтировать сетевое окружение Samba в каталог по вашему выбору, выполните
$ smbnetfs точка_монтирования
Демон
Пакет в Arch Linux также поддерживает дополнительный "общесистемный" режим для smbnetfs. Чтобы его включить, вам необходимо выполнить указанные изменения в каталоге /etc/smbnetfs/.smb
.
Затем вы можете запустить и/или включить в автозагрузку демон smbnetfs
обычным способом. Общесистемной точкой монтирования является /mnt/smbnet/
.
autofs
Смотрите статью Autofs для получения информации об автомонтировщике ядра (kernel-based) Linux.
Настройка файлового менеджера
Nautilus, Nemo, Thunar и PCManFM
Чтобы получить доступ к ресурсам samba через Nautilus, Nemo, Thunar или PCManFM, установите пакет gvfs-smb, доступный в официальных репозиториях.
Нажмите Ctrl+l
и введите smb://имя_сервера/ресурс
в панель адреса, чтобы получить доступ к ресурсу.
Примонтированный ресурс, вероятно, будет представлен в файловой системе по пути /run/user/ваш_UID/gvfs
.
KDE
KDE имеет встроенную возможность просмотра ресурсов Samba, в этом случае нет необходимости в дополнительных пакетах. Однако, для графического интерфейса в Системных Настройках KDE установите пакет kdenetwork-filesharing из официальных репозиториев.
Если при использовании Dolphin вы получите ошибку "Time Out", необходимо раскомментировать и отредактировать эту строку в файле smb.conf:name resolve order = lmhosts bcast host wins
как показано на этой странице.
Другие графические окружения
Есть несколько полезных программ, но им могут требоваться пакеты, созданные для них. Это может быть сделано с помощью Arch package build system. Хорошая новость заключается в том, что они не нуждаются в особом окружении, устанавливаемом для их поддержки, так что они "тянут" за собой меньше пакетов.
- pyneighborhood доступен в официальных репозиториях
- Плагины LinNeighborhood, RUmba, xffm-samba для Xffm недоступен в официальных репозиториях или в AUR. Поскольку они не поддерживаются официально (или поддерживаются, но неофициально), они могут быть устаревшими и не работать в полной мере
Решение проблем
Проблемы подключения к Windows 7 - mount error(12): cannot allocate memory
Известная ошибка Windows 7 "mount error(12): cannot allocate memory" может быть исправлена установкой пары ключей в реестре системы Windows:
-
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache
(установить значение1
) -
HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size
(установить значение3
)
В качестве альтернативы можно запустить командную строку от имени Администратора и выполнить следующее:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "LargeSystemCache" /t REG_DWORD /d 1 /f reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v "Size" /t REG_DWORD /d 3 /f
Выполните одно из следующих действий, чтобы изменения вступили в силу:
- Перезагрузите Windows
- Перезапустите службу на сервере через services.msc
- Выполните в командной строке
net stop lanmanserver
иnet start lanmanserver
; после остановки служба может перезапуститься автоматически
Проблемы получения доступа к ресурсам, защищенным паролем, из Windows
При проблемах получения доступа к ресурсам, защищенным паролем, из Windows попробуйте добавить следующее в файл /etc/samba/smb.conf
:[1]
Обратите внимание, что это должно быть добавлено в локальный файл smb.conf, а не в файл сервера
[global] # lanman fix client lanman auth = yes client ntlmv2 auth = no
Диалоговое окно появляется с большой задержкой
У меня была проблема, связанная с тем, что диалоговое окно для ввода пароля появлялось с задержкой около 30 секунд, когда я пытался установить соединение из Windows XP/Windows 7. Когда я посмотрел файл error.log на сервере, я увидел:
[2009/11/11 06:20:12, 0] printing/print_cups.c:cups_connect(103) Unable to connect to CUPS server localhost:631 - Interrupted system call
Эта опция предотвращает поиск cups и файла /etc/printcap:
printing = bsd printcap name = /dev/null
Ошибка: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
Если вы являетесь домашним пользователем, используете samba исключительно для организации общего доступа к файлам с сервера или NAS и не заинтересованы в организации общего доступа к принтерам, вы можете исправить эту ошибку, добавив следующие строки в файл /etc/samba/smb.conf:
load printers = No printing = bsd printcap name = /dev/null disable spoolss = Yes
Перезапустите samba:
systemctl restart smbd
…проверьте ваши логи:
cat /var/log/samba/smbd.log
и больше ошибка не должна появляться.
Не удается предоставить общий доступ к папке
Проблема проявляется в том, что, когда вы пытаетесь предоставить общий доступ к папке через Dolphin (файловый менеджер), и вначале, вроде бы, все работает нормально, после перезапуска Dolphin иконка ресурса исчезла из папки, а в терминале (Konsole) вы видите следующий вывод:
‘net usershare’ returned error 255: net usershare: usershares are currently disabled
Для решения проблемы включите пользовательские общие ресурсы, как это описано в разделе #Создание ресурсов общего доступа от имени обычного пользователя.
И вы используете firewall (iptables), поскольку не доверяете вашей локальной (школа, университет, отель) сети. Это может происходить по следующей причине: когда smbclient просматривает локальную сеть, он посылает широковещательный запрос на udp-порт 137. Затем серверы сети отвечают вашему клиенту, но, поскольку исходный адрес ответа отличается от адреса назначения, который видел iptables при отправке запроса, iptables не признает ответ как "установленное соединение" или "относящийся к запросу", и, следовательно, пакет отбрасывается. Возможное решение - добавление:
iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns
в вашу конфигурацию iptables.
Вы не являетесь владельцем каталога
Попробуйте просто перезагрузить систему.
protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
Вероятно, клиент не имеет доступа к общим ресурсам. Удостоверьтесь, что IP-адрес клиента прописан в строке hosts allow =
файла /etc/samba/smb.conf
.
Подключение к серверу завершилось неудачей: (Error NT_STATUS_UNSUCCESSFUL)
Вероятно, вы указываете smbclient
неправильное имя сервера. Чтобы узнать его, запустите на сервере команду hostnamectl
и найдите строку "Transient hostname".
Смотрите также
Больше информации
- Samba Samba (German) (archlinux.de)
- Ускорение работы Samba