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