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