Сервер Ubuntu + Samba + PAM + Apple OpenDirectory
По разным причинам мы стремимся перенести наши файловые серверы с OS X Server 10.9 на настоящую реализацию Samba, работающую на Ubuntu 14.04LTS. У нас есть Ubuntu, запущенная с установленной Samba, и даже настроенная PAM для аутентификации пользователей на нашем сервере Apple OpenDirectory.
Однако заставить Samba аутентифицировать пользователей так, как мы хотим, оказывается довольно сложно. Похоже, у нас есть два варианта. Вариант 1 состоит в том, чтобы просто Samba делегировал это уже функционирующей подсистеме PAM; Вариант 2 - использовать встроенную поддержку Samba для LDAP и Kerberos. Стандартная конфигурация в Ubuntu, по-видимому, поддерживает вариант 1, и, действительно, кажется, что это будет самая простая настройка для долгосрочного управления. (Вариант 2 требует гораздо большей конфигурации, включая изменение схемы Apple, что, как я понимаю, не очень хорошая идея на практике.)
Итак, как все сказано, я намерен попытаться заставить вариант 1 работать (что он почти делает). В настоящее время аутентификация PAM по OD уже работает. Я могу SSH и войти в систему как пользователи OD в системе в течение всего дня. Однако, что не очень хорошо, так это то, что пользователь должен сначала сделать это, прежде чем Samba распознает их как пользователя UNIX. Другими словами, пока пользователь успешно не подключится через SSH хотя бы один раз, Samba не будет распознавать его учетные данные. Кроме того, я не верю, что Samba просматривает группы OD, потому что попытка ограничить подключение к определенным общим ресурсам на основе имен групп также не работает.
После того, как пользователь вошел в систему один раз, используя SSH (или при попытке использовать стандартную локальную учетную запись пользователя), Samba навсегда принимает его имя и пароль. Пока это не произойдет, он просто отвергает их.
Файл smb.conf содержит эти соответствующие записи:
server role = standalone server
obey pam restrictions = yes
passdb backend = tdbsam
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
guest account = nobody
map to guest = bad user
nsswitch.conf содержит эти соответствующие записи:
passwd: compat ldap
group: compat ldap
shadow: compat ldap
,
Похоже, что это поведение должно быть простым исправлением или обходным путем. Использование таких команд, как "getent", "id", "groups" и "passwd", корректно возвращает ожидаемые результаты и поведение. Кажется, только smbd имеет что-то дополнительное, что ему нужно.
Мне не повезло найти лучший способ сделать это, и я уже потратил несколько дней, просматривая документацию, веб-сайты, книги О'Рейли и экспериментируя с обоими сценариями. Я также прочитал этот аналогичный пост здесь. Кто-нибудь был на этом пути раньше? Мы высоко ценим любую помощь, включая мудрые анекдоты UNIX и / или моральную поддержку.
Спасибо!