Bug 7323

Summary: samba kerberos authorization is broken
Product: [ROSA-based products] ROSA Fresh Reporter: Vladimir Potapov <v.potapov>
Component: Packages from MainAssignee: Mikhail Novosyolov <m.novosyolov>
Status: VERIFIED FIXED QA Contact: ROSA Linux Bugs <bugs>
Severity: blocker    
Priority: Highest CC: m.novosyolov, n.mozgovoy, v.potapov
Version: REDFlags: v.potapov: qa_verified+
v.potapov: published+
Target Milestone: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Platform: 2021.1 ROSA Vulnerability identifier:
RPM Package: ISO-related:
Bad POT generating: Upstream:
Attachments: Рабочие параметры монтирования в Calculate Linux
Флаги сборки samba в рабочей конфигурации на Calculate/Gentoo
Флаги сборки mit-krb5 в рабочей конфигурации на Calculate/Gentoo
Скрипт автоматического монтирования сетевых шар в зависимости от группы пользователя

Description Vladimir Potapov 2016-09-03 13:14:24 MSK
1) Add workstation to domain
2) mount -t cifs //winserver.keleg-home.ru/UserShare /mnt -o sec=krb5
mount error(2): No such file or directory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

without sec=krb5 work correct
with the old samba (4.1) - work correct
Comment 1 Vladimir Potapov 2016-09-03 13:20:27 MSK
I debug the issue with GDB
mount.cifs receive empty password from krb5
but 

klist
Ticket cache: FILE:/tmp/krb5cc_10003
Default principal: keleg@KELEG-HOME.RU

Valid starting       Expires              Service principal
03.09.2016 17:03:44  04.09.2016 03:03:42  krbtgt/KELEG-HOME.RU@KELEG-HOME.RU
        renew until 10.09.2016 17:03:44
03.09.2016 17:03:44  04.09.2016 03:03:42  FRESH$@KELEG-HOME.RU

