Bug 37241 - Ошибка вызова net ads gpo list для пользователя
Summary: Ошибка вызова net ads gpo list для пользователя
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: samba-common-tools (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Evgeny Sinelnikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-09-19 16:50 MSK by Andrey Cherepanov
Modified: 2019-09-25 10:34 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Cherepanov 2019-09-19 16:50:07 MSK
$ net ads gpo list ivanov
create_local_private_krb5_conf_for_domain: smb_mkstemp failed, for file /var/lib/samba/smb_tmp_krb5.WESwBt. Errno Отказано в доступе
user: 'ivanov' has dn: 'CN=Иван Иванов,OU=Бухгалтерия,OU=Holding,DC=alt,DC=domain'
Failed to open /var/lib/samba/private/secrets.tdb
PANIC (pid 5862): could not open secrets db
BACKTRACE: 20 stack frames:
 #0 /usr/lib64/libsamba-util.so.0(log_stack_trace+0x2d) [0x7f363efa05ed]
 #1 /usr/lib64/libsmbconf.so.0(smb_panic_s3+0x20) [0x7f363ddf4390]
 #2 /usr/lib64/libsamba-util.so.0(smb_panic+0x2f) [0x7f363efa06ef]
 #3 /usr/lib64/samba/libsecrets3-samba4.so(+0xf373) [0x7f363b7ba373]
 #4 /usr/lib64/samba/libsecrets3-samba4.so(sid_check_is_our_sam+0x9) [0x7f363b7ba3b9]
 #5 /usr/lib64/samba/libsecrets3-samba4.so(sid_check_is_in_our_sam+0x32) [0x7f363b7ba402]
 #6 /usr/lib64/libsamba-passdb.so.0(sid_check_object_is_for_passdb+0x9) [0x7f363f631c79]
 #7 /usr/lib64/libsamba-passdb.so.0(pdb_sid_to_id+0x27) [0x7f363f63ba47]
 #8 /usr/lib64/libsamba-passdb.so.0(+0x18f9c) [0x7f363f631f9c]
 #9 /usr/lib64/libsamba-passdb.so.0(+0x19090) [0x7f363f632090]
 #10 /usr/lib64/libsamba-passdb.so.0(sid_to_uid+0xe9) [0x7f363f634999]
 #11 /usr/lib64/samba/libauth-samba4.so(+0xab6e) [0x7f363a2d2b6e]
 #12 /usr/lib64/samba/libauth-samba4.so(create_local_nt_token+0x7a) [0x7f363a2d3d0a]
 #13 /usr/lib64/samba/libgpext-samba4.so(ads_get_sid_token+0x1b7) [0x7f363e04ca57]
 #14 net(+0x727a5) [0x55d5b94097a5]
 #15 net(net_ads_gpo+0x47) [0x55d5b940a037]
 #16 net(net_ads+0x47) [0x55d5b93d5c37]
 #17 net(main+0x973) [0x55d5b93ba383]
 #18 /lib64/libc.so.6(__libc_start_main+0xf0) [0x7f36385267f0]
 #19 net(_start+0x29) [0x55d5b93ba639]
Can not dump core: corepath not set up
Comment 1 Evgeny Sinelnikov 2019-09-22 16:15:47 MSK
Проблему воспроизвёл:

[administrator@clw0 ~]$ kinit 
Password for administrator@DOMAIN.ALT: 
Warning: Your password will expire in 40 days on Fri Nov  1 23:03:51 2019
[administrator@clw0 ~]$ net ads gpo list Administrator -k yes
create_local_private_krb5_conf_for_domain: smb_mkstemp failed, for file /var/lib/samba/smb_tmp_krb5.vpaEDU. Errno Permission denied
user: 'Administrator' has dn: 'CN=Administrator,CN=Users,DC=domain,DC=alt'
Failed to open /var/lib/samba/private/secrets.tdb
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open /var/lib/samba/private/secrets.tdb
PANIC (pid 20069): could not open secrets db
BACKTRACE: 19 stack frames:
 #0 /usr/lib64/libsamba-util.so.0(log_stack_trace+0x2d) [0x7f2ea82dd5ed]
 #1 /usr/lib64/libsmbconf.so.0(smb_panic_s3+0x20) [0x7f2ea71312d0]
 #2 /usr/lib64/libsamba-util.so.0(smb_panic+0x2f) [0x7f2ea82dd6ef]
 #3 /usr/lib64/samba/libsecrets3-samba4.so(+0xf373) [0x7f2ea4af8373]
 #4 /usr/lib64/samba/libsecrets3-samba4.so(sid_check_is_our_sam+0x9) [0x7f2ea4af83b9]
 #5 /usr/lib64/samba/libsecrets3-samba4.so(sid_check_is_in_our_sam+0x32) [0x7f2ea4af8402]
 #6 /usr/lib64/libsamba-passdb.so.0(sid_check_object_is_for_passdb+0x9) [0x7f2ea896ec79]
 #7 /usr/lib64/libsamba-passdb.so.0(pdb_sid_to_id+0x27) [0x7f2ea8978a27]
 #8 /usr/lib64/libsamba-passdb.so.0(pdb_create_builtin+0x85) [0x7f2ea8974df5]
 #9 /usr/lib64/libsamba-passdb.so.0(create_builtin_administrators+0x2d) [0x7f2ea8974f5d]
 #10 /usr/lib64/samba/libauth-samba4.so(finalize_local_nt_token+0x2cd) [0x7f2ea36172ed]
 #11 /usr/lib64/samba/libauth-samba4.so(create_local_nt_token+0x98) [0x7f2ea3617cb8]
 #12 /usr/lib64/samba/libgpext-samba4.so(ads_get_sid_token+0x1b7) [0x7f2ea7389a57]
 #13 net(+0x727a5) [0x556b463f87a5]
 #14 net(net_ads_gpo+0x47) [0x556b463f9037]
 #15 net(net_ads+0x47) [0x556b463c4c37]
 #16 net(main+0x973) [0x556b463a9383]
 #17 /lib64/libc.so.6(__libc_start_main+0xf0) [0x7f2ea186a7f0]
 #18 net(_start+0x29) [0x556b463a9639]
Can not dump core: corepath not set up
[administrator@clw0 ~]$ klist 
Ticket cache: KEYRING:persistent:199400500:199400500
Default principal: administrator@DOMAIN.ALT

Valid starting     Expires            Service principal
09/22/19 12:44:43  09/22/19 22:44:39  ldap/dc0.domain.alt@DOMAIN.ALT
        renew until 09/29/19 12:44:36
09/22/19 12:44:39  09/22/19 22:44:39  krbtgt/DOMAIN.ALT@DOMAIN.ALT
        renew until 09/29/19 12:44:36


Ошибку можно решать по-разному. Вопрос тут возникает такой: "Какие из команд net ads gpo, вообще, должны исполняться из-под не привелигированного пользователя?"

В целом, процедура поиска назначенных объектов GPO, кеширования их хранилища из SYSVOL и применения самих политик, должна исполняться из-под привилегированного пользователя. Пользователь же не сам себе политики назначает. Они ему прилетает в принудительном порядке. И только скрипты, для которых явно указано, что их нужно запускать в окружении пользователя могут быть запущены из-под самого пользователя.

В общем, если запускать из-под рута с учётными данными самой машины всё отрабатывает:

[root@clw0 ~]# kinit -k CLW0$
[root@clw0 ~]# net ads gpo list Administrator -k yes 2>&1 |grep ^filesyspath:
filesyspath:            (null)
filesyspath:            \\domain.alt\sysvol\domain.alt\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}
[root@clw0 ~]# klist 
Ticket cache: KEYRING:persistent:0:0
Default principal: CLW0$@DOMAIN.ALT

Valid starting     Expires            Service principal
09/22/19 12:39:34  09/22/19 22:39:30  ldap/dc0.domain.alt@DOMAIN.ALT
        renew until 09/29/19 12:39:30
09/22/19 12:39:30  09/22/19 22:39:30  krbtgt/DOMAIN.ALT@DOMAIN.ALT
        renew until 09/29/19 12:39:30
[root@clw0 ~]# rpm -qf /usr/bin/net
samba-common-tools-4.9.13-alt1

А пользователю этот инструмент нужен, скорее, для тестов. Или как? Как net ads gpo предполагается использовать из-под пользователя?
Comment 2 Evgeny Sinelnikov 2019-09-22 22:43:48 MSK
Если внимательно посмотреть на вывод ошибки, то станет понятно, что проблема не правах доступа на каталог для временного файла приватных настроек krb5.conf, как это видно из начала лога ошибки:
create_local_private_krb5_conf_for_domain: smb_mkstemp failed, for file
/var/lib/samba/smb_tmp_krb5.WESwBt. Errno Отказано в доступе

А в том, что (как я это и описывал выше) "by design" предполагается, что операции над объектами GPO выполняются с правами рута (при этом используются учетные данные из кеша по умолчанию или запрашивается пароль). Судя по коду отваливается всё в функции ads_get_sid_token(), которая через цепочку вызовов обращается к get_global_sam_sid(), которому нужен доступ к secrets.tdb.

В свою очередь доступ к secrets.tdb каждому пользователю дать никак нельзя - кроме сида домена, там лежит пароль машины.

[root@clw0 ~]# tdbdump /var/lib/samba/private/secrets.tdb | grep ^key
key(16) = "SECRETS/SID/CLW0"
key(18) = "SECRETS/SID/DOMAIN"
key(34) = "SECRETS/MACHINE_DOMAIN_INFO/DOMAIN"
key(39) = "SECRETS/MACHINE_SEC_CHANNEL_TYPE/DOMAIN"
key(31) = "SECRETS/MACHINE_PASSWORD/DOMAIN"
key(26) = "SECRETS/PROTECT/IDS/DOMAIN"
key(39) = "SECRETS/MACHINE_LAST_CHANGE_TIME/DOMAIN"
key(22) = "SECRETS/DOMGUID/DOMAIN"
key(40) = "SECRETS/SALTING_PRINCIPAL/DES/DOMAIN.ALT"

secrets_db_ctx()
 <- get_global_sam_sid() 
 <- sid_check_is_our_sam()
 <- sid_check_is_in_our_sam()
 <- sid_check_object_is_for_passdb()
 <- pdb_sid_to_id()
 <- pdb_create_builtin()
 <- create_builtin_administrators
 <- finalize_local_nt_token
 <- create_local_nt_token()
 <- ads_get_sid_token()
...
Comment 3 Evgeny Sinelnikov 2019-09-22 22:47:38 MSK
Если дать всем права на запись в /var/lib/samba и /var/lib/samba/smb_krb5, проблема будет выглядеть почти также:

[administrator@clw0 ~]$ ls -ld /var/lib/samba/
drwxrwxrwx 7 root root 4096 Sep 22 19:42 /var/lib/samba/
[administrator@clw0 ~]$ ls -ld /var/lib/samba/smb_krb5/
drwxrwxrwx 2 root root 4096 Sep 22 19:42 /var/lib/samba/smb_krb5/

[administrator@clw0 ~]$ net ads gpo list Administrator
user: 'Administrator' has dn: 'CN=Administrator,CN=Users,DC=domain,DC=alt'
Failed to open /var/lib/samba/private/secrets.tdb
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open /var/lib/samba/private/secrets.tdb
PANIC (pid 21848): could not open secrets db
BACKTRACE: 19 stack frames:
 #0 /usr/lib64/libsamba-util.so.0(log_stack_trace+0x2d) [0x7f99bff455ed]
 #1 /usr/lib64/libsmbconf.so.0(smb_panic_s3+0x20) [0x7f99bed992d0]
 #2 /usr/lib64/libsamba-util.so.0(smb_panic+0x2f) [0x7f99bff456ef]
 #3 /usr/lib64/samba/libsecrets3-samba4.so(+0xf373) [0x7f99bc760373]
 #4 /usr/lib64/samba/libsecrets3-samba4.so(sid_check_is_our_sam+0x9) [0x7f99bc7603b9]
 #5 /usr/lib64/samba/libsecrets3-samba4.so(sid_check_is_in_our_sam+0x32) [0x7f99bc760402]
 #6 /usr/lib64/libsamba-passdb.so.0(sid_check_object_is_for_passdb+0x9) [0x7f99c05d6c79]
 #7 /usr/lib64/libsamba-passdb.so.0(pdb_sid_to_id+0x27) [0x7f99c05e0a27]
 #8 /usr/lib64/libsamba-passdb.so.0(pdb_create_builtin+0x85) [0x7f99c05dcdf5]
 #9 /usr/lib64/libsamba-passdb.so.0(create_builtin_administrators+0x2d) [0x7f99c05dcf5d]
 #10 /usr/lib64/samba/libauth-samba4.so(finalize_local_nt_token+0x2cd) [0x7f99bb27f2ed]
 #11 /usr/lib64/samba/libauth-samba4.so(create_local_nt_token+0x98) [0x7f99bb27fcb8]
 #12 /usr/lib64/samba/libgpext-samba4.so(ads_get_sid_token+0x1b7) [0x7f99beff1a57]
 #13 net(+0x727a5) [0x564e789c97a5]
 #14 net(net_ads_gpo+0x47) [0x564e789ca037]
 #15 net(net_ads+0x47) [0x564e78995c37]
 #16 net(main+0x973) [0x564e7897a383]
 #17 /lib64/libc.so.6(__libc_start_main+0xf0) [0x7f99b94d27f0]
 #18 net(_start+0x29) [0x564e7897a639]
Can not dump core: corepath not set up

[administrator@clw0 ~]$ klist 
Ticket cache: KEYRING:persistent:199400500:199400500
Default principal: administrator@DOMAIN.ALT

Valid starting     Expires            Service principal
09/22/19 12:44:43  09/22/19 22:44:39  ldap/dc0.domain.alt@DOMAIN.ALT
        renew until 09/29/19 12:44:36
09/22/19 12:44:39  09/22/19 22:44:39  krbtgt/DOMAIN.ALT@DOMAIN.ALT
        renew until 09/29/19 12:44:36
Comment 4 Evgeny Sinelnikov 2019-09-22 23:05:09 MSK
При этом, если вычистить из secrets.tdb секретные данные и задать права на запись, то всё начинает отрабатывать, но не вполне понятно с какими ещё ограничениями, поскольку вываливается куча лишних сообщения вида:
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open account policy database

[administrator@clw0 ~]$ ls -l /var/lib/samba/private/secrets.tdb
lrwxrwxrwx 1 root root 15 Sep 22 19:50 /var/lib/samba/private/secrets.tdb -> secretsdata.tdb
[administrator@clw0 ~]$ ls -l /var/lib/samba/private/secretsdata.tdb
-rw-rw-rw- 1 root root 561152 Sep 22 19:53 /var/lib/samba/private/secretsdata.tdb

[administrator@clw0 ~]$ tdbdump /var/lib/samba/private/secrets.tdb
{
key(16) = "SECRETS/SID/CLW0"
data(68) = "\01\04\00\00\00\00\00\05\15\00\00\00[\EE\D1\8E\F0\1Bz\F9\93\A6\ED\FE\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
}
{
key(18) = "SECRETS/SID/DOMAIN"
data(68) = "\01\04\00\00\00\00\00\05\15\00\00\00\D7\CF1\1A\B9 \07\05M\C2\F1\C7\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\13[\85]\00\00\00\00\FF\1A\0D\00\00\00\00\00@c\D6%\F7\7F\00\00\90\CCre"
}
{
key(22) = "SECRETS/DOMGUID/DOMAIN"
data(16) = "\F4\048\BE\D9\C1\FD@\B1\F6\C0\BA\98\BD\8B\83"
}

[administrator@clw0 ~]$ net ads gpo list Administrator              
user: 'Administrator' has dn: 'CN=Administrator,CN=Users,DC=domain,DC=alt'
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open group mapping database: Permission denied
Failed to initialise tdb mapping backend
failed to initialize group mapping
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
Failed to open account policy database
---------------------

