Как определить, является ли пользователь, вошедший в систему в данный момент, пользователем LDAP в Solaris - PullRequest
1 голос
/ 05 декабря 2009

Я хочу знать, как определить, является ли текущий пользователь, вошедший в систему в Solaris, пользователем LDAP или локальным пользователем.
Любая команда?
или любые функции времени выполнения C, такие как getspname, getpwnam, которые возвращают атрибут, говорящий, что это пользователь LDAP или локальный пользователь после входа в систему?

Ответы [ 5 ]

2 голосов
/ 07 декабря 2009

Ldaplist сообщит вам, есть ли у пользователя запись в базе данных ldap. Это не разбирает случай, когда у пользователя есть запись в файле / etc / passwd.

ldaplist passwd username
1 голос
/ 27 августа 2016

Если вы используете sss как часть пакета ipaclient,

getent --service=sss passwd $USER | wc -l

сообщит вам, существует ли пользователь в базе данных LDAP сервера FreeIPA.

1 голос
/ 27 декабря 2010

Я предполагаю, что UID, которые являются "локальными", находятся в отдельном диапазоне от "LDAP". Я также предполагаю, что nsswitch настроен на использование файлов и ldap для passwd, shadow и / group. Команда 'getent' должна присутствовать в системах GNU libc. Я собираюсь предположить, что локальные базы данных 'файлов' меньше, чем источник ldap, и поэтому мы захотим протестировать меньший и / или более быстрый из двух источников.

если вы хотите определить, присутствует ли данный UID, в одной из баз данных вы можете запустить что-то похожее на

$ getent --service=files passwd | grep 655

Это может совпадать с GID по умолчанию в файле, поэтому может потребоваться более творческий grep.

$ getent --service=files passwd | grep -e $.*:.*:655

Если вы хотите превратить это в элемент, способный работать со сценариями, то вам понадобится поставить 'wc' в конце, чтобы выполнить целочисленное тестирование.

$ getent --service=files passwd | grep -e $.*:.*:655 | wc -l

Возвращает 0, если не найден, или 1 (или более), если найден. Мы будем тестировать только один источник, потому что мы предполагаем, что мы тестируем действительный UID и что он будет в другом источнике, если его здесь нет.

Наконец, до тех пор, пока вы используете nsswitch, вы сможете использовать любую из библиотек C, которые поддерживают это, чтобы проверить, действительны ли они. У меня нет никакого личного опыта с ними, но я бы предположил, что вы можете передать опцию, как мы сделали здесь, чтобы использовать только конкретный источник. В качестве альтернативы вы можете использовать ту же логику, что и выше, и просто cat / etc / passwd. Снова предположим, что если их здесь нет, они находятся в ldap.

1 голос
/ 05 декабря 2009

Это не будет легко. Вы можете открыть файл паролей и искать их. Если их там нет, заключите LDAP. Если, конечно, это НИС. Или Керберос. Если ваша версия Solaris имеет PAM, вы можете прочитать об этом, чтобы узнать, есть ли у нее какое-либо облегчение.

0 голосов
/ 06 декабря 2009

Я понятия не имею, как сказать, какие учетные данные они использовали для подлинной аутентификации, но должно быть проще просто найти их в базе данных LDAP и посмотреть, есть ли они там. Я использую утилиту ldap_client, чтобы постоянно искать людей. Вам нужно знать имя сервера ldap и некоторые другие детали. Проверьте справочную страницу для этого. Например, если у пользователя есть локальная учетная запись, и он находится в LDAP, пароли, которые проверяются при входе в систему, будут зависеть от конфигурации системы.

...