LINUX.ORG.RU
ФорумAdmin

NFSv4 + Kerberos, помогите сделать шару

 , ,


0

2

Добрый день, коллеги. Мучаюсь 5й день, не могу освоить NFS + Kerberos. Сталкиваюсь с Kerberos'ом 1й раз. До этого NFS шару с sec=sys делал не раз. Задача - сделать в офисе сетевую ФС, к которой все подключаются с desktop'ов/laptop'ов, работают с файлами, имеют разграничения по правам доступа на r/rw/rwx и т. п. NFS - потому что все на Linux.

В Интернете много инфы, но вся какая-то обрывочная, не законченная.

Шёл по этим официальным мануалам: Раз, два.

И всё в этих мануалах меня устраивает и всё понятно, если б работало...

Что сделано и что хорошо умею: DNS в два «View», NTP.

Что хочу: подключение к ФС с любого ПК по любому user/pass - без привязки к host'у. Возможно ли это вообще? По мануалу openSUSE - да, там просто создаётся principal «suzanne», задаётся пароль, и должно работать. Но в других источниках говорится, что на NFS клиенты тоже нужно класть keytab файл.. Кому верить?

Если подключаться без keytab'а на клиенте, то явно ругается:

journalctl -u rpc-gssd.service
ERROR: Key table file '/etc/krb5.keytab' not found while beginning keytab scan for keytab 'FILE:/etc/krb5.keytab'
ERROR: gssd_refresh_krb5_machine_credential_internal: no usable keytab entry found in keytab /etc/krb5.keytab for connection with host main.3r.ru

Подумал, что нужно на сервер положить keytab'ы от принципала сервера, а на клиенты нужно выдавать keytab'ы клиента...

Сервер:

> sudo klist -k
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   3 host/main.3r.ru@3R.RU
   3 host/main.3r.ru@3R.RU
   2 nfs/main.3r.ru@3R.RU
   2 nfs/main.3r.ru@3R.RU

Клиент:

> sudo klist -k
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   2 nfs/NeWTs-SUSE-Laptop.3r.ru@3R.RU
   2 nfs/NeWTs-SUSE-Laptop.3r.ru@3R.RU

И...

> sudo mount -t nfs4 -o sec=krb5 main.3r.ru:/opt/docs/ /mnt/
mount.nfs4: access denied by server while mounting main.3r.ru:/opt/docs/

При этом rpc.gssd на клиенте уже не ругается.

Вобщем, я пока не до конца понимаю сам принцип, что куда зачем...

1) Можно ли для NFS клиентов не выдавать krb5.keytab? Можно ли только по user/pass? kinit же, вроде?..
2) Если нельзя не выдавать, что там должно быть? Привязка по username или к хосту?
3) Можно ли не привязываться к reverse DNS? Ну не хочу я быть настолько параноиком. Тем более, что клиенты - DHCP. rdns = false это же оно?
4) Можно ли вообще клиентов по DNS даже по прямому просмотру не проверять и не привязывать?

Сейчас в тестовой системе 3 хоста: сервер NFS (main.3r.ru), сервер KDC (krb.3r.ru), клиент (у него есть Хостнэйм, но это важно? Он не прописан в DNS, это просто ноут с просто DHCP)..

Настройка конфига на krb сервере:

# cat /etc/krb5.conf
includedir  /etc/krb5.conf.d

[libdefaults]
    dns_canonicalize_hostname = false
    rdns = false
    default_realm = 3R.RU
    ticket_lifetime = 16h
    renew_lifetime = 7d
    clockskew = 150

[realms]
    3R.RU = {
    kdc = krb.3r.ru.:88
    admin_server = krb.3r.ru
    default_domain = 3r.ru
    }

[logging]
    kdc = FILE:/var/log/krb5/krb5kdc.log
    admin_server = FILE:/var/log/krb5/kadmind.log
    default = SYSLOG:NOTICE:DAEMON

[domain_realm]
    .3r.ru = 3R.RU
    3r.ru = 3R.RU

Настройка конфига на NFS Server'е (krb клиенте):

