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