# Samba (Русский)

Ссылки по теме

- Контроллер домена Samba
- Интеграция Active Directory
- Samba/контроллер домена Active Directory
- SOGo
- NFS

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Samba. Дата последней синхронизации: 2014-10-08. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Samba - это реализация сетевого протокола SMB/CIFS. Эта программа облегчает организацию общего доступа к файлам и принтерам из систем Linux и Windows и является альтернативой NFS. Некоторые пользователи говорят, что Samba легко и очень просто настраивается. Однако, много новых пользователей сталкиваются с проблемами, связанными с ее сложностью и неинтуитивностью. Советуем строго придерживаться указаний, данных в этой статье.

## Настройка сервера

Для обеспечения общего доступа к файлам при помощи Samba установите пакет samba из официальных репозиториев.

Сервер Samba настраивается в файле `/etc/samba/smb.conf`. Скопируйте файл настроек по умолчанию в файл `/etc/samba/smb.conf`:

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

Совет: Запустите `testparm`, чтобы проверить правильность синтаксиса конфигурационного файла samba

### Создание ресурсов для общего доступа

Откройте файл `/etc/samba/smb.conf` и прокрутите текст вниз до секции Share Definitions. В конфигурации по умолчанию автоматически предоставляется общий доступ к домашним каталогам всех пользователей. Также по умолчанию он предоставляется для принтеров. Здесь есть несколько закомментированных примеров конфигурации. Больше информации о доступных опциях для ресурсов с общим доступом можно найти на странице руководства `man smb.conf`, которая также доступна в онлайн версии.

Со стороны Windows не забудьте изменить файл `smb.conf` для Windows Workgroup (в Windows по умолчанию: WORKGROUP).

### Запуск служб

Для организации базовых возможностей обмена файлами при помощи SMB запустите/включите службы `smbd.service` и `nmbd.service`. Для получения дополнительной информации смотрите страницы справочного руководства (man) smbd и nmbd.

Совет: Вместо того, чтобы запускать службу сразу после каждой загрузки системы, вы можете включить `smbd.socket`, благодаря чему она будет запускаться лишь при появлении первого входящего соединения. При этом не забудьте отключить службу `smbd.service`

### Создание ресурсов общего доступа от имени обычного пользователя

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

"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]`

  Смотрите страницу руководства `man mount.cifs` для получения информации.

Примечание:

- Воздержитесь от использования слэша `/` на конце. `//СЕРВЕР/имя_ресурса/` не будет работать
- Если примонтированный вами ресурс работает нестабильно или зависает (freeze), попробуйте включить другую версию протокола SMB, используя опцию `vers=`. Например, `vers=2.0` для Windows Vista.

#### Добавление ресурса в /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`.

Важно: Использование опций `uid` и `gid` может вызвать ошибки ввода-вывода в программах, пытающихся получить данные с сетевых устройств

    /etc/fstab

    //СЕРВЕР/ИМЯ_РЕСУРСА /mnt/точка_монтирования cifs credentials=/путь/к/полномочиям,comment=systemd.automount,uid=имя_пользователя,gid=группа_пользователя 0 0

Примечание: Пробелы в именах ресурсов должны быть заменены на `\040` (восьмеричный ASCII-код для пробелов). Например, `//СЕРВЕР/имя ресурса` должно быть заменено на `//СЕРВЕР/имя\040ресурса` в `/etc/fstab`

#### Монтирование пользователями

    /etc/fstab

    //СЕРВЕР/ИМЯ_РЕСУРСА /mnt/точка_монтирования cifs users,credentials=/путь/к/полномочиям,workgroup=рабочая_группа,ip=IP_сервера 0 0

Примечание: Необходимо писать users (во множественном числе). Для других типов файловых систем, обрабатываемых командой `mount`, эта опция обычно имеет вид user, без "s"

Это позволит пользователям монтировать ресурс, если точка монтирования находится в каталоге, владельцами которого они являются, например, в свою домашнюю директорию. Чтобы пользователи могли монтировать и размонтировать ресурсы Samba в точках монтирования, владельцами которых они не являются, используйте smbnetfs или дайте им необходимые привилегии с помощью sudo.

### Имена хостов WINS

Пакет smbclient предоставляет драйвер для использования имен хостов WINS. Чтобы его включить, добавьте “wins” в строку “hosts” файла /etc/nsswitch.conf.

### Автоматическое монтирование

Есть несколько способов легко просматривать ресурсы общего доступа:

#### smbnetfs

Примечание: для smbnetfs необходима целая (нетронутая?) (intact) установка сервера Samba. Смотрите выше, как это сделать

Для начала удостоверьтесь, что вам доступны все ресурсы, которые вам нужны для монтирования:

    $ 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`; после остановки служба может перезапуститься автоматически

Примечание: Поиск решения в интернете подскажет другое решение, рекомендующее пользователям добавить ключ, изменяющий размер "IRPStackSize". Это неправильное решение для устранения проблемы в Windows 7. Не применяйте его

Исходная статья.

### Проблемы получения доступа к ресурсам, защищенным паролем, из 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

Для решения проблемы включите пользовательские общие ресурсы, как это описано в разделе #Создание ресурсов общего доступа от имени обычного пользователя.

### "Просмотр" сети выдает ошибку "Не удалось получить список ресурсов с сервера" (Failed to retrieve share list from server)

И вы используете 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: An Introduction
- Официальный сайт Samba

## Больше информации

- Samba Samba (German) (archlinux.de)
- Ускорение работы Samba

Categories:

- Networking (Русский)
- Русский