Samba в Fedora GNU/Linux

На самой настройке Samba, я не буду заострять внимание, ибо материалов на эту тему — тонны.
Я лишь расскажу, как правильно подготовить и установить samba на Fedora.
Ну и приведу мой махонький файлик smb.conf для примера.

Установка

Установка достаточно проста.
Ставим пакеты:

1
yum install samba

Настройка samba

Редактируем файл /etc/samba/smb.conf по вкусу, я использую простенький и понятный файл, такого вида:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[global]
    workgroup       = WORKGROUP
    server string   = Alexei Laptop
    netbios name    = ALEX-LAPTOP
   
    printcap name   = cups
    load printers   = yes
    printing        = cups
    cups options    = raw
    log file        = /var/log/samba/log.%m
    max log size    = 50
                       
    encrypt passwords   = yes
    map to guest    = bad user
    security        = user
    dns proxy       = no
    case sensitive  = auto
    dos charset     = 866
    unix charset    = UTF-8
    passdb backend  = tdbsam

    client ntlmv2 auth  = yes

[public]
    comment     = Public Stuff
    path        = /tmp/samba-shares
    force user      = nobody
    force group     = nobody
    writable        = yes
    guest ok        = yes
    create mask     = 0664
    directory mask  = 0777

[alex]
    comment     = Alexei stuff
    path        = /home/alex
    force user      = alex
    force group     = alex
    writable        = yes
    guest ok        = yes
    create mask     = 0644
    directory mask  = 0755

[media]
    comment     = Media stuff
    path        = /media
    force user      = alex
    force group     = alex
    writable        = yes
    guest ok        = yes
    create mask     = 0644
    directory mask  = 0755

Обрати, друг, внимание, что force user и force group должны соответствовать правам на данные каталоги. Это важно, без этого не будет работать.

SELinux

Самое вкусное! Из-за нежелания, лени или еще чего-то, многие отключают SELinux, но я умею его готовить, потому не отключаю 😉
По-умолчанию SELinux в Fedora почти ничего samba-серверу не разрешает, это в общем-то правильно, ибо не фига.
Но на то мы и тут, давайте разрешать…
Список возможных «переключателей» разрешений, можно посмотреть такой командой:

1
getsebool -a | grep -E "smb|samba"

В ответ мы получим, что-то вроде:

allow_smbd_anon_write --> off
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
use_samba_home_dirs --> off
virt_use_samba --> off

Ну и включаем логику, последовательно разрешаем то, что нам надо:

allow_smbd_anon_write разрешить запись гостями (не авторизованными пользователями)
allow_smbd_anon_write разрешить запись гостями (не авторизованными пользователями)
samba_create_home_dirs samba может создавать домашние каталоги (обычно это полезно в доменах)
samba_domain_controller разрешить использование в качестве контроллера домена
samba_enable_home_dirs разрешить шарить пользовательские каталоги
samba_export_all_ro разрешить любой экспорт на «только чтение»
samba_export_all_rw тоже самое для «читать-писать»
samba_run_unconfined разрешить samba запускать скрипты с контекстом unconfined (это неопределённый контекст SELinux)
samba_share_fusefs разрешить шарить примонтированные fuse’ом каталоги (т.е. например в /media смотнирован ntfs-диск, который надо бы расшарить, вот этого сделать не получится, пока данный переключатель выключен)
samba_share_nfs тоже самое, но для NFS-монтировок
use_samba_home_dirs разрешает использовать каталоги /home
virt_use_samba виртуалы могут использовать samba с хоста

Включаем командой setsebool -P имя=значение имя2=значение2. Т.е. например себе я включаю следущие «переключатели»:

1
setsebool -P virt_use_samba=1 use_samba_home_dirs=1 samba_share_fusefs=1 samba_export_all_rw=1 samba_export_all_ro=1 samba_enable_home_dirs=1 allow_smbd_anon_write=1

Внимание! Команда выполняется достаточно продолжительное время.

Запускаем демоны

Для Fedora 14 мы запускаем сами демоны так:

1
2
service smb start
service nmb start

А включаем запуск по-умолчанию при загрузке так:

1
2
chkconfig smb on
chkconfig nmb on

Теперь демоны будут стартовать вместе с системой.

Для Fedora 15 и выше «правильные» команды немного другие, запуск демонов:

1
2
systemctl start smb.service
systemctl start nmb.service

И включение демонов в автостарт, также, изменился:

1
2
systemctl enable smb.service
systemctl enable nmb.service

Если кто-то из них не запускается, то значит намудрил ты, дружище с настройками 🙂

Firewall

Поскольку iptables (firewall) включен в Fedora по-умолчанию, сразу после установки системы. Постольку мы и его отключать не будем, а будем воспитывать.
Правильный путь воспитания — это запустить одну из нижеследующих команд:
system-config-firewall — для GUI интерфейса, или
system-config-firewall-tui — прямо в консоле.

Интерфейс этих приложений прост до утрированности, нам надо включить (разрешить) два набора портов: для Samba (для самого сервера, чтобы клиенты могли подключаться извне) и Клиент Samba (для nmbd, чтобы компьютер видел другие компьютеры, а они, в свою очередь — видели его).

Включили? Проверяем:

1
grep -E "137|138|139|445" /etc/sysconfig/ip*tables

Мы должны получить в ответ, что-то вроде этого:

1
2
3
4
5
6
7
8
9
10
11
12
13
# grep -E "137|138|139|445" /etc/sysconfig/ip*tables
/etc/sysconfig/ip6tables:-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
/etc/sysconfig/ip6tables:-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
/etc/sysconfig/ip6tables:-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
/etc/sysconfig/ip6tables:-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
/etc/sysconfig/ip6tables:-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
/etc/sysconfig/ip6tables:-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
/etc/sysconfig/iptables:-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
/etc/sysconfig/iptables:-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
/etc/sysconfig/iptables:-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
/etc/sysconfig/iptables:-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
/etc/sysconfig/iptables:-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
/etc/sysconfig/iptables:-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

Тогда всё отлично, если не получили — то: а) что-то не то тыкнули, б) утилита s-c-f не работает.

NetworkManager

При частых отключениях/переключениях сетей nmbd отваливается. Это старый баг, который в федоре почему-то считают фичей.
Лечится достаточно просто, надо добавить файл /etc/NetworkManager/dispatcher.d/20-samba с таким вот содержимым:

1
2
3
4
5
6
7
#!/bin/sh

case "$2" in
    up|down)
        /bin/systemctl restart nmb.service || :
        ;;
esac

И сделать его исполняемым:

chmod +x /etc/NetworkManager/dispatcher.d/20-samba

Ну или если используется старая Fedora (или CentOS/ScientificLinux/RHEL), то команда в строке 5 должна быть такой:

1
/sbin/service nmb restart

ОБНОВЛЕНИЕ!
Нашел очень важную опцию для smb.conf, когда Linux-тачка является клиентом, а не сервером:

1
client ntlmv2 auth = yes

Без этой опции в /etc/samba/smb.conf наутилус и прочие GUI отказываются нормально ходить на samba-сервер Mac OS X, например.

Вот и всё, таким образом мы получили рабочий samba-сервер.

Комментарии приветствуются! Я могу пропустить что-то важное, но буду рад дополнить материал.

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