name:                   Local Policy
displayname:            Local Policy
version:                0 (0x00000000)
version_user:           0 (0x0000)
version_machine:        0 (0x0000)
filesyspath:            (null)
dspath:         (null)
options:                0 GPFLAGS_ALL_ENABLED
link:                   (null)
link_type:              5 machine_extensions:   (null)
user_extensions:        (null)
---------------------

name:                   {31B2F340-016D-11D2-945F-00C04FB984F9}
displayname:            Default Domain Policy
version:                0 (0x00000000)
version_user:           0 (0x0000)
version_machine:        0 (0x0000)
filesyspath:            \\domain.alt\sysvol\domain.alt\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}
dspath:         CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=domain,DC=alt
options:                0 GPFLAGS_ALL_ENABLED
link:                   DC=domain,DC=alt
link_type:              3 GP_LINK_DOMAIN
machine_extensions:     [{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{53D6AB1B-2488-11D1-A28C-00C04FB94F17}][{827D319E-6EAC-11D2-A4EA-00C04F79F83A}{803E14A0-B4FB-11D0-A0D0-00A0C90F574B}][{B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A}{53D6AB1B-2488-11D1-A28C-00C04FB94F17}]
        ---------------------

        name:                   [{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{53D6AB1B-2488-11D1-A28C-00C04FB94F17}][{827D319E-6EAC-11D2-A4EA-00C04F79F83A}{803E14A0-B4FB-11D0-A0D0-00A0C90F574B}][{B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A}{53D6AB1B-2488-11D1-A28C-00C04FB94F17}]
        extension:                      35378EAC-683F-11D2-A89A-00C04FBBCFA2
        extension (name):                       Registry Settings
        snapin:                 53D6AB1B-2488-11D1-A28C-00C04FB94F17
        snapin (name):                  unknown2
        extension:                      827D319E-6EAC-11D2-A4EA-00C04F79F83A
        extension (name):                       Security
        snapin:                 803E14A0-B4FB-11D0-A0D0-00A0C90F574B
        snapin (name):                  Security Settings
        extension:                      B1BE8D72-6EAC-11D2-A4EA-00C04F79F83A
        extension (name):                       EFS recovery
        snapin:                 53D6AB1B-2488-11D1-A28C-00C04FB94F17
        snapin (name):                  unknown2
user_extensions:        [{3060E8D0-7020-11D2-842D-00C04FA372D4}{3060E8CE-7020-11D2-842D-00C04FA372D4}][{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{0F6B957E-509E-11D1-A7CC-0000F87571E3}]
        ---------------------

        name:                   [{3060E8D0-7020-11D2-842D-00C04FA372D4}{3060E8CE-7020-11D2-842D-00C04FA372D4}][{35378EAC-683F-11D2-A89A-00C04FBBCFA2}{0F6B957E-509E-11D1-A7CC-0000F87571E3}]
        extension:                      3060E8D0-7020-11D2-842D-00C04FA372D4
        extension (name):                       unknown
        snapin:                 3060E8CE-7020-11D2-842D-00C04FA372D4
        snapin (name):                  Remote Installation Services
        extension:                      35378EAC-683F-11D2-A89A-00C04FBBCFA2
        extension (name):                       Registry Settings
        snapin:                 0F6B957E-509E-11D1-A7CC-0000F87571E3
        snapin (name):                  (null)
security descriptor:
Comment 5 Andrey Cherepanov 2019-09-23 13:11:11 MSK
Предлагаешь запустить под root демон, который под билетом машины будет периодически проверять GPO для машины и являться прокси-сервером для net ads gpo list <пользователь> через unix-socket? Это решило бы проблемы с правами.
Comment 6 Evgeny Sinelnikov 2019-09-23 15:57:12 MSK
(In reply to comment #5)
> Предлагаешь запустить под root демон, который под билетом машины будет
> периодически проверять GPO для машины и являться прокси-сервером для net ads
> gpo list <пользователь> через unix-socket? Это решило бы проблемы с правами.

У меня реализовано расширение для oddjob. Пакету oddjob-gpdupdate необходим скрипт  gpupdate. oddjob работает через dbus именно так, как ты описал. Кроме такой возможности (выполнить заданное рутовое приложение по запросу) в пакет oddjob-gpupdate входит соответствующий pam-модуль, который вызывает всё тот же dbus в момент логина.

Не стоит расчитывать, что пользователь сможет настроить всё, что нужно со своими правами, поэтому я рассчитывал не на прокси, а на su в пользователя в самом gpupdate. То есть всё выполняется под рутом, а том, что нужно выполнить из-под пользователя, запускается в процессе, который урезает себя до пользователя при необходимости. Вслед за модулем pam_oddjob_gpupdate выполнятеся модуль pam_env user_readenv=1 user_envfile=.policy_environment, который применяет переменные окружения.

В итоге, предлгаю в качестве такого root-демона использовать существующий oddjob.
Comment 7 Andrey Cherepanov 2019-09-23 16:54:07 MSK
(В ответ на комментарий №6)
> (In reply to comment #5)
> > Предлагаешь запустить под root демон, который под билетом машины будет
> > периодически проверять GPO для машины и являться прокси-сервером для net ads
> > gpo list <пользователь> через unix-socket? Это решило бы проблемы с правами.
> 
> У меня реализовано расширение для oddjob. Пакету oddjob-gpdupdate необходим
> скрипт  gpupdate. oddjob работает через dbus именно так, как ты описал. Кроме
> такой возможности (выполнить заданное рутовое приложение по запросу) в пакет
> oddjob-gpupdate входит соответствующий pam-модуль, который вызывает всё тот же
> dbus в момент логина.
> 
> Не стоит расчитывать, что пользователь сможет настроить всё, что нужно со
> своими правами, поэтому я рассчитывал не на прокси, а на su в пользователя в
> самом gpupdate. То есть всё выполняется под рутом, а том, что нужно выполнить
> из-под пользователя, запускается в процессе, который урезает себя до
> пользователя при необходимости. Вслед за модулем pam_oddjob_gpupdate
> выполнятеся модуль pam_env user_readenv=1 user_envfile=.policy_environment,
> который применяет переменные окружения.
> 
> В итоге, предлгаю в качестве такого root-демона использовать существующий
> oddjob.

Это также потребует кардинального изменения стека аутентификации, дополнительной настройки окружения из локальных файлов, потери билета Kerberos и возможности периодического обновления машинного GPO.
Comment 8 Evgeny Sinelnikov 2019-09-23 21:01:50 MSK
(In reply to comment #7)
> (В ответ на комментарий №6)
... 
> > В итоге, предлгаю в качестве такого root-демона использовать существующий
> > oddjob.
> 
> Это также потребует кардинального изменения стека аутентификации,
> дополнительной настройки окружения из локальных файлов, потери билета Kerberos
> и возможности периодического обновления машинного GPO.

Ничего кардинального не вижу.
common-login объявлен как noreplace, в него нужно дописать одну строчку:
session substack system-policy

В файл system-policy нужно написать:
-session        optional        pam_applygpo.so
-session        optional        pam_env.so user_readenv=1 user_envfile=.policy_environment

Дополнительная настройка для применения политик, так или иначе, всё равно потребуется. Где-то должно быть прописано, что нужно обновить политики для заданного пользователя. Политики должны отрабатывать до начала процесса логина. Иначе всё это применение будет глючить и требовать перелогина.

Потеря билета Kerberos для какой задачи? Политики редко выполняются от имени пользователя - он настраивают окружение. Если задача состоит в том, что нужно запускать из-под пользователя не явно в фоне какие-то скрипты, то это плохая идея. Это сложно отлаживать и это приводит непредсказуемому поведению окружения пользователя. Если задача в том, чтобы отработать скрипты при старте логина, то файл скрипта гененрируется и кладётся в окружение пользователя.

Возможность периодического обновления машинного GPO никак не зависит от oddjob. Периодическое обновление запускается точно также, как и без oddjob.
Comment 9 Evgeny Sinelnikov 2019-09-24 03:31:57 MSK
В целом, я предлагаю закрыть текущую проблему, как NOTABUG, поскольку желаемый функционал не заявлен по архитектуре. При этом для p9 и sisyphus данный функционал на клиенте доступен ещё и через утилиту samba-tool, а также через соответствующие питоновские модули.

Тут важно понимать, что samba-tool у нас есть в двух вариантах - клиентский и серверный. На клиентах всё, включая питоновские модули слинковано с MIT Kerberos. Поэтому на клиентах достаточно установить пакет samba-dc-client, чтобы получить следующий функционал.

[root@clw1 ~]# samba-tool gpo 
Usage: samba-tool gpo <subcommand>

Group Policy Object (GPO) management.


Options:
  -h, --help  show this help message and exit


Available subcommands:
  aclcheck        - Check all GPOs have matching LDAP and DS ACLs.
  backup          - Backup a GPO.
  create          - Create an empty GPO.
  del             - Delete a GPO.
  dellink         - Delete GPO link from a container.
  fetch           - Download a GPO.
  getinheritance  - Get inheritance flag for a container.
  getlink         - List GPO Links for a container.
  list            - List GPOs for an account.
  listall         - List all GPOs.
  listcontainers  - List all linked containers for a GPO.
  restore         - Restore a GPO to a new container.
  setinheritance  - Set inheritance flag on a container.
  setlink         - Add or update a GPO link to a container.
  show            - Show information for a GPO.
For more help on a specific subcommand, please type: samba-tool gpo <subcommand> (-h|--help)

[root@clw1 ~]# samba-tool gpo listall | grep ^GPO
GPO          : {27910B1C-0EE1-4D5E-B75B-38C98BFF4479}
GPO          : {31B2F340-016D-11D2-945F-00C04FB984F9}
GPO          : {3D7514BF-508D-44E2-84CA-5BB0D433F0EC}
GPO          : {3E07047C-F85A-4EFB-8210-073AFE041261}
GPO          : {47615E9D-CE0D-4AA7-BED6-B452B3835D48}
GPO          : {67E3B0C0-0B51-4B98-BD39-CA5D9C297D96}
GPO          : {6AC1786C-016F-11D2-945F-00C04FB984F9}
GPO          : {A509A2FD-36FD-4107-9B98-9FEEE2DD31BF}
GPO          : {B8AB0798-44A4-4FCA-A7A7-8D911715E9E7}

[root@clw1 ~]# samba-tool gpo list Administrator
GPOs for user Administrator
    ADMX GPO {47615E9D-CE0D-4AA7-BED6-B452B3835D48}
    GPO Users {3E07047C-F85A-4EFB-8210-073AFE041261}
    Default Domain Policy {31B2F340-016D-11D2-945F-00C04FB984F9}
[root@clw1 ~]# samba-tool gpo list CLW1$
GPOs for user CLW1$
    ADMX GPO {47615E9D-CE0D-4AA7-BED6-B452B3835D48}
    GPO Users {3E07047C-F85A-4EFB-8210-073AFE041261}
    Default Domain Policy {31B2F340-016D-11D2-945F-00C04FB984F9}

[root@clw1 ~]# samba-tool gpo fetch '{47615E9D-CE0D-4AA7-BED6-B452B3835D48}'
Using temporary directory /tmp/.private/root/tmp8gke_mg2 (use --tmpdir to change)
GPO copied to /tmp/.private/root/tmp8gke_mg2/policy/{47615E9D-CE0D-4AA7-BED6-B452B3835D48}

[root@clw1 ~]# ls -l /tmp/.private/root/tmp8gke_mg2/policy/\{47615E9D-CE0D-4AA7-BED6-B452B3835D48\}/
total 12
-rw-r--r-- 1 root root   64 Sep 24 03:22 GPT.INI
drwxr-xr-x 4 root root 4096 Sep 24 03:22 Machine
drwxr-xr-x 2 root root 4096 Sep 24 03:22 User
           
[root@clw1 ~]# ls -l /tmp/.private/root/tmp8gke_mg2/policy/\{47615E9D-CE0D-4AA7-BED6-B452B3835D48\}/User/Registry.pol 
-rw-r--r-- 1 root root 382 Sep 24 03:22 /tmp/.private/root/tmp8gke_mg2/policy/{47615E9D-CE0D-4AA7-BED6-B452B3835D48}/User/Registry.pol

[root@clw1 ~]# samba-tool gpo backup '{47615E9D-CE0D-4AA7-BED6-B452B3835D48}'
Using temporary directory /tmp/.private/root/tmpw6jnokel (use --tmpdir to change)
GPO copied to /tmp/.private/root/tmpw6jnokel/policy/{47615E9D-CE0D-4AA7-BED6-B452B3835D48}

[root@clw1 ~]# ls /tmp/.private/root/tmpw6jnokel/policy/\{47615E9D-CE0D-4AA7-BED6-B452B3835D48\}/
GPT.INI.SAMBABACKUP  GPT.INI.xml  Machine  User
[root@clw1 ~]# cat /tmp/.private/root/tmpw6jnokel/policy/\{47615E9D-CE0D-4AA7-BED6-B452B3835D48\}/GPT.INI.xml
<?xml version="1.0" encoding="utf-8"?>
<IniFile>
        <Section name="General">
                <Parameter>
                        <Key>Version</Key>
                        <Value>131074</Value>
                </Parameter>
                <Parameter>
                        <Key>displayName</Key>
                        <Value>New Group Policy Object</Value>
                </Parameter>
        </Section>
</IniFile>

[root@clw1 ~]# cat /tmp/.private/root/tmpw6jnokel/policy/\{47615E9D-CE0D-4AA7-BED6-B452B3835D48\}/User/Registry.pol.
Registry.pol.SAMBABACKUP  Registry.pol.xml          

[root@clw1 ~]# cat /tmp/.private/root/tmpw6jnokel/policy/\{47615E9D-CE0D-4AA7-BED6-B452B3835D48\}/User/Registry.pol.xml 
<?xml version="1.0" encoding="utf-8"?>
<PolFile num_entries="2" signature="PReg" version="1">
        <Entry type="4" type_name="REG_DWORD">
                <Key>Software\Microsoft\Windows\CurrentVersion\Policies\ActiveDesktop</Key>
                <ValueName>NoDeletingComponents</ValueName>
                <Value>1</Value>
        </Entry>
        <Entry type="4" type_name="REG_DWORD">
                <Key>Software\Microsoft\Windows\CurrentVersion\Policies\System</Key>
                <ValueName>NoDispSettingsPage</ValueName>
                <Value>1</Value>
        </Entry>
</PolFile>

[root@clw1 ~]# cat /tmp/.private/root/tmpw6jnokel/policy/\{47615E9D-CE0D-4AA7-BED6-B452B3835D48\}/Machine/
Applications/
Registry.pol.SAMBABACKUP
Registry.pol.xml
Scripts/

[root@clw1 ~]# cat /tmp/.private/root/tmpw6jnokel/policy/\{47615E9D-CE0D-4AA7-BED6-B452B3835D48\}/Machine/Registry.pol.xml 
<?xml version="1.0" encoding="utf-8"?>
<PolFile num_entries="2" signature="PReg" version="1">
        <Entry type="4" type_name="REG_DWORD">
                <Key>Software\BaseALT\Policies\Control</Key>
                <ValueName>ExecuteSuProgram</ValueName>
                <Value>1</Value>
        </Entry>
        <Entry type="4" type_name="REG_DWORD">
                <Key>Software\Microsoft\Windows\CurrentVersion\Policies\Explorer</Key>
                <ValueName>UseDefaultTile</ValueName>
                <Value>1</Value>
        </Entry>
</PolFile>

Данный функционал также предназначен для работы только из-под рута, поскольку аналогично предыдущему net ads gpo list использует /var/lib/samba/private/secrets.tdb
Comment 10 Andrey Cherepanov 2019-09-25 10:34:32 MSK
NOTABUG