Samba, CIFS and mkfifo

Anders Karlsson anders.karlsson at redhat.com
Fri Jan 26 07:48:42 GMT 2007


On Thu, 2007-01-25 at 19:08 -0800, Jeremy Allison wrote:
> Ok, I can see the problem in the capture trace. The
> mkfifo call is being done with uid and gid of zero
> - this is explicitly refused in the server.

In the trace, there is two attempts. One with the FIFO being called
'abc' - done as root. The other, a bit further on, called 'aabb' done as
the user 'cifs' which is the mount user (and admin user for the share).

Using a different user still yield a EACCES error.

>  See this
> code from smbd/trans2.c:
> 
> ---------------server code---------------------
> uid_t myuid = geteuid();
> gid_t mygid = getegid();
> 
> /* We can only create as the owner/group
>  * we are. */
> 
> if ((set_owner != myuid) && (set_owner != (uid_t)SMB_UID_NO_CHANGE))
> 	return(ERROR_DOS(ERRDOS,ERRnoaccess));
> if ((set_grp != mygid) && (set_grp != (gid_t)SMB_GID_NO_CHANGE))
> 	return(ERROR_DOS(ERRDOS,ERRnoaccess));
> ---------------end server code---------------------
> 
> Now look in the client code for mknod :
> 
>                 if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_SET_UID) {
>                         rc = CIFSSMBUnixSetPerms(xid, pTcon, full_path,
>                                 mode,(__u64)current->fsuid,(__u64)current->fsgid,
>                                 device_number, cifs_sb->local_nls,
>                                 cifs_sb->mnt_cifs_flags &
>                                         CIFS_MOUNT_MAP_SPECIAL_CHR);
>                 } else {
>                         rc = CIFSSMBUnixSetPerms(xid, pTcon,
>                                 full_path, mode, (__u64)-1, (__u64)-1,
>                                 device_number, cifs_sb->local_nls,
>                                 cifs_sb->mnt_cifs_flags &
>                                         CIFS_MOUNT_MAP_SPECIAL_CHR);
>                 }
> 
> Note that if CIFS_MOUNT_SET_UID is set it makes the
> call with the current current->fsuid and current->fsgid
> and not -1, -1 (which maps to SMB_UID_NO_CHANGE and
> SMB_GID_NO_CHANGE in the server).
> 
> This means you're telling the client you want to use
> the same uid/gid's on the client as you do on the
> server but you haven't mapped the uids and gids on client
> and server to be identical.

In my scenario the client and the server machine is the same. Users were
added with 'useradd', and then 'smbpasswd -a' was run for those users.
Are you saying that /etc/samba/smbusers have to be updated for every
user added that require this functionality to work? (Scratch that, just
tried it, gives no change in behaviour.)

> Once you make sure the uid/gid that you're logged in on
> the client match the uid/gid that you are using on the
> server (ie. when you give username and password then
> the uid and gid must be the same on both server and
> client) then this should start working for you.

Okay, I am trying this.

Thanks!

/Anders

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3679 bytes
Desc: not available
Url : http://lists.samba.org/archive/samba-technical/attachments/20070126/2d787381/smime.bin


More information about the samba-technical mailing list