5 This document describes :term:`Ceph Client` users, and their authentication and
6 authorization with the :term:`Ceph Storage Cluster`. Users are either
7 individuals or system actors such as applications, which use Ceph clients to
8 interact with the Ceph Storage Cluster daemons.
13 +--+--+ /---------\ /---------\
15 ---+---*----->| |<------------->| |
16 | uses | Clients | | Servers |
17 | \---------/ \---------/
24 When Ceph runs with authentication and authorization enabled (enabled by
25 default), you must specify a user name and a keyring containing the secret key
26 of the specified user (usually via the command line). If you do not specify a
27 user name, Ceph will use ``client.admin`` as the default user name. If you do
28 not specify a keyring, Ceph will look for a keyring via the ``keyring`` setting
29 in the Ceph configuration. For example, if you execute the ``ceph health``
30 command without specifying a user or keyring::
34 Ceph interprets the command like this::
36 ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health
38 Alternatively, you may use the ``CEPH_ARGS`` environment variable to avoid
39 re-entry of the user name and secret.
41 For details on configuring the Ceph Storage Cluster to use authentication,
42 see `Cephx Config Reference`_. For details on the architecture of Cephx, see
43 `Architecture - High Availability Authentication`_.
49 Irrespective of the type of Ceph client (e.g., Block Device, Object Storage,
50 Filesystem, native API, etc.), Ceph stores all data as objects within `pools`_.
51 Ceph users must have access to pools in order to read and write data.
52 Additionally, Ceph users must have execute permissions to use Ceph's
53 administrative commands. The following concepts will help you understand Ceph
60 A user is either an individual or a system actor such as an application.
61 Creating users allows you to control who (or what) can access your Ceph Storage
62 Cluster, its pools, and the data within pools.
64 Ceph has the notion of a ``type`` of user. For the purposes of user management,
65 the type will always be ``client``. Ceph identifies users in period (.)
66 delimited form consisting of the user type and the user ID: for example,
67 ``TYPE.ID``, ``client.admin``, or ``client.user1``. The reason for user typing
68 is that Ceph Monitors, OSDs, and Metadata Servers also use the Cephx protocol,
69 but they are not clients. Distinguishing the user type helps to distinguish
70 between client users and other users--streamlining access control, user
71 monitoring and traceability.
73 Sometimes Ceph's user type may seem confusing, because the Ceph command line
74 allows you to specify a user with or without the type, depending upon your
75 command line usage. If you specify ``--user`` or ``--id``, you can omit the
76 type. So ``client.user1`` can be entered simply as ``user1``. If you specify
77 ``--name`` or ``-n``, you must specify the type and name, such as
78 ``client.user1``. We recommend using the type and name as a best practice
81 .. note:: A Ceph Storage Cluster user is not the same as a Ceph Object Storage
82 user or a Ceph Filesystem user. The Ceph Object Gateway uses a Ceph Storage
83 Cluster user to communicate between the gateway daemon and the storage
84 cluster, but the gateway has its own user management functionality for end
85 users. The Ceph Filesystem uses POSIX semantics. The user space associated
86 with the Ceph Filesystem is not the same as a Ceph Storage Cluster user.
90 Authorization (Capabilities)
91 ----------------------------
93 Ceph uses the term "capabilities" (caps) to describe authorizing an
94 authenticated user to exercise the functionality of the monitors, OSDs and
95 metadata servers. Capabilities can also restrict access to data within a pool or
96 a namespace within a pool. A Ceph administrative user sets a user's
97 capabilities when creating or updating a user.
99 Capability syntax follows the form::
101 {daemon-type} '{capspec}[, {capspec} ...]'
103 - **Monitor Caps:** Monitor capabilities include ``r``, ``w``, ``x`` access
104 settings or ``profile {name}``. For example::
109 - **OSD Caps:** OSD capabilities include ``r``, ``w``, ``x``, ``class-read``,
110 ``class-write`` access settings or ``profile {name}``. Additionally, OSD
111 capabilities also allow for pool and namespace settings. ::
113 osd 'allow {access} [pool={pool-name} [namespace={namespace-name}]]'
114 osd 'profile {name} [pool={pool-name} [namespace={namespace-name}]]'
116 - **Metadata Server Caps:** Metadata server capability simply requires ``allow``,
117 or blank and does not parse anything further. ::
122 .. note:: The Ceph Object Gateway daemon (``radosgw``) is a client of the
123 Ceph Storage Cluster, so it is not represented as a Ceph Storage
126 The following entries describe each capability.
130 :Description: Precedes access settings for a daemon. Implies ``rw``
136 :Description: Gives the user read access. Required with monitors to retrieve
142 :Description: Gives the user write access to objects.
147 :Description: Gives the user the capability to call class methods
148 (i.e., both read and write) and to conduct ``auth``
149 operations on monitors.
154 :Descriptions: Gives the user the capability to call class read methods.
160 :Description: Gives the user the capability to call class write methods.
166 :Description: Gives the user read, write and execute permissions for a
167 particular daemon/pool, and the ability to execute
171 ``profile osd`` (Monitor only)
173 :Description: Gives a user permissions to connect as an OSD to other OSDs or
174 monitors. Conferred on OSDs to enable OSDs to handle replication
175 heartbeat traffic and status reporting.
178 ``profile mds`` (Monitor only)
180 :Description: Gives a user permissions to connect as a MDS to other MDSs or
184 ``profile bootstrap-osd`` (Monitor only)
186 :Description: Gives a user permissions to bootstrap an OSD. Conferred on
187 deployment tools such as ``ceph-disk``, ``ceph-deploy``, etc.
188 so that they have permissions to add keys, etc. when
189 bootstrapping an OSD.
192 ``profile bootstrap-mds`` (Monitor only)
194 :Description: Gives a user permissions to bootstrap a metadata server.
195 Conferred on deployment tools such as ``ceph-deploy``, etc.
196 so they have permissions to add keys, etc. when bootstrapping
199 ``profile rbd`` (Monitor and OSD)
201 :Description: Gives a user permissions to manipulate RBD images. When used
202 as a Monitor cap, it provides the minimal privileges required
203 by an RBD client application. When used as an OSD cap, it
204 provides read-write access to an RBD client application.
206 ``profile rbd-read-only`` (OSD only)
208 :Description: Gives a user read-only permissions to an RBD image.
214 A pool is a logical partition where users store data.
215 In Ceph deployments, it is common to create a pool as a logical partition for
216 similar types of data. For example, when deploying Ceph as a backend for
217 OpenStack, a typical deployment would have pools for volumes, images, backups
218 and virtual machines, and users such as ``client.glance``, ``client.cinder``,
225 Objects within a pool can be associated to a namespace--a logical group of
226 objects within the pool. A user's access to a pool can be associated with a
227 namespace such that reads and writes by the user take place only within the
228 namespace. Objects written to a namespace within the pool can only be accessed
229 by users who have access to the namespace.
231 .. note:: Namespaces are primarily useful for applications written on top of
232 ``librados`` where the logical grouping can alleviate the need to create
233 different pools. Ceph Object Gateway (from ``luminous``) uses namespaces for various
236 The rationale for namespaces is that pools can be a computationally expensive
237 method of segregating data sets for the purposes of authorizing separate sets
238 of users. For example, a pool should have ~100 placement groups per OSD. So an
239 exemplary cluster with 1000 OSDs would have 100,000 placement groups for one
240 pool. Each pool would create another 100,000 placement groups in the exemplary
241 cluster. By contrast, writing an object to a namespace simply associates the
242 namespace to the object name with out the computational overhead of a separate
243 pool. Rather than creating a separate pool for a user or set of users, you may
244 use a namespace. **Note:** Only available using ``librados`` at this time.
250 User management functionality provides Ceph Storage Cluster administrators with
251 the ability to create, update and delete users directly in the Ceph Storage
254 When you create or delete users in the Ceph Storage Cluster, you may need to
255 distribute keys to clients so that they can be added to keyrings. See `Keyring
256 Management`_ for details.
262 To list the users in your cluster, execute the following::
266 Ceph will list out all users in your cluster. For example, in a two-node
267 exemplary cluster, ``ceph auth ls`` will output something that looks like
270 installed auth entries:
273 key: AQCvCbtToC6MDhAATtuT70Sl+DymPCfDSsyV4w==
274 caps: [mon] allow profile osd
277 key: AQC4CbtTCFJBChAAVq5spj0ff4eHZICxIOVZeA==
278 caps: [mon] allow profile osd
281 key: AQBHCbtT6APDHhAA5W00cBchwkQjh3dkKsyPjw==
286 key: AQBICbtTOK9uGBAAdbe5zcIGHZL3T/u2g6EBww==
287 caps: [mon] allow profile bootstrap-mds
289 key: AQBHCbtT4GxqORAADE5u7RkpCN/oo4e5W0uBtw==
290 caps: [mon] allow profile bootstrap-osd
293 Note that the ``TYPE.ID`` notation for users applies such that ``osd.0`` is a
294 user of type ``osd`` and its ID is ``0``, ``client.admin`` is a user of type
295 ``client`` and its ID is ``admin`` (i.e., the default ``client.admin`` user).
296 Note also that each entry has a ``key: <value>`` entry, and one or more
299 You may use the ``-o {filename}`` option with ``ceph auth ls`` to
300 save the output to a file.
306 To retrieve a specific user, key and capabilities, execute the
309 ceph auth get {TYPE.ID}
313 ceph auth get client.admin
315 You may also use the ``-o {filename}`` option with ``ceph auth get`` to
316 save the output to a file. Developers may also execute the following::
318 ceph auth export {TYPE.ID}
320 The ``auth export`` command is identical to ``auth get``, but also prints
321 out the internal ``auid``, which is not relevant to end users.
328 Adding a user creates a username (i.e., ``TYPE.ID``), a secret key and
329 any capabilities included in the command you use to create the user.
331 A user's key enables the user to authenticate with the Ceph Storage Cluster.
332 The user's capabilities authorize the user to read, write, or execute on Ceph
333 monitors (``mon``), Ceph OSDs (``osd``) or Ceph Metadata Servers (``mds``).
335 There are a few ways to add a user:
337 - ``ceph auth add``: This command is the canonical way to add a user. It
338 will create the user, generate a key and add any specified capabilities.
340 - ``ceph auth get-or-create``: This command is often the most convenient way
341 to create a user, because it returns a keyfile format with the user name
342 (in brackets) and the key. If the user already exists, this command
343 simply returns the user name and key in the keyfile format. You may use the
344 ``-o {filename}`` option to save the output to a file.
346 - ``ceph auth get-or-create-key``: This command is a convenient way to create
347 a user and return the user's key (only). This is useful for clients that
348 need the key only (e.g., libvirt). If the user already exists, this command
349 simply returns the key. You may use the ``-o {filename}`` option to save the
352 When creating client users, you may create a user with no capabilities. A user
353 with no capabilities is useless beyond mere authentication, because the client
354 cannot retrieve the cluster map from the monitor. However, you can create a
355 user with no capabilities if you wish to defer adding capabilities later using
356 the ``ceph auth caps`` command.
358 A typical user has at least read capabilities on the Ceph monitor and
359 read and write capability on Ceph OSDs. Additionally, a user's OSD permissions
360 are often restricted to accessing a particular pool. ::
362 ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'
363 ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'
364 ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
365 ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key
368 .. important:: If you provide a user with capabilities to OSDs, but you DO NOT
369 restrict access to particular pools, the user will have access to ALL
370 pools in the cluster!
373 .. _modify-user-capabilities:
375 Modify User Capabilities
376 ------------------------
378 The ``ceph auth caps`` command allows you to specify a user and change the
379 user's capabilities. Setting new capabilities will overwrite current capabilities.
380 To view current capabilities run ``ceph auth get USERTYPE.USERID``. To add
381 capabilities, you should also specify the existing capabilities when using the form::
383 ceph auth caps USERTYPE.USERID {daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]' [{daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]']
387 ceph auth get client.john
388 ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool'
389 ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool'
390 ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'
392 To remove a capability, you may reset the capability. If you want the user
393 to have no access to a particular daemon that was previously set, specify
394 an empty string. For example::
396 ceph auth caps client.ringo mon ' ' osd ' '
398 See `Authorization (Capabilities)`_ for additional details on capabilities.
404 To delete a user, use ``ceph auth del``::
406 ceph auth del {TYPE}.{ID}
408 Where ``{TYPE}`` is one of ``client``, ``osd``, ``mon``, or ``mds``,
409 and ``{ID}`` is the user name or ID of the daemon.
415 To print a user's authentication key to standard output, execute the following::
417 ceph auth print-key {TYPE}.{ID}
419 Where ``{TYPE}`` is one of ``client``, ``osd``, ``mon``, or ``mds``,
420 and ``{ID}`` is the user name or ID of the daemon.
422 Printing a user's key is useful when you need to populate client
423 software with a user's key (e.g., libvirt). ::
425 mount -t ceph serverhost:/ mountpoint -o name=client.user,secret=`ceph auth print-key client.user`
431 To import one or more users, use ``ceph auth import`` and
434 ceph auth import -i /path/to/keyring
438 sudo ceph auth import -i /etc/ceph/ceph.keyring
441 .. note:: The ceph storage cluster will add new users, their keys and their
442 capabilities and will update existing users, their keys and their
449 When you access Ceph via a Ceph client, the Ceph client will look for a local
450 keyring. Ceph presets the ``keyring`` setting with the following four keyring
451 names by default so you don't have to set them in your Ceph configuration file
452 unless you want to override the defaults (not recommended):
454 - ``/etc/ceph/$cluster.$name.keyring``
455 - ``/etc/ceph/$cluster.keyring``
456 - ``/etc/ceph/keyring``
457 - ``/etc/ceph/keyring.bin``
459 The ``$cluster`` metavariable is your Ceph cluster name as defined by the
460 name of the Ceph configuration file (i.e., ``ceph.conf`` means the cluster name
461 is ``ceph``; thus, ``ceph.keyring``). The ``$name`` metavariable is the user
462 type and user ID (e.g., ``client.admin``; thus, ``ceph.client.admin.keyring``).
464 .. note:: When executing commands that read or write to ``/etc/ceph``, you may
465 need to use ``sudo`` to execute the command as ``root``.
467 After you create a user (e.g., ``client.ringo``), you must get the key and add
468 it to a keyring on a Ceph client so that the user can access the Ceph Storage
471 The `User Management`_ section details how to list, get, add, modify and delete
472 users directly in the Ceph Storage Cluster. However, Ceph also provides the
473 ``ceph-authtool`` utility to allow you to manage keyrings from a Ceph client.
479 When you use the procedures in the `Managing Users`_ section to create users,
480 you need to provide user keys to the Ceph client(s) so that the Ceph client
481 can retrieve the key for the specified user and authenticate with the Ceph
482 Storage Cluster. Ceph Clients access keyrings to lookup a user name and
483 retrieve the user's key.
485 The ``ceph-authtool`` utility allows you to create a keyring. To create an
486 empty keyring, use ``--create-keyring`` or ``-C``. For example::
488 ceph-authtool --create-keyring /path/to/keyring
490 When creating a keyring with multiple users, we recommend using the cluster name
491 (e.g., ``$cluster.keyring``) for the keyring filename and saving it in the
492 ``/etc/ceph`` directory so that the ``keyring`` configuration default setting
493 will pick up the filename without requiring you to specify it in the local copy
494 of your Ceph configuration file. For example, create ``ceph.keyring`` by
495 executing the following::
497 sudo ceph-authtool -C /etc/ceph/ceph.keyring
499 When creating a keyring with a single user, we recommend using the cluster name,
500 the user type and the user name and saving it in the ``/etc/ceph`` directory.
501 For example, ``ceph.client.admin.keyring`` for the ``client.admin`` user.
503 To create a keyring in ``/etc/ceph``, you must do so as ``root``. This means
504 the file will have ``rw`` permissions for the ``root`` user only, which is
505 appropriate when the keyring contains administrator keys. However, if you
506 intend to use the keyring for a particular user or group of users, ensure
507 that you execute ``chown`` or ``chmod`` to establish appropriate keyring
508 ownership and access.
511 Add a User to a Keyring
512 -----------------------
514 When you `Add a User`_ to the Ceph Storage Cluster, you can use the `Get a
515 User`_ procedure to retrieve a user, key and capabilities and save the user to a
518 When you only want to use one user per keyring, the `Get a User`_ procedure with
519 the ``-o`` option will save the output in the keyring file format. For example,
520 to create a keyring for the ``client.admin`` user, execute the following::
522 sudo ceph auth get client.admin -o /etc/ceph/ceph.client.admin.keyring
524 Notice that we use the recommended file format for an individual user.
526 When you want to import users to a keyring, you can use ``ceph-authtool``
527 to specify the destination keyring and the source keyring.
530 sudo ceph-authtool /etc/ceph/ceph.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
536 Ceph provides the `Add a User`_ function to create a user directly in the Ceph
537 Storage Cluster. However, you can also create a user, keys and capabilities
538 directly on a Ceph client keyring. Then, you can import the user to the Ceph
539 Storage Cluster. For example::
541 sudo ceph-authtool -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.keyring
543 See `Authorization (Capabilities)`_ for additional details on capabilities.
545 You can also create a keyring and add a new user to the keyring simultaneously.
548 sudo ceph-authtool -C /etc/ceph/ceph.keyring -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx' --gen-key
550 In the foregoing scenarios, the new user ``client.ringo`` is only in the
551 keyring. To add the new user to the Ceph Storage Cluster, you must still add
552 the new user to the Ceph Storage Cluster. ::
554 sudo ceph auth add client.ringo -i /etc/ceph/ceph.keyring
560 To modify the capabilities of a user record in a keyring, specify the keyring,
561 and the user followed by the capabilities. For example::
563 sudo ceph-authtool /etc/ceph/ceph.keyring -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx'
565 To update the user to the Ceph Storage Cluster, you must update the user
566 in the keyring to the user entry in the the Ceph Storage Cluster. ::
568 sudo ceph auth import -i /etc/ceph/ceph.keyring
570 See `Import a User(s)`_ for details on updating a Ceph Storage Cluster user
573 You may also `Modify User Capabilities`_ directly in the cluster, store the
574 results to a keyring file; then, import the keyring into your main
575 ``ceph.keyring`` file.
581 Ceph supports the following usage for user name and secret:
583 ``--id`` | ``--user``
585 :Description: Ceph identifies users with a type and an ID (e.g., ``TYPE.ID`` or
586 ``client.admin``, ``client.user1``). The ``id``, ``name`` and
587 ``-n`` options enable you to specify the ID portion of the user
588 name (e.g., ``admin``, ``user1``, ``foo``, etc.). You can specify
589 the user with the ``--id`` and omit the type. For example,
590 to specify user ``client.foo`` enter the following::
592 ceph --id foo --keyring /path/to/keyring health
593 ceph --user foo --keyring /path/to/keyring health
598 :Description: Ceph identifies users with a type and an ID (e.g., ``TYPE.ID`` or
599 ``client.admin``, ``client.user1``). The ``--name`` and ``-n``
600 options enables you to specify the fully qualified user name.
601 You must specify the user type (typically ``client``) with the
602 user ID. For example::
604 ceph --name client.foo --keyring /path/to/keyring health
605 ceph -n client.foo --keyring /path/to/keyring health
610 :Description: The path to the keyring containing one or more user name and
611 secret. The ``--secret`` option provides the same functionality,
612 but it does not work with Ceph RADOS Gateway, which uses
613 ``--secret`` for another purpose. You may retrieve a keyring with
614 ``ceph auth get-or-create`` and store it locally. This is a
615 preferred approach, because you can switch user names without
616 switching the keyring path. For example::
618 sudo rbd map --id foo --keyring /path/to/keyring mypool/myimage
627 The ``cephx`` protocol authenticates Ceph clients and servers to each other. It
628 is not intended to handle authentication of human users or application programs
629 run on their behalf. If that effect is required to handle your access control
630 needs, you must have another mechanism, which is likely to be specific to the
631 front end used to access the Ceph object store. This other mechanism has the
632 role of ensuring that only acceptable users and programs are able to run on the
633 machine that Ceph will permit to access its object store.
635 The keys used to authenticate Ceph clients and servers are typically stored in
636 a plain text file with appropriate permissions in a trusted host.
638 .. important:: Storing keys in plaintext files has security shortcomings, but
639 they are difficult to avoid, given the basic authentication methods Ceph
640 uses in the background. Those setting up Ceph systems should be aware of
643 In particular, arbitrary user machines, especially portable machines, should not
644 be configured to interact directly with Ceph, since that mode of use would
645 require the storage of a plaintext authentication key on an insecure machine.
646 Anyone who stole that machine or obtained surreptitious access to it could
647 obtain the key that will allow them to authenticate their own machines to Ceph.
649 Rather than permitting potentially insecure machines to access a Ceph object
650 store directly, users should be required to sign in to a trusted machine in
651 your environment using a method that provides sufficient security for your
652 purposes. That trusted machine will store the plaintext Ceph keys for the
653 human users. A future version of Ceph may address these particular
654 authentication issues more fully.
656 At the moment, none of the Ceph authentication protocols provide secrecy for
657 messages in transit. Thus, an eavesdropper on the wire can hear and understand
658 all data sent between clients and servers in Ceph, even if it cannot create or
659 alter them. Further, Ceph does not include options to encrypt user data in the
660 object store. Users can hand-encrypt and store their own data in the Ceph
661 object store, of course, but Ceph provides no features to perform object
662 encryption itself. Those storing sensitive data in Ceph should consider
663 encrypting their data before providing it to the Ceph system.
666 .. _Architecture - High Availability Authentication: ../../../architecture#high-availability-authentication
667 .. _Cephx Config Reference: ../../configuration/auth-config-ref