Пытаюсь решить весьма странную, но от этого не менее важную задачу. Хочу, логиниться в свой рабочий комп учеткой из AD. Система TrueOS, последняя. Причина - таким образом сразу получаю тикет кербероса и без дополнительных проблем хожу по локальным http и nfs сервисам.
Что сейчас уже есть:
1. Поставлена Samba44 и машина успешно введена в домен.
2. Получаю адекватный ответ на запросы, типа wbinfo -u, net rpc info и пр. Вижу машину в списке доменных компов.
3. Могу, как получить билет с помощью kinit, так и залогиниться с помощью su username и пароля. При этом сразу и билет получаю.
Совершенно не понятным остаётся часть задачи, где я с доменной учеткой логинюсь изначально, на экране PCDM(PC-BSD® Display Manager), т.к. на подобные попытки мне выдаётся сообщение, что пользователя не существует.
Из того, что должно было бы работать, но отказывается пока вроде только getent. На запросы, типа getent passwd получаю список только локальных пользователей.
pam_winibnd? Если DM использует PAM (а сейчас его только ленивый не использует), пропишите в секцию auth вызов pam_winbind. FreeBSD в домене Windows Статья конечно старая, но и технология использования самбы в AD тоже примерно такого же возраста.
pam_krb5. С pam_winbind, например su username с доменным пользователем не работает(( А с pam_krb5 всё ок, раскомментирован в секциях auth, account и password.
res2001: ну разумеется! вот только все маны предлагают изменить записи passwd и group на "files winbind". Всё больше подозреваю, что чего то тут не хватает...
res2001: id username для доменного пользователя работает) Как я и писал, даже в терминале можно залогиниться и пользоваться нужными правами. Хочется изначально заходить под ним.
LordNicky: Так Вы хотите _без_ самбы все-таки? Для использования чистого pam_krb5 нужно видимо другие настройки - типа тех, что делаются для прокси - но тут я не подскажу, я довольно смутно представляю взаимодействие по керберосу
LordNicky: Работает. Не знаю, правда как насчет TrueOS, старушка FreeBSD 9.3-STABLE. Правда у меня настроено не через самбу, а через pam_ldap. Могут правда проблемы с домашкой возникнуть - тут нужно pam_mkhomedir подключать, чтобы домашка создавалась автоматом.
CityCat4: а у меня вообще очень странная ситуация:
nsswitch настроен на winbind,
system в pam.d(разделы auth, account и password) - на krb5.
Когда в pam пытаюсь прописать winbind по инструкциям, логинится перестаёт.
А с krb5, после успешного логина доменным пользователем в консоли, в /var/log/messages нахожу "su: pam_winbind(su): user 'domain_username' granted access".
и вот как оно всё работает....
З.Ы. unix атрибуты включены и хранятся в AD, если это имеет значение.
З.З.Ы. mkhomedir включил, но, учитывая, что пока я это исключительно для себя настраиваю, можно и ручками...
LordNicky: Ну, про последнее точно можно сказать, что это сработал pam_winbind - я когда-то очень давно его дебажил и в нем есть такое сообщение. Вообще это нужно внимательно рассматривать PAM-файлы- что, когда, за кем, какой сервис...
Я подозреваю, что PCDM смотрит в какой то другой файлик, но включение krb5 в других pam, предположительно нужной направленности(other и xdm) ничего не дало...
LordNicky: ну, тут точно pam_winbind не используется. Ищите все PAM-файлы, где упоминается pam_winbind :) DM может смотреть xdm, kdm, tdm и все что угодно, особенно если ему прописали где-то в конфиге или при сборке имя сервиса.
...
if(USERS==0){
USERS = new UserList();
USERS->allowUnder1K(Config::allowUnder1KUsers());
USERS->allowRootUser(Config::allowRootUser());
USERS->excludeUsers(Config::excludedUserList());
USERS->updateList(); //now start the probe so things are ready on demand
}
...
Правильно ли я полагаю, что из этого можно сделать вывод, что мне нужно добиться, чтобы доменные пользователи показывались командой getent? От чего это зависит?
LordNicky: Похоже да...он пытается получить список пользователей независимо от того, где запущен через getent. Пока я работал на FreeBSD, я обычно в таких случаях шипел "линуксячьи замашки" :D
Кстати, возможно это у него для отображения списка пользователей. Его (отображение) можно отключить?
CityCat4: Можно, я это первым делом радостно и сделал, думая, что вот как только я смогу ввести имя пользователя, тут то... Есть подозрение, что он с этим списком сверяется при логине и доколе getent не даст ему доменных пользователей - фиг пропустит((
ДА! Я нашел её!!! Исходя их строчки "ret = pam_start("login", cUser, &pamc, &pamh);", используется файл "login" в pam.d. В общем то, тот же, что и для логина в консоли, как я понимаю. Стало быть - проблема при сверке со списком, как я и предполагал.
//Stand-alone function to check a username/password combination for validity
void XProcess::checkPW(QString user, QString pwd){
if(USERS->isReady(user)){ xuser = user; }
else{ xuser = USERS->findUser(user); } //convert display name into username
//xuser = Backend::getUsernameFromDisplayname(user);
xpwd = pwd;
bool ok = pam_checkPW();
pam_shutdown();
xuser.clear();
xpwd.clear();
if(ok){ emit ValidLogin(); }
else{ emit InvalidLogin(); }
}
bool XProcess::pam_checkPW(){
//Requires internal "xuser" and "xpwd" variables to be set
//Convert the inputs to C character arrays for use in PAM
QByteArray tmp = xuser.toUtf8();
char* cUser = tmp.data();
QByteArray tmp2 = xpwd.toUtf8();
char* cPassword = tmp2.data();
//initialize variables
bool result = false;
int ret;
//Initialize PAM
//qDebug() << "Starting PAM:" << xuser << tmp << xpwd << tmp2;
if(xuser=="root"){ ret = pam_start("system", cUser, &pamc, &pamh); }
else{ ret = pam_start("login", cUser, &pamc, &pamh); }
if( ret == PAM_SUCCESS ){
pam_started = true; //flag that pam is started
//Place the user-supplied password into the structure
ret = pam_set_item(pamh, PAM_AUTHTOK, cPassword);
if(ret != PAM_SUCCESS){ pam_logFailure(ret); return false; }
//Set the TTY
//ret = pam_set_item(pamh, PAM_TTY, "pcdm-terminal");
//Authenticate with PAM
ret = pam_authenticate(pamh,0);
if( ret == PAM_SUCCESS ){
//Check for valid, unexpired account and verify access restrictions
ret = pam_acct_mgmt(pamh,0);
if( ret == PAM_SUCCESS ){ result = true; }
else{ pam_logFailure(ret); }
}else{
pam_logFailure(ret);
}
}else{ qCritical() << "Could not start PAM"; }
//return verification result
return result;
}
LordNicky: Блин, ну и подход... То есть, он изначально строит список структур в памяти, чтобы потом в один из элементов поместить пароль? Индусский код, не иначе :) Причем, что забавно - для рута используется сервис system, а для прочих - login :D
CityCat4: я вот там выше писал про интересный факт, но не обратил внимание, что в итоге запостилось... вот так правильно:
интересный факт, если ввести просто "getent passwd", то выдаются только локальные юзеры, но если уточнить "getent passwd domain_username", то инфа по пользователю выдаётся актуальная...
так что тогда получается - либо переписывать механизм аутентификации данного DM, либо пытаться поставить другой? Не подскажете, с какой стороны на фре к этому подходить?
LordNicky: Насколько я понял, DM испольузет pam-сервис login. Если поставить в нем pam_winbind - работает? Есть кстати и другие способы аутентификации через домен, без самбы - pam_ldap, pam_sss. Не знаю правда как с наличием sss под FreeBSD, но pam_ldap точно работает.
CityCat4: #
# $FreeBSD$
#
# PAM configuration for the "login" service
#
# auth
auth sufficient pam_self.so no_warn
auth include system
# account
account requisite pam_securetty.so
account required pam_nologin.so
account include system
# session
session include system
# password
password include system
У меня то предположение, что оно вылетает раньше, чем до pam вообще доходит дело. можно, конечно, и winbind включить, да вот только с консоли то всё нормально работает... А winbind, кстати, раскомментирован сейчас и всё равно(((
CityCat4: блин... а я без понятия, как тут переключить DM. Они же прикрутили в этой версии OpenRC. И с ним то особых сложностей нет, да вот только через спец-гую видно только PCDM сервис, XDM отсутствует, а через консоль pcdm отсутствует, ну да ладно... чтонибудь придумаем.
меня сейчас подгрузило следующее:
Virtual terminals
ttyv1 "/usr/libexec/getty Pc" xterm on secure
ttyv2 "/usr/libexec/getty Pc" xterm on secure
ttyv3 "/usr/libexec/getty Pc" xterm on secure
ttyv4 "/usr/libexec/getty Pc" xterm on secure
ttyv5 "/usr/libexec/getty Pc" xterm on secure
ttyv6 "/usr/libexec/getty Pc" xterm on secure
ttyv7 "/usr/libexec/getty Pc" xterm on secure
ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure
вот это я нашел в /etc/ttys. Отсюда следует, что PCDM - это просто наворот на xdm и, отключив PCDM, я скорее всего получу чистый xdm?
CityCat4: И снова добрый вечер!
В общем, установил я с горем пополам kdm. Ибо xdm у меня отказался запускаться напрочь - показывал мне терминал в 0-й консоли, а на 8-ю переключаться отказывался напрочь.
Та же ботва. причем, учитывая, что kdm также показывает список локальных юзеров, он, таки, тоже берет его из getent и, сдаётся мне, тоже фильтрует. И что в этой ситуации дальше ковырять?
З.Ы. напоминаю, что с консоли нужным пользователем прекрасно захожу и запускаю иксы... можно, конечно запилить скрипт, который после логина с консоли будет пускать иксы и оболочку, а всяческие DM-ы отключить нафиг, но как то это.......
CityCat4: День добрый! Есть свежие новости с фронта... ^_^
Залогиниться из kdm всё же получилось, пришлось установить слегка отличные от стандартных настройки для /usr/local/etc/pam.d/kde:
#
# $FreeBSD$
#
# PAM configuration for the "kde" service
#
И теперь проблема сводится к каноничному "как пропатчить kde под фрёй?"...
Логин успешно проходит, после чего я остаюсь наедине с консолью xterm-а(с одной единственной, что странно. когда меня в чистые иксы выкидывало - мне 3 консоли выдавали).
Если ввести в ней startkde - кеды радостно стартуют и работают. Автоматически, куда только ни ковырял - наотрез отказываются... т.е. ~/.xsession и ~/.xinitrc пересмотрены со всех сторон и под всеми возможными соусами...
Идеи?
CityCat4: эммм... зря вот тут не оставили смайлика, бьющегося головой ап стену.
Файл по умолчанию или засунут в неведомые дали или отсутствует напрочь, с гуглом пополам угадал место, в которое нужно положить конфиг, сгенерированный ГУЙем kde-шным. это оказалось /usr/local/share/config/kdm/kdmrc. Так вот, в нём ни слова о каталогах, про которые вы писали. Там про графику, каким юзерам разрешать логиниться и пр.
Есть еще /usr/local/share/xsessions/_kde4.desktop, тут ближе к теме, даже команды правильные указаны, но есть подозрения, что kdm сюда не смотрит.
Еще ловлю такую вот ошибку от kdm-а, пока затрудняюсь сказать, насколько связанную с проблемой:
klauncher(2226) kdemain: No DBUS session-bus found. Check if you have started the DBUS server.
kdeinit4: Communication error with launcher. Exiting!
kdmgreet(2221)/kdecore (K*TimeZone*): KSystemTimeZones: ktimezoned initialize() D-Bus call failed: "Not connected to D-Bus server"
Нашел такой вот хороший ман по kdm. https://wiki.archlinux.org/index.php/KDM
Попытался скопировать в каталог kdm файл Xsession из xdm-а. Ничего не дало...
У вас в какой секции указанные выше строки?
Секция полностью. Файлы лежат в каталоге /opt/trinity/share/config/tdm. Основной конфиг называется tdmrc - у меня Trinity DE, форк KDE3.5 Там же лежит гигантский откомментированный мастер-шаблон. Могу его отправить, пишите мыло, мой адрес в профиле. Только скажите, что написали, а то я ту почту не часто смотрю.
Насчет сообщения - D-BUS вообще установлен? D-BUS, насколько я понимаю, обязательный компонент. dbus, hal, policykit,consolekit...
CityCat4: итак, запилил наконец таки! помогло следующее:
1. Добавил в указанную выше секцию конфига kdm (/usr/local/share/config/kdm/kdmrc) строчку:
Session=/usr/local/share/config/kdm/Xsession
2. Стырил у своего же xdm файлик Xsession, расположил по правильному пути.
3. закинул пользователю в home файлик .xsession с содержанием:
#!/bin/sh
exec /usr/local/bin/startkde
Правда есть 2 глюка с кедами:
1. логин только через некоторое время после старта срабатывает(опять же, в консоли всё с ходу работало... )
2. отказываются работать кнопки отключения и перезагрузки...
но это, в сущности фигня. хотя с таким количеством фигни всё больше склоняюсь психануть и запилить себе фряху нормальную...