Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

NFS4: root auf anderen User umbiegen

3 views
Skip to first unread message

Marcel Mueller

unread,
Oct 17, 2023, 8:28:32 AM10/17/23
to
Hallo,

ich habe NFS4 mit Kerberos (krb5p). Ich würde gerne den Root User des
Clients auf einen /anderen/ dedizierten User des Servers mappen. Also
ich möchte nicht auf Squashroot verzichten, sondern einfach einen
weniger privilegierten User auf dem Server dafür nutzen.

Hintergrund: Raspi-Client, bei dem öfter mal was Kompiliert wird hat die
src-Verzeichnisse über nfs eingebunden, damit er nicht dauernd die
SD-Karte schreddert. Das funktioniert, solange man als normaler User
kompiliert. Wenn aber mit sudo etwas kompiliert oder installiert werden
muss, dann darf er auf dem Server nichts schreiben. Deshalb möchte ich
einen User, der etwas mehr darf. Im Prinzip so eine Art
Client-spezifischen Maschinen-User.


Marcel

Markus Schaaf

unread,
Oct 17, 2023, 10:02:45 AM10/17/23
to
Am 17.10.23 um 14:28 schrieb Marcel Mueller:

> ich habe NFS4 mit Kerberos (krb5p). Ich würde gerne den Root User des
> Clients auf einen /anderen/ dedizierten User des Servers mappen. Also
> ich möchte nicht auf Squashroot verzichten, sondern einfach einen
> weniger privilegierten User auf dem Server dafür nutzen.

Das geschieht doch automatisch über das Mapping des
Machine-Principals. Auf dem Client habe ich z.B. (gekürzt)

[root@yuna ~]# klist -k
Keytab name: FILE:/etc/krb5.keytab
--------------------------------------------------------------------------
3 host/yuna.ela...@ELABORIS.DE
2 yuna$@ELABORIS.DE

und auf dem Server:

# id yuna$
uid=10001(yuna$) gid=20000(hosts) groups=20000(hosts)

Kein root_sqash oder so. Das ist bei Kerberos völlig unnötig.

MfG

Markus Schaaf

unread,
Oct 17, 2023, 10:08:41 AM10/17/23
to
Am 17.10.23 um 16:02 schrieb Markus Schaaf:

> Das geschieht doch automatisch über das Mapping des
> Machine-Principals. Auf dem Client habe ich z.B. (gekürzt)
>
> [root@yuna ~]# klist -k
> Keytab name: FILE:/etc/krb5.keytab
> --------------------------------------------------------------------------
> 3 host/yuna.ela...@ELABORIS.DE
> 2 yuna$@ELABORIS.DE

Da ich nicht weiß, wie die Defaults sind, nur der Vollständigkeit
halber:

$ cat /etc/nfs.conf
[gssd]
use-machine-creds = 1
avoid-dns = 1


Markus Schaaf

unread,
Oct 17, 2023, 1:30:30 PM10/17/23
to
Am 17.10.23 um 14:28 schrieb Marcel Mueller:

> ich habe NFS4 mit Kerberos (krb5p).

Da Du den Raspi erwähnst, nur als Tipp am Rande: sec=krb5p ist
IIRC lahmer, als sec=krb5 + wireguard.

MfG

Marcel Mueller

unread,
Oct 18, 2023, 4:55:35 AM10/18/23
to
Am 17.10.23 um 19:30 schrieb Markus Schaaf:
Kann sein, aber dafür brate ich für den Client keine Extrawurst.
Und der Pi4 ist normalerweise schnell genug für das, was da über die
Leitung soll. Ist ja nicht so, dass ich da andauernd kompiliere - dafür
würde ich den Cross-Compiler nehmen. Aber es sind halt ein paar Pakete
installiert, die DKMS oder ähnliches bei den Updates anwerfen, und ein
paar andere habe ich gepatcht und selber installiert.


Marcel

Marcel Mueller

