Настройка файлового сервера Samba в корпоративной сети

  • Tutorial

Продолжая цикл статей про бюджетное резервное копирование данных в корпоративной сети, хочу предложить вашему вниманию, очередную статью по настройке файлового сервера Samba.
Для восстановления данных с сервера резервного копирования приходилось идти на сервер через веб-интерфейс и выкачивать оттуда необходимый архив с файлами, это удобно когда необходимая папка или файл не очень большие, но когда надо восстановить папку, объем которой превышает пару Гигабайт, например после крипто-вируса, это не так удобно. Для того чтобы нам получить прямой доступ к копиям данных, мы и поднимем сервер Samba на нашем бекап сервере.

Так же Samba нам понадобится для настройки резервного копирования MS SQL и Exchange на этот сервер, но об этом в следующих статьях. А пока, настроим сам сервер(в качестве которого мы используем уже настроенный сервер резервного копирования из статьи в шапке, все тот же CentOS6):
  • Устанавливаем необходимые пакеты
    yum install samba samba-client ntp acl krb5-workstation -y
    

  • Запускаем ntp клиент (время лучше всего получать с контроллера домена, чтобы оно сильно не расходилось с нашим сервером)
    chkconfig ntpd on
    service ntpd start
    

  • Подправим файл /etc/hosts, чтобы он имел примерно такой вид:
    # cat /etc/hosts
    127.0.0.1 localhost.localdomain localhost
    10.0.0.2 server-name.domain.local server-name
    

    где 10.0.0.2 IP-адрес нашего бекап-сервера
  • Настроим kerberos для добавления сервера в домен
    cat /etc/krb5.conf
    [logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
    default_realm = DOMAIN.LOCAL
    ticket_lifetime = 24h
    forwardable = yes
    
    [realms]
    DOMAIN.LOCAL = {
       default_domain = domain.local
       kdc = dc1.domain.local        #контроллер домена
       admin_server = dc1.domain.local
    }
    
    [domain_realm]
    domain.local = DOMAIN.LOCAL
    .domain.local = DOMAIN.LOCAL
    


  • Конфигурируем Samba. Приводим файл /etc/samba/smb.conf к такому виду:
    cat /etc/samba/smb.conf
    [global]
    
    load printers = no
    show add printer wizard = no
    printcap name = /dev/null
    disable spoolss = yes
    
    
    workgroup = DOMAIN
    password server = dc1.domain.local
    netbios name = server-name
    server string = Samba Server Version %v
    security = ads
    realm = DOMAIN.LOCAL
    domain master = no
    local master = no
    preferred master = no
    socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
    use sendfile = true
    
    idmap config *:backend = tdb
    idmap config *:range = 11000-20000
    idmap config DOMAIN:backend = rid
    idmap config DOMAIN:range = 100000-199000
    
    template shell = /sbin/nologin
    
    winbind enum users = yes
    winbind enum groups = yes
    winbind use default domain = no
    winbind nested groups = yes
    winbind refresh tickets = yes
    
    client use spnego = yes
    client ntlmv2 auth = yes
    encrypt passwords = yes
    restrict anonymous = 2
    
    log file = /var/log/samba/log.%m
    max log size = 50
    #log level = 3
    
    vfs objects = acl_xattr
    map acl inherit = Yes
    store dos attributes = Yes
    
    
    [disk1$]
    comment = disk1
    path = /media/disk1
    public = yes
    writable = yes
    
    


  • Настраиваем nsswitch, для того чтобы он мог использовать данные AD с помощью winbind-сервиса
    # cat /etc/nsswitch.conf
    ...
    passwd: files winbind
    shadow: files winbind
    group: files winbind
    ...
    

  • Запускаем сервисы
    chkconfig smb on
    chkconfig winbind on
    chkconfig nmb on
    service smb start
    service nmb start
    service winbind start
    

  • Теперь мы можем вводить наш сервер в домен
    # net ads join -U administrator
    administrator's password:
    Using short domain name -- DOMAIN
    Joined 'SERVER-NAME' to realm 'DOMAIN.LOCAL'
    

    Если все прошло удачно, то перезапускаем сервис winbind и проверяем подключение к домену
    #service winbind restart
    
    # wbinfo -t
    checking the trust secret for domain DOMAIN via RPC calls succeeded
    

  • Чтобы мы могли работать с правами из Windows нам необходимо перемонтировать нашу файловую систему с поддержкой ACL
    для этого идем в /etc/fstab и добавляем опцию acl для нашего диска
    # cat /etc/fstab
    ...
     /dev/VolGroup00/LogVol00 /media/disk1 ext4 defaults,acl 1 2
    ...
    

    перемонтируем раздел и раздаем диску права на корень, после чего мы сможем управлять правами папок прямо из Windows
    # mount -o remount /media/disk1
    # setfacl -m g:"DOMAIN\domain admins":rwx /media/disk1
    # setfacl -d -m g:"DOMAIN\domain admins":rwx /media/disk1
    

  • ну и конечно же не забываем про iptables
    cat /etc/sysconfig/iptables
    # Firewall configuration written by system-config-firewall
    # Manual customization of this file is not recommended.
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    # правило для urbackup
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 55414 -j ACCEPT
    #правила для samba
    -A INPUT -s 10.0.0.0/8 -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
    -A INPUT -s 10.0.0.0/8 -m state --state NEW -m udp -p udp --dport 445 -j ACCEPT
    -A INPUT -s 10.0.0.0/8 -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
    -A INPUT -s 10.0.0.0/8 -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
    -A INPUT -s 10.0.0.0/8 -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    


    # service iptables restart
    



Готово. Теперь мы можем работать с нашими резервными копиями из любимого файл-менеджера в Windows.
Share post

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 27

    0
    Бекап серверов на Linux предусмотрена? Или мне самому нужно будет указать какие папки забекапить?
      0
      Да. Про систему резервного копирования, подробно расписано в предыдущей статье. В данной же статье я рассказал как сделать удобный доступ к копиям из Windows.
        0
        Жду статью про бекап MS SQL Собираюсь на днях сделать. Интересно как это у Вас будет.
          0
          планирую следующей статьей.
            0
            Это легко и вполне интуитивно настраивается и автоматизируется средствами самого MSSQL — достаточно создать Maintenance Plan (или самому добавить таск в SQL Server Agent, если нужно/хочется выполнять кастомный T-SQL). В первом случае он даже будет за вас удалять старые бэкапы (с настроенным Maintenance Cleanup Task).
              0
              Это невозможно сделать с версией Express, а это как раз самое интересное.
                0
                С Express тоже есть варианты, но я не планировал описывать их. Теперь подумаю.
                  0
                  Кто вам это сказал?

                  support.microsoft.com/en-us/kb/2019698
                  www.fmsinc.com/free/NewTips/SQL/SQLServerExpressDatabase/Automated_Backup.asp
                    0
                    Я бы не назвал метод по первой ссылке интуитивным
                  0
                  Именно так, но не все об этом знают.
            +1
            Для kerberos в libdefaults желательно увеличить значение параметра clockskew.
            Для winbind я бы отключил все enum опции и добавил winbind offline logon = yes и winbind cache time побольше.
            Также добавил бы unix charset = UTF-8, а если самба четвертой версии, то max protocol = SMB2
              +1
              Это просто подарок судьбы. Как раз сегодня понадобилось настроить такую связку, зашел на хабр и пожалуста — через 30 минут все заработало. Да и к тому же редкий случай — пример на CentOS 6 (на котором у меня все сервисы), а не популярная нынче Ubunta. Правда параметры с enum и winbind пока не до конца понял, есть еще что почитать — вслепую такое точно еще не повторю. К сожалению с мануалами хорошими по samba, kerberos (и lvm до кучи) не встречался. Либо просто их не осознал еще.
                0
                Вопрос: если придти на Вашу самбу из машины ВНЕ домена. Можно войти по имени вида: admin pass?

                Не могу никак забороть, аналогичные настройки samba (ну или почти аналогичные), и приходится входить так: DOMAIN\admin pass или даже так: admin@domain, что прямо таки злит! Хочу просто входить как admin pass
                  0
                  winbind use default domain = no — без разницы его значение. :(

                  winbind refresh tickets = yes — тоже странный параметр. Точнее, он тоже просто не работает похоже…
                    0
                    Попробуйте всё же в конфиге самбы такие параметры:
                     auth methods = winbind
                     realm = DOMAIN.LOCAL
                     winbind use default domain = yes
                    

                    У меня работает (вводят только sAMAccountName — имя входа пользователя и пароль). Остальное не так уж и сильно отличается от топика.

                    P.S.
                    winbind stop
                    nmbd restart
                    winbind start
                    Ну или вообще перезагрузить сервер :)
                      0
                      Штука вот какая: случайно выяснил, что если зайти не важно откуда linux или windows по:

                      netbios name — то всё похоже работает как надо. Даже с winbind use default domain = no (т.е. умолчательной настройкой).

                      Если же войти по dns имени: то ни в какую, и никак…

                      Есть какая-либо магия в имени входа?
                        0
                        В общем не устойчивое поведение… Не могу понять. Не помогли настройки.

                        [global]
                        netbios name = admin2
                        workgroup = COMPANY
                        security = ADS
                        realm = COMPANY.RU
                        dedicated keytab file = /etc/krb5.keytab
                        kerberos method = secrets and keytab
                        auth methods = winbind

                        idmap config *:backend = tdb
                        idmap config *:range = 2000-9999
                        idmap config COMPANY:backend = ad
                        idmap config COMPANY:schema_mode = rfc2307
                        idmap config COMPANY:range = 10000-20000

                        winbind nss info = rfc2307
                        winbind trusted domains only = no
                        winbind use default domain = yes
                        winbind enum users = yes
                        winbind enum groups = yes
                        winbind refresh tickets = Yes

                        [test]
                        path = /tmp/test
                        map to guest = bad password
                        read only = no
                          0
                          Доброй ночи. Завтра постараюсь проверить такое поведение сервера. Отпишусь по результату.
                            0
                            Не удержался и проверил сейчас. Работает по любому имени, как netbios, так и полному, с доменом, а так же по IP адресу. Попробуйте все же перепроверить настройки и перезагрузить сервер. Так же, если используете SELinux, его надо настроить. Единственное но, я заходил из домена(Windows 7).
                              0
                              Благодарю за интерес к вопросу!

                              Единственное но, я заходил из домена(Windows 7).


                              Я применяю samba4 как единственный PDC master в продуктивной инсталляции (то есть вполне серьёзная продуктивная инсталляция). Домен один.

                              Я применяю samba4 в качестве файловых серверов.

                              Если входить на samba4 файловый сервер, из ЭВМ которые находятся в домене (Windows, Linux, MacOS) — всё хорошо, работает SSO. Если заходить на samba4 файловый сервер с узлов (Windows, Linux, MacOS), которые находятся в другом, старом, продуктивном домене (samba3), приходится входить как: admin@domain. Или если входить с узла который вобще не состоит ни в каких доменах — поведение аналогичное (только: admin@domain). :( Писал в список рассылки — не помогли.

                              Будет здорово, если проверите войти с узла, который точно ни в каком домене не участвует.
                        0
                        winbind use default domain = no — без разницы его значение. :(

                        Этот параметр пригодится когда домен в лесу не один, как в моем случае.
                      0
                      Для особо ленивых есть даже интерфейс по настройке samba.

                      yum install system-config-firewall-tui samba-winbind krb5-workstation pam_krb5

                      После

                      authconfig-tui

                      и там уже делаем настройки Samba и KRB

                        0
                        А почему политика таблицы iptables INPUT ACCEPT?
                        Вроде не соответствует стандарту безопасности.
                        Ну и кстати, раз для INPUT политика по умолчанию ACCEPT, то из всех правил для таблицы INPUT можно было оставить только последнее:
                        -A INPUT -j REJECT --reject-with icmp-host-prohibited

                        — остальные все равно пройдут
                          0
                          пардон, не подумал, что как раз последняя строчка и превращает политику ACCEPT в политику REJECT
                          0
                          Тут захотел сделать аналогичное решение, но без внесения информации в /etc/hosts, так как настройки по DHCP применяются. По логике вроде как надо прописать в /etc/sysconfig/network-scripts/ifcfg-eth0 параметр DHCP_HOSTNAME, чтоб внести сразу сведения в DNS записи Windows Server DNS, и в nsswitch.conf поменять порядок на hosts: dns files. Но при выполнении net ads join выскакивает ошибка, что DNS запись не может быть обновлена, да и резолв имени хоста не проходит. Как решать это, в случае динамической настройки IP адресов?
                            0
                            резолв имени хоста не проходит
                            для этого мы и прописываем информацию в /etc/hosts в случае статики. Вам надо копать в эту сторону, как только ваш сервер удачно преобразует имя которое вы ему дали в его IP, у вас все заработает. Сам я не пробовал брать имена по DHCP, поэтому данного опыта не имею.
                              0
                              Да имя уже прописано и после этого все заработало. Теперь задача именно для DHCP сделать. Данный компьютер будет пропадать из сети на долгое время, и теоретически его IP адрес может достаться кому то другому. Да, про резервацию знаю, но хотелось сделать «правильно». Как я понимаю nsswitch для этого и придумали. В его описании указано, что технология резолва по файлу /etc/hosts признана устаревшей. Только вот большинство мануалов предлагают пока такой сценарий

                          Only users with full accounts can post comments. Log in, please.