[Volgograd] Re: pam & ns

Taras Ablamsky t на v-lug.vlink.ru
Ср Янв 21 00:18:10 MSK 2004



Dwarf пишет:
> Здравствуйте, Taras.

>>/etc/pam.d у меня "из коробки" единственное, что по-другому, это 
>>system-auth и system-auth-use_first_pass
>>(если очень хочется посмотреть на стандартные конфиги, могу выслать
>>ближе к вечеру с работы. А вообще apt-get install --reinstall имя_пакета)
> 
> То есть, ты предлагаешь обновить из сизифа? Вся фича в том, что LDAP я
> делаю для школы, где нет интернета.

Да нет же, это просто способ восстановить умолчательные настройки как 
"из коробки". Можно же apt'ом и из Мастера/Juonior'а пакеты ставить.

>>Дело в том, что в остальные файлы они включаются посредством pam_stack
>>(в старом PAM) или посредством include (в новом)
> 
>>>И ещё. Почему у меня не работает nscd с LDAP? Поясню ;) Я пользую
>>>nscd только для того, чтобы получать группы из LDAP. В nsswitch.conf
>>>имею такую строку:
>>>
>>>$cat /etc/nsswitch.conf | grep "^[^#]" | grep 'ldap'
>>>group:      files ldap nisplus nis
> 
>>Очень, очень важный момент:
>>НЕ ИСПОЛЬЗУЙТЕ nscd ПРИ НАСТРОЙКЕ!
> 
>>Либо нужно очень четко представлять что он делает, либо вырубать его
>>совсем. То есть, сначала делаем
>>service nscd stop
>>chkconfig nscd off
>>и только потом начинаем думать о том, что неплохо бы сделать авторизацию
>>через LDAP или там еще через что.
> 
> Я его не врубал до тех пор (он у меня вообще всегда вырублен был),
> пока не мигрировал /etc/passwd и /etc/group в LDAP и у меня не
> заработала авторизация посредством pam ldap.
> 

У тебя скорее всего проблемы с ACL в slapd.conf, возьми те файлы что я 
тут недавно кидал в рассылку и попробуй с ними. По крайней мере возьми
slapd.conf

> 
>>Так вот, насколько я понимаю проблема в том, что ты не до конца
>>осознаешь чем занимается Name Service и чем занимается PAM.
> 
> So, расскажу, как я думаю. nscd в системные вызовы getgroupbyname,
> getuserbyname, gethostbyname etc (могу написать неправильно, сейчас в
> винде, не могу посмотреть, так уж получилось, что как только я вышел в
> винду, мне пришло твоё письмо :) делигирует свою информацию, в
> зависимости от настроек nsswitch.conf.

Нет. nscd -- это Name Service Cache Deamon, то есть такой демон который
кеширует вызовы этих функций и в следующий раз, когда нужно получить
информацию от name service, он отдает ее из своего кеша, а не из
базы. В результате на нормально настроенной системе nscd может
несколько увеличить производительность, вернее может немного сократить
время работы этих функций.

/etc/nsswitch.conf -- это файл настройки именно Name Service и к nscd
особо отношения не имеет (верней основная его задача слабо касается nscd).

Кстати, насколько я понимаю, nscd это фича glibc и на других системах
(например Solaris) его может и не быть, но здесь могу ошибаться надо
будет посмотреть на работе как там в других системах.

> 
> Pam же просто авторизует пользователей для той или иной программы
> различными средствами.
> 

Да.

>>Но не хочу я рассказывать то, что написано в любой нормальной книжке по
>>Unix (заметьте даже не по Linux). Только что посмотрел man nsswitch.conf
>>он у нас даже _на_русском_ языке.
> 
> Всё это более-менее понятно. Мне не понятно другое. Вот почитал твой
> ответ и сразу смог сформулировать, что же, собственно волнует. Помимо
> смены пароля (тут, уж, Бог с ним, можно и скриптами обойтись, пущай
> они меняют пороль).

Да нет, это только root не сможет менять ldap'овским пользователям пароли.
Сами пользователи без проблем смогут их менять себе программой passwd.

<skip>
> Итак. Информация о пользователях берётся в /etc/passwd, пароль берётся
> из /etc/shadow (тут я не уверен, но это не важно), группы (внимание!)
> берутся из /etc/group. Если авторизация пользователя прошла успешно,
> то юзеру, ковырявшегося с программой login (предположим, что она
> проводила авторизацию) выделяется соответствующий uid и gid согласно
> информации из /etc/passwd. Всё пучком. Этим, скажем, занимается теперь
> у меня pam_ldap. То есть информацию о пользователе ищет не в

Я думаю что этим как раз занимается nss_ldap

