All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aleksandr Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
To: Christian Brauner <brauner@kernel.org>
Cc: Xiubo Li <xiubli@redhat.com>,
	stgraber@ubuntu.com, linux-fsdevel@vger.kernel.org,
	Jeff Layton <jlayton@kernel.org>,
	Ilya Dryomov <idryomov@gmail.com>,
	ceph-devel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 10/13] ceph: allow idmapped setattr inode op
Date: Fri, 2 Jun 2023 15:05:50 +0200	[thread overview]
Message-ID: <CAEivzxcwTbOUrT2ha8fR=wy-bU1+ZppapnMsqVXBXAc+C0gwhw@mail.gmail.com> (raw)
In-Reply-To: <20230602-vorzeichen-praktikum-f17931692301@brauner>

On Fri, Jun 2, 2023 at 2:54 PM Christian Brauner <brauner@kernel.org> wrote:
>
> On Fri, Jun 02, 2023 at 02:45:30PM +0200, Aleksandr Mikhalitsyn wrote:
> > On Fri, Jun 2, 2023 at 3:30 AM Xiubo Li <xiubli@redhat.com> wrote:
> > >
> > >
> > > On 5/24/23 23:33, Alexander Mikhalitsyn wrote:
> > > > From: Christian Brauner <christian.brauner@ubuntu.com>
> > > >
> > > > Enable __ceph_setattr() to handle idmapped mounts. This is just a matter
> > > > of passing down the mount's idmapping.
> > > >
> > > > Cc: Jeff Layton <jlayton@kernel.org>
> > > > Cc: Ilya Dryomov <idryomov@gmail.com>
> > > > Cc: ceph-devel@vger.kernel.org
> > > > Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
> > > > Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
> > > > ---
> > > >   fs/ceph/inode.c | 11 +++++++++--
> > > >   1 file changed, 9 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
> > > > index 37e1cbfc7c89..f1f934439be0 100644
> > > > --- a/fs/ceph/inode.c
> > > > +++ b/fs/ceph/inode.c
> > > > @@ -2050,6 +2050,13 @@ int __ceph_setattr(struct inode *inode, struct iattr *attr)
> > > >
> > > >       dout("setattr %p issued %s\n", inode, ceph_cap_string(issued));
> > > >
> > > > +     /*
> > > > +      * The attr->ia_{g,u}id members contain the target {g,u}id we're
>
> This is now obsolete... In earlier imlementations attr->ia_{g,u}id was
> used and contained the filesystem wide value, not the idmapped mount
> value.
>
> However, this was misleading and we changed that in commit b27c82e12965
> ("attr: port attribute changes to new types") and introduced dedicated
> new types into struct iattr->ia_vfs{g,u}id. So the you need to use
> attr->ia_vfs{g,u}id as documented in include/linux/fs.h and you need to
> transform them into filesystem wide values and then to raw values you
> send over the wire.
>
> Alex should be able to figure this out though.

Hi Christian,

Thanks for pointing this out. Unfortunately I wasn't able to notice
that. I'll take a look closer and fix that.

>
> > > > +      * sending over the wire. The mount idmapping only matters when we
> > > > +      * create new filesystem objects based on the caller's mapped
> > > > +      * fs{g,u}id.
> > > > +      */
> > > > +     req->r_mnt_idmap = &nop_mnt_idmap;
> > >
> > > For example with an idmapping 1000:0 and in the /mnt/idmapped_ceph/.
> > >
> > > This means the "__ceph_setattr()" will always use UID 0 to set the
> > > caller_uid, right ? If it is then the client auth checking for the
> >
> > Yes, if you have a mapping like b:1000:0:1 (the last number is a
> > length of a mapping). It means even more,
> > the only user from which you can create something on the filesystem
> > will be UID = 0,
> > because all other UIDs/GIDs are not mapped and you'll instantly get
> > -EOVERFLOW from the kernel.
> >
> > > setattr requests in cephfs MDS will succeed, since the UID 0 is root.
> > > But if you use a different idmapping, such as 1000:2000, it will fail.
> >
> > If you have a mapping b:1000:2000:1 then the only valid UID/GID from
> > which you can create something
> > on an idmapped mount will be UID/GID = 2000:2000 (and this will be
> > mapped to 1000:1000 and sent over the wire,
> > because we performing an idmapping procedure for requests those are
> > creating inodes).
> > So, even root with UID = 0 will not be able to create a file on such a
> > mount and get -EOVERFLOW.
> >
> > >
> > > So here IMO we should set it to 'idmap' too ?
> >
> > Good question. I can't see any obvious issue with setting an actual
> > idmapping here.
> > It will be interesting to know Christian's opinion about this.

