<div dir="ltr"><div>Seems that the SCM_CREDENTIALS ancillary message passes the real UID rather than the effective UID in the ucred struct. It looks like that's where we get a value for ugp.uid.<br></div><div><br></div><div>I wonder if there's any way to work around this and whether it's intended behavior. Based on variable naming (c->euid), libqb seems to expect an effective UID. For example:</div><div><br></div><div><a href="https://github.com/ClusterLabs/libqb/blob/master/lib/ipc_setup.c#L497">https://github.com/ClusterLabs/libqb/blob/master/lib/ipc_setup.c#L497</a></div><div><a href="https://github.com/ClusterLabs/libqb/blob/master/lib/ipc_setup.c#L652">https://github.com/ClusterLabs/libqb/blob/master/lib/ipc_setup.c#L652</a></div><div><br></div><div>I'm way out of my depth here :) Just seemed fun to dig into.<br></div><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 7, 2021 at 7:08 PM Reid Wahl <<a href="mailto:nwahl@redhat.com">nwahl@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 7, 2021 at 6:16 PM Reid Wahl <<a href="mailto:nwahl@redhat.com" target="_blank">nwahl@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">For whatever reason, the IPC from the crm_mon client to the CIB<br>
manager is getting opened with the real UID ("testuser" in my case)<br>
instead of the effective UID. The CIB manager checks this unprivileged<br>
user against the ACL list and pre-filters the entire CIB, causing a<br>
"Permission denied" error.<br>
<br>
What I haven't figured out yet (if I even keep going down this rabbit<br>
hole) is why the IPC is attached to the real UID even though the<br>
executable is owned by cmadmin with the setuid bit enabled.<br></blockquote><div><br></div><div>Seems to be getting set within libqb, and I'm not sure whether it's intentional that<br></div><div><br></div><div>It doesn't seem to be possible to debug cmadmin's SUID process when running it as testuser. I'm not particularly familiar with libqb and am not sure how to debug further without building libqb from source and adding tracing, which is a whole other can of worms.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
On Mon, Dec 14, 2020 at 4:41 AM Klaus Wenninger <<a href="mailto:kwenning@redhat.com" target="_blank">kwenning@redhat.com</a>> wrote:<br>
><br>
> On 12/11/20 10:20 PM, Alex Zarifoglu wrote:<br>
> > Hello,<br>
> ><br>
> > I have question regarding the running crm commands with the effective uid.<br>
> ><br>
> > I am trying to create a tool to manage pacemaker resources for<br>
> > multiple users. For security reasons, these users will only be able to<br>
> > create/delete/manage resources that can impact that specific user<br>
> > only. I cannot achieve this via ACLs because it is not possible to<br>
> > enforce every user to only create primitives with certain parameters,<br>
> > rules etc.<br>
> ><br>
> > Therefore, I created a user called cmadmin which has full write access<br>
> > to the cib. And created an executable which is owned by this user and<br>
> > has the setuid and setgid bits set.<br>
> ><br>
> > -r-sr-s--x   1 cmadmin cmadmin 24248 Dec 11 07:04 cmexc<br>
> ><br>
> > Within this executable I have the code:<br>
> ><br>
> >      pid_tpid;<br>
> >      char*constparmList[] = {"/sbin/crm_mon", "-1", "-VVV", NULL};<br>
> ><br>
> >      if((pid = fork()) == -1)<br>
> >         perror("fork error");<br>
> >      else if(pid == 0) {<br>
> >         execv("/sbin/crm_mon", parmList);<br>
> >         printf("execv error");<br>
> >      }<br>
> ><br>
> ><br>
> > If I run this with a user other than cmadmin, crm_mon fails. I tested<br>
> > with another executable to make sure effective user id is passed in<br>
> > correctly and it worked fine.<br>
> ><br>
> > Checking the trace, we fail here with eacces permission denied:<br>
> > |(crm_ipc_send)   trace: Sending cib_ro IPC request 5 of 191 bytes<br>
> > using 120000ms timeout|<br>
> > |(internal_ipc_get_reply) trace: client cib_ro waiting on reply to msg<br>
> > id 5|<br>
> > |(crm_ipc_send)   trace: Received 179-byte reply 5 to cib_ro IPC 5:<br>
> > <cib-reply t="cib" cib_op="cib_query" cib_callid="2"<br>
> > cib_clientid="f58912bf-cab6-4d1b-9025-701fc147c|<br>
> > |(cib_native_perform_op_delegate) trace: Reply   <cib-reply t="cib"<br>
> > cib_op="cib_query" cib_callid="2"<br>
> > cib_clientid="f58912bf-cab6-4d1b-9025-701fc147c6cd" cib_callopt="4352"<br>
> > *cib_rc="-13"*/>|<br>
> ><br>
> > I tested with other pacemaker commands and got similar results. I’ve<br>
> > also tried adding users to haclient group (not to acls just to the<br>
> > group) with no success.<br>
> ><br>
> > Is it not possible to change effective uids and call crm executables?<br>
> > If so why and is there way I can achieve what I need differently?<br>
> Are you running with selinux enforcing?<br>
> Not saying you shouldn't - just to narrow down ...<br>
><br>
> Klaus<br>
> ><br>
> > Thank you,<br>
> > Alex<br>
> ><br>
> ><br>
> > *Alex Zarifoglu*<br>
> > Software Developer *|* *Db2* pureScale<br>
> ><br>
> ><br>
> > _______________________________________________<br>
> > Manage your subscription:<br>
> > <a href="https://lists.clusterlabs.org/mailman/listinfo/users" rel="noreferrer" target="_blank">https://lists.clusterlabs.org/mailman/listinfo/users</a><br>
> ><br>
> > ClusterLabs home: <a href="https://www.clusterlabs.org/" rel="noreferrer" target="_blank">https://www.clusterlabs.org/</a><br>
><br>
> _______________________________________________<br>
> Manage your subscription:<br>
> <a href="https://lists.clusterlabs.org/mailman/listinfo/users" rel="noreferrer" target="_blank">https://lists.clusterlabs.org/mailman/listinfo/users</a><br>
><br>
> ClusterLabs home: <a href="https://www.clusterlabs.org/" rel="noreferrer" target="_blank">https://www.clusterlabs.org/</a><br>
<br>
<br>
<br>
--<br>
Regards,<br>
<br>
Reid Wahl, RHCA<br>
Senior Software Maintenance Engineer, Red Hat<br>
CEE - Platform Support Delivery - ClusterHA<br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div>Regards,<br><br></div>Reid Wahl, RHCA<br></div><div>Senior Software Maintenance Engineer, Red Hat<br></div>CEE - Platform Support Delivery - ClusterHA</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div>Regards,<br><br></div>Reid Wahl, RHCA<br></div><div>Senior Software Maintenance Engineer, Red Hat<br></div>CEE - Platform Support Delivery - ClusterHA</div></div></div></div></div></div></div></div></div></div></div></div></div></div>