{
    "mode": "man",
    "parameter": "gssd",
    "section": "8",
    "url": "https://www.chedong.com/phpMan.php/man/gssd/8/json",
    "generated": "2026-10-04T09:53:39Z",
    "synopsis": "rpc.gssd [-DfMnlvrHC] [-k keytab] [-p pipefsdir] [-d ccachedir] [-t timeout] [-T timeout] [-U\ntimeout] [-R realm]",
    "sections": {
        "NAME": {
            "content": "rpc.gssd - RPCSECGSS daemon\n",
            "subsections": []
        },
        "SYNOPSIS": {
            "content": "rpc.gssd [-DfMnlvrHC] [-k keytab] [-p pipefsdir] [-d ccachedir] [-t timeout] [-T timeout] [-U\ntimeout] [-R realm]\n",
            "subsections": []
        },
        "INTRODUCTION": {
            "content": "The  RPCSECGSS  protocol,  defined  in RFC 5403, is used to provide strong security for RPC-\nbased protocols such as NFS.\n\nBefore exchanging RPC requests using RPCSECGSS, an RPC client must establish a GSS  security\ncontext.   A security context is shared state on each end of a network transport that enables\nGSS-API security services.\n\nSecurity contexts are established using security credentials.  A credential grants  temporary\naccess to a secure network service, much as a railway ticket grants temporary access to use a\nrail service.\n\nA user typically obtains a credential by providing a password to the kinit(1) command, or via\na  PAM library at login time.  A credential acquired with a user principal is known as a user\ncredential (see kerberos(1) for more on principals).\n\nCertain operations require a credential that represents no particular user or represents  the\nhost itself.  This kind of credential is called a machine credential.\n\nA  host establishes its machine credential using a service principal whose encrypted password\nis stored in a local file known as a keytab.  A machine credential remains effective  without\nuser intervention as long as the host can renew it.\n\nOnce  obtained,  credentials  are  typically  stored in local temporary files with well-known\npathnames.\n",
            "subsections": []
        },
        "DESCRIPTION": {
            "content": "To establish GSS security contexts using these credential files, the Linux kernel RPC  client\ndepends  on  a  userspace  daemon  called  rpc.gssd.  The rpc.gssd daemon uses the rpcpipefs\nfilesystem to communicate with the kernel.\n",
            "subsections": [
                {
                    "name": "User Credentials",
                    "content": "When a user authenticates using a command such  as  kinit(1),  the  resulting  credential  is\nstored in a file with a well-known name constructed using the user's UID.\n\nTo  interact  with  an  NFS server on behalf of a particular Kerberos-authenticated user, the\nLinux kernel RPC client requests that rpc.gssd initialize a security context with the creden‐\ntial in that user's credential file.\n\nTypically, credential files are placed in /tmp.  However, rpc.gssd can search for  credential\nfiles in more than one directory.  See the description of the -d option for details.\n"
                },
                {
                    "name": "Machine Credentials",
                    "content": "rpc.gssd  searches the default keytab, /etc/krb5.keytab, in the following order for a princi‐\npal and password to use when establishing the machine credential.  For the  search,  rpc.gssd\nreplaces <hostname> and <REALM> with the local system's hostname and Kerberos realm.\n\n<HOSTNAME>$@<REALM>\nroot/<hostname>@<REALM>\nnfs/<hostname>@<REALM>\nhost/<hostname>@<REALM>\nroot/<anyname>@<REALM>\nnfs/<anyname>@<REALM>\nhost/<anyname>@<REALM>\n\nrpc.gssd  selects one of the <anyname> entries if it does not find a service principal match‐\ning the local hostname, e.g. if DHCP assigns the local hostname dynamically.   The  <anyname>\nfacility  enables  the  use  of the same keytab on multiple systems.  However, using the same\nservice principal to establish a machine credential on multiple hosts can create unwanted se‐\ncurity exposures and is therefore not recommended.\n\nNote that <HOSTNAME>$@<REALM> is a user principal that enables Kerberized NFS when the  local\nsystem is joined to an Active Directory domain using Samba.  The keytab provides the password\nfor this principal.\n\nYou  can specify a different keytab by using the -k option if /etc/krb5.keytab does not exist\nor does not provide one of these principals.\n"
                },
                {
                    "name": "Credentials for UID 0",
                    "content": "UID 0 is a special case.  By default rpc.gssd uses the system's machine credentials for UID 0\naccesses that require GSS authentication.  This limits the privileges of the root  user  when\naccessing network resources that require authentication.\n\nSpecify the -n option when starting rpc.gssd if you'd like to force the root user to obtain a\nuser credential rather than use the local system's machine credential.\n\nWhen  -n  is  specified, the kernel continues to request a GSS context established with a ma‐\nchine credential for NFSv4 operations, such as SETCLIENTID or RENEW, that manage  state.   If\nrpc.gssd  cannot obtain a machine credential (say, the local system has no keytab), NFSv4 op‐\nerations that require machine credentials will fail.\n"
                },
                {
                    "name": "Encryption types",
                    "content": "A realm administrator can choose to add keys encoded in  a  number  of  different  encryption\ntypes  to the local system's keytab.  For instance, a host/ principal might have keys for the\naes256-cts-hmac-sha1-96, aes128-cts-hmac-sha1-96, des3-cbc-sha1, and arcfour-hmac  encryption\ntypes.   This  permits  rpc.gssd to choose an appropriate encryption type that the target NFS\nserver supports.\n\nThese encryption types are stronger than legacy single-DES encryption types.  To interoperate\nin environments where servers support only weak  encryption  types,  you  can  restrict  your\nclient  to  use  only  single-DES  encryption types by specifying the -l option when starting\nrpc.gssd.\n"
                }
            ]
        },
        "OPTIONS": {
            "content": "",
            "subsections": [
                {
                    "name": "-D",
                    "content": "requested.   e.g.  for  NFS  it is the server name in the \"servername:/path\" mount re‐\nquest.  Only if this servername appears to be an IP address (IPv4 or IPv6) or  an  un‐\nqualified name (no dots) will a reverse DNS lookup will be performed to get the canon‐\ncial server name.\n\nIf  -D  is  present, a reverse DNS lookup will always be used, even if the server name\nlooks like a canonical name.  So it is needed if partially qualified, or non canonical\nnames are regularly used.\n\nUsing -D can introduce a security vulnerability, so it is recommended that -D  not  be\nused, and that canonical names always be used when requesting services.\n",
                    "flag": "-D"
                },
                {
                    "name": "-f",
                    "content": "",
                    "flag": "-f"
                },
                {
                    "name": "-n",
                    "content": "the local system's machine credentials.\n",
                    "flag": "-n"
                },
                {
                    "name": "-k _",
                    "content": "Tells rpc.gssd to use the keys found in keytab to obtain machine credentials.  The de‐\nfault value is /etc/krb5.keytab.\n",
                    "flag": "-k"
                },
                {
                    "name": "-l",
                    "content": "cbc-crc.   This option is available only when the local system's Kerberos library sup‐\nports settable encryption types.\n",
                    "flag": "-l"
                },
                {
                    "name": "-p _",
                    "content": "Tells rpc.gssd where to look for the rpcpipefs  filesystem.   The  default  value  is\n/var/lib/nfs/rpcpipefs.\n",
                    "flag": "-p"
                },
                {
                    "name": "-d _",
                    "content": "This option specifies a colon separated list of directories that rpc.gssd searches for\ncredential  files.  The default value is /tmp:/run/user/%U.  The literal sequence \"%U\"\ncan be specified to substitue the UID of the  user  for  whom  credentials  are  being\nsearched.\n",
                    "flag": "-d"
                },
                {
                    "name": "-M",
                    "content": "dential  directory  search  path (see the -d option).  When -M is set, rpc.gssd stores\nmachine credentials in memory instead.\n",
                    "flag": "-M"
                },
                {
                    "name": "-v",
                    "content": "",
                    "flag": "-v"
                },
                {
                    "name": "-r",
                    "content": "output (can be specified multiple times).\n",
                    "flag": "-r"
                },
                {
                    "name": "-R _",
                    "content": "Kerberos tickets from this realm will be preferred when scanning available credentials\ncache files to be used to create a context.  By default, the default realm, as config‐\nured in the Kerberos configuration file, is preferred.\n",
                    "flag": "-R"
                },
                {
                    "name": "-t _",
                    "content": "Timeout, in seconds, for kernel GSS contexts. This option allows you to force new ker‐\nnel contexts to be negotiated after timeout seconds, which  allows  changing  Kerberos\ntickets  and  identities  frequently.  The default is no explicit timeout, which means\nthe kernel context will live the lifetime of the Kerberos service ticket used  in  its\ncreation.\n",
                    "flag": "-t"
                },
                {
                    "name": "-T _",
                    "content": "Timeout,  in  seconds, to create an RPC connection with a server while establishing an\nauthenticated gss context for a user.  The default timeout is set to  5  seconds.   If\nyou  get  messages like \"WARNING: can't create tcp rpcclnt to server %servername% for\nuser with uid %uid%: RPC: Remote system error - Connection timed out\", you should con‐\nsider an increase of this timeout.\n",
                    "flag": "-T"
                },
                {
                    "name": "-U _",
                    "content": "Timeout, in seconds, for upcall threads.  Threads executing longer than  timeout  sec‐\nonds  will  cause  an  error message to be logged.  The default timeout is 30 seconds.\nThe minimum is 5 seconds.  The maximum is 600 seconds.\n",
                    "flag": "-U"
                },
                {
                    "name": "-C",
                    "content": "will be canceled and an error of -ETIMEDOUT will be reported to the kernel.\n",
                    "flag": "-C"
                },
                {
                    "name": "-H",
                    "content": "versus trying to read /.k5identity for each user.\n\nIf  -H  is  not  set,  rpc.gssd  will  use  the  first  match   found   in   /var/ker‐\nberos/krb5/user/$EUID/client.keytab  and will not use a principal based on host and/or\nservice parameters listed in $HOME/.k5identity.\n",
                    "flag": "-H"
                }
            ]
        },
        "CONFIGURATION FILE": {
            "content": "Many of the options that can be set on the command line can also be controlled through values\nset in the [gssd] section of the /etc/nfs.conf configuration  file.   Values  recognized  in‐\nclude:\n",
            "subsections": [
                {
                    "name": "verbosity",
                    "content": "Value which is equivalent to the number of -v.\n"
                },
                {
                    "name": "rpc-verbosity",
                    "content": "Value which is equivalent to the number of -r.\n"
                },
                {
                    "name": "use-memcache",
                    "content": "A Boolean flag equivalent to -M.\n"
                },
                {
                    "name": "use-machine-creds",
                    "content": "A Boolean flag. Setting to false is equivalent to giving the -n flag.\n"
                },
                {
                    "name": "avoid-dns",
                    "content": "Setting to false is equivalent to providing the -D flag.\n"
                },
                {
                    "name": "limit-to-legacy-enctypes",
                    "content": "Equivalent to -l.\n"
                },
                {
                    "name": "context-timeout",
                    "content": "Equivalent to -t.\n"
                },
                {
                    "name": "rpc-timeout",
                    "content": "Equivalent to -T.\n"
                },
                {
                    "name": "keytab-file",
                    "content": "Equivalent to -k.\n"
                },
                {
                    "name": "cred-cache-directory",
                    "content": "Equivalent to -d.\n"
                },
                {
                    "name": "preferred-realm",
                    "content": "Equivalent to -R.\n"
                },
                {
                    "name": "upcall-timeout",
                    "content": "Equivalent to -U.\n"
                },
                {
                    "name": "cancel-timed-out-upcalls",
                    "content": "Setting to true is equivalent to providing the -C flag.\n"
                },
                {
                    "name": "set-home",
                    "content": "Setting to false is equivalent to providing the -H flag.\n\nIn addtion, the following value is recognized from the [general] section:\n"
                },
                {
                    "name": "pipefs-directory",
                    "content": "Equivalent to -p.\n\n"
                }
            ]
        },
        "SEE ALSO": {
            "content": "rpc.svcgssd(8), kerberos(1), kinit(1), krb5.conf(5)\n",
            "subsections": []
        },
        "AUTHORS": {
            "content": "Dug Song <dugsong@umich.edu>\nAndy Adamson <andros@umich.edu>\nMarius Aamodt Eriksen <marius@umich.edu>\nJ. Bruce Fields <bfields@umich.edu>\n\n20 Feb 2013                                 rpc.gssd(8)",
            "subsections": []
        }
    },
    "summary": "rpc.gssd - RPCSECGSS daemon",
    "flags": [
        {
            "flag": "-D",
            "long": null,
            "arg": null,
            "description": "requested. e.g. for NFS it is the server name in the \"servername:/path\" mount re‐ quest. Only if this servername appears to be an IP address (IPv4 or IPv6) or an un‐ qualified name (no dots) will a reverse DNS lookup will be performed to get the canon‐ cial server name. If -D is present, a reverse DNS lookup will always be used, even if the server name looks like a canonical name. So it is needed if partially qualified, or non canonical names are regularly used. Using -D can introduce a security vulnerability, so it is recommended that -D not be used, and that canonical names always be used when requesting services."
        },
        {
            "flag": "-f",
            "long": null,
            "arg": null,
            "description": ""
        },
        {
            "flag": "-n",
            "long": null,
            "arg": null,
            "description": "the local system's machine credentials."
        },
        {
            "flag": "-k",
            "long": null,
            "arg": null,
            "description": "Tells rpc.gssd to use the keys found in keytab to obtain machine credentials. The de‐ fault value is /etc/krb5.keytab."
        },
        {
            "flag": "-l",
            "long": null,
            "arg": null,
            "description": "cbc-crc. This option is available only when the local system's Kerberos library sup‐ ports settable encryption types."
        },
        {
            "flag": "-p",
            "long": null,
            "arg": null,
            "description": "Tells rpc.gssd where to look for the rpcpipefs filesystem. The default value is /var/lib/nfs/rpcpipefs."
        },
        {
            "flag": "-d",
            "long": null,
            "arg": null,
            "description": "This option specifies a colon separated list of directories that rpc.gssd searches for credential files. The default value is /tmp:/run/user/%U. The literal sequence \"%U\" can be specified to substitue the UID of the user for whom credentials are being searched."
        },
        {
            "flag": "-M",
            "long": null,
            "arg": null,
            "description": "dential directory search path (see the -d option). When -M is set, rpc.gssd stores machine credentials in memory instead."
        },
        {
            "flag": "-v",
            "long": null,
            "arg": null,
            "description": ""
        },
        {
            "flag": "-r",
            "long": null,
            "arg": null,
            "description": "output (can be specified multiple times)."
        },
        {
            "flag": "-R",
            "long": null,
            "arg": null,
            "description": "Kerberos tickets from this realm will be preferred when scanning available credentials cache files to be used to create a context. By default, the default realm, as config‐ ured in the Kerberos configuration file, is preferred."
        },
        {
            "flag": "-t",
            "long": null,
            "arg": null,
            "description": "Timeout, in seconds, for kernel GSS contexts. This option allows you to force new ker‐ nel contexts to be negotiated after timeout seconds, which allows changing Kerberos tickets and identities frequently. The default is no explicit timeout, which means the kernel context will live the lifetime of the Kerberos service ticket used in its creation."
        },
        {
            "flag": "-T",
            "long": null,
            "arg": null,
            "description": "Timeout, in seconds, to create an RPC connection with a server while establishing an authenticated gss context for a user. The default timeout is set to 5 seconds. If you get messages like \"WARNING: can't create tcp rpcclnt to server %servername% for user with uid %uid%: RPC: Remote system error - Connection timed out\", you should con‐ sider an increase of this timeout."
        },
        {
            "flag": "-U",
            "long": null,
            "arg": null,
            "description": "Timeout, in seconds, for upcall threads. Threads executing longer than timeout sec‐ onds will cause an error message to be logged. The default timeout is 30 seconds. The minimum is 5 seconds. The maximum is 600 seconds."
        },
        {
            "flag": "-C",
            "long": null,
            "arg": null,
            "description": "will be canceled and an error of -ETIMEDOUT will be reported to the kernel."
        },
        {
            "flag": "-H",
            "long": null,
            "arg": null,
            "description": "versus trying to read /.k5identity for each user. If -H is not set, rpc.gssd will use the first match found in /var/ker‐ beros/krb5/user/$EUID/client.keytab and will not use a principal based on host and/or service parameters listed in $HOME/.k5identity."
        }
    ],
    "examples": [],
    "see_also": [
        {
            "name": "rpc.svcgssd",
            "section": "8",
            "url": "https://www.chedong.com/phpMan.php/man/rpc.svcgssd/8/json"
        },
        {
            "name": "kerberos",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/kerberos/1/json"
        },
        {
            "name": "kinit",
            "section": "1",
            "url": "https://www.chedong.com/phpMan.php/man/kinit/1/json"
        },
        {
            "name": "krb5.conf",
            "section": "5",
            "url": "https://www.chedong.com/phpMan.php/man/krb5.conf/5/json"
        }
    ]
}