Hi All,
I'm trying to get a NFS4 client & server id mapping working right.
My client mounts to a couple of NFS4 servers.
I want to get it setup so that for just ONE of them, files added to or modified on the server BY my local client, logged in EITHER as my user or root, get written with a specific user/group == "nobody:users"
I'm pretty sure that all the magic is done with idmapd config.
This is what I put together after reading the docs and a bunch of posts online. Obviously I'm still doing something wrong.
On my Desktop I have an autofs mount
cat /etc/auto.nfs4 | grep TEST
TEST -fstype=nfs,vers=4,_netdev,rw,proto=tcp,async,soft,cto,user,sec=sys,exec,nosuid,nodev,fsc,forcedirectio,rsize=32768,wsize=32768 nas.my.lan:/data/media1
I've got local users of
id nobody
uid=65534(nobody) gid=65533(nobody) groups=65534(nogroup),65533(nobody)
id testuser
uid=1000(testuser) gid=100(users) groups=6(disk),0(root),494(serviio),33(video),10(wheel),100(users)
id root
uid=0(root) gid=0(root) groups=6(disk),494(serviio),100(users),0(root)
And a mapping config of
cat /etc/idmapd.conf
[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nobody
When I create files on the server from my local client as either a normal user or root
cd /mnt/NFS4/TEST
whoami
testuser
touch test1.txt
su
whoami
root
touch test2.txt
Locally, it looks like I end up with "nobody:nobody"
ls -al test*
-rw-r--r-- 1 nobody nobody 0 Aug 9 10:31 test1.txt
-rw-r--r-- 1 nobody nobody 0 Aug 9 10:31 test2.txt
On the Server, the export is
grep vol /etc/exports
/data/media1 10.1.1.0/24(rw,sync,no_wdelay,insecure,no_root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)
Users are
id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
id testuser
uid=1026(testuser) gid=100(users) groups=100(users),101(administrators),1023(http)
id root
uid=0(root) gid=0(root) groups=0(root),2(daemon),19(log)
id 1025
uid=1025(guest) gid=100(users) groups=100(users)
and the mapping file is
cat /etc/idmapd.conf
[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = my.lan
[Mapping]
Nobody-User = nobody
Nobody-Group = nobody
[Translation]
Method = nsswitch
[Static]
But still
cd /data/media1
ls -al test*
-rw-r--r-- 1 1000 users 0 Aug 9 10:31 test1.txt
-rw-r--r-- 1 root root 0 Aug 9 10:31 test2.txt
I'll be the 1st to admit that I'm having a heckuva time understanding this mapping biz! :-/
What do I need to change in my config so i end up with
cd /data/media1
ls -al test*
-rw-r--r-- 1 nobody users 0 Aug 9 10:31 test1.txt
-rw-r--r-- 1 nobody users 0 Aug 9 10:31 test2.txt
on this and only this server? I.e., so I can use THIS mapping for THIS server, and OTHER mappings for OTHER servers.
Thanks for any help!
Arnie
On Thu, Aug 09, 2018 at 11:07:32AM -0700, [email protected] wrote:
> I'm trying to get a NFS4 client & server id mapping working right.
>
> My client mounts to a couple of NFS4 servers.
>
> I want to get it setup so that for just ONE of them, files added to or
> modified on the server BY my local client, logged in EITHER as my user
> or root, get written with a specific user/group == "nobody:users"
You should be able to do that by just adding "all_squash" to the export
options in /etc/exports for that one client.
> I'm pretty sure that all the magic is done with idmapd config.
This is a common source of confusion. NFSv4 idmapping only deals with
names and IDs that are sent in NFSv4 protocol messages--when setting or
getting file owners and groups, or ACLs.
It's the underlying RPC protocol that tells the server who is performing
a given RPC. That always uses numeric IDs or krb5 principals, and isn't
affected by anything in idmapd.conf.
--b.