Назад | Перейти на главную страницу

Поиск в Active Directory с привязанного Mac без учетных данных пользователя

Один из моих сценариев загрузки Mac должен получить свойство из AD, которое не является одним из тех, которые я могу увидеть с помощью встроенного инструмента под названием dscl, который в значительной степени ограничен поиском пользователей, групп и компьютеров. Обычно я просто выполняю необработанный запрос ldap, но мне нужно, чтобы это произошло до того, как пользователь войдет в систему для предоставления учетных данных. Очевидно, что встроенный dscl может получать данные из AD без аутентификации пользователя, поэтому я предполагаю, что должен быть способ сделать это в контексте учетной записи компьютера или что-то в этом роде. К сожалению, мой googlefu пока полностью меня подвел.

Думаю, я отвечу на свой вопрос. Для моих нужд это было на perl, но должно быть довольно очевидно, как сделать то же самое в обычном сценарии оболочки. Мне просто нужно было получить учетные данные машины из ActiveDirectory.plist

sub get_LDAPEntries
{
    my ($LDAPServer, $LDAPPort, $LDAPsearchbase, $LDAPfilter) = @_;
    my $kerbID = `/usr/libexec/PlistBuddy /Library/Preferences/DirectoryService/ActiveDirectory.plist -c "print :'AD Computer Kerberos ID'"`;
    chomp $kerbID;

    my $password = `/usr/libexec/PlistBuddy /Library/Preferences/DirectoryService/ActiveDirectory.plist -c "print :'AD Computer Password'"`;
    chomp $password;

    my $LDAPSession = Net::LDAP->new($LDAPServer, port=>$LDAPPort);
    $LDAPSession->bind($kerbID, password => $password) or die("Could not connect to LDAP server.");

    my $results = $LDAPSession->search(base=>$LDAPsearchbase,filter=>$LDAPfilter);

    $results->code && die "There was an error in the LDAP search: " . $results->error;
    $LDAPSession->unbind;

    my @LDAPEntries = $results->entries;

    return @LDAPEntries;
}

Обновление: работает только на Snow Leopard (10.6). Lion (10.7) хранит пароль AD в связке ключей, и вам нужно будет использовать служебную программу командной строки «security», чтобы добраться до него ... что, откровенно говоря, является проблемой из-за того, что пароль выводится на stderr, а остальная часть запрос отправляется на стандартный вывод. Я собираюсь объявить поддержку Lion как выходящую за рамки :-P