]> git.proxmox.com Git - pve-docs.git/blame_incremental - pveum.adoc
ceph: section language fixup
[pve-docs.git] / pveum.adoc
... / ...
CommitLineData
1[[chapter_user_management]]
2ifdef::manvolnum[]
3pveum(1)
4========
5:pve-toplevel:
6
7NAME
8----
9
10pveum - Proxmox VE User Manager
11
12
13SYNOPSIS
14--------
15
16include::pveum.1-synopsis.adoc[]
17
18
19DESCRIPTION
20-----------
21endif::manvolnum[]
22ifndef::manvolnum[]
23User Management
24===============
25:pve-toplevel:
26endif::manvolnum[]
27
28// Copied from pve wiki: Revision as of 16:10, 27 October 2015
29
30Proxmox VE supports multiple authentication sources, e.g. Linux PAM,
31an integrated Proxmox VE authentication server, LDAP, Microsoft Active
32Directory.
33
34By using the role based user- and permission management for all
35objects (VMs, storages, nodes, etc.) granular access can be defined.
36
37
38[[pveum_users]]
39Users
40-----
41
42{pve} stores user attributes in `/etc/pve/user.cfg`.
43Passwords are not stored here, users are instead associated with
44<<pveum_authentication_realms,authentication realms>> described below.
45Therefore a user is internally often identified by its name and
46realm in the form `<userid>@<realm>`.
47
48Each user entry in this file contains the following information:
49
50* First name
51* Last name
52* E-mail address
53* Group memberships
54* An optional Expiration date
55* A comment or note about this user
56* Whether this user is enabled or disabled
57* Optional two-factor authentication keys
58
59
60System administrator
61~~~~~~~~~~~~~~~~~~~~
62
63The system's root user can always log in via the Linux PAM realm and is an
64unconfined administrator. This user cannot be deleted, but attributes can
65still be changed and system mails will be sent to the email address
66assigned to this user.
67
68
69[[pveum_groups]]
70Groups
71------
72
73Each user can be member of several groups. Groups are the preferred
74way to organize access permissions. You should always grant permission
75to groups instead of using individual users. That way you will get a
76much shorter access control list which is easier to handle.
77
78[[pveum_tokens]]
79API Tokens
80----------
81
82API tokens allow stateless access to most parts of the REST API by another
83system, software or API client. Tokens can be generated for individual users
84and can be given separate permissions and expiration dates to limit the scope
85and duration of the access. Should the API token get compromised it can be
86revoked without disabling the user itself.
87
88API tokens come in two basic types:
89
90* separated privileges: the token needs to be given explicit access with ACLs,
91 its effective permissions are calculated by intersecting user and token
92 permissions.
93* full privileges: the token permissions are identical to that of the
94 associated user.
95
96CAUTION: The token value is only displayed/returned once when the token is
97generated. It cannot be retrieved again over the API at a later time!
98
99To use an API token, set the HTTP header 'Authorization' to the displayed value
100of the form `PVEAPIToken=USER@REALM!TOKENID=UUID` when making API requests, or
101refer to your API client documentation.
102
103[[pveum_resource_pools]]
104Resource Pools
105--------------
106
107[thumbnail="screenshot/gui-datacenter-pool-window.png"]
108
109A resource pool is a set of virtual machines, containers, and storage
110devices. It is useful for permission handling in cases where certain users
111should have controlled access to a specific set of resources, as it allows for a
112single permission to be applied to a set of elements, rather than having to
113manage this on a per resource basis. Resource pools are often used in tandem
114with groups so that the members of a group have permissions on a set of machines
115and storage.
116
117[[pveum_authentication_realms]]
118Authentication Realms
119---------------------
120
121As {pve} users are just counterparts for users existing on some external
122realm, the realms have to be configured in `/etc/pve/domains.cfg`.
123The following realms (authentication methods) are available:
124
125Linux PAM standard authentication::
126In this case a system user has to exist (e.g. created via the `adduser`
127command) on all nodes the user is allowed to login, and the user
128authenticates with their usual system password.
129+
130[source,bash]
131----
132useradd heinz
133passwd heinz
134groupadd watchman
135usermod -a -G watchman heinz
136----
137
138Proxmox VE authentication server::
139This is a unix like password store (`/etc/pve/priv/shadow.cfg`).
140Password are encrypted using the SHA-256 hash method.
141This is the most convenient method for small (or even medium)
142installations where users do not need access to anything outside of
143{pve}. In this case users are fully managed by {pve} and are able to
144change their own passwords via the GUI.
145
146LDAP::
147It is possible to authenticate users via an LDAP server (e.g.
148openldap). The server and an optional fallback server can be
149configured and the connection can be encrypted via SSL.
150+
151Users are searched under a 'Base Domain Name' (`base_dn`), with the
152user name found in the attribute specified in the 'User Attribute Name'
153(`user_attr`) field.
154+
155For instance, if a user is represented via the
156following ldif dataset:
157+
158----
159# user1 of People at ldap-test.com
160dn: uid=user1,ou=People,dc=ldap-test,dc=com
161objectClass: top
162objectClass: person
163objectClass: organizationalPerson
164objectClass: inetOrgPerson
165uid: user1
166cn: Test User 1
167sn: Testers
168description: This is the first test user.
169----
170+
171The 'Base Domain Name' would be `ou=People,dc=ldap-test,dc=com` and the user
172attribute would be `uid`.
173+
174If {pve} needs to authenticate (bind) to the ldap server before being
175able to query and authenticate users, a bind domain name can be
176configured via the `bind_dn` property in `/etc/pve/domains.cfg`. Its
177password then has to be stored in `/etc/pve/priv/ldap/<realmname>.pw`
178(e.g. `/etc/pve/priv/ldap/my-ldap.pw`). This file should contain a
179single line containing the raw password.
180+
181To verify certificates, you need to to set `capath`. You can set it either
182directly to the CA certificate of your LDAP server, or to the system path
183containing all trusted CA certificates (`/etc/ssl/certs`).
184Additionally, you need to set the `verify` option, which can also be doen over
185the web interface.
186
187Microsoft Active Directory::
188
189A server and authentication domain need to be specified. Like with
190ldap an optional fallback server, optional port, and SSL
191encryption can be configured.
192
193[[pveum_ldap_sync]]
194Syncing LDAP-based realms
195~~~~~~~~~~~~~~~~~~~~~~~~~
196
197[thumbnail="screenshot/gui-datacenter-realm-add-ldap.png"]
198
199It is possible to sync users and groups for LDAP based realms. You can use the
200CLI command
201
202----
203 pveum realm sync <realm>
204----
205or in the `Authentication` panel of the GUI. Users and groups are synced to the
206cluster-wide user configuration file `/etc/pve/user.cfg`.
207
208Requirements and limitations
209^^^^^^^^^^^^^^^^^^^^^^^^^^^^
210
211The `bind_dn` is used to query the users and groups. This account needs access
212to all desired entries.
213
214The fields which represent the names of the users and groups can be configured
215via the `user_attr` and `group_name_attr` respectively. Only entries which
216adhere to the usual character limitations of the user.cfg are synced.
217
218Groups are synced with `-$realm` attached to the name, to avoid naming
219conflicts. Please make sure that a sync does not overwrite manually created
220groups.
221
222[[pveum_ldap_sync_options]]
223Options
224^^^^^^^
225
226[thumbnail="screenshot/gui-datacenter-realm-add-ldap-sync-options.png"]
227
228The main options for syncing are:
229
230* `dry-run`: No data is written to the config. This is useful if you want to
231 see which users and groups would get synced to the user.cfg. This is set
232 when you click `Preview` in the GUI.
233
234* `enable-new`: If set, the newly synced users are enabled and can login.
235 The default is `true`.
236
237* `full`: If set, the sync uses the LDAP Directory as a source of truth,
238 overwriting information set manually in the user.cfg and deletes users
239 and groups which are not present in the LDAP directory. If not set,
240 only new data is written to the config, and no stale users are deleted.
241
242* `purge`: If set, sync removes all corresponding ACLs when removing users
243 and groups. This is only useful with the option `full`.
244
245* `scope`: The scope of what to sync. It can be either `users`, `groups` or
246 `both`.
247
248These options are either set as parameters or as defaults, via the
249realm option `sync-defaults-options`.
250
251[[pveum_tfa_auth]]
252Two-factor authentication
253-------------------------
254
255There are two ways to use two-factor authentication:
256
257It can be required by the authentication realm, either via 'TOTP'
258(Time-based One-Time Password) or 'YubiKey OTP'. In this case a newly
259created user needs their keys added immediately as there is no way to
260log in without the second factor. In the case of 'TOTP', users can
261also change the 'TOTP' later on, provided they can log in first.
262
263Alternatively, users can choose to opt in to two-factor authentication
264via 'TOTP' later on, even if the realm does not enforce it. As another
265option, if the server has an 'AppId' configured, a user can opt into
266'U2F' authentication, provided the realm does not enforce any other
267second factor.
268
269Realm enforced two-factor authentication
270~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
271
272This can be done by selecting one of the available methods via the
273'TFA' dropdown box when adding or editing an Authentication Realm.
274When a realm has TFA enabled it becomes a requirement and only users
275with configured TFA will be able to login.
276
277Currently there are two methods available:
278
279Time-based OATH (TOTP):: This uses the standard HMAC-SHA1 algorithm
280where the current time is hashed with the user's configured key. The
281time step and password length parameters are configured.
282+
283A user can have multiple keys configured (separated by spaces), and the keys
284can be specified in Base32 (RFC3548) or hexadecimal notation.
285+
286{pve} provides a key generation tool (`oathkeygen`) which prints out a random
287key in Base32 notation which can be used directly with various OTP tools, such
288as the `oathtool` command line tool, or on Android Google Authenticator,
289FreeOTP, andOTP or similar applications.
290
291YubiKey OTP::
292For authenticating via a YubiKey a Yubico API ID, API KEY and validation
293server URL must be configured, and users must have a YubiKey available. In
294order to get the key ID from a YubiKey, you can trigger the YubiKey once
295after connecting it to USB and copy the first 12 characters of the typed
296password into the user's 'Key IDs' field.
297
298+
299Please refer to the https://developers.yubico.com/OTP/[YubiKey OTP]
300documentation for how to use the
301https://www.yubico.com/products/services-software/yubicloud/[YubiCloud] or
302https://developers.yubico.com/Software_Projects/Yubico_OTP/YubiCloud_Validation_Servers/[host
303your own verification server].
304
305[[pveum_user_configured_totp]]
306User configured TOTP authentication
307~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
308
309Users can choose to enable 'TOTP' as a second factor on login via the 'TFA'
310button in the user list (unless the realm enforces 'YubiKey OTP').
311
312[thumbnail="screenshot/gui-datacenter-users-tfa.png"]
313
314After opening the 'TFA' window, the user is presented with a dialog to setup
315'TOTP' authentication. The 'Secret' field contains the key, which can simply be
316generated randomly via the 'Randomize' button. An optional 'Issuer Name' can be
317added to provide information to the 'TOTP' app what the key belongs to.
318Most 'TOTP' apps will show the issuer name together with the corresponding
319'OTP' values. The user name is also included in the QR code for the 'TOTP' app.
320
321After generating a key, a QR code will be displayed which can be used with most
322OTP apps such as FreeOTP. Now the user needs to verify both the current user
323password (unless logged in as 'root'), as well as the ability to correctly use
324the 'TOTP' key by typing the current 'OTP' value into the 'Verification Code'
325field before pressing the 'Apply' button.
326
327[[pveum_configure_u2f]]
328Server side U2F configuration
329~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
330
331To allow users to use 'U2F' authentication, the server needs to have a valid
332domain with a valid https certificate. Initially an 'AppId'
333footnote:[AppId https://developers.yubico.com/U2F/App_ID.html]
334needs to be configured.
335
336NOTE: Changing the 'AppId' will render all existing 'U2F' registrations
337unusable!
338
339This is done via `/etc/pve/datacenter.cfg`, for instance:
340
341----
342u2f: appid=https://mypve.example.com:8006
343----
344
345For a single node, the 'AppId' can simply be the web UI address exactly as it
346is used in the browser, including the 'https://' and the port as shown above.
347Please note that some browsers may be more strict than others when matching
348'AppIds'.
349
350When using multiple nodes, it is best to have a separate `https` server
351providing an `appid.json`
352footnote:[Multi-facet apps: https://developers.yubico.com/U2F/App_ID.html]
353file, as it seems to be compatible with most
354browsers. If all nodes use subdomains of the same top level domain, it may be
355enough to use the TLD as 'AppId', but note that some browsers may not accept
356this.
357
358NOTE: A bad 'AppId' will usually produce an error, but we have encountered
359situation where this does not happen, particularly when using a top level domain
360'AppId' for a node accessed via a subdomain in Chromium. For this reason it is
361recommended to test the configuration with multiple browsers, as changing the
362'AppId' later will render existing 'U2F' registrations unusable.
363
364[[pveum_user_configured_u2f]]
365Activating U2F as a user
366~~~~~~~~~~~~~~~~~~~~~~~~
367
368To enable 'U2F' authentication, open the 'TFA' window's 'U2F' tab, type in the
369current password (unless logged in as root), and press the 'Register' button.
370If the server is setup correctly and the browser accepted the server's provided
371'AppId', a message will appear prompting the user to press the button on the
372'U2F' device (if it is a 'YubiKey' the button light should be toggling off and
373on steadily around twice per second).
374
375Firefox users may need to enable 'security.webauth.u2f' via 'about:config'
376before they can use a 'U2F' token.
377
378[[pveum_permission_management]]
379Permission Management
380---------------------
381
382In order for a user to perform an action (such as listing, modifying or
383deleting a parts of a VM configuration), the user needs to have the
384appropriate permissions.
385
386{pve} uses a role and path based permission management system. An entry in
387the permissions table allows a user, group or token to take on a specific role
388when accessing an 'object' or 'path'. This means an such an access rule can
389be represented as a triple of '(path, user, role)', '(path, group,
390role)' or '(path, token, role)', with the role containing a set of allowed
391actions, and the path representing the target of these actions.
392
393
394[[pveum_roles]]
395Roles
396~~~~~
397
398A role is simply a list of privileges. Proxmox VE comes with a number
399of predefined roles which satisfies most needs.
400
401* `Administrator`: has all privileges
402* `NoAccess`: has no privileges (used to forbid access)
403* `PVEAdmin`: can do most things, but miss rights to modify system settings (`Sys.PowerMgmt`, `Sys.Modify`, `Realm.Allocate`).
404* `PVEAuditor`: read only access
405* `PVEDatastoreAdmin`: create and allocate backup space and templates
406* `PVEDatastoreUser`: allocate backup space and view storage
407* `PVEPoolAdmin`: allocate pools
408* `PVESysAdmin`: User ACLs, audit, system console and system logs
409* `PVETemplateUser`: view and clone templates
410* `PVEUserAdmin`: user administration
411* `PVEVMAdmin`: fully administer VMs
412* `PVEVMUser`: view, backup, config CDROM, VM console, VM power management
413
414You can see the whole set of predefined roles on the GUI.
415
416Adding new roles can be done via both GUI and the command line.
417
418[thumbnail="screenshot/gui-datacenter-role-add.png"]
419For the GUI just navigate to 'Permissions -> User' Tab from 'Datacenter' and
420click on the 'Create' button, there you can set a name and select all desired
421roles from the 'Privileges' dropdown box.
422
423To add a role through the command line you can use the 'pveum' CLI tool, like
424this:
425[source,bash]
426----
427pveum roleadd PVE_Power-only -privs "VM.PowerMgmt VM.Console"
428pveum roleadd Sys_Power-only -privs "Sys.PowerMgmt Sys.Console"
429----
430
431
432Privileges
433~~~~~~~~~~
434
435A privilege is the right to perform a specific action. To simplify
436management, lists of privileges are grouped into roles, which can then
437be used in the permission table. Note that privileges cannot directly be
438assigned to users and paths without being part of a role.
439
440We currently use the following privileges:
441
442Node / System related privileges::
443
444* `Permissions.Modify`: modify access permissions
445* `Sys.PowerMgmt`: Node power management (start, stop, reset, shutdown, ...)
446* `Sys.Console`: console access to Node
447* `Sys.Syslog`: view Syslog
448* `Sys.Audit`: view node status/config, Corosync cluster config and HA config
449* `Sys.Modify`: create/remove/modify node network parameters
450* `Group.Allocate`: create/remove/modify groups
451* `Pool.Allocate`: create/remove/modify a pool
452* `Realm.Allocate`: create/remove/modify authentication realms
453* `Realm.AllocateUser`: assign user to a realm
454* `User.Modify`: create/remove/modify user access and details.
455
456Virtual machine related privileges::
457
458* `VM.Allocate`: create/remove new VM to server inventory
459* `VM.Migrate`: migrate VM to alternate server on cluster
460* `VM.PowerMgmt`: power management (start, stop, reset, shutdown, ...)
461* `VM.Console`: console access to VM
462* `VM.Monitor`: access to VM monitor (kvm)
463* `VM.Backup`: backup/restore VMs
464* `VM.Audit`: view VM config
465* `VM.Clone`: clone/copy a VM
466* `VM.Config.Disk`: add/modify/delete Disks
467* `VM.Config.CDROM`: eject/change CDROM
468* `VM.Config.CPU`: modify CPU settings
469* `VM.Config.Memory`: modify Memory settings
470* `VM.Config.Network`: add/modify/delete Network devices
471* `VM.Config.HWType`: modify emulated HW type
472* `VM.Config.Options`: modify any other VM configuration
473* `VM.Snapshot`: create/remove VM snapshots
474
475Storage related privileges::
476
477* `Datastore.Allocate`: create/remove/modify a data store, delete volumes
478* `Datastore.AllocateSpace`: allocate space on a datastore
479* `Datastore.AllocateTemplate`: allocate/upload templates and iso images
480* `Datastore.Audit`: view/browse a datastore
481
482
483Objects and Paths
484~~~~~~~~~~~~~~~~~
485
486Access permissions are assigned to objects, such as a virtual machines,
487storages or pools of resources.
488We use file system like paths to address these objects. These paths form a
489natural tree, and permissions of higher levels (shorter path) can
490optionally be propagated down within this hierarchy.
491
492[[pveum_templated_paths]]
493Paths can be templated. When an API call requires permissions on a
494templated path, the path may contain references to parameters of the API
495call. These references are specified in curly braces. Some parameters are
496implicitly taken from the API call's URI. For instance the permission path
497`/nodes/{node}` when calling '/nodes/mynode/status' requires permissions on
498`/nodes/mynode`, while the path `{path}` in a PUT request to `/access/acl`
499refers to the method's `path` parameter.
500
501Some examples are:
502
503* `/nodes/{node}`: Access to {pve} server machines
504* `/vms`: Covers all VMs
505* `/vms/{vmid}`: Access to specific VMs
506* `/storage/{storeid}`: Access to a storages
507* `/pool/{poolname}`: Access to VMs part of a <<pveum_pools,pool>>
508* `/access/groups`: Group administration
509* `/access/realms/{realmid}`: Administrative access to realms
510
511
512Inheritance
513^^^^^^^^^^^
514
515As mentioned earlier, object paths form a file system like tree, and
516permissions can be inherited down that tree (the propagate flag is set
517by default). We use the following inheritance rules:
518
519* Permissions for individual users always replace group permissions.
520* Permissions for groups apply when the user is member of that group.
521* Permissions replace the ones inherited from an upper level.
522
523Additionally, privilege separated tokens can never have a permission on any
524given path that their associated user does not have.
525
526[[pveum_pools]]
527Pools
528~~~~~
529
530Pools can be used to group a set of virtual machines and data
531stores. You can then simply set permissions on pools (`/pool/{poolid}`),
532which are inherited to all pool members. This is a great way simplify
533access control.
534
535
536What permission do I need?
537~~~~~~~~~~~~~~~~~~~~~~~~~~
538
539The required API permissions are documented for each individual
540method, and can be found at http://pve.proxmox.com/pve-docs/api-viewer/
541
542The permissions are specified as a list which can be interpreted as a
543tree of logic and access-check functions:
544
545`["and", <subtests>...]` and `["or", <subtests>...]`::
546Each(`and`) or any(`or`) further element in the current list has to be true.
547
548`["perm", <path>, [ <privileges>... ], <options>...]`::
549The `path` is a templated parameter (see
550<<pveum_templated_paths,Objects and Paths>>). All (or, if the `any`
551option is used, any) of the listed
552privileges must be allowed on the specified path. If a `require-param`
553option is specified, then its specified parameter is required even if the
554API call's schema otherwise lists it as being optional.
555
556`["userid-group", [ <privileges>... ], <options>...]`::
557The caller must have any of the listed privileges on `/access/groups`. In
558addition there are two possible checks depending on whether the
559`groups_param` option is set:
560+
561* `groups_param` is set: The API call has a non-optional `groups` parameter
562and the caller must have any of the listed privileges on all of the listed
563groups.
564* `groups_param` is not set: The user passed via the `userid` parameter
565must exist and be part of a group on which the caller has any of the listed
566privileges (via the `/access/groups/<group>` path).
567
568`["userid-param", "self"]`::
569The value provided for the API call's `userid` parameter must refer to the
570user performing the action. (Usually in conjunction with `or`, to allow
571users to perform an action on themselves even if they don't have elevated
572privileges.)
573
574`["userid-param", "Realm.AllocateUser"]`::
575The user needs `Realm.AllocateUser` access to `/access/realm/<realm>`, with
576`<realm>` referring to the realm of the user passed via the `userid`
577parameter. Note that the user does not need to exist in order to be
578associated with a realm, since user IDs are passed in the form of
579`<username>@<realm>`.
580
581`["perm-modify", <path>]`::
582The `path` is a templated parameter (see
583<<pveum_templated_paths,Objects and Paths>>). The user needs either the
584`Permissions.Modify` privilege, or,
585depending on the path, the following privileges as a possible substitute:
586+
587* `/storage/...`: additionally requires 'Datastore.Allocate`
588* `/vms/...`: additionally requires 'VM.Allocate`
589* `/pool/...`: additionally requires 'Pool.Allocate`
590+
591If the path is empty, `Permission.Modify` on `/access` is required.
592
593Command Line Tool
594-----------------
595
596Most users will simply use the GUI to manage users. But there is also
597a fully featured command line tool called `pveum` (short for ``**P**roxmox
598**VE** **U**ser **M**anager''). Please note that all Proxmox VE command
599line tools are wrappers around the API, so you can also access those
600functions through the REST API.
601
602Here are some simple usage examples. To show help type:
603
604[source,bash]
605 pveum
606
607or (to show detailed help about a specific command)
608
609[source,bash]
610 pveum help user add
611
612Create a new user:
613
614[source,bash]
615 pveum user add testuser@pve -comment "Just a test"
616
617Set or Change the password (not all realms support that):
618
619[source,bash]
620 pveum passwd testuser@pve
621
622Disable a user:
623
624[source,bash]
625 pveum user modify testuser@pve -enable 0
626
627Create a new group:
628
629[source,bash]
630 pveum group add testgroup
631
632Create a new role:
633
634[source,bash]
635 pveum role add PVE_Power-only -privs "VM.PowerMgmt VM.Console"
636
637
638Real World Examples
639-------------------
640
641
642Administrator Group
643~~~~~~~~~~~~~~~~~~~
644
645One of the most wanted features was the ability to define a group of
646users with full administrator rights (without using the root account).
647
648Define the group:
649
650[source,bash]
651 pveum group add admin -comment "System Administrators"
652
653Then add the permission:
654
655[source,bash]
656 pveum acl modify / -group admin -role Administrator
657
658You can finally add users to the new 'admin' group:
659
660[source,bash]
661 pveum user modify testuser@pve -group admin
662
663
664Auditors
665~~~~~~~~
666
667You can give read only access to users by assigning the `PVEAuditor`
668role to users or groups.
669
670Example1: Allow user `joe@pve` to see everything
671
672[source,bash]
673 pveum acl modify / -user joe@pve -role PVEAuditor
674
675Example1: Allow user `joe@pve` to see all virtual machines
676
677[source,bash]
678 pveum acl modify /vms -user joe@pve -role PVEAuditor
679
680
681Delegate User Management
682~~~~~~~~~~~~~~~~~~~~~~~~
683
684If you want to delegate user management to user `joe@pve` you can do
685that with:
686
687[source,bash]
688 pveum acl modify /access -user joe@pve -role PVEUserAdmin
689
690User `joe@pve` can now add and remove users, change passwords and
691other user attributes. This is a very powerful role, and you most
692likely want to limit that to selected realms and groups. The following
693example allows `joe@pve` to modify users within realm `pve` if they
694are members of group `customers`:
695
696[source,bash]
697 pveum acl modify /access/realm/pve -user joe@pve -role PVEUserAdmin
698 pveum acl modify /access/groups/customers -user joe@pve -role PVEUserAdmin
699
700NOTE: The user is able to add other users, but only if they are
701members of group `customers` and within realm `pve`.
702
703Limited API token for monitoring
704~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
705
706Given a user `joe@pve` with the PVEVMAdmin role on all VMs:
707
708[source,bash]
709 pveum acl modify /vms -user joe@pve -role PVEVMAdmin
710
711Add a new API token with separate privileges, which is only allowed to view VM
712information (e.g., for monitoring purposes):
713
714[source,bash]
715 pveum user token add joe@pve monitoring -privsep 1
716 pveum acl modify /vms -token 'joe@pve!monitoring' -role PVEAuditor
717
718Verify the permissions of the user and token:
719
720[source,bash]
721 pveum user permissions joe@pve
722 pveum user token permissions joe@pve monitoring
723
724Resource Pools
725~~~~~~~~~~~~~~
726
727An enterprise is usually structured into several smaller departments, and it is
728common that you want to assign resources and delegate management tasks to each
729of these. Let's assume that you want to set up a pool for a software development
730department. First, create a group
731
732[source,bash]
733 pveum group add developers -comment "Our software developers"
734
735Now we create a new user which is a member of that group
736
737[source,bash]
738 pveum user add developer1@pve -group developers -password
739
740NOTE: The -password parameter will prompt you for a password
741
742Then we create a resource pool for our development department to use
743
744[source,bash]
745 pveum pool add dev-pool --comment "IT development pool"
746
747Finally, we can assign permissions to that pool
748
749[source,bash]
750 pveum acl modify /pool/dev-pool/ -group developers -role PVEAdmin
751
752Our software developers can now administrate the resources assigned to
753that pool.
754
755
756ifdef::manvolnum[]
757include::pve-copyright.adoc[]
758endif::manvolnum[]
759