The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Авторизация для FreeBSD на основе доменных аккаунтов Win2K (auth freebsd win domain samba pam)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: auth, freebsd, win, domain, samba, pam,  (найти похожие документы)
From: Чижиков Владимир <skif at owe.com.ua> Newsgroups: email Date: Mon, 18 Oct 2004 14:31:37 +0000 (UTC) Subject: Авторизация для FreeBSD на основе доменных аккаунтов Win2K Авторизация на FreeBSD на основе доменных аккаунтов Win2K или что такое winbindd + pam В свое время у меня остро стал вопрос перехода моих пользователей с ОС Windows на любую другую операционную систему, лишь бы она была бесплатной. Ну все думаю понимают что такое лицензионные игры и с чем их едят. Но это отступление. Лирическое. И так стал вопрос. Пользователей вроде бы и не очень много - немногим более полусотни, но ведь учетки надо как-то вести, давать людям пароли и прочее. Так как я являюсь приверженцем ОС FreeBSD, то выбор стал естественно очевиден. Оставалось одно - как все сие центр ализовать. Если бы не наличие специализированного софта, как-то 1С, Клиент-Банк под Windows и ряда других прог, то все бы закончилось тихим переездом на FreeBSD с установкой сопутствующего софта и установкой YP/NIS-домена. Но виндовые сервера убрать ну никак не получалось, посему было принято соломоново решение, оставить два терминальных сервера(основной и резервный) под Win2k Server, а пользователей пересадить на фрю и все остальное для своей работы они должны брат с терми нала - в финансовом плане экономия по подсчетам выходила в районе 20-30 тысяч вечно зеленых. В общем все были за. Смущал одно. И только меня. КАК ВСЕМ ЭТИМ РУЛИТЬ. Кто сопровождал несколько доменов одновременно - тот поймет. Да и не заставишь милых бухгалтерш запоминать сразу два пароля. Да они на 1С запомнить никак не могут, а тут только для входа в систему. Потыкавшись по форумам, полистав документацию, пришлось сразу отмести вариант с LDAP, хотя он сильно подкупал, но в случае моего (вашего) ухода и прихода очередного студента на место админа все сие упадет самое позднее через месяц, а мы должны построить что-то надежное и рабочее без особого присмотра сильными мира сего. И так выбор сделан - Samba, со всеми ее плюсами и минусами. А так же с поддержкой winbind. Ну все, предисловие мы закончили, теперь начнем описывать сеть. И так наши исходные данные: - имеется 2 терминальных сервера, - имеется ~50 хостов, которым суждено стать честными рабочими станциями на FreeBSD, - сеть с адресным пространством 192.168.10.0/24, 192.168.20.0/24, 192.168.100.0/24, - терминальные сервера имеют адреса 192.168.10.252 и 192.168.10.254, на последнем установлен сервер WINS, - рабочая станция, которую мы будем перелопачивать имеет адрес 192.168.10.1 и именуется она, ну пусть, server, - имя домена OWE (здесь подставите свое, а мне проще это - привык) И так исходные данные есть. Так что приступаем. Для этого нам понадобиться samba третьей версии (можно и второй, но так уж сложилось, что больше всего я использую именно третью, в ней просто есть много вкусностей, в данном конкретном случае это была samba-3.0.7,1) и FreeBSD 5.2.1 - вы можете, в принципе, использовать и более ранние/поздние версии, но все сие я творил именно на этой версии ОС, а когда печатал статью, то на машине именно с этой версией, а точнее: root@server #uname -a FreeBSD server.owe 5.2.1-RELEASE-p10 FreeBSD 5.2.1-RELEASE-p10 #3: Thu Oct 14 09:54:40 EEST 2004 [email protected]:/usr/src/sys/i386/compile/SKIF i386 root@server # Теперь следующий наш шаг - установка самбы. Я двумя руками за порты. ИМХО - тут много полезного, а пакаджи хоть и ставятся быстро, но очень ограничены и слишком привязаны к тому софту, что стоит у человека ДЕЛАВШЕГО пакадж. В общем, идем в порты, у меня это(): root@server # cd /usr/ports/net/samba3/ root@server # make После этого у нас появиться подобный экран: Options for samba 3.0.7,1 [X] LDAP With LDAP support [X] ADS With Active Directory support [X] CUPS With CUPS printing support [X] WINBIND With WinBIND support [ ] ACL_SUPPORT With ACL support [X] SYSLOG With Syslog support [ ] QUOTAS With Quota support [X] UTMP With UTMP support [X] MSDFS With MSDFS support [ ] SAM_XML With XML smbpasswd backend [ ] SAM_MYSQL With MYSQL smbpasswd backend [ ] SAM_PGSQL With PostgreSQL smbpasswd backend [ ] SAM_OLD_LDAP With Samba2.x LDAP smbpasswd backend [X] PAM_SMBPASS With SMB PAM module [X] POPT With installed POPT library [ OK ] Cancel В принципе можно все это сделать руками в Makefile, но зачем себе усложнять жизнь? Да, если вы что-то неправильно отконфигурировали и хотите вернуться к этому окошку - make config вернет его вам. И так, в этом окне отмечены Х поля по умолчанию, и те, которые я отмечал. Вы можете поэкспериментировать на досуге, ну а пока мы продолжим. И так после make выполняем, если она отработала без проблем, make install, если нет, то ищем причину и устраняем. root@server # make install && make clean && rehash В моем примере видно, что я сделал сразу make install && make clean && rehash - то есть в случае удачного выполнения make install - установки скомпилированных make исходников - будут "зачищены" следы компиляции и обновлены установки шела. Для самбы это не актуально, но здесь, увы, моя привычка. Полезная. Ну вот. Теперь мы все установили. Осталось только настроить все это добро. А делать мы будем все это руками. Для простоты ничего заумного делать такого не будем, для объективности и понятливости использовать SWAT тоже не будем. Все строчки, не тронутые нами остаются по умолчанию, как есть. Нам нужна пока минимально рабочая система. Все изыски и извращения потом. И так приступаем. Заходим /usr/local/etc/, где у нас лежит конфиг по умолчанию samba, и делаем его копию, с нужным нам расширением: root@server # cd /usr/local/etc/ root@server # cp smb.conf.default smb.conf Вот теперь у нас есть конфигурационный файл. Начинаем его редактировать. [global] workgroup = OWE server string = Samba Server security = DOMAIN hosts allow = 192.168.10. 192.168.20. 192.168.100. 127. netbios name = SERVER load printers = yes password server = * И так первая строчка - workgroup = OWE - это имя нашего домена, вторая server string = Samba Server, строка приветствия сервера, точнее, что он будет писать при просмотре в сетевом окружении Тип безопасности security = DOMAIN это третья строка, здесь, в принципе можно использовать и ADS, но я использовал именно DOMAIN, ADS больше подойдет для сетей с Win2k3 серверами. hosts allow = 192.168.10. 192.168.20. 192.168.100. 127. - строка описывает, каким хостам позволено обращаться к серверу. В исходных данных мы указали, что адресное пространство сети у нас 192.168.10.0/24 - оно соответствует 192.168.10., все остальное можно убрать, кроме 127. - это обозначение сети 127.0.0.0/8 Тобишь, сети loopback интерфейса, того самого, которому принадлежит адрес 127.0.0.1, впрочем, как и все другие из этой сети. load printers = yes - подключать или нет принтера, я думаю, стоит, хотя бы потому , что они есть. Один из самых интересных в этом списке параметров, параметр password server = * - именно им мы указываем, какой сервер будет проверять пароли. У меня их два и в случае выхода одного из строя, второй должен продолжать авторизировать пользователей, именно по этому стоит *, а не имя сервера. encrypt passwords = yes winbind uid = 10000-20000 winbind gid = 10000-20000 template homedir = /smb/samba/%U template shell = /bin/tcsh winbind separator = + winbind enum users = yes winbind enum groups = yes winbind use default domain = yes nt acl support = yes Все, теперь мы подошли к заключительному этапу конфигурирования самбы. encrypt passwords = yes - строка, определяющая, в каком виде будут гулять по сети пароли winbind uid = 10000-20000 - выделяем winbind диапазон UID для пользователей Windows winbind gid = 10000-20000 - выделяем winbind диапазон GID для все тех же пользователей template homedir = /smb/samba/%U - указываем временную домашнюю папку(если реального пути не будет существовать, то по умолчанию, человека привяжет к корню и будет много ругани) template shell = /bin/tcsh - временный шел. На это стоит обратить особое внимание, многие доки и многие форумы, где я поднимал этот вопрос, мне говорили, что нужно ставить нечто /bin/nologin, нет, ни в коем случае, если пользователь должен РАБОТАТЬ на этой машине локально. Я предпочитаю tcsh, посему указан именно он. winbind separator = + - ну, а это просто разделитель, которым имя домена будет отделено от пользователя. Стоит обратить внимание, что домен стоит ПЕРЕД именем, а не после, как это делается в Windows winbind enum users = yes, winbind enum groups = yes - эти две строки просто ведут учет пользователей и групп -winbind use default domain = yes , а эта строка указывает, что необходимо использовать по умолчанию приставку домена, к любому пользователю. Здесь необходимо пояснить. Когда вы захотите авторизоваться на машине с установленным таким параметром, все что от вас потребуется, это написать имя пользователя и ввести пароль, а вот если он не установлен, то сначала потребуется написать имя домена, разделитель и имя пользователя (например, OWE+skif) и лишь потом пароль. Вот такие беды от этого параметра. nt acl support = yes - ну и поддержка acl от Windows Все. Основные параметры мы настроили. Ну, для развлечения сделаем простенькую шару. [C] comment = Skif test share path = /smb/C public = yes writable = yes printable = no create mask = 0775 force create mode = 0664 force directory mode = 0755 В принципе, ничего сложного в ней нет. Мы создали шару, доступную всем пользователям, как для записи, так и для чтения под именем С. Вот теперь мы действительно закончили настройку samba. Но для авторизации этого мало. Для того, что бы авторизироваться в системе, нужно еще эту самую систему научить опознавать пароли Windows, этого детища Microsoft. В этом нам поможет winbind, если помните, именно его мы вкомпиливали на этапе сборки порта. Вот он нам и пригодился. И так, первым делом нам необходимо создать файл /etc/nsswitch.conf . По умолчанию его нет в системе, вот мы его создадим и впишем туда следующие строки: root@server # touch /etc/nsswitch.conf root@server # ee /etc/nsswitch.conf passwd: files winbind group: files winbind Этот файл объяснит системе, откуда брать пароли и группы пользователей, а именно от winbind Так, и этот этап мы прошли. Следующим шагом будет регистрация рабочей станции в домене. Делается это при помощи утилиты net root@server #net ads join OWE -U skif или root@server #net join OWE -U skif Где OWE - имя моего домена, а skif - моя учетная запись с правами администратора в домене Windows. У меня при ее выполнении она ругнулась на ADS, но это была вина не samba, а контроллера домена, но, не смотря на это, включила в домен. Ради интереса можно зайти на Windows машине и полюбоваться делами рук своих. Но это только очередной шаг. И так идем дальше, нам нужно проверить, что все работает как часы, и в этом нам поможет утилита wbinfo root@server #wbinfo Usage: wbinfo [OPTION...] -u, --domain-users Lists all domain users -g, --domain-groups Lists all domain groups -N, --WINS-by-name=NETBIOS-NAME Converts NetBIOS name to IP -I, --WINS-by-ip=IP Converts IP address to NetBIOS name -n, --name-to-sid=NAME Converts name to sid -s, --sid-to-name=SID Converts sid to name -U, --uid-to-sid=UID Converts uid to sid -G, --gid-to-sid=GID Converts gid to sid -S, --sid-to-uid=SID Converts sid to uid -Y, --sid-to-gid=SID Converts sid to gid -A, --allocate-rid Get a new RID out of idmap -c, --create-user=name Create a local user account -x, --delete-user=name Delete a local user account -C, --create-group=name Create a local group -X, --delete-group=name Delete a local group -o, --add-to-group=user:group Add user to group -O, --del-from-group=user:group Remove user from group -t, --check-secret Check shared secret -m, --trusted-domains List trusted domains --sequence Show sequence numbers of all domains -D, --domain-info=STRING Show most of the info we have about the domain -r, --user-groups=USER Get user groups --user-sids=SID Get user group sids for user SID -a, --authenticate=user%password authenticate user --set-auth-user=user%password Store user and password used by winbindd (root only) --get-auth-user Retrieve user and password used by winbindd (root only) -p, --ping Ping winbindd to see if it is alive --domain=domain Define to the domain to restrict operation Help options: -?, --help Show this help message --usage Display brief usage message Common samba options: -V, --version Print version root@server # Я привожу здесь список опций не из садомазахизма, а хотя бы потому, что не многие туда заглядывают, это раз, ну а вторая причина - ряд из них нам потребуется, поэтому имейте представление о том, какой их формат Нам нужно установить параметры просмотра информации и просмотреть её же - верно ли отрабатываются пароли, ну и список групп, например: root@server #wbinfo --set-auth-user=OWE+skif%password Надеюсь понятно почему написано OWE+skif? - я явно задал, с правами какого именно пользователя будут проводиться следующие операции, ну а символ % отделил имя от пароля. root@server #wbinfo -t checking the trust secret via RPC calls succeeded root@server #wbinfo -g BUILTIN+System Operators BUILTIN+Replicators BUILTIN+Guests BUILTIN+Power Users BUILTIN+Print Operators BUILTIN+Administrators BUILTIN+Account Operators BUILTIN+Backup Operators BUILTIN+Users Администраторы домена Пользователи домена Гости домена Компьютеры домена Контроллеры домена Издатели сертификатов Администраторы схемы Администраторы предприятия Владельцы-создатели групповой политики DnsUpdateProxy OWE BUHGALTERIA TerminalGroupUsers LOG ....... Ну вот, все работает просто чудесно, ну для успокоения своей совести, выполним команду id, сначала над root, что бы посмотреть, что она выводит, а потом, над любым пользователем домена: root@server #id root uid=0(root) gid=0(wheel) groups=0(wheel), 5(operator) root@server #id swarog uid=10001(swarog) gid=10010(Пользователи домена) groups=10010(Пользователи домена), 0(wheel), 10009(Администраторы домена), 10015(Администраторы схемы), 10016(Администраторы предприятия), 10017(Владельцы-создатели групповой политики), 10019(OWE) root@server # Все, теперь у нас система все прекрассно понимает. Но все же не авторизирует пользователей. Отбрасывает, а нам этого не нужно. Что ж, найдем следующий камень преткновения, а именно - модули PAM, точнее не камень преткновения, а мощнейшее оружие в наших руках ибо при их помощи можна реализовать практически любую схему авторизации. Что ж, приступим. Для начала необходимо сделать бекап всей папки /etc/pam.d с модулями авторизации, и только потом их курочить. Первый, который мы будем курочить - login - ведь для начала, нам нужно хотя бы локально за логиниться. Вот и приступим. Только ОСТОРОЖНО, у вас должна быть открыта как МИНИМУМ одна консоль с правами root, что бы замести следы неудачных попыток. И так пишем в /etc/pam.d/login следующее, все предыдущее закомментируем: root@server # ee /etc/pam.d/login # auth auth required pam_nologin.so no_warm auth sufficient pam_winbind.so auth sufficient pam_opie.so no_warm no_fake_prompts auth requisite pam_opieaccess.so no_warm allow_local auth required pam_unix.so no_warm try_first_pass # account account sufficient pam_winbind.so account required pam_unix.so # session session required pam_permit.so Сохраняем. И открываем другую консоль. Логин, пароль. Все идет нормально. Значит тут все хорошо. Но вот если вы запустите pwd, то обнаружите себя не в /smb/samba/_ИМЯ_ПОЛЬЗОВАТЕЛЯ_ , а в корне. Что ж, нам нехватает двух вещей: root@server #lf / | grep . .cshrc .profile Точнее двух файлов и каталога пользователя. Что ж, создаем каталог, кидаем туда эти два файла, и О ЧУДО мы вошли в систему, и в своей папке. И так все работает. Идем дальше. Нам нужно, что бы ВСЕ так работало - меняем содержимое всех фалов в папке /etc/pam.d на подобное. Стартуем kdm, и первое, что мы видим - это список ВСЕХ пользователей домена и локальной машины. Что ж, выбираем доменного пользователя, входим, настраиваем профиль, работаем. Все. Теперь еще немного поясняний. Измения в модулях pam не потребуют перезагрузки машины. Так что бутать ее лишний раз не нужно. Файлы считываются на лету. В случае, если авторизироваться не удалось, верните все в исходное состояние на другой консоли. В принципе предложеный вариант файла позволяет логиниться не только пользователям домена, но и тому же root, то есть - к примеру, если пользователь не существует в домене, он будет искаться в локальной базе пользователей и если все нормально авторизироваться. Мы сделали все, что нам нужно. И следуя доброй традиции, идем к начальству и выбиваем себе как минимум премию, а как максимум, намекая об экономии 20-30 тысяч американских тугриков, повышение зарплаты. И теперь уже точно все. P.S.: Обязательно создайте папку пользователя, ибо в противном случае, его будет кидать в корень, а там может создавать файлы только root, хотя иксы и стартуют, но с морем ошибок. Но я думаю, несложно будет написать простенький скрипт, что бы при входе, эта папка создавалась. У меня самого - руки за полгода так и не дошли написать - лень, да и мне проще создать одну папку и два файла. Пользователи у меня жестко привязаны к машине. Впрочем, как нибудь из эксперимента допишу. Замечания: Все эти манипуляции Вы выполняете на свой страх и риск. И ответственность за не стабильную работу, потерю данных или краха системы не сете вы и только вы. У меня на всех машинах описанная схема работает без замечаний. Чижиков Владимир (Skif) Написано по мотивам Моего поста на sysadmins.ru http://portal.sysadmins.ru/board/viewtopic.php?t=43865&highlight=%C0%E2%F2%EE%F0%E8%E7%E0%F6%E8%FF+FreeBSD+WinNT Документации: http://www.opennet.me/base/net/pam_linux.txt.html http://www.opennet.me/base/dev/pam_linux.txt.html http://www.opennet.me/base/net/pdc_auth.txt.html man 5 smb.conf /usr/share/doc/samba-3.0.0/full_docs/htmldocs/winbind.html

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, 555 (??), 21:09, 18/10/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что такое ADS ??
     
     
  • 2.2, Alex (??), 13:49, 19/10/2004 [^] [^^] [^^^] [ответить]  
  • +/
    Active Directory Services
     

  • 1.3, helgy (?), 14:14, 19/10/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/

    Насколько я понял - все равно основные задачи крутятся на windows-серверах. Не проще ли было использовать загрузку фри по сетке через PXE а затем запускать rdesktop? Вся авторизация - на самих серваках, заодно получаем экономию на железе?

    Правда, сразу скажу - этот вариант скорее применим для чисто офисных решений, когда используются 1С, ворд/эскель да может быть почтовая программа. Никакой графики и т.д.

     
  • 1.4, c0x (??), 14:08, 31/10/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    важен порядок просмотра баз пользователей: сначала локальная, потом все остальные.

    кроме того, очевидно следует сделать невозможным логин пользователя из домена с uid или gid = 0.

     
  • 1.5, pedro (?), 11:58, 14/01/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > winbind separator = + - ну, а это просто разделитель, которым имя домена
    будет отделено от пользователя. Стоит обратить внимание, что домен стоит
    ПЕРЕД именем, а не после, как это делается в Windows


    странный пассаж. где это в винде домен стоит после имени пользователя??

     
     
  • 2.6, Дима (??), 15:58, 20/01/2005 [^] [^^] [^^^] [ответить]  
  • +/
    user@domain
     
     
  • 3.7, vanuyshka (?), 23:30, 08/02/2005 [^] [^^] [^^^] [ответить]  
  • +/
    subj
     

  • 1.8, НБГ (?), 14:21, 04/10/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хорошая статья, молодца Володя. Помогла очень сильно при внедрении похожей системы. Спасибо.
     
     
  • 2.9, lexx (??), 16:21, 15/11/2005 [^] [^^] [^^^] [ответить]  
  • +/
    u menya est vopros ---   ya ponimayu chto u tebya vse proshlo gladko.u menya zhe problema takaya :  na utilitu "net"  bsd rugaetsya i govorit chto ne znaet takoy utiliti. esli ti vdrug znaesh prichinu ili vozmozhnie prichini plz podelis.  esli eshe kto nibud eto prochitaet i otvetit budu och rad i schastliv.  help me !    
     
     
  • 3.10, Skif (ok), 21:05, 15/11/2005 [^] [^^] [^^^] [ответить]  
  • +/
    А пользуется именно 5-ка и samba 3-ка? Это принципиально, во второй самбе включение в домен происходит немного по другому. Для начала скомпиль с опциями из статьи
     
     
  • 4.11, lexx (??), 21:16, 17/11/2005 [^] [^^] [^^^] [ответить]  
  • +/
    da bsd ne 5 i samba ne 3. skompilil 2 sambu. i vse zhe ne znayu kak ee v domain zasunut. plz podskazhi.
     
     
  • 5.12, Skif (ok), 12:43, 18/11/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >da bsd ne 5 i samba ne 3. skompilil 2 sambu. i
    >vse zhe ne znayu kak ee v domain zasunut. plz podskazhi.
    >


    если мне память не изменяет, то во второй самбе добавление идет через smbpasswd

    smbpasswd -j domain -r pdc -U Administrator

     

  • 1.13, John Freeman (?), 17:01, 22/06/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    2 pedro , как раз в виндах пишется DOMAIN\USER , а общая схема - user@domain
     
  • 1.16, Backspace (?), 12:17, 25/03/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    no_warm неплохо было бы заменить на no_warn
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру