Автор Тема: mount.cifs и cruid при монтировании  (Прочитано 360 раз)

Оффлайн kl0p

  • Завсегдатай
  • *
  • Сообщений: 24
Здравствуйте

P9, компьютер введён в домен Windows. Пытаюсь примонтировать сетевые диски с сервера Windows Server 2008 R2 Std с помощью automount, положив в /etc/systemd/system файл mnt-data.automount
[Unit]
Description=CIFS
Requires=network-online.target
[Automount]
Where=/mnt/data
TimeoutIdleSec=300
[Install]
WantedBy=multi-user.target
и файлик mnt-data.mount
[Unit]
Description=CIFS
Requires=network-online.target
After=network-online.service
[Mount]
What=//svr1/data
Where=/mnt/data
Options=rw,sec=krb5,domain=MY.DOMAIN
Type=cifs
[Install]
WantedBy=multi-user.target
После этого
systemctl daemon-reload
systemctl start mnt-data.automount
При открытии каталога /mnt/data journalctl -f сообщает мне следующее:
Спойлер
сен 14 20:59:37 comp01.my.domain kernel: CIFS: Attempting to mount //svr1/data
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: key description: cifs.spnego;0;0;39010000;ver=0x2;host=svr1;ip4=192.168.0.1;sec=krb5;uid=0x0;creduid=0x0;user=root;pid=0x14ea
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: ver=2
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: host=svr1
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: ip=192.168.0.1
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: sec=1
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: uid=0
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: creduid=0
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: user=root
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: pid=5354
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: get_cachename_from_process_env: pid == 0
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: get_existing_cc: default ccache is KEYRING:persistent:0:0
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: get_tgt_time: unable to get principal
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: krb5_get_init_creds_keytab: -1765328203
сен 14 20:59:37 comp01.my.domain cifs.upcall[5357]: Exit status 1
сен 14 20:59:37 comp01.my.domain mount[5354]: mount error(2): No such file or directory
сен 14 20:59:37 comp01.my.domain mount[5354]: Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
сен 14 20:59:37 comp01.my.domain kernel: CIFS VFS: \\svr1 Send error in SessSetup = -126
сен 14 20:59:37 comp01.my.domain kernel: CIFS VFS: cifs_mount failed w/return code = -2
сен 14 20:59:37 comp01.my.domain systemd[1]: mnt-data.mount: Mount process exited, code=exited, status=32/n/a
сен 14 20:59:37 comp01.my.domain systemd[1]: mnt-data.mount: Failed with result 'exit-code'.
сен 14 20:59:37 comp01.my.domain systemd[1]: Failed to mount CIFS.
и монтирования не происходит. Если же добавить в файл .mount в опции монтирования cruid=DomainUser, где DomainUser -- пользователь из AD, который открывает каталог, то каталог монтируется и в логе вижу следующее:
Спойлер
сен 14 21:04:14 comp01.my.domain kernel: CIFS: Attempting to mount //svr1/data
сен 14 21:04:14 comp01.my.domain kernel: No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: key description: cifs.spnego;0;0;39010000;ver=0x2;host=svr1;ip4=192.168.0.1;sec=krb5;uid=0x0;creduid=0x248fc263;user=root;pid=0x1711
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: ver=2
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: host=svr1
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: ip=192.168.0.1
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: sec=1
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: uid=0
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: creduid=613401187
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: user=root
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: pid=5905
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: get_cachename_from_process_env: pathname=/proc/5905/environ
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: get_existing_cc: default ccache is KEYRING:persistent:613401187:krb_ccache_5gI0uWf
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: handle_krb5_mech: getting service ticket for svr1
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: handle_krb5_mech: obtained service ticket
сен 14 21:04:14 comp01.my.domain cifs.upcall[5908]: Exit status 0
сен 14 21:04:14 comp01.my.domain systemd[1]: Mounted CIFS.
Сдаётся мне, что-то не так с керберосом, вот мой krb5.conf
Спойлер
includedir /etc/krb5.conf.d/
[logging]
# default = FILE:/var/log/krb5libs.log
# kdc = FILE:/var/log/krb5kdc.log
# admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = MY.DOMAIN
 dns_lookup_kdc = true
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 default_ccache_name = KEYRING:persistent:%{uid}
Подскажите, что я делаю не так, как избавиться от костыля с cruid?

Хочу с помощью automount организовать монтирование сетевых томов на рабочие станции пользователей куда-нибудь в район домашнего каталога, причём монтирование должно происходить в момент обращения пользователя к этим ресурсам. Есть ли более простые и удобные альтернативы (например autofs)? pam_mount я пробовал, на некоторых компах монтирование отваливается и восстанавливается только выходом и входом пользователя. Может быть, есть уже устоявшиеся типовые решения такой задачи?

