]> git.proxmox.com Git - pve-docs.git/blame - pveum.adoc
fix #3202: pveum: add Pool.Audit permission
[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
WB
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
80c0adcb 69[[pveum_groups]]
c80b9ee6 70Groups
a10a91c2 71------
c80b9ee6
WB
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
181db098
FG
78[[pveum_tokens]]
79API Tokens
a10a91c2 80----------
181db098 81
710713ea
TL
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.
181db098
FG
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
c6e098a2
TL
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!
181db098
FG
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.
c80b9ee6 102
23b447be
DW
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
80c0adcb 117[[pveum_authentication_realms]]
3c8533f2
DM
118Authentication Realms
119---------------------
120
d6614202
WB
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:
3c8533f2
DM
124
125Linux PAM standard authentication::
470d4313 126In this case a system user has to exist (e.g. created via the `adduser`
d6614202
WB
127command) on all nodes the user is allowed to login, and the user
128authenticates with their usual system password.
129+
3c8533f2
DM
130[source,bash]
131----
132useradd heinz
133passwd heinz
134groupadd watchman
135usermod -a -G watchman heinz
136----
137
138Proxmox VE authentication server::
d6614202
WB
139This is a unix like password store (`/etc/pve/priv/shadow.cfg`).
140Password are encrypted using the SHA-256 hash method.
44f38275 141This is the most convenient method for small (or even medium)
d6614202
WB
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::
470d4313 147It is possible to authenticate users via an LDAP server (e.g.
d6614202
WB
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+
3a433e9b 174If {pve} needs to authenticate (bind) to the LDAP server before being
d6614202
WB
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`
470d4313 178(e.g. `/etc/pve/priv/ldap/my-ldap.pw`). This file should contain a
d6614202 179single line containing the raw password.
0fb9147a 180+
4ab527b1
TL
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`).
3a433e9b 184Additionally, you need to set the `verify` option, which can also be done over
4ab527b1 185the web interface.
d6614202
WB
186
187Microsoft Active Directory::
3c8533f2 188
3a433e9b
OB
189A server and authentication domain need to be specified. Like with LDAP, an
190optional fallback server, port, and SSL encryption can be configured.
3c8533f2 191
a160926a
DC
192[[pveum_ldap_sync]]
193Syncing LDAP-based realms
194~~~~~~~~~~~~~~~~~~~~~~~~~
195
41c386ba
TL
196[thumbnail="screenshot/gui-datacenter-realm-add-ldap.png"]
197
f5eb2299
TL
198It is possible to sync users and groups for LDAP based realms. You can use the
199CLI command
200
201----
8ab21a40 202 pveum realm sync <realm>
f5eb2299
TL
203----
204or in the `Authentication` panel of the GUI. Users and groups are synced to the
205cluster-wide user configuration file `/etc/pve/user.cfg`.
a160926a
DC
206
207Requirements and limitations
208^^^^^^^^^^^^^^^^^^^^^^^^^^^^
209
f5eb2299
TL
210The `bind_dn` is used to query the users and groups. This account needs access
211to all desired entries.
a160926a
DC
212
213The fields which represent the names of the users and groups can be configured
214via the `user_attr` and `group_name_attr` respectively. Only entries which
215adhere to the usual character limitations of the user.cfg are synced.
216
217Groups are synced with `-$realm` attached to the name, to avoid naming
218conflicts. Please make sure that a sync does not overwrite manually created
219groups.
220
f5eb2299 221[[pveum_ldap_sync_options]]
a160926a
DC
222Options
223^^^^^^^
224
41c386ba
TL
225[thumbnail="screenshot/gui-datacenter-realm-add-ldap-sync-options.png"]
226
a160926a
DC
227The main options for syncing are:
228
229* `dry-run`: No data is written to the config. This is useful if you want to
230 see which users and groups would get synced to the user.cfg. This is set
231 when you click `Preview` in the GUI.
232
233* `enable-new`: If set, the newly synced users are enabled and can login.
234 The default is `true`.
235
236* `full`: If set, the sync uses the LDAP Directory as a source of truth,
237 overwriting information set manually in the user.cfg and deletes users
238 and groups which are not present in the LDAP directory. If not set,
239 only new data is written to the config, and no stale users are deleted.
240
241* `purge`: If set, sync removes all corresponding ACLs when removing users
242 and groups. This is only useful with the option `full`.
243
244* `scope`: The scope of what to sync. It can be either `users`, `groups` or
245 `both`.
246
247These options are either set as parameters or as defaults, via the
248realm option `sync-defaults-options`.
5eba0743 249
0523992b 250[[pveum_tfa_auth]]
74662f51 251Two-factor authentication
9e8f2770
WB
252-------------------------
253
74662f51 254There are two ways to use two-factor authentication:
2837cf1d 255
74662f51
OB
256It can be required by the authentication realm, either via 'TOTP'
257(Time-based One-Time Password) or 'YubiKey OTP'. In this case a newly
258created user needs their keys added immediately as there is no way to
259log in without the second factor. In the case of 'TOTP', users can
260also change the 'TOTP' later on, provided they can log in first.
2837cf1d 261
74662f51
OB
262Alternatively, users can choose to opt in to two-factor authentication
263via 'TOTP' later on, even if the realm does not enforce it. As another
264option, if the server has an 'AppId' configured, a user can opt into
265'U2F' authentication, provided the realm does not enforce any other
266second factor.
2837cf1d 267
74662f51 268Realm enforced two-factor authentication
2837cf1d
WB
269~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
270
74662f51
OB
271This can be done by selecting one of the available methods via the
272'TFA' dropdown box when adding or editing an Authentication Realm.
273When a realm has TFA enabled it becomes a requirement and only users
274with configured TFA will be able to login.
9e8f2770
WB
275
276Currently there are two methods available:
277
74662f51
OB
278Time-based OATH (TOTP):: This uses the standard HMAC-SHA1 algorithm
279where the current time is hashed with the user's configured key. The
280time step and password length parameters are configured.
9e8f2770 281+
74662f51
OB
282A user can have multiple keys configured (separated by spaces), and the keys
283can be specified in Base32 (RFC3548) or hexadecimal notation.
9e8f2770 284+
74662f51
OB
285{pve} provides a key generation tool (`oathkeygen`) which prints out a random
286key in Base32 notation which can be used directly with various OTP tools, such
287as the `oathtool` command line tool, or on Android Google Authenticator,
288FreeOTP, andOTP or similar applications.
9e8f2770
WB
289
290YubiKey OTP::
291For authenticating via a YubiKey a Yubico API ID, API KEY and validation
292server URL must be configured, and users must have a YubiKey available. In
293order to get the key ID from a YubiKey, you can trigger the YubiKey once
294after connecting it to USB and copy the first 12 characters of the typed
295password into the user's 'Key IDs' field.
74662f51 296
9e8f2770 297+
74662f51
OB
298Please refer to the https://developers.yubico.com/OTP/[YubiKey OTP]
299documentation for how to use the
9e8f2770 300https://www.yubico.com/products/services-software/yubicloud/[YubiCloud] or
88636df1 301https://developers.yubico.com/Software_Projects/Yubico_OTP/YubiCloud_Validation_Servers/[host
74662f51 302your own verification server].
9e8f2770 303
0523992b 304[[pveum_user_configured_totp]]
2837cf1d
WB
305User configured TOTP authentication
306~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
307
74662f51
OB
308Users can choose to enable 'TOTP' as a second factor on login via the 'TFA'
309button in the user list (unless the realm enforces 'YubiKey OTP').
2837cf1d 310
2b59fcfb
TL
311[thumbnail="screenshot/gui-datacenter-users-tfa.png"]
312
2837cf1d
WB
313After opening the 'TFA' window, the user is presented with a dialog to setup
314'TOTP' authentication. The 'Secret' field contains the key, which can simply be
315generated randomly via the 'Randomize' button. An optional 'Issuer Name' can be
316added to provide information to the 'TOTP' app what the key belongs to.
317Most 'TOTP' apps will show the issuer name together with the corresponding
318'OTP' values. The user name is also included in the QR code for the 'TOTP' app.
319
320After generating a key, a QR code will be displayed which can be used with most
321OTP apps such as FreeOTP. Now the user needs to verify both the current user
322password (unless logged in as 'root'), as well as the ability to correctly use
323the 'TOTP' key by typing the current 'OTP' value into the 'Verification Code'
324field before pressing the 'Apply' button.
325
97d63abc 326[[pveum_configure_u2f]]
2837cf1d
WB
327Server side U2F configuration
328~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
329
58df830b
DC
330To allow users to use 'U2F' authentication, it may be necessary to use a valid
331domain with a valid https certificate, otherwise some browsers may print
332a warning or reject U2F usage altogether. Initially an 'AppId'
2837cf1d
WB
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
0523992b 364[[pveum_user_configured_u2f]]
2837cf1d
WB
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.
9e8f2770 377
80c0adcb 378[[pveum_permission_management]]
04f44730 379Permission Management
3c8533f2
DM
380---------------------
381
04f44730
WB
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
181db098 387the permissions table allows a user, group or token to take on a specific role
04f44730 388when accessing an 'object' or 'path'. This means an such an access rule can
181db098
FG
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.
04f44730 392
5eba0743 393
80c0adcb 394[[pveum_roles]]
853d288b
WB
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
3a433e9b 412* `PVEVMUser`: view, backup, config CD-ROM, VM console, VM power management
853d288b
WB
413
414You can see the whole set of predefined roles on the GUI.
415
5e6b02ff
TL
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.
853d288b 422
5e6b02ff
TL
423To add a role through the command line you can use the 'pveum' CLI tool, like
424this:
853d288b
WB
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
3c8533f2
DM
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
0e1fda70
WB
437be used in the permission table. Note that privileges cannot directly be
438assigned to users and paths without being part of a role.
3c8533f2
DM
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
ced79689 448* `Sys.Audit`: view node status/config, Corosync cluster config and HA config
3c8533f2
DM
449* `Sys.Modify`: create/remove/modify node network parameters
450* `Group.Allocate`: create/remove/modify groups
451* `Pool.Allocate`: create/remove/modify a pool
696ebb3c 452* `Pool.Audit`: view a pool
3c8533f2
DM
453* `Realm.Allocate`: create/remove/modify authentication realms
454* `Realm.AllocateUser`: assign user to a realm
455* `User.Modify`: create/remove/modify user access and details.
456
457Virtual machine related privileges::
458
459* `VM.Allocate`: create/remove new VM to server inventory
460* `VM.Migrate`: migrate VM to alternate server on cluster
461* `VM.PowerMgmt`: power management (start, stop, reset, shutdown, ...)
462* `VM.Console`: console access to VM
463* `VM.Monitor`: access to VM monitor (kvm)
464* `VM.Backup`: backup/restore VMs
465* `VM.Audit`: view VM config
466* `VM.Clone`: clone/copy a VM
467* `VM.Config.Disk`: add/modify/delete Disks
3a433e9b 468* `VM.Config.CDROM`: eject/change CD-ROM
3c8533f2
DM
469* `VM.Config.CPU`: modify CPU settings
470* `VM.Config.Memory`: modify Memory settings
471* `VM.Config.Network`: add/modify/delete Network devices
472* `VM.Config.HWType`: modify emulated HW type
473* `VM.Config.Options`: modify any other VM configuration
474* `VM.Snapshot`: create/remove VM snapshots
475
476Storage related privileges::
477
478* `Datastore.Allocate`: create/remove/modify a data store, delete volumes
479* `Datastore.AllocateSpace`: allocate space on a datastore
480* `Datastore.AllocateTemplate`: allocate/upload templates and iso images
481* `Datastore.Audit`: view/browse a datastore
482
5eba0743 483
b8eeec52
WB
484Objects and Paths
485~~~~~~~~~~~~~~~~~
486
487Access permissions are assigned to objects, such as a virtual machines,
488storages or pools of resources.
489We use file system like paths to address these objects. These paths form a
490natural tree, and permissions of higher levels (shorter path) can
491optionally be propagated down within this hierarchy.
492
7d48940b 493[[pveum_templated_paths]]
b8eeec52
WB
494Paths can be templated. When an API call requires permissions on a
495templated path, the path may contain references to parameters of the API
496call. These references are specified in curly braces. Some parameters are
497implicitly taken from the API call's URI. For instance the permission path
498`/nodes/{node}` when calling '/nodes/mynode/status' requires permissions on
499`/nodes/mynode`, while the path `{path}` in a PUT request to `/access/acl`
500refers to the method's `path` parameter.
501
502Some examples are:
503
504* `/nodes/{node}`: Access to {pve} server machines
505* `/vms`: Covers all VMs
506* `/vms/{vmid}`: Access to specific VMs
507* `/storage/{storeid}`: Access to a storages
7d48940b 508* `/pool/{poolname}`: Access to VMs part of a <<pveum_pools,pool>>
b8eeec52
WB
509* `/access/groups`: Group administration
510* `/access/realms/{realmid}`: Administrative access to realms
511
512
3c8533f2
DM
513Inheritance
514^^^^^^^^^^^
515
5eba0743 516As mentioned earlier, object paths form a file system like tree, and
3c8533f2
DM
517permissions can be inherited down that tree (the propagate flag is set
518by default). We use the following inheritance rules:
519
74936daf
WB
520* Permissions for individual users always replace group permissions.
521* Permissions for groups apply when the user is member of that group.
522* Permissions replace the ones inherited from an upper level.
3c8533f2 523
181db098
FG
524Additionally, privilege separated tokens can never have a permission on any
525given path that their associated user does not have.
5eba0743 526
80c0adcb 527[[pveum_pools]]
3c8533f2
DM
528Pools
529~~~~~
530
531Pools can be used to group a set of virtual machines and data
8c1189b6 532stores. You can then simply set permissions on pools (`/pool/{poolid}`),
3c8533f2
DM
533which are inherited to all pool members. This is a great way simplify
534access control.
535
74936daf
WB
536
537What permission do I need?
538~~~~~~~~~~~~~~~~~~~~~~~~~~
539
540The required API permissions are documented for each individual
a55d30db 541method, and can be found at https://pve.proxmox.com/pve-docs/api-viewer/
74936daf
WB
542
543The permissions are specified as a list which can be interpreted as a
544tree of logic and access-check functions:
545
546`["and", <subtests>...]` and `["or", <subtests>...]`::
547Each(`and`) or any(`or`) further element in the current list has to be true.
548
549`["perm", <path>, [ <privileges>... ], <options>...]`::
7d48940b 550The `path` is a templated parameter (see
87ba80b0 551<<pveum_templated_paths,Objects and Paths>>). All (or, if the `any`
7d48940b 552option is used, any) of the listed
74936daf
WB
553privileges must be allowed on the specified path. If a `require-param`
554option is specified, then its specified parameter is required even if the
555API call's schema otherwise lists it as being optional.
556
557`["userid-group", [ <privileges>... ], <options>...]`::
470d4313 558The caller must have any of the listed privileges on `/access/groups`. In
74936daf
WB
559addition there are two possible checks depending on whether the
560`groups_param` option is set:
561+
562* `groups_param` is set: The API call has a non-optional `groups` parameter
563and the caller must have any of the listed privileges on all of the listed
564groups.
565* `groups_param` is not set: The user passed via the `userid` parameter
566must exist and be part of a group on which the caller has any of the listed
567privileges (via the `/access/groups/<group>` path).
568
569`["userid-param", "self"]`::
570The value provided for the API call's `userid` parameter must refer to the
571user performing the action. (Usually in conjunction with `or`, to allow
572users to perform an action on themselves even if they don't have elevated
573privileges.)
574
575`["userid-param", "Realm.AllocateUser"]`::
576The user needs `Realm.AllocateUser` access to `/access/realm/<realm>`, with
470d4313 577`<realm>` referring to the realm of the user passed via the `userid`
74936daf
WB
578parameter. Note that the user does not need to exist in order to be
579associated with a realm, since user IDs are passed in the form of
580`<username>@<realm>`.
581
582`["perm-modify", <path>]`::
7d48940b
DM
583The `path` is a templated parameter (see
584<<pveum_templated_paths,Objects and Paths>>). The user needs either the
585`Permissions.Modify` privilege, or,
74936daf
WB
586depending on the path, the following privileges as a possible substitute:
587+
588* `/storage/...`: additionally requires 'Datastore.Allocate`
589* `/vms/...`: additionally requires 'VM.Allocate`
590* `/pool/...`: additionally requires 'Pool.Allocate`
591+
592If the path is empty, `Permission.Modify` on `/access` is required.
593
3c8533f2
DM
594Command Line Tool
595-----------------
596
597Most users will simply use the GUI to manage users. But there is also
87ba80b0 598a fully featured command line tool called `pveum` (short for ``**P**roxmox
4f6e7e05
WB
599**VE** **U**ser **M**anager''). Please note that all Proxmox VE command
600line tools are wrappers around the API, so you can also access those
87ba80b0 601functions through the REST API.
3c8533f2
DM
602
603Here are some simple usage examples. To show help type:
604
605[source,bash]
606 pveum
607
608or (to show detailed help about a specific command)
609
610[source,bash]
9135e321 611 pveum help user add
3c8533f2
DM
612
613Create a new user:
614
615[source,bash]
9135e321 616 pveum user add testuser@pve -comment "Just a test"
3c8533f2
DM
617
618Set or Change the password (not all realms support that):
619
620[source,bash]
621 pveum passwd testuser@pve
622
623Disable a user:
624
625[source,bash]
9135e321 626 pveum user modify testuser@pve -enable 0
3c8533f2
DM
627
628Create a new group:
629
630[source,bash]
9135e321 631 pveum group add testgroup
3c8533f2
DM
632
633Create a new role:
634
635[source,bash]
9135e321 636 pveum role add PVE_Power-only -privs "VM.PowerMgmt VM.Console"
3c8533f2
DM
637
638
639Real World Examples
640-------------------
641
5eba0743 642
3c8533f2
DM
643Administrator Group
644~~~~~~~~~~~~~~~~~~~
645
646One of the most wanted features was the ability to define a group of
5eba0743 647users with full administrator rights (without using the root account).
3c8533f2
DM
648
649Define the group:
650
651[source,bash]
9135e321 652 pveum group add admin -comment "System Administrators"
3c8533f2
DM
653
654Then add the permission:
655
656[source,bash]
9135e321 657 pveum acl modify / -group admin -role Administrator
3c8533f2
DM
658
659You can finally add users to the new 'admin' group:
660
661[source,bash]
9135e321 662 pveum user modify testuser@pve -group admin
3c8533f2
DM
663
664
665Auditors
666~~~~~~~~
667
668You can give read only access to users by assigning the `PVEAuditor`
669role to users or groups.
670
8c1189b6 671Example1: Allow user `joe@pve` to see everything
3c8533f2
DM
672
673[source,bash]
9135e321 674 pveum acl modify / -user joe@pve -role PVEAuditor
3c8533f2 675
8c1189b6 676Example1: Allow user `joe@pve` to see all virtual machines
3c8533f2
DM
677
678[source,bash]
9135e321 679 pveum acl modify /vms -user joe@pve -role PVEAuditor
3c8533f2 680
5eba0743 681
3c8533f2
DM
682Delegate User Management
683~~~~~~~~~~~~~~~~~~~~~~~~
684
470d4313 685If you want to delegate user management to user `joe@pve` you can do
3c8533f2
DM
686that with:
687
688[source,bash]
9135e321 689 pveum acl modify /access -user joe@pve -role PVEUserAdmin
3c8533f2 690
8c1189b6 691User `joe@pve` can now add and remove users, change passwords and
3c8533f2
DM
692other user attributes. This is a very powerful role, and you most
693likely want to limit that to selected realms and groups. The following
8c1189b6
FG
694example allows `joe@pve` to modify users within realm `pve` if they
695are members of group `customers`:
3c8533f2
DM
696
697[source,bash]
9135e321
TL
698 pveum acl modify /access/realm/pve -user joe@pve -role PVEUserAdmin
699 pveum acl modify /access/groups/customers -user joe@pve -role PVEUserAdmin
3c8533f2 700
0abc65b0 701NOTE: The user is able to add other users, but only if they are
8c1189b6
FG
702members of group `customers` and within realm `pve`.
703
181db098
FG
704Limited API token for monitoring
705~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
706
707Given a user `joe@pve` with the PVEVMAdmin role on all VMs:
708
709[source,bash]
9135e321 710 pveum acl modify /vms -user joe@pve -role PVEVMAdmin
181db098
FG
711
712Add a new API token with separate privileges, which is only allowed to view VM
713information (e.g., for monitoring purposes):
714
715[source,bash]
716 pveum user token add joe@pve monitoring -privsep 1
9135e321 717 pveum acl modify /vms -token 'joe@pve!monitoring' -role PVEAuditor
181db098
FG
718
719Verify the permissions of the user and token:
720
721[source,bash]
722 pveum user permissions joe@pve
723 pveum user token permissions joe@pve monitoring
3c8533f2 724
23b447be
DW
725Resource Pools
726~~~~~~~~~~~~~~
3c8533f2 727
23b447be
DW
728An enterprise is usually structured into several smaller departments, and it is
729common that you want to assign resources and delegate management tasks to each
730of these. Let's assume that you want to set up a pool for a software development
731department. First, create a group
3c8533f2
DM
732
733[source,bash]
9135e321 734 pveum group add developers -comment "Our software developers"
3c8533f2
DM
735
736Now we create a new user which is a member of that group
737
738[source,bash]
9135e321 739 pveum user add developer1@pve -group developers -password
3c8533f2 740
0abc65b0 741NOTE: The -password parameter will prompt you for a password
3c8533f2 742
23b447be
DW
743Then we create a resource pool for our development department to use
744
745[source,bash]
9135e321 746 pveum pool add dev-pool --comment "IT development pool"
23b447be
DW
747
748Finally, we can assign permissions to that pool
3c8533f2
DM
749
750[source,bash]
9135e321 751 pveum acl modify /pool/dev-pool/ -group developers -role PVEAdmin
3c8533f2
DM
752
753Our software developers can now administrate the resources assigned to
754that pool.
755
756
757ifdef::manvolnum[]
758include::pve-copyright.adoc[]
759endif::manvolnum[]
760