~> cat /etc/krb5.conf
[libdefaults]
        default_realm = 3R.RU
        dns_canonicalize_hostname = false
        rdns = false

[realms]
        3R.RU = {
                kdc = krb.3r.ru
                admin_server = krb.3r.ru
        }

[domain_realm]
.3r.ru = 3R.RU
#www.example.org = EXAMPLE.COM

Настройка зоны DNS:

> cat /var/lib/named/master/db.lan.3r.ru

_kerberos._udp.3R.RU.  IN  SRV  0 0 88 krb.3r.ru.
_kerberos._tcp.3R.RU.  IN  SRV  0 0 88 krb.3r.ru.

_kerberos-adm._tcp.3R.RU.  IN  SRV  0 0 749 krb.3r.ru.

И это работает - клиент NFS и без настройки конфига /etc/krb5.conf (точнее, с дефолтным) тоже общается с Kerberos сервером. Т. е. работает kinit - билеты выдаются.

Но я перепробовал уже, кажется, все варианты.... Может кто-то подсказать что куда и зачем класть, чтобы NFS подключился?


  1. Можно ли для NFS клиентов не выдавать krb5.keytab? Можно ли только по user/pass? kinit же, вроде?..

Можно, но работать не будет. Веренее, через kerberos не будет

  1. Если нельзя не выдавать, что там должно быть? Привязка по username или к хосту?

К хосту. добавь принципалы и для nfs/, и для host/, лишним не будет. После изменения keytab’а gssd нужно перезапустить. Ну это ты вроде уже нашёл.

На сервере тоже. И кроме gssd, нужен ещё и idmapd (для nfs4)

  1. Можно ли не привязываться к reverse DNS? Ну не хочу я быть настолько параноиком. Тем более, что клиенты - DHCP. rdns = false это же оно?

Не пробовал. Вроде да. Но для начала лучше добейся работы в ситуации, когда в обратной зоне все есть

Клиент:

ЕМНИП, на клиенте ещё нужен principal для host/. Даже если не требуется, лишним не будет

Но в других источниках говорится, что на NFS клиенты тоже нужно класть keytab файл.. Кому верить?

Нужно

sudo mount -t nfs4 -o sec=krb5 main.3r.ru:/opt/docs/ /mnt/

содержимое /etc/exports с сервера?

Кроме того, для nfs4 должны быть запущены idmapd, и для kerberos - gssd

По мануалу openSUSE - да, там просто создаётся principal «suzanne», задаётся пароль, и должно работать

Думаю, ты начал читать мануал не с начала. В начале там неверняка добавление в домен, что автоматически настраивает kerberos и sssd

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

Веренее, через kerberos не будет

Получается, система совсем не рассчитана на случайных клиентов? Ну типа, чел с любого ПК чтобы заходил по логину/паролю?

нужен ещё и idmapd (для nfs4)

Я читал, что он настраивается на сервере для сопоставления username принципала с username системного локального пользователя на сервере, верно? На NFS клиентах же не надо его трогать?

Но для начала лучше добейся работы в ситуации, когда в обратной зоне все есть

А в прямой зоне полюбому должно быть? Т. е. никак нельзя для клиента-ноута обеспечивать связь с офисом без VPN со static-IP для конкретного VPN-login? Зачем тогда krb5p?

содержимое /etc/exports с сервера?

> cat /etc/exports 
/opt/docs/ *(rw,sync,sec=krb5:krb5i:krb5p:sys)

- пока сделал так специально для теста - sec=sys с клиента коннектится, sec=krb* - пока нет.

Кроме того, для nfs4 должны быть запущены idmapd, и для kerberos - gssd

idmapd - только на сервере, верно?

На сервере:
rpc-gssd.service
rpc-svcgssd.service

На клиенте:
rpc-gssd.service

Верно?

В начале там неверняка добавление в домен

Что значит добавление в домен? Static IP для машины клиента и DNS A запись?

NeWT
() автор топика
Ответ на: комментарий от NeWT