wbinfo -u
administrator
guest
krbtgt
keleg
Comment 2 Mikhail Novosyolov 2018-10-02 12:06:57 MSK
А примерно как через gdb делался дебаг?
Comment 3 Vladimir Potapov 2018-10-02 12:42:01 MSK
(In reply to Mikhail N from comment #2)
> А примерно как через gdb делался дебаг?
ставится дебаг-пакет и запускается команда под дебаггером.
подробностей не вспомню сейчас, но все стандартно было.
Думаю, под дебагером гонять слишком сложный путь, можно попробовать привести в соответствие по версиям-патчам какой-нибудь федоре.
Comment 4 Mikhail Novosyolov 2018-12-09 21:58:43 MSK
На ядре в Росе 2016 года не было поддержки авторизации по Kerberos через CIFS по протоколам SMB 2 и 3, -sec=krb5 работало только для SMB v1.

Но я не нашел информации, что samba переключала дефолтную версию протокола.

https://superuser.com/a/1082464
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ceb1b0b9b4d1089e9f2731a314689ae17784c861
Comment 5 Vladimir Potapov 2019-05-04 17:53:24 MSK
Баг актуален со всеми обновлениями. 
Причем Dolphin все нормально видит, а вот mount не монтирует.
Comment 6 Mikhail Novosyolov 2019-05-07 23:32:32 MSK
Про дефолтную версию протокола:
https://git.samba.org/?p=cifs-utils.git;a=commitdiff;h=d93cabc638195b5a4274c2650477456f81651e75
Comment 7 Mikhail Novosyolov 2019-05-08 00:10:40 MSK
***** QA ASVISORY *****

keyutils 1.6-2
* updated from 1.5.10 to 1.6
* adjusted default config (/etc/request-key.conf) to make `mount -t cifs -o sec=krb5` work out of the box
+ https://abf.io/build_lists/3022596
+ https://abf.io/build_lists/3022597

cifs-utils
* updated from 6.8 to 6.9
+ https://abf.io/build_lists/3022598
+ https://abf.io/build_lists/3022599
Comment 8 Mikhail Novosyolov 2019-05-08 00:19:38 MSK
***** QA ASVISORY *****

Backported to rosa2014.1, fixed mount -t cifs -o sec=krb5

keyutils 1.6, rosa2014.1
+ https://abf.io/build_lists/3022602
+ https://abf.io/build_lists/3022603
Comment 9 Vladimir Potapov 2019-05-08 03:36:29 MSK
mount -t cifs //win.keleg-home.ru/Users /mnt -o sec=krb5
mount error(2): No such file or directory


 smbclient //win.keleg-home.ru/Users -k
Unable to initialize messaging context
gensec_spnego_client_negTokenInit_step: Could not find a suitable mechtype in NEG_TOKEN_INIT
session setup failed: NT_STATUS_INVALID_PARAMETER
Comment 10 Mikhail Novosyolov 2019-05-08 11:14:39 MSK
Надо бы
strace -o cifs-krb5.log smbclient //win.keleg-home.ru/Users -k
Потом файл cifs-krb5.log прикрепить сюда.

По аналогии с https://bugzilla.altlinux.org/show_bug.cgi?id=33369#c19
Comment 11 Mikhail Novosyolov 2019-05-08 11:35:54 MSK
Да вроде бы работает.

kde4 ~ # smbclient //dc1.samba-dc1.loc/testdc1share -k
gensec_spnego_client_negTokenInit_step: Could not find a suitable mechtype in NEG_TOKEN_INIT
session setup failed: NT_STATUS_INVALID_PARAMETER
kde4 ~ # kinit
kinit: Client 'root@DC1.SAMBA-DC1.LOC' not found in Kerberos database while getting initial credentials
kde4 ~ # klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)
kde4 ~ # kinit test3@DC1.SAMBA-DC1.LOC
Password for test3@DC1.SAMBA-DC1.LOC: 
Warning: Your password will expire in 41 days on Вт 18 июн 2019 16:59:11
kde4 ~ # klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test3@DC1.SAMBA-DC1.LOC

Valid starting       Expires              Service principal
08.05.2019 11:31:28  08.05.2019 21:31:28  krbtgt/DC1.SAMBA-DC1.LOC@DC1.SAMBA-DC1.LOC
	renew until 09.05.2019 11:31:24
kde4 ~ # smbclient //dc1.samba-dc1.loc/testdc1share -k
tree connect failed: NT_STATUS_ACCESS_DENIED
(тут у меня файловая шара коряво настроена, наверное)
Comment 12 Mikhail Novosyolov 2019-05-08 13:20:26 MSK
Не нужно strace, ошибку поймал.
Comment 13 Mikhail Novosyolov 2019-05-08 14:29:45 MSK
Убрал из keyutils ненужный патч, пока пусть такое уходит на QA, проблем в пакетах keyutils и cifs-utils не вижу, их пока стоит обновить в штатном порядке.

Перенес их bug#9886
Comment 14 Vladimir Potapov 2019-05-09 14:31:46 MSK
smbclient заработал, а вот mount по-прежнему нет.
Comment 15 Mikhail Novosyolov 2019-06-15 23:41:16 MSK
Вот тут https://superuser.com/a/1241316 пишут, что для переиспользования тикета керберос нужно указать доп. параметры:

-o user=$USER,cruid=$USER,sec=krb5

Вроде бы мы так еще не пробовали.
Comment 16 Vladimir Potapov 2019-06-16 18:42:45 MSK
(In reply to Mikhail Novosyolov from comment #15)
> Вот тут https://superuser.com/a/1241316 пишут, что для переиспользования
> тикета керберос нужно указать доп. параметры:
> 
> -o user=$USER,cruid=$USER,sec=krb5
> 
> Вроде бы мы так еще не пробовали.
пробовали очень многое, в том числе и это

mount.cifs //win/Users/Public /mnt -o user=$USER,cruid=$USER,sec=krb5 
mount error(2): No such file or directory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
Comment 17 Mikhail Novosyolov 2019-06-19 01:11:40 MSK
Created attachment 5167 [details]
Рабочие параметры монтирования в Calculate Linux

В чате Calculate Linux с одним пользователем долго пытались завести у него монтирование самбой с авторизацией по krb5, в результате получилось с параметрами на скриншоте. Важно: sec=krb5 должно стоять ПОСЛЕДНИМ параметром, иначе была ошибка типа "Required key not available". Также было выполнено добавление опции "-t" к вызову cifs.upcall (https://stackoverflow.com/a/42764571)
Comment 18 Mikhail Novosyolov 2019-06-19 01:13:54 MSK
Created attachment 5168 [details]
Флаги сборки samba в рабочей конфигурации на Calculate/Gentoo
Comment 19 Mikhail Novosyolov 2019-06-19 01:14:42 MSK
Created attachment 5169 [details]
Флаги сборки mit-krb5 в рабочей конфигурации на Calculate/Gentoo
Comment 20 Mikhail Novosyolov 2019-06-19 01:18:16 MSK
Created attachment 5170 [details]
Скрипт автоматического монтирования сетевых шар в зависимости от группы пользователя

Задачей было в зависимости от группы пользователя в домене монтировать разный набор сетевых шар. Я сочинил вот такой скрипт. На скриншоте его рабочий вариант. Запускается через pam_exec.so.


P.S. Пока что, говорят, с правами на чтение/запись затыки, но главное, что шара смонтировалась с авторизацией по Kerberos после длительной войны с ней.
Comment 21 Mikhail Novosyolov 2020-03-05 13:59:45 MSK
Посмотрел код pam_mount. Он не делает никакой магии, а просто запускает mount -t cifs, при этом из pam берет переменную KRB5CCNAME, которую поставит один из предыдущих модулей pam, и затем просто ставит ее как переменную окружения при выхове mount -t cifs. Все.

Ошибка "No such file or directory" наверное, говорит о том, что файл ccache ищется не там, где нужно.
Comment 22 Mikhail Novosyolov 2020-03-07 00:06:39 MSK
(In reply to Vladimir Potapov from comment #1)
> I debug the issue with GDB
> mount.cifs receive empty password from krb5
> but 
> 
> klist
> Ticket cache: FILE:/tmp/krb5cc_10003
> Default principal: keleg@KELEG-HOME.RU
> 
> Valid starting       Expires              Service principal
> 03.09.2016 17:03:44  04.09.2016 03:03:42  krbtgt/KELEG-HOME.RU@KELEG-HOME.RU
>         renew until 10.09.2016 17:03:44
> 03.09.2016 17:03:44  04.09.2016 03:03:42  FRESH$@KELEG-HOME.RU
> 
> wbinfo -u
> administrator
> guest
> krbtgt
> keleg

Здесь билет керберос получен для пользователя с UID=1003, но монтирование выполняется от root, очевидно, что /tmp/krb5cc_10003 не будет найден и использован, потому что будет искаться /tmp/krb5cc_0.

Что касается
> with the old samba (4.1) - work correct
в это не могу поверить, потому что здесь samba вообще никак не участвует.

Суть монтирования по kerberos в том, чтоб использовать билет kerberos, и это не билет root. Концептуально неверно хотеть исправить этот баг. Это не баг. Так и должно быть. А раньше такое работать не могло, регрессией не является.

=> RESOLVED WONTFIX
Comment 23 Vladimir Potapov 2020-03-07 08:48:34 MSK
а через судо должно работать?
Comment 24 Mikhail Novosyolov 2020-03-08 04:18:32 MSK
(In reply to Vladimir Potapov from comment #23)
> а через судо должно работать?

Вряд ли, даже если попытаться effective user id сделать соответствующим пользователю-владельцу ccache.
Comment 25 Mikhail Novosyolov 2020-03-08 04:33:14 MSK
В Ubuntu /sbin/mount.cifs имеет SUID-бит, а в Росе нет. По идее, если поставить на него SUID бит, то можно будет от пользователя-владельца ccache запускать mount.cifs, а ccache подхватится и монтирование заработает, наверное, если стоит переменная окружения KRB5CCNAME, если ее PAM-модули поставят.

В Debian делают chmod u+s /sbin/mount.cifs уже 10 лет как:

cifs-utils (2:4.5-1) unstable; urgency=low

  [ Christian Perrier ]
  * New upstream release.  Closes: #576314.

  [ Steve Langasek ]
  * Set mount.cifs suid-root, again supported upstream and required for use
    in user mounts.  Closes: #576713.

 -- Steve Langasek <vorlon@debian.org>  Mon, 31 May 2010 03:28:42 -0700

Вот баг: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=576713
Comment 26 Mikhail Novosyolov 2020-08-23 12:39:13 MSK
в ядре 5.4.60 будут более понятные ошибки, если при монтировании с sec=krb5 проблемы с авторизацией:

commit 582ee2cb6f905d5d3eaccfeda7adbbd4d782397b
Author: Steve French <stfrench@microsoft.com>
Date:   Thu Jul 16 00:34:21 2020 -0500

    smb3: warn on confusing error scenario with sec=krb5
    
    commit 0a018944eee913962bce8ffebbb121960d5125d9 upstream.
    
    When mounting with Kerberos, users have been confused about the
    default error returned in scenarios in which either keyutils is
    not installed or the user did not properly acquire a krb5 ticket.
    Log a warning message in the case that "ENOKEY" is returned
    from the get_spnego_key upcall so that users can better understand
    why mount failed in those two cases.
Comment 27 Mikhail Novosyolov 2023-03-21 20:10:50 MSK
*** Bug 13157 has been marked as a duplicate of this bug. ***
Comment 28 Mikhail Novosyolov 2023-03-21 20:48:36 MSK
********* QA ADVISORY *********

keyutils 1.6.3-5
- really fix mounting CIFS with KRB5!

https://abf.io/build_lists/4388982
https://abf.io/build_lists/4388983 x86_64
https://abf.io/build_lists/4388984
https://abf.io/build_lists/4388985
https://abf.io/build_lists/4388986

Проверено пользователем: https://t.me/rosalinux/182192
Comment 29 Vladimir Potapov 2023-03-23 08:21:17 MSK
**************************************
The update sent to testings
Comment 30 Vladimir Potapov 2023-03-24 07:05:50 MSK
keyutils-1.6.3-5
https://abf.io/build_lists/4388982
https://abf.io/build_lists/4388983 x86_64
https://abf.io/build_lists/4388984
https://abf.io/build_lists/4388985
https://abf.io/build_lists/4388986
************************ Advisory *********************
- really fix mounting CIFS with KRB5!
*******************************************************
QA Verified