unread,
Oct 18, 2023, 5:01:06 AM10/18/23
to
Am 17.10.23 um 16:02 schrieb Markus Schaaf:
> Am 17.10.23 um 14:28 schrieb Marcel Mueller:
>
>> ich habe NFS4 mit Kerberos (krb5p). Ich würde gerne den Root User des
>> Clients auf einen /anderen/ dedizierten User des Servers mappen. Also
>> ich möchte nicht auf Squashroot verzichten, sondern einfach einen
>> weniger privilegierten User auf dem Server dafür nutzen.
>
> Das geschieht doch automatisch über das Mapping des Machine-Principals.
> Auf dem Client habe ich z.B. (gekürzt)

Tut es das? Das war mir bei der Umstellung auf NFS4 damals nicht
bekannt. Es gebt ja auch noch gar keine Unix-User, die den Kerberos
Maschinen-Usern entsprechen würden. Die müsste ich erst mal einrichten.
Wie finden die denn dann zueinander, nur über den Hostnamen?

> [root@yuna ~]# klist -k
> Keytab name: FILE:/etc/krb5.keytab
> --------------------------------------------------------------------------
>    3 host/yuna.ela...@ELABORIS.DE
>    2 yuna$@ELABORIS.DE
>
> und auf dem Server:
>
> # id yuna$
> uid=10001(yuna$) gid=20000(hosts) groups=20000(hosts)

> Kein root_sqash oder so. Das ist bei Kerberos völlig unnötig.

Ist default und scheint hier zu greifen.
Die User mit dem $ habe ich gar nicht. Das kenne ich nur von Windows AD.


Marcel

Markus Schaaf

unread,
Oct 18, 2023, 6:02:40 AM10/18/23
to
Am 18.10.23 um 11:01 schrieb Marcel Mueller:
> Am 17.10.23 um 16:02 schrieb Markus Schaaf:
>> Am 17.10.23 um 14:28 schrieb Marcel Mueller:
>>
>>> ich habe NFS4 mit Kerberos (krb5p). Ich würde gerne den Root User des
>>> Clients auf einen /anderen/ dedizierten User des Servers mappen. Also
>>> ich möchte nicht auf Squashroot verzichten, sondern einfach einen
>>> weniger privilegierten User auf dem Server dafür nutzen.
>>
>> Das geschieht doch automatisch über das Mapping des Machine-Principals.
>> Auf dem Client habe ich z.B. (gekürzt)
>
> Tut es das? Das war mir bei der Umstellung auf NFS4 damals nicht
> bekannt. Es gebt ja auch noch gar keine Unix-User, die den Kerberos
> Maschinen-Usern entsprechen würden. Die müsste ich erst mal einrichten.
> Wie finden die denn dann zueinander, nur über den Hostnamen?

Wenn sec=krb5 benutzt wird, werden nicht mehr direkt UIDs
übertragen, sondern der Server ordnet jedem Kerberos-Pricipal per
definiertem Mapping einen lokalen User zu. Du könntest in
/etc/krb5.conf Mapping-Regeln für Principal/UID-Übersetzungen
definieren. Aber die Default-Regeln reichen, wenn man nur ein
Realm hat. Dann wird für user@DEFAULTREALM lokal user gesucht.
Wenn der nicht existiert, wird nobody genommen.

Ja, die Konvention host$ ist eine Windows-Erfindung, und wird von
Linux-NFSv4 unterstützt. Die hat den Vorteil, dass man eben viel
einfacher einen lokalen User zuordnen kann. Sonst würde IIRC das
Pricipal nfs/host verwendet, welches man dann explizit einem
lokalen User zuordnen müsste, da die Default-Regeln dafür nicht
funktionieren.

MfG

Markus Schaaf

unread,
Oct 18, 2023, 6:17:49 AM10/18/23
to
Am 18.10.23 um 11:01 schrieb Marcel Mueller:
> Am 17.10.23 um 16:02 schrieb Markus Schaaf:

>> Das geschieht doch automatisch über das Mapping des Machine-Principals.
>> Auf dem Client habe ich z.B. (gekürzt)

> Wie finden die denn dann zueinander, nur über den Hostnamen?

Falls Du meinst, woher der Client sein Principal kennt: Ja, der
sucht in /etc/krb5.keytab zuerst nach hostname$ und dann IIRC
nach {root,nfs,host}/hostname. Genaue Beschreibung ist in der
Manpage rpc.gssd(8) unter Machine Credentials.

MfG
0 new messages