[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