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

18

Я использую Ubuntu 10.04 Server.

Джейми
источник
Это должно было быть опубликовано как ответ на вопрос. Пожалуйста, измените это так, чтобы это был вопрос, и переместите то, что вы опубликовали выше, чтобы ответить на него. Из часто задаваемых вопросов : «Также вполне нормально задавать и отвечать на свой собственный вопрос, но притворяться, что вы находитесь в опасности: сформулируйте это в форме вопроса».
Приостановлено до дальнейшего уведомления.

Ответы:

27

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

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

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

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

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

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

    # sudo apt-get install openssh-server

    Некоторые утверждают, что вы должны "заблокировать sshd вниз", отключив вход в систему root. Я полагаю , что, если ваш достаточно умны , чтобы взломать SSH сессии для корневого пароля, вы , вероятно , не будет сорвана путем добавления 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-адрес для активного сервера каталогов (для samba). Для удобства я установил переменные среды для домена Windows и DNS-сервера. Для меня это было (мой AD IP-адрес был 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. Добавьте свой перед 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нужно заменить на то, что подходит для вашей сети, когда вы редактируете файлы, но учтите, что при использовании UPPERCASE используется UPPERCASE .
    Если во время apt-get installKerberos у вас было понимание, как правильно ответить на вопрос «домен по умолчанию», тогда это хорошо для вас, в противном случае вам придется сделать следующее.

    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будет ли работать, поэтому я даю вам конфигурацию Samba:

    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 Server - это то, что ADC должен также запускать DNS. В моем случае мой /etc/resolve.confвыглядит следующим образом : является Google DNS, достаточно надежное резервное копирование в случае , если окна один идет вниз.
    nameserver 192.168.20.11
    nameserver 8.8.8.8
    8.8.8.8

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

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

    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"Бит очень важен: если он установлен истинно, pam_mount.soпытается удалить каталог точки , которые он не может делать , если пользователь вошел в систему несколько раз монтировать. В этом случае вы получите множество случайных монтировок в вашей системе.

      pam_mount.soвсе еще не совсем доставить, как обещали. В текущем виде монтирования продолжают накапливаться, а домашние каталоги не создаются. Где-то между этим и предыдущим выпуском 10.04 сервера Beta 2 он работал. Я не могу воссоздать это все же.
      В то же время я полагаюсь на создание каталога 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
      

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

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

Jamie
источник
1
Отключение удаленного входа root ssh является обязательным. Атаки грубой силой / словарём иногда успешны Если root скомпрометирован, попрощайтесь со всем, чему вы доверяли на машине.
JR Lawhorne
1
Ubuntu не активирует учетную запись root, хотя ... все sudod, или я что-то упустил?
Джейми
«все есть sudo» - и это лучше ... каким образом? (Если какая-либо учетная запись пользователя, имеющая право на sudo, скомпрометирована, это в основном одно и то же. И в принципе одинаково просто [или нет] взломать учетные записи root или пользователей. Лучше всего настроить вход в систему только с помощью ключа доступа и отключить все пароли. на основе логинов.)
Курт Пфайфл
Я понимаю это, но подумайте: «Лучше всего настроить логин только по паб-ключу» , что полностью противоречит цели этого поста.
Джейми
1
Вы также можете использовать учетную запись sudoed или root и изменить имя пользователя root, чтобы он не был root linuxers.org/article/fun-linux-changing-root-user-name-linux
PsychoData