Оффлайн klark973

  • Давно тут
  • **
  • Сообщений: 653
  • Неспящий саппорт
Re: mount.cifs и cruid при монтировании
« Ответ #1 : 15.09.2021 00:01:57 »
Хочу с помощью automount организовать монтирование сетевых томов на рабочие станции пользователей куда-нибудь в район домашнего каталога, причём монтирование должно происходить в момент обращения пользователя к этим ресурсам. Есть ли более простые и удобные альтернативы (например autofs)?
Тут всего пара сообщений...
To moan or to solve -- that is the question!

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 18 696
    • Домашняя страница
    • Email
Андрей Черепанов (cas@)

Онлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 4 119
  • antohami@
Re: mount.cifs и cruid при монтировании
« Ответ #3 : 15.09.2021 07:05:19 »
Нет необходимости создавать service. Они автоматически создадутся на основании записи в /etc/fstab:

//svr1/data /mnt/data cifs noauto,x-systemd.automount,<другие_опции> 0 0

При первом обращении к каталогу попытается смонтироваться.

Оффлайн kl0p

  • Завсегдатай
  • *
  • Сообщений: 24
Re: mount.cifs и cruid при монтировании
« Ответ #4 : 16.09.2021 01:01:56 »
http://altlinux.org/Autofs
Попробовал autofs, ошибка ровно на том же месте.

/etc/auto.master
# Format of this file:
# mountpoint map options
# For details of the format look at autofs(8).
/-              /etc/auto.tab   -t 300

/etc/auto.tab
/mnt/smb        -fstype=cifs,sec=krb5,domain=MY.DOMAIN,rw     ://svr1/data
При попытке просмотреть содержимое каталога /mnt/smb journalctl -f сообщает мне примерно то же, что и в прошлый раз:
Спойлер
сен 15 23:10:25 comp01.my.domain kernel: CIFS: Attempting to mount //svr1/data
сен 15 23:10:25 comp01.my.domain kernel: No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: key description: cifs.spnego;0;0;39010000;ver=0x2;host=svr1;ip4=192.168.0.1;sec=krb5;uid=0x0;creduid=0x0;user=root;pid=0x1784
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: ver=2
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: host=svr1
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: ip=192.168.0.1
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: sec=1
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: uid=0
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: creduid=0
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: user=root
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: pid=6020
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: get_cachename_from_process_env: pid == 0
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: get_existing_cc: default ccache is KEYRING:persistent:0:0
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: get_tgt_time: unable to get principal
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: krb5_get_init_creds_keytab: -1765328203
сен 15 23:10:25 comp01.my.domain cifs.upcall[6023]: Exit status 1
сен 15 23:10:25 comp01.my.domain kernel: CIFS VFS: \\svr1 Send error in SessSetup = -126
сен 15 23:10:25 comp01.my.domain kernel: CIFS VFS: cifs_mount failed w/return code = -2

Аналогичные симптомы и при попытке реализовать монтирование через fstab по рекомендации:

Тут всего пара сообщений...

и

Нет необходимости создавать service. Они автоматически создадутся на основании записи в /etc/fstab:

//svr1/data /mnt/data cifs noauto,x-systemd.automount,<другие_опции> 0 0

При первом обращении к каталогу попытается смонтироваться.

Ошибка, мне кажется, где-то на уровне кербероса. Может быь, дело в этих двух строках из лога?

cifs.upcall[6023]: get_cachename_from_process_env: pid == 0
cifs.upcall[6023]: get_existing_cc: default ccache is KEYRING:persistent:0:0

А в случае успешного монтирования с костылём в виде указания в опциях cruid=DomainUser, где DomainUser -- пользователь из AD:

cifs.upcall[5908]: get_cachename_from_process_env: pathname=/proc/5905/environ
cifs.upcall[5908]: get_existing_cc: default ccache is KEYRING:persistent:613401187:krb_ccache_5gI0uWf

Дальше у меня головы не хватает, не могу понять, что маунту нужно.

Когда уже писал этот пост, попробовал костыль немного изменить, сделал в параметрах монтирования для autofs в auto.tab cruid=$USER и эта конструкция заработала!
Точнее говоря, не сразу заработала, при попытке монтирования journalctl -f вот что сказал:
Спойлер
сен 16 00:30:25 comp01.my.domain kernel: CIFS: Attempting to mount //svr1/data
сен 16 00:30:25 comp01.my.domain kernel: No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: key description: cifs.spnego;0;0;39010000;ver=0x2;host=svr1;ip4=192.168.0.1;sec=krb5;uid=0x0;creduid=0x248fc263;user=root;pid=0xe94
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: ver=2
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: host=svr1
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: ip=192.168.0.1
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: sec=1
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: uid=0
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: creduid=613401187
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: user=root
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: pid=3732
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: get_cachename_from_process_env: pathname=/proc/3732/environ
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: get_existing_cc: default ccache is KEYRING:persistent:613401187:krb_ccache_d72A20h
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: get_tgt_time: unable to get principal
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: krb5_get_init_creds_keytab: -1765328174
сен 16 00:30:25 comp01.my.domain cifs.upcall[3735]: Exit status 1
сен 16 00:30:25 comp01.my.domain kernel: CIFS VFS: \\svr1 Send error in SessSetup = -126
сен 16 00:30:25 comp01.my.domain kernel: CIFS VFS: cifs_mount failed w/return code = -2
пришлось доменному пользователю вручную получить билеты:

