Назад | Перейти на главную страницу

Как аутентифицировать учетные записи Linux в Active Directory и смонтировать общий ресурс Windows при входе в систему?

Я использую сервер Ubuntu 10.04.

[Edit] С тех пор я протестировал этот полный выпуск Сервер Ubuntu 10.04 (21 мая 2010 г.).

Я настроил свой Сервер Ubuntu 10.04 LTS находясь в сети Windows, для аутентификации логинов с использованием активного каталога, затем смонтируйте общий ресурс Windows, который будет служить там домашним каталогом.

Вот что я сделал, начиная с начальной установки Ubuntu.

  1. Загрузить и установить Сервер Ubuntu 10.04 LTS
  2. Получать обновления

    # sudo apt-get update && sudo apt-get upgrade

  3. Установите SSH-сервер (sshd)

    # sudo apt-get install openssh-server

    Некоторые утверждают, что вам следует «заблокировать sshd», отключив вход в систему с правами root. Я полагаю, если вы достаточно умны, чтобы взломать сеанс ssh для пароля root, вам, вероятно, не помешает добавление PermitRootLogin no в /etc/ssh/sshd_config файл. Если ваш параноик или нет, просто не убежден, отредактируйте файл или попробуйте следующее:

    # (grep PermitRootLogin /etc/ssh/sshd_config && sudo sed -ri 's/PermitRootLogin ).+/\1no/' /etc/ssh/sshd_conifg) || echo "PermitRootLogin not found. Add it manually."

  4. Установите необходимые пакеты

    # sudo apt-get install winbind samba smbfs smbclient ntp krb5-user

  5. Выполните базовую очистку сети в рамках подготовки к будущим конфигурациям пакетов.

    1. Определите свое доменное имя Windows, имя DNS-сервера и IP-адрес для активного сервера каталогов (для самбы). Для удобства я установил переменные среды для домена Windows и DNS-сервера. Для меня это было (мой IP-адрес AD был 192.168.20.11):

      # WINDOMAIN=mydomain.local && WINDNS=srv1.$WINDOMAIN && WINDNS_IP=192.168.20.11

      Если вы хотите выяснить, какой у вас домен и DNS-сервер (я был подрядчиком и не знал сети), ознакомьтесь с этим полезным ссылка.

    2. Нам нужно окрестить ящик Linux в новой сети, это делается путем редактирования файла хоста (замените DNS на полное доменное имя Windows DNS):
      # sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts

    3. Мы также должны сообщить будущим установленным службам, где они могут найти своего лидера: в некоторых сетях будут службы поиска имен netbios, но на всякий случай добавьте явную запись в свой /etc/hosts файл, в моей конфигурации я добавил запись в третьей (3) строке:
      # sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts

    4. Процессы аутентификации и обмена файлами для компьютеров с Windows и Linux должны согласовываться с часами. Сделайте это с помощью службы NTP, а в серверной версии Ubuntu служба NTP устанавливается и настраивается с помощью один (1) NTP sever. Добавьте свой перед Ubuntu (или замените его полностью). В сети, к которой я присоединился, был DNS-сервер, обслуживающий службу NTP.
      # sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
      Перезапустите демон NTP:
      # sudo /etc/init.d/ntp restart

  6. Конфигурация Kerberos.
    Следующие ниже инструкции не следует воспринимать буквально: значения для MYDOMAIN.LOCAL и srv1.mydomain.local необходимо заменить на то, что подходит для вашей сети, когда вы редактируете файлы, но обратите внимание, что там, где используется ПРОПИСНЫЙ РЕГИСТР, необходим ПРОПИСНЫЙ регистр.
    Если во время apt-get install Kerberos вы смогли правильно ответить на вопрос о "домене по умолчанию", тогда хорошо, иначе вам придется сделать следующее.

    1. Отредактируйте (ранее установленный выше) /etc/krb5.conf файл.

      1. Найти [libdefaults] раздел и измените пару ключ-значение:

        [libdefaults]
        default_realm = MYDOMAIN.LOCAL

      2. Добавьте следующее в [realms] раздел файла:

        MYDOMAIN.LOCAL = {
        kdc = srv1.mydomain.local
        admin_server = srv1.mydomain.local
        default_domain = MYDOMAIN.LOCAL
        }

      3. Добавьте следующее в [domain_realm] раздел файла:
        .mydomain.local = MYDOMAIN.LOCAL
        mydomain.local = MYDOMAIN.LOCAL

      4. Хороший тест на этом этапе - увидеть, выдаст ли ваш контроллер AD вам билет Kerberos. Это не обязательно, но у некоторых из вас может закружиться голова:
        # kinit <some_windows_domain_user>
        Затем, чтобы увидеть билет:
        # klist
        Вы увидите информацию о кеше билетов, истечении срока действия и продлении. Как только головокружение утихнет, вы можете выпустить / уничтожить билет:
        # kdestroy

  7. Настроить самбу.
    Согласно следующему: Бывают случаи, когда CIFS не может использоваться или лучше выбрать другую сетевую файловую систему. Если для дополнительной безопасности требуется поддержка аутентификации Kerberos (krb5 / SPNEGO), то вместо cifs необходимо использовать smbclient или smbfs Samba.
    Увы, cifs Поддержка в ядре для ubuntu 10.04 (на основе версии ядра 2.6.32.9) находится в версии 1.61, и, согласно документации ядра, экспериментальная реализация Kerberos существует с версии 1.54.
    Итак, вот вы где. Я понятия не имею, если cifs будет работать, поэтому я даю вам конфигурацию самбы:

    1. Заменить /etc/samba/smb.conf (помните, я работал с чистым дистрибутивом Ubuntu, поэтому я не беспокоился о том, чтобы что-нибудь сломать):
      [global]
      security = ads
      realm = MYDOMAIN.LOCAL
      password server = 192.168.20.11
      workgroup = MYDOMAIN
      idmap uid = 10000-20000
      idmap gid = 10000-20000
      winbind enum users = yes
      winbind enum groups = yes
      template homedir = /home/%U
      template shell = /bin/bash
      client use spnego = yes
      client ntlmv2 auth = yes
      encrypt passwords = yes
      winbind use default domain = yes
      restrict anonymous = 2

    2. Запускать и останавливать различные службы.

      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  8. Настройте аутентификацию.

    1. Отредактируйте /etc/nsswitch.conf. Мне удалось запустить следующую команду, чтобы получить то, что мне нужно:
      # sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
      Вот содержание моего /etc/nsswitch.conf файл:
      passwd: compat winbind
      group: compat winbind
      shadow: compat winbind
      hosts: files dns
      networks: files
      protocols: db files
      services: db files
      ethers: db files
      rpc: db files

    2. Запускать и останавливать различные службы.
      # sudo /etc/init.d/winbind stop
      # sudo service smbd restart
      # sudo /etc/init.d/winbind start

  9. Присоединяем компьютер к домену. Я не уверен, что это необходимо; особенно из-за опции безопасности в smb.conf файл (security = ads). Возможно, кто-то сможет это взвесить ...
    # sudo net ads join -U any_domain_user_account
    Вы можете получить ошибку DNS update failed!, но вы будете присоединены к домену. Если вы получаете сообщение об ошибке, что не можете найти сервер, ваши записи DNS необходимо изменить. Во время установки Ubuntu сервер имен часто указывает на ваш шлюз: большинство маршрутизаторов выполняют службу DNS. Лучшая практика для администрирования сервера Windows заключается в том, что ADC также должен запускать DNS. В моем случае мой /etc/resolve.conf выглядит так:
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    В 8.8.8.8 это Google DNS, довольно надежная резервная копия на случай, если Windows выйдет из строя.