^

Kind regards,
Alex

> >
> > Kind regards,
> > Alex
> >
> > >
> > > Thanks
> > >
> > > - Xiubo
> > >
> > > >       if (ia_valid & ATTR_UID) {
> > > >               dout("setattr %p uid %d -> %d\n", inode,
> > > >                    from_kuid(&init_user_ns, inode->i_uid),
> > > > @@ -2240,7 +2247,7 @@ int ceph_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
> > > >       if (ceph_inode_is_shutdown(inode))
> > > >               return -ESTALE;
> > > >
> > > > -     err = setattr_prepare(&nop_mnt_idmap, dentry, attr);
> > > > +     err = setattr_prepare(idmap, dentry, attr);
> > > >       if (err != 0)
> > > >               return err;
> > > >
> > > > @@ -2255,7 +2262,7 @@ int ceph_setattr(struct mnt_idmap *idmap, struct dentry *dentry,
> > > >       err = __ceph_setattr(inode, attr);
> > > >
> > > >       if (err >= 0 && (attr->ia_valid & ATTR_MODE))
> > > > -             err = posix_acl_chmod(&nop_mnt_idmap, dentry, attr->ia_mode);
> > > > +             err = posix_acl_chmod(idmap, dentry, attr->ia_mode);
> > > >
> > > >       return err;
> > > >   }
> > >

  reply	other threads:[~2023-06-02 13:06 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-24 15:33 [PATCH v2 00/13] ceph: support idmapped mounts Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 01/13] fs: export mnt_idmap_get/mnt_idmap_put Alexander Mikhalitsyn
2023-06-02  1:16   ` Xiubo Li
2023-06-02  9:55     ` Aleksandr Mikhalitsyn
2023-06-02 12:40   ` Christian Brauner
2023-06-05 13:53     ` Christoph Hellwig
2023-06-05 14:06       ` Aleksandr Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 02/13] ceph: stash idmapping in mdsc request Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 03/13] ceph: handle idmapped mounts in create_request_message() Alexander Mikhalitsyn
2023-05-29  3:52   ` Xiubo Li
2023-05-31 16:32     ` Aleksandr Mikhalitsyn
2023-06-01  2:29       ` Xiubo Li
2023-06-01 18:29         ` Aleksandr Mikhalitsyn
2023-06-02  0:41           ` Xiubo Li
2023-06-02 10:01             ` Aleksandr Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 04/13] ceph: allow idmapped mknod inode op Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 05/13] ceph: allow idmapped symlink " Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 06/13] ceph: allow idmapped mkdir " Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 07/13] ceph: allow idmapped rename " Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 08/13] ceph: allow idmapped getattr " Alexander Mikhalitsyn
2023-06-02  1:43   ` Xiubo Li
2023-05-24 15:33 ` [PATCH v2 09/13] ceph: allow idmapped permission " Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 10/13] ceph: allow idmapped setattr " Alexander Mikhalitsyn
2023-06-02  1:30   ` Xiubo Li
2023-06-02 12:45     ` Aleksandr Mikhalitsyn
2023-06-02 12:53       ` Christian Brauner
2023-06-02 13:05         ` Aleksandr Mikhalitsyn [this message]
2023-06-02 13:08           ` Christian Brauner
2023-06-02 13:15             ` Aleksandr Mikhalitsyn
2023-06-07 15:28         ` Aleksandr Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 11/13] ceph/acl: allow idmapped set_acl " Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 12/13] ceph/file: allow idmapped atomic_open " Alexander Mikhalitsyn
2023-05-24 15:33 ` [PATCH v2 13/13] ceph: allow idmapped mounts Alexander Mikhalitsyn
2023-06-07 15:24 ` [PATCH v2 00/13] ceph: support " Aleksandr Mikhalitsyn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAEivzxcwTbOUrT2ha8fR=wy-bU1+ZppapnMsqVXBXAc+C0gwhw@mail.gmail.com' \
    --to=aleksandr.mikhalitsyn@canonical.com \
    --cc=brauner@kernel.org \
    --cc=ceph-devel@vger.kernel.org \
    --cc=idryomov@gmail.com \
    --cc=jlayton@kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stgraber@ubuntu.com \
    --cc=xiubli@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.