FreeBSD 12.1 + XRDP c авторизацией в AD

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Lazy caT
мл. сержант
Сообщения: 103
Зарегистрирован: 2008-09-11 9:59:17
Откуда: Местные мы...
Контактная информация:

FreeBSD 12.1 + XRDP c авторизацией в AD

Непрочитанное сообщение Lazy caT » 2019-12-25 16:05:36

Доброго времени суток, всем!

Может кто сталкивался с настройкой xRDP на FreeBSD?
Особенно, интересна связка XRDP с авторизацией в AD по средствам pam_winbind.

В принципе, XRDP на фре, запущено и работает с локальными пользователями. При попытке авторизации с помощью доменной учетки, xrdp-sesman юзера авторизует и передает обратно в xrdp что все SUCCESS но, xrdp на это говорит что: [ERROR] xrdp_wm_log_msg: Error finding username and password

xrdp-sesman.log

Код: Выделить всё

[20191225-15:06:31] [INFO ] A connection received from 127.0.0.1 port 18126
[20191225-15:06:31] [INFO ] Access permitted for user: DOMAIN\testuser
[20191225-15:06:31] [DEBUG] Closed socket 8 (AF_INET 127.0.0.1:3350)
xrdp.log

Код: Выделить всё

[20191225-15:06:18] [INFO ] Socket 11: AF_INET connection received from 192.168.1.12 port 51922
[20191225-15:06:18] [DEBUG] Closed socket 11 (AF_INET 192.168.10.211:3389)
[20191225-15:06:18] [DEBUG] Closed socket 10 (AF_INET 0.0.0.0:3389)
[20191225-15:06:19] [DEBUG] Security layer: requested 3, selected 0
[20191225-15:06:19] [DEBUG] Closed socket 11 (AF_INET 192.168.10.211:3389)
[20191225-15:06:19] [INFO ] Socket 11: AF_INET connection received from 192.168.1.12 port 51923
[20191225-15:06:19] [DEBUG] Closed socket 11 (AF_INET 192.168.10.211:3389)
[20191225-15:06:19] [DEBUG] Closed socket 10 (AF_INET 0.0.0.0:3389)
[20191225-15:06:19] [DEBUG] Security layer: requested 0, selected 0
[20191225-15:06:19] [INFO ] connected client computer name: IT-COMP
[20191225-15:06:19] [INFO ] adding channel item name rdpdr chan_id 1004 flags 0x80800000
[20191225-15:06:19] [INFO ] adding channel item name rdpsnd chan_id 1005 flags 0xc0000000
[20191225-15:06:19] [INFO ] adding channel item name drdynvc chan_id 1006 flags 0xc0800000
[20191225-15:06:19] [INFO ] adding channel item name cliprdr chan_id 1007 flags 0xc0a00000
[20191225-15:06:19] [INFO ] Non-TLS connection established from 192.168.1.12 port 51923: encrypted with standard RDP security
[20191225-15:06:20] [DEBUG] xrdp_00001235_wm_login_mode_event_00000001
[20191225-15:06:20] [INFO ] Loading keymap file /usr/local/etc/xrdp/km-00000409.ini
[20191225-15:06:20] [WARN ] local keymap file for 0x00000409 found and doesn't match built in keymap, using local keymap file
[20191225-15:06:31] [DEBUG] xrdp_wm_log_msg: Please wait, we now perform access control...
[20191225-15:06:31] [INFO ] IPv6 not supported, falling back to IPv4
[20191225-15:06:31] [DEBUG] Closed socket 15 (AF_INET 127.0.0.1:18126)
[20191225-15:06:31] [WARN ] getsockname() failed on socket 15: Bad file descriptor
[20191225-15:06:31] [INFO ] xrdp_wm_log_msg: Reply from access control: Success
[20191225-15:06:31] [DEBUG] xrdp_wm_log_msg: connecting to sesman ip 127.0.0.1 port 3350
[20191225-15:06:31] [INFO ] IPv6 not supported, falling back to IPv4
[20191225-15:06:31] [INFO ] xrdp_wm_log_msg: sesman connect ok
[20191225-15:06:31] [DEBUG] xrdp_wm_log_msg: sending login info to session manager, please wait...
[20191225-15:06:31] [ERROR] xrdp_wm_log_msg: Error finding username and password
[20191225-15:06:31] [DEBUG] return value from xrdp_mm_connect 1
debug.log, то что PAM говорит по поводу авторизации:

Код: Выделить всё

Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in openpam_dispatch(): calling pam_sm_authenticate() in /usr/local/lib/pam_winbind.so
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: pam_winbind(xrdp-sesman): [pamh: 0x800afe000] ENTER: pam_sm_authenticate (flags: 0x0000)
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_user(): entering
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_USER
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_user(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: pam_winbind(xrdp-sesman): getting password (0x00000001)
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_CONV
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_item(): entering: PAM_AUTHTOK
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_AUTHTOK
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: pam_winbind(xrdp-sesman): request wbcLogonUser succeeded
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_data(): entering: 'PAM_WINBIND_HOMEDIR'
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_data(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_data(): entering: 'PAM_WINBIND_LOGONSERVER'
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_data(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_item(): entering: PAM_USER
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_data(): entering: 'PAM_WINBIND_NEW_AUTHTOK_REQD'
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_set_data(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: pam_winbind(xrdp-sesman): [pamh: 0x800afe000] LEAVE: pam_sm_authenticate returning 0 (PAM_SUCCESS)
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in openpam_dispatch(): /usr/local/lib/pam_winbind.so: pam_sm_authenticate(): Success
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in openpam_dispatch(): calling pam_sm_acct_mgmt() in /usr/local/lib/pam_winbind.so
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: pam_winbind(xrdp-sesman): [pamh: 0x800afe000] ENTER: pam_sm_acct_mgmt (flags: 0x0000)
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_user(): entering
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_USER
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_user(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_data(): entering: 'PAM_WINBIND_NEW_AUTHTOK_REQD'
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_data(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): entering: PAM_SERVICE
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in pam_get_item(): returning PAM_SUCCESS
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: pam_winbind(xrdp-sesman): [pamh: 0x800afe000] LEAVE: pam_sm_acct_mgmt returning 0 (PAM_SUCCESS)
Dec 25 15:06:31 vTerm-BSD xrdp-sesman[4644]: in openpam_dispatch(): /usr/local/lib/pam_winbind.so: pam_sm_acct_mgmt(): Success
в /usr/local/etc/pam.d/xrdp-sesman вроде стандартно всё, именно так как разработчики пишут у себя в wiki:

Код: Выделить всё

#%PAM-1.0
auth        include     system
account     include     system
password    include     system
session     include     system
в /usr/pam.d/system тоже вроде всё как обычно:

Код: Выделить всё

#
# $FreeBSD: releng/12.1/lib/libpam/pam.d/system 197769 2009-10-05 09:28:54Z des $
#
# System-wide defaults
#

# auth
auth            sufficient      pam_opie.so             no_warn no_fake_prompts
auth            requisite       pam_opieaccess.so       no_warn allow_local
auth            sufficient      /usr/local/lib/pam_winbind.so debug
#auth           sufficient      pam_krb5.so             no_warn try_first_pass
#auth           sufficient      pam_ssh.so              no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass nullok

# account
account         sufficient      /usr/local/lib/pam_winbind.so debug
#account        required        pam_krb5.so
account         required        pam_login_access.so
account         required        pam_unix.so

# session
#session        optional        pam_ssh.so              want_agent
session         required        pam_lastlog.so          no_fail
#session                required        pam_mkhomedir.so        umask=0077 skel=/usr/share/skel/

# password
password        sufficient      /usr/local/lib/pam_winbind.so debug
#password       sufficient      pam_krb5.so             no_warn try_first_pass
password        required        pam_unix.so             no_warn try_first_pass
в выдаче команды wbinfo -u и wbinfo -g показываются пользователи и группы

в конфиге samba:

Код: Выделить всё

# Global parameters
[global]
    netbios name = vTerm-BSD
    realm = DOMAIN.LOC
    workgroup = DOMAIN
    security = ADS

    winbind enum groups = Yes
    winbind enum users = Yes
    winbind nss info = rfc2307

    idmap config * : range = 2000-9999
    idmap config * : backend = tdb

    template shell = /bin/sh
    template homedir = /home/%D/%U

xrdp.ini, кусок с настройками авторизации в домене:

Код: Выделить всё

[Domain Auth]
name=DOMAIN
lib=libxup.so
pamusername=ask
pampassword=ask
#pamusername=asksame
#pampassword=asksame
pamsessionmng=127.0.0.1
ip=127.0.0.1
port=-1
code=20
А, да, чуть не забыл. в конфиге /etc/pam.d/system закомментирован pam_mkhomedir.so, хотел чтобы, при авторизации доменного пользователя, создавался его профиль но, что-то где-то не углядел, профиль так и не создается, поэтому закомментирован. Жаль конечно, может есть какие-то альтернативные варианты?

Так вот, основной вопрос, почему xrdp выдает ошибку Error finding username and password, если, судя по логу debug.log и xrdp-sesman.log, авторизация пользователя в домене проходит успешно?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Lazy caT
мл. сержант
Сообщения: 103
Зарегистрирован: 2008-09-11 9:59:17
Откуда: Местные мы...
Контактная информация:

FreeBSD 12.1 + XRDP c авторизацией в AD

Непрочитанное сообщение Lazy caT » 2019-12-27 22:03:14

Вопрос снимается... Это "косяк" в коде xrdp... :)

в файле work/xrdp-0.9.11/xrdp/xrdp_mm.c есть функция xrdp_mm_send_login, которая, судя по коментарию
передает в xrdp-sesman данные логин/пароль и т.д. из полей доменной авторизации pamusername и pampassword.
Так вот, проверяет она поля ТОЛЬКО username и password, а поля-то при доменной авторизации, по другому называются... :)
Вообщем, что было, там в коде где-то начиная со строки 185 есть цикл:

Код: Выделить всё

    for (index = 0; index < count; index++)
    {
        name = (char *)list_get_item(self->login_names, index);
        value = (char *)list_get_item(self->login_values, index);

        if (g_strcasecmp(name, "username") == 0)
        {
            username = value;
        }
        else if (g_strcasecmp(name, "password") == 0)
        {
            password = value;
        }
        else if (g_strcasecmp(name, "code") == 0)
        {
            /* this code is either 0 for Xvnc, 10 for X11rdp or 20 for Xorg */
            self->code = g_atoi(value);
        }
        else if (g_strcasecmp(name, "xserverbpp") == 0)
        {
            xserverbpp = g_atoi(value);
        }
    }
в этом цикле в процедуры проверки полей username и password надо дополнить проверкой ещё и доменных полей pamusername и pampassword :

Код: Выделить всё

    for (index = 0; index < count; index++)
    {
        name = (char *)list_get_item(self->login_names, index);
        value = (char *)list_get_item(self->login_values, index);

        if ((g_strcasecmp(name, "username") == 0) || (g_strcasecmp(name, "pamusername") == 0))
        {
            username = value;
        }
        else if ((g_strcasecmp(name, "password") == 0) || (g_strcasecmp(name, "pampassword") == 0))
        {
            password = value;
        }
        else if (g_strcasecmp(name, "code") == 0)
        {
            /* this code is either 0 for Xvnc, 10 for X11rdp or 20 for Xorg */
            self->code = g_atoi(value);
        }
        else if (g_strcasecmp(name, "xserverbpp") == 0)
        {
            xserverbpp = g_atoi(value);
        }
    }
ну, собственно и всё... :)

как бы это разработчикам отправить... Жаль у меня с аглицким - бяда совсем... :(

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35476
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

FreeBSD 12.1 + XRDP c авторизацией в AD

Непрочитанное сообщение Alex Keda » 2019-12-27 22:10:07

а вы без слов, просто дифф отправьте =)
умный поймёт, а дураку всё равно ничего не объясните
Убей их всех! Бог потом рассортирует...