Samba (домашняя страница) предоставляет собой службу доступа к файлам и принтерам для различных клиентов Microsoft Windows и может интегрироваться с операционной системой Windows Server, либо как основной контроллер домена (PDC), либо как член домена. Она также может быть частью домена Active Directory. По сути - та самая всеми любимая служба для доступа к “расшареным” папкам и принтерам. Несмотря на наличие некоторых других вариантов, этот сервис остается весьма популярным и востребованным в локальных сетях. Поэтому поднятие этой службы на Linux-машине - не редкость.

Простейшая настройка SAMBA заключается в конфигурировании сервиса в файле smb.conf (/etc/samba/smb.conf в centos или ubuntu). В данном примере мы настроим одну расшаренную папку и принтер в SAMBA.

Пример простой настройки SAMBA

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
 [global]
    null passwords = yes #разрешаем вход без пароля
    encrypt passwords = yes
    realm = host.workgroup #указываем имя хоста и рабочей группы
    public = yes #виден в сети
    winbind use default domain = false
    passdb backend = tdbsam
    template shell = /bin/false
    netbios name = host #видимое имя
    cups options = raw
    server string = smitty
    default = host.workgroup
    workgroup = workgroup #имя рабочей группы
    os level = 20
    security = share
 
 [printers] #[Принтер](/)
    comment = All Printers #комментарий, не обязательный параметр, но лучше все-таки указывать
    printable = yes #разрешить печать
    path = /var/spool/samba #
    guest ok = yes #разрешить гостевой доступ
    browseable = yes #виден в сети
 
 [share] #Шара
    comment = Reports #комментарий, не обязательный параметр, но лучше все-таки указывать
    path = /home/share #расшаренная папка
    writeable = yes #разрешаем запись
    browseable = yes #виден в сети
    guest only = yes #разрешить только гостевой доступ, пароль не требуется
    create mask = 0775
    directory mask = 0775

Пример настройки SAMBA на Ubuntu Server 12.04 для использования в домашней или локальной сети без аутентификации

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 [global]
         netbios name = router
         read raw = no
         write raw = no
         socket options = TCP_NODELAY
         debug level = 2
         os level = 20
         auto services = global
         socket address = 10.0.0.1
         security = user
         map to guest = bad user
         guest account = nobody
         wins support = true
 
 [share]
         comment = RAID
         path = /mnt
         public =  yes
         guest_ok = yes
         writeable = yes
         browseable = yes

Socket address поставить свой, как и название шары (тут share). Debug можно уменьшить, 2 уровень стоит для отладки

Настройка iptables для SAMBA

Настройка для сервера:

1
2
3
 /sbin/iptables -A INPUT -i eth0 -m pkttype --pkt-type broadcast -j ACCEPT
 /sbin/iptables -A INPUT -i eth0 -p tcp -m tcp -m multiport --dports 139,445 -j ACCEPT
 /sbin/iptables -A INPUT -i eth0 -p udp -m udp -m multiport --dports 137,138 -j ACCEPT

Ошибки SAMBA

1
* WARNING: The security=share option is deprecated

Такое больше не поддерживается, используете user и т.д.

Ошибка монтирования windows папок с кодом 22

Пытаемся монтировать шару:

1
 mount -t cifs //COMPUTER/test -o username=user,password=pass /media/win/

Получаем:

1
2
3
4
5
6
 mount: wrong fs type, bad option, bad superblock on //atr-it4/test,
        missing codepage or helper program, or other error
        (for several filesystems (e.g. nfs, cifs) you might
        need a /sbin/mount.<type> helper program)
        In some cases useful info is found in syslog - try
        dmesg | tail  or so

В dmasg видим:

1
 CIFS VFS: cifs_mount failed w/return code = -22

Исправление:

1
 yum install cifs-utils

Unable to find the Domain Master Browser

1
2
3
 find_domain_master_name_query_fail:
 Unable to find the Domain Master Browser name WORKGROUP<1b> for the workgroup WORKGROUP.
 Unable to sync browse lists in this workgroup.

Добавьте в [global] опцию

1
 workgroup = DOMAIN.LOCAL