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