Получается, система совсем не рассчитана на случайных клиентов? Ну типа, чел с любого ПК чтобы заходил по логину/паролю?

kerberos предназначен для аутентификации клиента, сервера и пользователя. если нужен анонимный доступ, смотри как на сервере настраивается анонимный доступ. к kerberos это уже не относится никак. ИМХО

На NFS клиентах же не надо его трогать?

Не могу сказать, что разбираюсь настолько досконально, но в debian в конфиге /etc/defaults/nfs-common прямо сказано

# Do you want to start the idmapd daemon? It is only needed for NFSv4.
NEED_IDMAPD=yes

Этот конфиг используется и клиентом тоже.

В любом случае, что ты теряешь на тестовом стенде? Запусти всё, добейся работы, а потом начинай убирать лишнее и приводить к удобному виду

Что значит добавление в домен? Static IP для машины клиента и DNS A запись?

Имел в виду realm join. Но это для локальной сети

А в прямой зоне полюбому должно быть? Т. е. никак нельзя для клиента-ноута обеспечивать связь с офисом без VPN со static-IP для конкретного VPN-login? Зачем тогда krb5p?

Через интернет? В смысле, ты в интернет выставишь и KDC, и NFS со всеми сервисами portmap?

Ну, ты смелый. Мне такое и в голову не приходило. Удачи. Получится или нет - не знаю, но точно узнаешь много нового

Попробуй все же посмотреть в сторону vpn (wireguard). А если все же без vpn, то ФС через интернет - это скорее webdav (сразу скажу, nginx с его обрезанной реализацией webdav не катит, нужен полноценный apache)

router ★★★★★
()
Ответ на: комментарий от NeWT

Получается, система совсем не рассчитана на случайных клиентов? Ну типа, чел с любого ПК чтобы заходил по логину/паролю?

следи за руками, посмотри exports на сервере - чем тебе там поможет логин/пароль клиента? мб тебе нужен cifs?

Что значит добавление в домен? Static IP для машины клиента и DNS A запись?

следи за руками - смысл домена в доверенном рабочем месте, посмотри exports на сервере еще раз, на какой идентификатор там права выдаются

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 1)
Ответ на: комментарий от router

Через интернет? В смысле, ты в интернет выставишь и KDC, и NFS со всеми сервисами portmap? Ну, ты смелый.

Ну блин... а почему всяким pop3/imap через tls мы доверяем, а kerberos'у - нет? Я и подумал... Но если привязка клиентов к DNS, то да, не то..

С VPN'ами-то да, вопросов нет.

NeWT
() автор топика
Ответ на: комментарий от router

Подключился. Проблема реально была в том, что клиенты должны иметь A запись на DNS сервере. Ну такое... но что поделать, пойдёт. Сейчас воюю с idmapd...

Почему-то на клиенте:

/mnt> lls
total 12K
drwxr-xr-x  3 nobody nobody 4,0K мая 18 16:02 .
drwxr-xr-x 24 root   root   4,0K янв 11  2022 ..
drwxr-xr-x  4 nobody nobody 4,0K апр 24 19:55 Backups
-rw-r--r--  1 nobody nobody    0 мая 18 16:02 teststst

User/Group - nobody... Соображаю...

NeWT
() автор топика
Ответ на: комментарий от NeWT
/mnt> lls
total 12K
drwxr-xr-x  3 nobody users 4,0K мая 18 16:02 .
drwxr-xr-x 24 root   root  4,0K янв 11  2022 ..
drwxr-xr-x  4 nobody users 4,0K апр 24 19:55 Backups
-rw-r--r--  1 nobody users    0 мая 18 16:02 teststst

Как думаете, почему GID пробрасывается, а UID нет?

NeWT
() автор топика
Ответ на: комментарий от NeWT

На клиенте:

sudo systemctl start nfs-idmapd.service 
[sudo] password for NeWT: 
Failed to start nfs-idmapd.service: Unit nfs-server.service not found.
Говорит о том, что idmapd нужен только на NFS сервере, верно? И в мануалах openSUSE так было...

NeWT
() автор топика