> /etc/passwd, а в "ou=People,dc=dwarf,dc=net.ru". По фильтру uid=dwarf.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Я надеюсь у тебя не написано так на самом деле и это просто опечатка.

> То есть, когда я ввожу имя пользователя, pam сразу лезет с запросом

ns лезет а не pam.

> ldap_search к slapd. Там смотрит пароль и прочие gecos (что за слово
> странное, ты не знаешь?).

gecos это поле с информацией о пользователе в файле /etc/passwd
может даже rfc какой по этому поводу есть, я в свое время не нашел.
то есть там так:

account:password:UID:GID:GECOS:directory:shell

О! заодно и я нашел как эта штука переводится, man 5 passwd рулит:

" GECOS     Это  поле  необязательно  и  используется  только  для
             информационных целей.  Обычно здесь содержится  полное
             имя  пользователя.   GECOS  означает  General Electric
             Comprehensive   Operating   System,    которая    была
             переименована  в  GCOS,  когда  подразделение  больших
             систем компании General Electric было продано компании
             Honeywell.   Денис  Ричи  говорил: "Иногда мы посылали
             файл для  распечатки  или  набор  задач  для  пакетной
             обработки  на  машину  с  GCOS.   В  поле GCOS в файле
             паролей  пряталась  информация  для  $IDENTcard.    Не
            элегантно."
"

> Но где берётся список групп, которым принадлежит данный пользователь?
> Для того, чтобы выяснить, к каким группам принадлежит авторизуемый
> пользователь, нужно просмотреть ВСЕ группы, и потом сказать, что dwarf
> принадлежит группам dwarf, rpm, video и пр. Эту информацию pam, как я
> понимаю, выясняет уже при системных вызовах GET<как-то там, не помню>.

Ты же сам согласился выше, что PAM занимается только _идентификацией_
и опять ;(
Все эти getpwnam, getpwent, gethostbyname, getadrrinfo и тд, работают
с Name Service. Кстати, getent(1) очень полезная программа для
всяких там проверок в нашем случае.

> То есть, если запущен nscd - считай, что у него. Так вот, nscd и не
> хочет эту информацию отдавать. Ошибка 49 и всё тут.

Вся беда nscd в том что после каждого чиха в сторону NS его НАДО 
ПЕРЕЗАПУСКАТЬ!
Это просто ужасно мешает в настройке и поиске ошибок, забудь про nscd
до тех пор пока все не заработает как часы (по протоколу ntp :).

> Ещё момент. Всё с теми же группами. Допустим, у меня все группы, gid,
> которых больше 500 я храню в LDAP - остальные, по большому счёту,
> системные - в файле (все знают, в каком, я писать тут не буду).
> Допустим, в файле запись, что rpm...: dwarf (то есть пользователь
> dwarf принадлежит группе rpm). Далее, группа video, gid=600, находится
> в LDAP. В базе проприсано, что к этой группе принадлежит и dwarf.
> 
> Вопрос. Во время авторизации, отдаст ли демон nscd информацию о том,
> что пользователь dwarf состоит в двух группах (чуть не сказал -
> партиях) rpm и video?
> 

Забудь про nscd! Вынеси его вообще из системы. Всеми этими вещами
занимается NS. Так вот, name service вернет тебе информацию в
соответствии с /etc/nsswitch.conf (man nsswitch.conf наконец)

То есть, если в /etc/nsswitch.conf написано

group:   files ldap nisplus nis

то сначала будут смотреть в /etc/group, потом в LDAP, потом в NIS+, 
потом в NIS.

В твоем случае, да, dwarf будет состоять в двух группах.

> Ещё вопрос. В ou=Group принадлежность пользователей пишется тоже через
> запятую, как в /etc/group?

Нет. Там пишется по аттрибуту на каждого юзера, то есть в формате ldif 
будет так:

dn: cn=video,ou=Group,dc=example,dc=com,dc=ru
objectClass: posixGroup
objectClass: top
cn: video
gidNumber: 600
memberUid: dwarf
memberUid: taras
memberUid: videouser1
memberUid: videouser2

и тд.

> Прошу извинить за навязчивость, но вопрос с группами меня давно уже
> волнует...

Да ладно, зато я и сам вспомнил. Может все-таки напишем теперь про это
mini-howto, а то я уже года 2 собираюсь и все никак :(

> ЗЫ. В луг ответить не могу, всё по той же причине - нахожусь сейчас в
> винде. Вот ведь незадача, только вышел в вин - и ты сразу письмо
> написал. Если хочешь, можешь bounce моё письмо в рассылку.

Пересылаю свой ответ в LUG, так как там многим сейчас это интересно.

Удачи.

-- 
Taras Ablamsky




Подробная информация о списке рассылки Volgograd