Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-18835

'chown' in nodemap sets UID/GID to '65534' on OST objects

Details

    • Bug
    • Resolution: Unresolved
    • Minor
    • None
    • Lustre 2.17.0
    • None
    • 3
    • 9223372036854775807

    Description

      This is a situation that works correctly when no nodemap is used. The following describes how to reproduce this issue on a freshly-formatted Lustre file system.

      The nodemap is set as follows for a single client, mapping two users that are part of the same group. The squashing uid is slightly modified (it becomes clear why later).

      Nodemap config:

      nodemap.draze.admin_nodemap=1
      nodemap.draze.audit_mode=1
      nodemap.draze.deny_unknown=0
      nodemap.draze.deny_mount=0
      nodemap.draze.exports=
      [
       { nid: 192.155.155.50@tcp, uuid: 247b89e5-e7c5-46d9-8707-e0304329f54f }
      ]
      nodemap.draze.fileset=
      nodemap.draze.forbid_encryption=0
      nodemap.draze.id=2
      nodemap.draze.idmap=
      [
       { idtype: uid, client_id: 1003, fs_id: 11000 },
       { idtype: uid, client_id: 1004, fs_id: 11001 },
       { idtype: gid, client_id: 1003, fs_id: 11000 }
      ]
      nodemap.draze.map_mode=all
      nodemap.draze.offset=
      {
       start_uid: 0,
       limit_uid: 0,
       start_gid: 0,
       limit_gid: 0,
       start_projid: 0,
       limit_projid: 0
      }
      nodemap.draze.ranges=
      [
       { id: 2, start_nid: 192.155.155.50@tcp, end_nid: 192.155.155.50@tcp }
      ]
      nodemap.draze.rbac=file_perms,dne_ops,quota_ops,byfid_ops,chlg_ops,fscrypt_admin,server_upcall,ignore_root_prjquota,hsm_ops
      nodemap.draze.readonly_mount=0
      nodemap.draze.sepol=
      nodemap.draze.squash_gid=65534
      nodemap.draze.squash_projid=65534
      nodemap.draze.squash_uid=65535
      nodemap.draze.trusted_nodemap=0
      

      Next, Lustre is mounted on this tenant. The root dir is slightly modified.

      Namespace setup:

      # allow user 1003 to write to root
      root@lu-draze-client ~ $ chown 1003:1003 /exafs
      
      # Write to a file as a user:
      draze-usr@lu-draze-client ~ $ dd if=/dev/zero of=/exafs/file bs=1M count=32
      draze-usr@lu-draze-client ~ $ ls -ln /exafs
      total 32768
      -rw-rw-r--. 1 1003 1003 33554432 Mar 19 18:08 file
      

      MDT object tagged UID/GID:

      root@lu-ahulane-mds ~ $ debugfs -c -R "stat ROOT/file" ~/lustre_dev/lustre_mdt1
      debugfs 1.47.0-wc1 (28-Apr-2023)
      Inode: 1048335   Type: regular    Mode:  0664   Flags: 0x0
      Generation: 2080448777    Version: 0x00000001:00000002
      User: 11000   Group: 11000   Project:     0   Size: 0
      ..
      

      OST object tagged UID/GID:

      root@lu-evie-oss ~ $ debugfs -c -R "stat O/2c0000400/d$((2 % 32))/2" ~/lustre_dev/lustre_ost3
      debugfs 1.47.0-wc1 (28-Apr-2023)
      Inode: 103   Type: regular    Mode:  0666   Flags: 0x80000
      Generation: 3885368229    Version: 0x00000001:0000000b
      User: 11000   Group: 11000   Project: 65534   Size: 33554432
      ..
      

      chown file to 1004:1003:

      root@lu-draze-client ~ $ chown 1004:1003 /exafs/file
      
      # verify ids:
      draze-usr@lu-draze-client ~ $ ls -ln /exafs
      total 32768
      -rw-rw-r--. 1 1004 1003 33554432 Mar 19 18:08 file
      

      MDT object tagged UID/GID after chown (correct):

      root@lu-ahulane-mds ~ $ debugfs -c -R "stat ROOT/file" ~/lustre_dev/lustre_mdt1
      debugfs 1.47.0-wc1 (28-Apr-2023)
      Inode: 1048335   Type: regular    Mode:  0664   Flags: 0x0
      Generation: 2080448777    Version: 0x00000001:00000004
      User: 11001   Group: 11000   Project:     0   Size: 0
      

      OST object tagged UID/GID after chown (wrong, should be equivalent to MDT object):

      root@lu-evie-oss ~ $ debugfs -c -R "stat O/2c0000400/d$((2 % 32))/2" ~/lustre_dev/lustre_ost3
      debugfs 1.47.0-wc1 (28-Apr-2023)
      Inode: 103   Type: regular    Mode:  0666   Flags: 0x80000
      Generation: 3885368229    Version: 0x00000001:0000000b
      User: 65534   Group: 65534   Project: 65534   Size: 33554432
      

      Note that the "User" and "Group" IDs changed to 65534 for the OST object while the IDs are set correctly on the MDT object.

      I've also checked this for multiple stripes, in which case 65534 was set on all stripe OST objects. While this issue is related to nodemaps, it is unrelated to what is set as the squashed ids on the nodemap. The uid was set to 65535 earlier to verify whether it is used to tag the object UID, which is seemingly not the case. The UIDs 11000 and 11001 as well as the GID 11000 were set on both MDS and OSS. Writing to the file does not change "User" and "Group" of the OST object.

      When no nodemap is used, the "User" and "Group" IDs are set correctly on the OST object.

      Attachments

        Issue Links

          Activity

            People

              mvef Marc Vef
              mvef Marc Vef
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated: