Несколько имен входа для одного пользователя в Linux с использованием аутентификации на сервере LDAP

Несколько имен входа для одного пользователя в Linux с использованием аутентификации на сервере LDAP

В моей лаборатории около 30 систем (отдельных ПК) и около 200 студентов, которые будут ее использовать. У каждой системы есть учетная запись USER, пароль которой 123456, известный этим 200 людям. Следовательно, они получают доступ к любой системе, которая свободна и работает некоторое время. Их использование регистрируется просто с помощью записи в книге регистрации. Я хочу дать каждому пользователю отдельные логины и пароли, что легко достигается с помощью сервера LDAP. Но я не хочу создавать 200 учетных записей пользователей на каждом ПК. Я хочу сопоставить входы всех 200 человек в саму учетную запись USER. У них будет один и тот же профиль и один и тот же домашний каталог. Я просто хочу регистрировать время и дату использования лаборатории отдельными лицами в файле. Можно ли это сделать с помощью LDAP или какого-либо другого программного обеспечения?

решение1

Согласен с SLESKE, но чтобы расширить его/ее комментарии, вам сначала нужно сделать пару вещей!

В Linux библиотеки, управляющие входом в систему, необходимо перенаправить на использование бэкэнда LDAP, а не искать информацию в /etc/passwd.

Если вы используете OpenLDAP, вам следует обратить внимание на две вещи:

NSCD (Name Server Caching Daemon), который кэширует запросы LDAP. Вы запустите его на каждом хосте, где пользователи входят в систему.

NSSLDAP (коммутатор сервера имен для LDAP) — это связующее звено, которое заставляет логины запрашивать NSCD, который, в свою очередь, будет запрашивать бэкэнд LDAP, или NSSLDAP будет запрашивать бэкэнд LDAP напрямую, если NSCD устарел или недоступен.

Поэтому на каждой рабочей станции вам нужно будет установить OpenLDAP, NSCD и NSSLDAP, если они не являются частью вашего дистрибутива. OpenLDAP требуется для получения клиентских библиотек, которые умеют говорить по протоколу LDAP.

Затем вам необходимо внести изменения в некоторые файлы:

/etc/nscd.conf Этот файл управляет тем, что кэшируется. Вот дамп с одной из моих систем, которая работает как сервер Samba:

    enable-cache            passwd          yes
    positive-time-to-live   passwd          10
    negative-time-to-live   passwd          3
    suggested-size          passwd          211
    check-files             passwd          yes
    persistent              passwd          yes
    shared                  passwd          yes
    max-db-size             passwd          33554432
    auto-propagate          passwd          yes

    enable-cache            group           yes
    positive-time-to-live   group           3600
    negative-time-to-live   group           3
    suggested-size          group           211
    check-files             group           yes
    persistent              group           yes
    shared                  group           yes
    max-db-size             group           33554432
    auto-propagate          group           yes

    enable-cache            hosts           yes
    positive-time-to-live   hosts           3600
    negative-time-to-live   hosts           3
    suggested-size          hosts           211
    check-files             hosts           yes
    persistent              hosts           yes
    shared                  hosts           yes
    max-db-size             hosts           33554432

Затем вам нужно будет изменить файл nsswitch.ldap (прочитайте документацию по нему, слишком много, чтобы вдаваться в подробности здесь).

ОДНА ОЧЕНЬ ВАЖНАЯ ВЕЩЬ!!!!

Если ваш сервер LDAP не работает, вам нужно убедиться, что локальная учетная запись root по-прежнему может войти в систему. Или если на одной из ваших рабочих станций возникли проблемы с сетью, вам нужно убедиться, что вы по-прежнему можете войти в систему.

Итак, когда загружаются мои Linux-компьютеры, у меня есть скрипт, который всегда копирует файл nsswitch.conf в нужное место, которое выглядит следующим образом:

пароль: совместимая группа: совместимая

хосты: файлы DNS-сети: файлы

службы: файлы протоколы: файлы rpc: файлы ethers: файлы netmasks: файлы netgroup: файлы bootparams: файлы

автомонтирование: файлы псевдонимы: файлы

и как только я буду готов использовать LDAP для входа в систему, я заменяю файл nsswitch.conf следующим:

пароль: файлы ldap группа: файлы ldap тень: файлы ldap

хосты: файлы DNS-сети: файлы

службы: файлы протоколы: файлы rpc: файлы ethers: файлы netmasks: файлы netgroup: файлы bootparams: файлы

автомонтирование: файлы псевдонимы: файлы

Первый вариант позволяет мне входить в систему локально, а второй — в обоих вариантах, но из-за кэширования NSCD требуется время, чтобы NSCD стал неактуальным, что приводит к задержкам или проблемам при входе в систему.

Об этом можно сказать еще очень много, но надеюсь, что это поможет вам начать.

Кстати: я разработчик Pozix Linux и Pozix Linux Small Business Server, и у нас более 400 систем Samba работают примерно таким образом!

Согласен, комментарии TRS80 верны, но вот скрипт, который мы используем для создания файлов LDIF из файлов /etc/passwd. Полученный файл LDIF можно использовать для заполнения базы данных LDAP. Вам нужно будет убедиться, что при запуске этого скрипта на нескольких рабочих станциях вы отсеиваете дублирующиеся имена учетных записей, чтобы в итоге получить уникальные имена учетных записей с уникальными UID.

cat /etc/passwd | while read i; do
  uid=`echo $i | cut -d : -f 1`
  uidNumber=`echo $i | cut -d : -f 3`
  gidNumber=`echo $i | cut -d : -f 4`
  gecos=`echo $i | cut -d : -f 5`
  homeDirectory=`echo $i | cut -d : -f 6`
  loginShell=`echo $i | cut -d : -f 6`
  userPassword=`cat /etc/shadow | grep $uid | cut -d : -f 2`

  echo "dn: cn=$gecos,ou=people,dc=mycompany,dc=com"
  echo "objectClass: account"
  echo "objectClass: posixAccount"
  echo "cn: $gecos"
  echo "uid: $uid"
  echo "uidNumber: $uidNumber"
  echo "gidNumber: $gidNumber"
  echo "homeDirectory: $homeDirectory"
  echo "loginShell: $loginShell"
  echo "userPassword: $userPassword"

done

решение2

Если вы установите атрибуты uidNumber и homeDirectory одинаковыми для каждой учетной записи, то все, скорее всего, будет работать так, как вам нужно.

решение3

Вам не нужно создавать 200 учетных записей пользователей на каждом ПК. Linux может извлекать всю информацию о пользователях из LDAP, поэтому учетные записи не существуют локально (т. е. в /etc/passwd). Домашний каталог в таком случае обычно находится на сетевом диске (NFS или подобном).

Это стандартный подход. Есть ли причина, по которой вы этого не делаете?

Связанный контент