]> git.proxmox.com Git - pve-docs.git/blame_incremental - pveum.adoc
replace Terms and Definitions with a general introduction
[pve-docs.git] / pveum.adoc
... / ...
CommitLineData
1ifdef::manvolnum[]
2PVE({manvolnum})
3================
4include::attributes.txt[]
5
6NAME
7----
8
9pveum - Proxmox VE User Manager
10
11
12SYNOPSYS
13--------
14
15include::pveum.1-synopsis.adoc[]
16
17
18DESCRIPTION
19-----------
20endif::manvolnum[]
21
22ifndef::manvolnum[]
23User Management
24===============
25include::attributes.txt[]
26endif::manvolnum[]
27
28// Copied from pve wiki: Revision as of 16:10, 27 October 2015
29
30Proxmox VE supports multiple authentication sources, e.g. Linux PAM,
31an integrated Proxmox VE authentication server, LDAP, Microsoft Active
32Directory.
33
34By using the role based user- and permission management for all
35objects (VMs, storages, nodes, etc.) granular access can be defined.
36
37
38Users
39-----
40
41{pve} stores user attributes in `/etc/pve/user.cfg`.
42Passwords are not stored here, users are instead associated with
43<<authentication-realms,authentication realms>> described below.
44Therefore a user is internally often identified by its name and
45realm in the form `<userid>@<realm>`.
46
47Each user entry in this file contains the following information:
48
49* First name
50* Last name
51* E-mail address
52* Group memberships
53* An optional Expiration date
54* A comment or note about this user
55* Whether this user is enabled or disabled
56* Optional two factor authentication keys
57
58
59System administrator
60~~~~~~~~~~~~~~~~~~~~
61
62The system's root user can always log in via the Linux PAM realm and is an
63unconfined administrator. This user cannot be deleted, but attributes can
64still be changed and system mails will be sent to the email address
65assigned to this user.
66
67
68Groups
69~~~~~~
70
71Each user can be member of several groups. Groups are the preferred
72way to organize access permissions. You should always grant permission
73to groups instead of using individual users. That way you will get a
74much shorter access control list which is easier to handle.
75
76
77[[authentication-realms]]
78Authentication Realms
79---------------------
80
81As {pve} users are just counterparts for users existing on some external
82realm, the realms have to be configured in `/etc/pve/domains.cfg`.
83The following realms (authentication methods) are available:
84
85Linux PAM standard authentication::
86In this case a system user has to exist (eg. created via the `adduser`
87command) on all nodes the user is allowed to login, and the user
88authenticates with their usual system password.
89+
90[source,bash]
91----
92useradd heinz
93passwd heinz
94groupadd watchman
95usermod -a -G watchman heinz
96----
97
98Proxmox VE authentication server::
99This is a unix like password store (`/etc/pve/priv/shadow.cfg`).
100Password are encrypted using the SHA-256 hash method.
101This is the most convenient method for for small (or even medium)
102installations where users do not need access to anything outside of
103{pve}. In this case users are fully managed by {pve} and are able to
104change their own passwords via the GUI.
105
106LDAP::
107It is possible to authenticate users via an LDAP server (eq.
108openldap). The server and an optional fallback server can be
109configured and the connection can be encrypted via SSL.
110+
111Users are searched under a 'Base Domain Name' (`base_dn`), with the
112user name found in the attribute specified in the 'User Attribute Name'
113(`user_attr`) field.
114+
115For instance, if a user is represented via the
116following ldif dataset:
117+
118----
119# user1 of People at ldap-test.com
120dn: uid=user1,ou=People,dc=ldap-test,dc=com
121objectClass: top
122objectClass: person
123objectClass: organizationalPerson
124objectClass: inetOrgPerson
125uid: user1
126cn: Test User 1
127sn: Testers
128description: This is the first test user.
129----
130+
131The 'Base Domain Name' would be `ou=People,dc=ldap-test,dc=com` and the user
132attribute would be `uid`.
133+
134If {pve} needs to authenticate (bind) to the ldap server before being
135able to query and authenticate users, a bind domain name can be
136configured via the `bind_dn` property in `/etc/pve/domains.cfg`. Its
137password then has to be stored in `/etc/pve/priv/ldap/<realmname>.pw`
138(eg. `/etc/pve/priv/ldap/my-ldap.pw`). This file should contain a
139single line containing the raw password.
140
141Microsoft Active Directory::
142
143A server and authentication domain need to be specified. Like with
144ldap an optional fallback server, optional port, and SSL
145encryption can be configured.
146
147
148Two factor authentication
149-------------------------
150
151Each realm can optionally be secured additionally by two factor
152authentication. This can be done by selecting one of the available methods
153via the 'TFA' dropdown box when adding or editing an Authentication Realm.
154When a realm has TFA enabled it becomes a requirement and only users with
155configured TFA will be able to login.
156
157Currently there are two methods available:
158
159Time based OATH (TOTP)::
160This uses the standard HMAC-SHA1 algorithm where the current time is hashed
161with the user's configured key. The time step and password length
162parameters are configured.
163+
164A user can have multiple keys configured (separated by spaces), and the
165keys can be specified in Base32 (RFC3548) or hexadecimal notation.
166+
167{pve} provides a key generation tool (`oathkeygen`) which prints out a
168random key in Base32 notation which can be used directly with various OTP
169tools, such as the `oathtool` command line tool, the Google authenticator
170or FreeOTP Android apps.
171
172YubiKey OTP::
173For authenticating via a YubiKey a Yubico API ID, API KEY and validation
174server URL must be configured, and users must have a YubiKey available. In
175order to get the key ID from a YubiKey, you can trigger the YubiKey once
176after connecting it to USB and copy the first 12 characters of the typed
177password into the user's 'Key IDs' field.
178+
179Please refer to the
180https://developers.yubico.com/OTP/[YubiKey OTP] documentation for how to use the
181https://www.yubico.com/products/services-software/yubicloud/[YubiCloud] or
182https://developers.yubico.com/Software_Projects/YubiKey_OTP/YubiCloud_Validation_Servers/[
183host your own verification server].
184
185
186Permission Management
187---------------------
188
189In order for a user to perform an action (such as listing, modifying or
190deleting a parts of a VM configuration), the user needs to have the
191appropriate permissions.
192
193{pve} uses a role and path based permission management system. An entry in
194the permissions table allows a user or group to take on a specific role
195when accessing an 'object' or 'path'. This means an such an access rule can
196be represented as a triple of '(path, user, role)' or '(path, group,
197role)', with the role containing a set of allowed actions, and the path
198representing the target of these actions.
199
200
201Objects and Paths
202~~~~~~~~~~~~~~~~~
203
204Access permissions are assigned to objects, such as a virtual machines
205(`/vms/{vmid}`) or a storage (`/storage/{storeid}`) or a pool of
206resources (`/pool/{poolname}`). We use file system like paths to
207address those objects. Those paths form a natural tree, and
208permissions can be inherited down that hierarchy.
209
210
211Privileges
212~~~~~~~~~~
213
214A privilege is the right to perform a specific action. To simplify
215management, lists of privileges are grouped into roles, which can then
216be uses to set permissions.
217
218We currently use the following privileges:
219
220Node / System related privileges::
221
222* `Permissions.Modify`: modify access permissions
223* `Sys.PowerMgmt`: Node power management (start, stop, reset, shutdown, ...)
224* `Sys.Console`: console access to Node
225* `Sys.Syslog`: view Syslog
226* `Sys.Audit`: view node status/config
227* `Sys.Modify`: create/remove/modify node network parameters
228* `Group.Allocate`: create/remove/modify groups
229* `Pool.Allocate`: create/remove/modify a pool
230* `Realm.Allocate`: create/remove/modify authentication realms
231* `Realm.AllocateUser`: assign user to a realm
232* `User.Modify`: create/remove/modify user access and details.
233
234Virtual machine related privileges::
235
236* `VM.Allocate`: create/remove new VM to server inventory
237* `VM.Migrate`: migrate VM to alternate server on cluster
238* `VM.PowerMgmt`: power management (start, stop, reset, shutdown, ...)
239* `VM.Console`: console access to VM
240* `VM.Monitor`: access to VM monitor (kvm)
241* `VM.Backup`: backup/restore VMs
242* `VM.Audit`: view VM config
243* `VM.Clone`: clone/copy a VM
244* `VM.Config.Disk`: add/modify/delete Disks
245* `VM.Config.CDROM`: eject/change CDROM
246* `VM.Config.CPU`: modify CPU settings
247* `VM.Config.Memory`: modify Memory settings
248* `VM.Config.Network`: add/modify/delete Network devices
249* `VM.Config.HWType`: modify emulated HW type
250* `VM.Config.Options`: modify any other VM configuration
251* `VM.Snapshot`: create/remove VM snapshots
252
253Storage related privileges::
254
255* `Datastore.Allocate`: create/remove/modify a data store, delete volumes
256* `Datastore.AllocateSpace`: allocate space on a datastore
257* `Datastore.AllocateTemplate`: allocate/upload templates and iso images
258* `Datastore.Audit`: view/browse a datastore
259
260
261Roles
262~~~~~
263
264A role is simply a list of privileges. Proxmox VE comes with a number
265of predefined roles which satisfies most needs.
266
267* `Administrator`: has all privileges
268* `NoAccess`: has no privileges (used to forbid access)
269* `PVEAdmin`: can do most things, but miss rights to modify system settings (`Sys.PowerMgmt`, `Sys.Modify`, `Realm.Allocate`).
270* `PVEAuditor`: read only access
271* `PVEDatastoreAdmin`: create and allocate backup space and templates
272* `PVEDatastoreUser`: allocate backup space and view storage
273* `PVEPoolAdmin`: allocate pools
274* `PVESysAdmin`: User ACLs, audit, system console and system logs
275* `PVETemplateUser`: view and clone templates
276* `PVEUserAdmin`: user administration
277* `PVEVMAdmin`: fully administer VMs
278* `PVEVMUser`: view, backup, config CDROM, VM console, VM power management
279
280You can see the whole set of predefined roles on the GUI.
281
282Adding new roles using the CLI:
283
284[source,bash]
285----
286pveum roleadd PVE_Power-only -privs "VM.PowerMgmt VM.Console"
287pveum roleadd Sys_Power-only -privs "Sys.PowerMgmt Sys.Console"
288----
289
290
291Permissions
292~~~~~~~~~~~
293
294Permissions are the way we control access to objects. In technical
295terms they are simply a triple containing `<path,user,role>`. This
296concept is also known as access control lists. Each permission
297specifies a subject (user or group) and a role (set of privileges) on
298a specific path.
299
300When a subject requests an action on an object, the framework looks up
301the roles assigned to that subject (using the object path). The set of
302roles defines the granted privileges.
303
304
305Inheritance
306^^^^^^^^^^^
307
308As mentioned earlier, object paths form a file system like tree, and
309permissions can be inherited down that tree (the propagate flag is set
310by default). We use the following inheritance rules:
311
312* Permissions for individual users always replace group permissions.
313* Permissions for groups apply when the user is member of that group.
314* Permissions replace the ones inherited from an upper level.
315
316
317Pools
318~~~~~
319
320Pools can be used to group a set of virtual machines and data
321stores. You can then simply set permissions on pools (`/pool/{poolid}`),
322which are inherited to all pool members. This is a great way simplify
323access control.
324
325
326What permission do I need?
327~~~~~~~~~~~~~~~~~~~~~~~~~~
328
329The required API permissions are documented for each individual
330method, and can be found at http://pve.proxmox.com/pve-docs/api-viewer/
331
332The permissions are specified as a list which can be interpreted as a
333tree of logic and access-check functions:
334
335`["and", <subtests>...]` and `["or", <subtests>...]`::
336Each(`and`) or any(`or`) further element in the current list has to be true.
337
338`["perm", <path>, [ <privileges>... ], <options>...]`::
339The `path` is a templated parameter (see <<templated-paths,Objects and
340Paths>>). All (or , if the `any` option is used, any) of the listed
341privileges must be allowed on the specified path. If a `require-param`
342option is specified, then its specified parameter is required even if the
343API call's schema otherwise lists it as being optional.
344
345`["userid-group", [ <privileges>... ], <options>...]`::
346The callermust have any of the listed privileges on `/access/groups`. In
347addition there are two possible checks depending on whether the
348`groups_param` option is set:
349+
350* `groups_param` is set: The API call has a non-optional `groups` parameter
351and the caller must have any of the listed privileges on all of the listed
352groups.
353* `groups_param` is not set: The user passed via the `userid` parameter
354must exist and be part of a group on which the caller has any of the listed
355privileges (via the `/access/groups/<group>` path).
356
357`["userid-param", "self"]`::
358The value provided for the API call's `userid` parameter must refer to the
359user performing the action. (Usually in conjunction with `or`, to allow
360users to perform an action on themselves even if they don't have elevated
361privileges.)
362
363`["userid-param", "Realm.AllocateUser"]`::
364The user needs `Realm.AllocateUser` access to `/access/realm/<realm>`, with
365`<realm>` refering to the realm of the user passed via the `userid`
366parameter. Note that the user does not need to exist in order to be
367associated with a realm, since user IDs are passed in the form of
368`<username>@<realm>`.
369
370`["perm-modify", <path>]`::
371The `path` is a templated parameter (see <<templated-paths,Objects and
372Paths>>). The user needs either the `Permissions.Modify` privilege, or,
373depending on the path, the following privileges as a possible substitute:
374+
375* `/storage/...`: additionally requires 'Datastore.Allocate`
376* `/vms/...`: additionally requires 'VM.Allocate`
377* `/pool/...`: additionally requires 'Pool.Allocate`
378+
379If the path is empty, `Permission.Modify` on `/access` is required.
380
381Command Line Tool
382-----------------
383
384Most users will simply use the GUI to manage users. But there is also
385a full featured command line tool called `pveum` (short for ``**P**roxmox
386**VE** **U**ser **M**anager''). Please note that all Proxmox VE command
387line tools are wrappers around the API, so you can also access those
388function through the REST API.
389
390Here are some simple usage examples. To show help type:
391
392[source,bash]
393 pveum
394
395or (to show detailed help about a specific command)
396
397[source,bash]
398 pveum help useradd
399
400Create a new user:
401
402[source,bash]
403 pveum useradd testuser@pve -comment "Just a test"
404
405Set or Change the password (not all realms support that):
406
407[source,bash]
408 pveum passwd testuser@pve
409
410Disable a user:
411
412[source,bash]
413 pveum usermod testuser@pve -enable 0
414
415Create a new group:
416
417[source,bash]
418 pveum groupadd testgroup
419
420Create a new role:
421
422[source,bash]
423 pveum roleadd PVE_Power-only -privs "VM.PowerMgmt VM.Console"
424
425
426Real World Examples
427-------------------
428
429
430Administrator Group
431~~~~~~~~~~~~~~~~~~~
432
433One of the most wanted features was the ability to define a group of
434users with full administrator rights (without using the root account).
435
436Define the group:
437
438[source,bash]
439 pveum groupadd admin -comment "System Administrators"
440
441Then add the permission:
442
443[source,bash]
444 pveum aclmod / -group admin -role Administrator
445
446You can finally add users to the new 'admin' group:
447
448[source,bash]
449 pveum usermod testuser@pve -group admin
450
451
452Auditors
453~~~~~~~~
454
455You can give read only access to users by assigning the `PVEAuditor`
456role to users or groups.
457
458Example1: Allow user `joe@pve` to see everything
459
460[source,bash]
461 pveum aclmod / -user joe@pve -role PVEAuditor
462
463Example1: Allow user `joe@pve` to see all virtual machines
464
465[source,bash]
466 pveum aclmod /vms -user joe@pve -role PVEAuditor
467
468
469Delegate User Management
470~~~~~~~~~~~~~~~~~~~~~~~~
471
472If you want to delegate user managenent to user `joe@pve` you can do
473that with:
474
475[source,bash]
476 pveum aclmod /access -user joe@pve -role PVEUserAdmin
477
478User `joe@pve` can now add and remove users, change passwords and
479other user attributes. This is a very powerful role, and you most
480likely want to limit that to selected realms and groups. The following
481example allows `joe@pve` to modify users within realm `pve` if they
482are members of group `customers`:
483
484[source,bash]
485 pveum aclmod /access/realm/pve -user joe@pve -role PVEUserAdmin
486 pveum aclmod /access/groups/customers -user joe@pve -role PVEUserAdmin
487
488NOTE: The user is able to add other users, but only if they are
489members of group `customers` and within realm `pve`.
490
491
492Pools
493~~~~~
494
495An enterprise is usually structured into several smaller departments,
496and it is common that you want to assign resources to them and
497delegate management tasks. A pool is simply a set of virtual machines
498and data stores. You can create pools on the GUI. After that you can
499add resources to the pool (VMs, Storage).
500
501You can also assign permissions to the pool. Those permissions are
502inherited to all pool members.
503
504Lets assume you have a software development department, so we first
505create a group
506
507[source,bash]
508 pveum groupadd developers -comment "Our software developers"
509
510Now we create a new user which is a member of that group
511
512[source,bash]
513 pveum useradd developer1@pve -group developers -password
514
515NOTE: The -password parameter will prompt you for a password
516
517I assume we already created a pool called ``dev-pool'' on the GUI. So we can now assign permission to that pool:
518
519[source,bash]
520 pveum aclmod /pool/dev-pool/ -group developers -role PVEAdmin
521
522Our software developers can now administrate the resources assigned to
523that pool.
524
525
526ifdef::manvolnum[]
527include::pve-copyright.adoc[]
528endif::manvolnum[]
529