На этом этапе я мог войти в систему (возможно, после перезагрузки), домашних каталогов не существовало, но я мог войти.

  1. Установка CIFS при входе в систему
    Этот следующий шаг стал для меня изюминкой; Я не хотел брать на себя ответственность за резервное копирование всех рабочих каталогов, а система, на которой должна была работать Ubuntu, вызывала подозрения с точки зрения надежности. Выполнив следующие действия, пользователи могут войти в систему и увидеть свой каталог пользователей Windows автоматически.

    1. Загрузите pam_mount модуль:
      # sudo apt-get install libpam-mount
      Я хотел, чтобы точка монтирования была в традиционном /home/<user> расположение: эта часть настраивается /etc/samba/smb.conf файл (template homedir = /home/%U). Но мне это нужно, чтобы детализировать общий ресурс и указать на их собственный каталог Windows. Это достигается путем редактирования /etc/security/pam_mount.conf.xml файл (который, несмотря на намерение, XML не человек читаемый):

    2. Добавьте следующее в /etc/security/pam_mount.conf.xml и изменить по своему усмотрению:
      <volume
      user="*"
      server="srv1.mydomain.local"
      path="UserShares"
      mountpoint="home"
      fstype="cifs"
      />

      <cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount>

      Из-за моей глупой точки монтирования мне также пришлось добавить эту строку:

      <umount>umount %(MNTPT)/%(USER)</umount>

      И чтобы каталоги пользователей (для точки монтирования) создавались автоматически, найдите строку и сделайте так:

      <mkmountpoint enable="1" remove="false" />

      В remove="false" bit очень важен: если он установлен в true, pam_mount.so пытается удалить точку монтирования каталога, что невозможно, если пользователь входил в систему несколько раз. В этом случае вы получите множество случайных монтировок в вашей системе.

      pam_mount.so по-прежнему не выполняет обещанного. В нынешнем виде крепления продолжают накапливаться, а домашние каталоги не создаются. Где-то между этим и предыдущим выпуском Beta 2 сервера 10.04 он работал. Однако я не могу воссоздать это.
      А пока при создании каталога я полагаюсь на pam_mkhomedir.so, и вставил линию непосредственно перед pam_mount.so линия для размещения.
      Так и не решил проблему множественного монтажа. Но пока pam_mount.so исправлено, вот что у меня в /etc/pam.d/common-session файл:

      session [default=1]     pam_permit.so  
      session requisite       pam_deny.so  
      session required        pam_permit.so  
      session required        pam_unix.so  
      session optional        pam_winbind.so  
      session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022  
      session optional        pam_mount.so
      

Это оно. У меня это сработало, и я надеюсь, что вы сочтете это полезным.

Были рассмотрены многочисленные ресурсы, чтобы я мог это понять. Вот краткий список (некоторые из этих ссылок указывают на мои собственные вопросы по теме):