| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 1 |  | 
|  | 2 | ========= | 
|  | 3 | ID Mapper | 
|  | 4 | ========= | 
|  | 5 | Id mapper is used by NFS to translate user and group ids into names, and to | 
|  | 6 | translate user and group names into ids.  Part of this translation involves | 
|  | 7 | performing an upcall to userspace to request the information.  Id mapper will | 
|  | 8 | user request-key to perform this upcall and cache the result.  The program | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 9 | /usr/sbin/nfs.idmap should be called by request-key, and will perform the | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 10 | translation and initialize a key with the resulting information. | 
|  | 11 |  | 
|  | 12 | NFS_USE_NEW_IDMAPPER must be selected when configuring the kernel to use this | 
|  | 13 | feature. | 
|  | 14 |  | 
|  | 15 | =========== | 
|  | 16 | Configuring | 
|  | 17 | =========== | 
|  | 18 | The file /etc/request-key.conf will need to be modified so /sbin/request-key can | 
|  | 19 | direct the upcall.  The following line should be added: | 
|  | 20 |  | 
|  | 21 | #OP	TYPE	DESCRIPTION	CALLOUT INFO	PROGRAM ARG1 ARG2 ARG3 ... | 
|  | 22 | #======	=======	===============	===============	=============================== | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 23 | create	id_resolver	*	*		/usr/sbin/nfs.idmap %k %d 600 | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 24 |  | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 25 | This will direct all id_resolver requests to the program /usr/sbin/nfs.idmap. | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 26 | The last parameter, 600, defines how many seconds into the future the key will | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 27 | expire.  This parameter is optional for /usr/sbin/nfs.idmap.  When the timeout | 
|  | 28 | is not specified, nfs.idmap will default to 600 seconds. | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 29 |  | 
|  | 30 | id mapper uses for key descriptions: | 
|  | 31 | uid:  Find the UID for the given user | 
|  | 32 | gid:  Find the GID for the given group | 
|  | 33 | user:  Find the user  name for the given UID | 
|  | 34 | group:  Find the group name for the given GID | 
|  | 35 |  | 
|  | 36 | You can handle any of these individually, rather than using the generic upcall | 
|  | 37 | program.  If you would like to use your own program for a uid lookup then you | 
|  | 38 | would edit your request-key.conf so it look similar to this: | 
|  | 39 |  | 
|  | 40 | #OP	TYPE	DESCRIPTION	CALLOUT INFO	PROGRAM ARG1 ARG2 ARG3 ... | 
|  | 41 | #======	=======	===============	===============	=============================== | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 42 | create	id_resolver	uid:*	*		/some/other/program %k %d 600 | 
|  | 43 | create	id_resolver	*	*		/usr/sbin/nfs.idmap %k %d 600 | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 44 |  | 
|  | 45 | Notice that the new line was added above the line for the generic program. | 
|  | 46 | request-key will find the first matching line and corresponding program.  In | 
|  | 47 | this case, /some/other/program will handle all uid lookups and | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 48 | /usr/sbin/nfs.idmap will handle gid, user, and group lookups. | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 49 |  | 
| Randy Dunlap | d410fa4 | 2011-05-19 15:59:38 -0700 | [diff] [blame] | 50 | See <file:Documentation/security/keys-request-keys.txt> for more information | 
|  | 51 | about the request-key function. | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 52 |  | 
|  | 53 |  | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 54 | ========= | 
|  | 55 | nfs.idmap | 
|  | 56 | ========= | 
|  | 57 | nfs.idmap is designed to be called by request-key, and should not be run "by | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 58 | hand".  This program takes two arguments, a serialized key and a key | 
|  | 59 | description.  The serialized key is first converted into a key_serial_t, and | 
|  | 60 | then passed as an argument to keyctl_instantiate (both are part of keyutils.h). | 
|  | 61 |  | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 62 | The actual lookups are performed by functions found in nfsidmap.h.  nfs.idmap | 
| Bryan Schumaker | 955a857 | 2010-09-29 15:41:49 -0400 | [diff] [blame] | 63 | determines the correct function to call by looking at the first part of the | 
|  | 64 | description string.  For example, a uid lookup description will appear as | 
|  | 65 | "uid:user@domain". | 
|  | 66 |  | 
| Bryan Schumaker | eb1c86b | 2010-10-26 13:27:42 -0400 | [diff] [blame] | 67 | nfs.idmap will return 0 if the key was instantiated, and non-zero otherwise. |