В моей лаборатории около 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 или подобном).
Это стандартный подход. Есть ли причина, по которой вы этого не делаете?