DomainUser@comp01 ~ $ klist
klist: Credentials cache keyring 'persistent:613401187:krb_ccache_d72A20h' not found
DomainUser@comp01 ~ $ kinit
Password for DomainUser@MY.DOMAIN:
DomainUser@comp01 ~ $ klist
Ticket cache: KEYRING:persistent:613401187:krb_ccache_d72A20h
Default principal: DomainUser@MY.DOMAIN

Valid starting       Expires              Service principal
16.09.2021 00:37:12  16.09.2021 10:37:12  krbtgt/MY.DOMAIN@MY.DOMAIN
renew until 23.09.2021 00:36:56

После этого монтирование прошло успешно. Если удастся решить этот вопрос с билетами, то конструкция с усовершенствованным костылём cruid=$USER меня вполне устроит. Остаётся только мелочёвка вроде того, как организовать пользователям быстрый доступ к смонтированным ресурсам (разложить на рабочий стол ярлыки на каталоги из /mnt/smb?)

Кстати, пока гуглил инфу, работая с этим постом, наткнулся на занятную схему расположения карт монтирования для autofs в виде объектов на LDAP-сервере, сначала нашёл тут, а потом тут. Выглядит очень заманчиво и при развёртывании на большом числе компов должно здорово экономить время. Попробовал повторить -- сходу не получилось. Пробовал кто-нибудь что-нибудь подобное?
« Последнее редактирование: 16.09.2021 01:13:42 от kl0p »

Оффлайн kl0p

  • Завсегдатай
  • *
  • Сообщений: 24
Re: mount.cifs и cruid при монтировании
« Ответ #5 : 19.09.2021 00:26:19 »
Продвинулся на шаг дальше. Теперь кэш в krb.conf такой:
[libdefaults]
default_ccache_name = FILE:/tmp/krb5cc_%{uid}
и в ходе логина пользователей (пауза в несколько секунд после того, как пользователь нажмёт Enter в окне ввода пароля lightdm) я наблюдаю, как в /tmp появляются и исчезают файлики вида krb5cc_XXXX, где XXXX - доменный UID пользователя (id -u).

Почему они исчезают?

Если такой файлик взять и скопировать в другой каталог, а потом положить обратно в /tmp (после того, как он исчез), то монтирование происходит нормально, journalctl -f сообщает что-то типа
сен 19 00:15:07 comp01.my.domain cifs.upcall[7025]: get_cachename_from_process_env: pathname=/proc/7022/environ
сен 19 00:15:07 comp01.my.domain cifs.upcall[7025]: get_existing_cc: default ccache is FILE:/tmp/krb5cc_613401187
сен 19 00:15:07 comp01.my.domain cifs.upcall[7025]: handle_krb5_mech: getting service ticket for zbi1
сен 19 00:15:07 comp01.my.domain cifs.upcall[7025]: handle_krb5_mech: obtained service ticket
сен 19 00:15:07 comp01.my.domain cifs.upcall[7025]: Exit status 0
т.е. билет из файла считался и был принят.

Почему файлики с кэшем кербероса удаляются? Есть ли это нормальное поведение системы? Можно ли на это как-то повлиять?

Оффлайн kl0p

  • Завсегдатай
  • *
  • Сообщений: 24
Re: mount.cifs и cruid при монтировании
« Ответ #6 : 20.09.2021 09:47:36 »
Дальнейшее исследование привело вот к чему:
1) Билеты системой удаляются с помощью kdestroy (кто бы сомневался));
2) kdestroy, в свою очередь, вызывается процессом с вот такой командной строкой:
python3 /usr/sbin/gpoa DomainUser
Насколько я понимаю, это проецирование доменной политики на рабочую станцию.
Подскажите, куда ковырять дальше.

Оффлайн kl0p

  • Завсегдатай
  • *
  • Сообщений: 24
Re: mount.cifs и cruid при монтировании
« Ответ #7 : 21.09.2021 13:32:48 »
Если в альтераторе отключить групповые политики, то кэш кербероса не удаляется.
Напрашивается вывод: какая-то из групповых политик его удаляет, какая именно?