Форум проекта Pro-LDAP.ru

Общие вопросы по LDAP => Общий раздел => Тема начата: zobr.2012 от 21 Ноябрь 2015, 13:00:09

Название: Ограничить авторизацию пользователей
Отправлено: zobr.2012 от 21 Ноябрь 2015, 13:00:09
Здравствуйте.
Есть несколько компьютеров на которых пользователя авторизуются через LDAP.
Возможно ли организовать запрет для некоторых пользователей авторизоваться на части компьютеров.
Название: Re: Ограничить авторизацию пользователей
Отправлено: egor от 23 Ноябрь 2015, 02:33:21
Здравствуйте!
Есть несколько компьютеров на которых пользователя авторизуются через LDAP.
Возможно ли организовать запрет для некоторых пользователей авторизоваться на части компьютеров.
Думаю, что можно =) . Очень многое зависит от выдвигаемых требований и от используемой у Вас системы аутентификации (http://pro-ldap.ru/forum/index.php?topic=55.msg235#msg235). Опишите задачу подробнее, постараюсь Вам помочь.

Егор
Название: Re: Ограничить авторизацию пользователей
Отправлено: zobr.2012 от 23 Ноябрь 2015, 22:21:13
Здравствуйте.
Используем CentOS 6.7, авторизация по второму способу описанному у Вас через nss-pam-ldapd.
Сейчас все пользователи могут авторизовываться на любом из компьютеров, настроенном для авторизации через LDAP.
Нужно сделать для некоторых пользователей доступ только к определенным компьютерам, без возможности авторизации на других.
Как вариант, или персонально для каждой учетки или для группы.
Название: Re: Ограничить авторизацию пользователей
Отправлено: egor от 24 Ноябрь 2015, 05:37:49
Здравствуйте! Как всегда, всё решается с помощью фильтров =) . Если "персонально", то тем пользователям, которые должны заходить только с конкретной машины, нужно в каком-либо атрибуте прописать признак этой машины, например, ip-адрес. Две записи пользователей:
dn: uid=anton,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
uid: anton
cn: Anton Ponkrashov
sn: Ponkrashov
userPassword: antonPassword

dn: uid=alex,ou=People,dc=mycompany,dc=ru
objectClass: inetOrgPerson
objectClass: extensibleObject
uid: alex
cn: Aleksey Savrasenko
sn: Savrasenko
userPassword: alexPassword
ipHostNumber: 192.168.0.25

Тогда в /etc/nslcd.conf на машине 192.168.0.25 можно указать такой фильтр:
filter passwd (|(!(ipHostNumber=*))(ipHostNumber=192.168.0.25))
То есть принимать во внимание записи, у которых либо нет атрибута ipHostNumber, либо его значение равно 192.168.0.25. Под это правило попадут обе учётки и оба пользователя смогут пройти аутентификацию.

Если на машине 192.168.0.24 указать фильтр:
filter passwd (|(!(ipHostNumber=*))(ipHostNumber=192.168.0.24))
то anton сможет пройти аутентификацию, а alex -- нет. Такие дела. Кстати, можно указать сразу несколько атрибутов (и не обязательно ipHostNumber) с отличительными признаками машины, тогда пользователь сможет заходить только на эти несколько указанных машин.

Можно заморочиться и с группами, но там чуть-чуть сложнее.

Егор
Название: Re: Ограничить авторизацию пользователей
Отправлено: zobr.2012 от 24 Ноябрь 2015, 07:50:44
Здравствуйте.
Спасибо за развернутый ответ.
А с группами пожалуйста проясните ситуацию. Группы были бы более предпочтительны, т.к. нужно будет еще накладывать ограничение на доступ к файловой системе, помимо входа.
Название: Re: Ограничить авторизацию пользователей
Отправлено: egor от 24 Ноябрь 2015, 10:01:55
Здравствуйте! Сначала дополню свой предыдущий пост: посмотрел в man nslcd.conf (http://arthurdejong.org/nss-pam-ldapd/nslcd.conf.5#pam_authz_search) и нашёл там параметр pam_authz_search. Использовать его для решения Вашей задачи будет более правильно, т.к., во-первых, он влияет только на PAM (т.е. аутентификацию), а во-вторых, в фильтре там можно использовать переменные. В тексте описания параметра есть практически готовый фильтр для Вашего случая.

А с группами пожалуйста проясните ситуацию. Группы были бы более предпочтительны, т.к. нужно будет еще накладывать ограничение на доступ к файловой системе, помимо входа.

Теперь про группы. nslcd осуществляет поиск в каталоге LDAP. Если не задавать фильтров, он найдёт все записи, если задавать -- то только те, которые соотвтетсвуют заданным условиям. Проблема LDAP-поиска заключается в том, что мы можем фильтровать записи ТОЛЬКО ПО СОДЕРЖИМОМУ САМИХ ЭТИХ ЗАПИСЕЙ.

То есть если в записи группы перечисленных пользователи, и мы можем отобрать те группы, в которых указан конкретный пользователь. Но это будут ЗАПИСИ ГРУПП.

Имея же запись пользователя, нельзя напрямую определить, какой группе он принадлежит. Можно использовать наложение memberof (http://pro-ldap.ru/tr/man/slapo-memberof.5.html), но для posixGroup оно не работает. Если у Вас не используются posixGroup, то тогда Вам повезло, настраивайте memberof (http://pro-ldap.ru/forum/index.php?topic=50.msg176#msg176) и используйте примерно такой фильтр:
filter passwd (&(objectClass=inetOrgPerson)(memberof=cn=Allowed-192.168.0.25,ou=Groups,dc=mycompany,dc=ru))
Если используются posixGroup, то придётся заводить отдельные groupOfNames (groupOfUniqueNames)-группы специально для nslcd и, опять же, использовать memberof. Не очень удобно. Но осуществимо.

Вообще, в данном контексте преимуществ от групп практически никаких, разве что потом где-то будете ещё их использовать.

Егор
Название: Re: Ограничить авторизацию пользователей
Отправлено: zobr.2012 от 24 Ноябрь 2015, 23:29:52
Спасибо за информацию.