Автор Тема: Ограничить авторизацию пользователей  (Прочитано 19656 раз)

zobr.2012

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Здравствуйте.
Есть несколько компьютеров на которых пользователя авторизуются через LDAP.
Возможно ли организовать запрет для некоторых пользователей авторизоваться на части компьютеров.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Ограничить авторизацию пользователей
« Ответ #1 : 23 Ноябрь 2015, 02:33:21 »
Здравствуйте!
Есть несколько компьютеров на которых пользователя авторизуются через LDAP.
Возможно ли организовать запрет для некоторых пользователей авторизоваться на части компьютеров.
Думаю, что можно =) . Очень многое зависит от выдвигаемых требований и от используемой у Вас системы аутентификации. Опишите задачу подробнее, постараюсь Вам помочь.

Егор

zobr.2012

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Ограничить авторизацию пользователей
« Ответ #2 : 23 Ноябрь 2015, 22:21:13 »
Здравствуйте.
Используем CentOS 6.7, авторизация по второму способу описанному у Вас через nss-pam-ldapd.
Сейчас все пользователи могут авторизовываться на любом из компьютеров, настроенном для авторизации через LDAP.
Нужно сделать для некоторых пользователей доступ только к определенным компьютерам, без возможности авторизации на других.
Как вариант, или персонально для каждой учетки или для группы.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Ограничить авторизацию пользователей
« Ответ #3 : 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) с отличительными признаками машины, тогда пользователь сможет заходить только на эти несколько указанных машин.

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

Егор

zobr.2012

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Ограничить авторизацию пользователей
« Ответ #4 : 24 Ноябрь 2015, 07:50:44 »
Здравствуйте.
Спасибо за развернутый ответ.
А с группами пожалуйста проясните ситуацию. Группы были бы более предпочтительны, т.к. нужно будет еще накладывать ограничение на доступ к файловой системе, помимо входа.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Ограничить авторизацию пользователей
« Ответ #5 : 24 Ноябрь 2015, 10:01:55 »
Здравствуйте! Сначала дополню свой предыдущий пост: посмотрел в man nslcd.conf и нашёл там параметр pam_authz_search. Использовать его для решения Вашей задачи будет более правильно, т.к., во-первых, он влияет только на PAM (т.е. аутентификацию), а во-вторых, в фильтре там можно использовать переменные. В тексте описания параметра есть практически готовый фильтр для Вашего случая.

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

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

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

Имея же запись пользователя, нельзя напрямую определить, какой группе он принадлежит. Можно использовать наложение memberof, но для posixGroup оно не работает. Если у Вас не используются posixGroup, то тогда Вам повезло, настраивайте memberof и используйте примерно такой фильтр:
filter passwd (&(objectClass=inetOrgPerson)(memberof=cn=Allowed-192.168.0.25,ou=Groups,dc=mycompany,dc=ru))
Если используются posixGroup, то придётся заводить отдельные groupOfNames (groupOfUniqueNames)-группы специально для nslcd и, опять же, использовать memberof. Не очень удобно. Но осуществимо.

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

Егор

zobr.2012

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Ограничить авторизацию пользователей
« Ответ #6 : 24 Ноябрь 2015, 23:29:52 »
Спасибо за информацию.