]> git.proxmox.com Git - pve-access-control.git/blame - README
bump version to 8.1.4
[pve-access-control.git] / README
CommitLineData
2c3a6c0a
DM
1User Management and Access Control
2==================================
3
4Proxmox VE implements an easy but flexible way to manage users. A
5powerful Access Control algorithm is used to grant permissions to
6individual users or group of users.
7
8Best Practices:
9
10Use groups in ACLs (not individual users).
11
12User Authentication
13===================
14
15Proxmox VE can use different authentication servers. Those
16servers are listed in '/etc/pve/priv/domain.cfg', indexed by a unique
17ID (called 'authentication domain' or 'realm').
18
19User names need to be unique. We create unique names by adding the
20'realm' to the user ID: <userid>@<realm>
21
22File format 'domain.cfg'
23----example domains.cfg ------------------
24
25# an active directory server
26AD: mycompany
27 server1 10.10.10.1
28 server2 10.10.10.2
29 ...
30
31# an LDAP server
32LDAP: example.com
33 server1 10.10.10.2
34 ....
35
36------------------------------------------
37
38There are 2 special authentication domains name 'pve' and 'pam':
39
7d23b7ca 40 * pve: stores passwords to "/etc/pve/priv/shadow.cfg" (SHA256 crypt);
2c3a6c0a
DM
41
42 * pam: use unix 'pam'
43
44
45Proposed user database fields:
46==============================
47
48users:
49
50 login_name: email address (user@domain)
51 enable: 1 = TRUE, 0 = FALSE
52 expire: <integer> (account expiration date)
53 domid: reference to authentication domain
54 firstname: user first name
55 lastname: user last name
56 email: user's email address
57 comment: arbitrary comment
58
59 special user root: The root user has full administrative privileges
60
61group:
62
63 group_name: the name of the group
64 user_list: list of login names
65 comment: a more verbose description
66
c0fead8c
DM
67pool:
68
69 pool_name: the name of the pool
70 comment: a more verbose description
71 vm_list: list of VMs associated with the pool
72 storage_list: list of storage IDs associated with the pool
73
2c3a6c0a
DM
74privileges:
75
76 defines rights required to execute actions or read
77 information.
78
79 VM.Allocate: create/remove new VM to server inventory
80 VM.Migrate: migrate VM to alternate server on cluster
81 VM.PowerMgmt: power management (start, stop, reset, shutdown, ...)
82 VM.Console: console access to VM
c0fead8c 83 VM.Monitor: access to VM monitor (kvm)
68d5a86d 84 VM.Backup: backup/restore VMs
7b395f99 85 VM.Clone: Clone VM or VM template
2c3a6c0a 86 VM.Audit: view VM config
c0fead8c
DM
87
88 VM.Config.XXX: modify VM config
89
90 VM.Config.Disk: add/modify/delete Disks
91 VM.Config.CDROM: eject/change CDROM
92 VM.Config.CPU: modify CPU settings
93 VM.Config.Memory: modify Memory settings
94 VM.Config.Network: add/modify/delete Network devices
95 VM.Config.HWType: modify emulated HW type
96 VM.Config.Options: modify any other VM configuration
97
98 Pool.Allocate: create/remove/modify a pool.
6d048ad6 99 Pool.Audit: view a pool
2c3a6c0a
DM
100
101 Datastore.Allocate: create/remove/modify a data store.
102 Datastore.AllocateSpace: allocate space on a datastore
68d5a86d 103 Datastore.AllocateTemplate: allocate/upload templates and iso images
2c3a6c0a
DM
104 Datastore.Audit: view/browse a datastore
105
106 Permissions.Modify: modify access permissions
107
108 Sys.PowerMgmt: Node power management (start, stop, reset, shutdown, ...)
109 Sys.Console: console access to Node
110 Sys.Syslog: view Syslog
111 Sys.Audit: view node status/config
112
113
114 We may need to refine those in future - the following privs
115 are just examples:
116
117 VM.Create: create new VM to server inventory
118 VM.Remove: remove VM from inventory
2c3a6c0a
DM
119 VM.AddNewDisk: add new disk to VM
120 VM.AddExistingDisk: add an existing disk to VM
121 VM.DiskModify: modify disk space for associated VM
122 VM.UseRawDevice: associate a raw device with VM
123 VM.PowerOn: power on VM
124 VM.PowerOff: power off VM
2c3a6c0a
DM
125 VM.CpuModify: modify number of CPUs associated with VM
126 VM.CpuCyclesModify: modify CPU cycles for VM
127 VM.NetworkAdd: add network device to VM
128 VM.NetworkConfigure: configure network device associated with VM
129 VM.NetworkRemove: remove network device from VM
130
131 Network.AssignNetwork: assign system networks
132
133role:
134
7d23b7ca 135 defines a sets of privileges
2c3a6c0a
DM
136
137 predefined roles:
138
139 administrator: full administrative privileges
140 read_only: read only
141 no_access: no privileges
142
143 We store the following attribute for roles:
144
145 role_name: the name of the group
146 description: a more verbose description
147 privileges: list of privileges
148
149permission:
150
151 Assign roles to users or groups.
152
153
154ACL and Objects:
155================
156
0fd902ce
TL
157An access control list (ACL) is a list of permissions attached to an object.
158The list specifies who or what is allowed to access the object and what
159operations are allowed to be performed on the object.
160
161Object: A Virtual machine, Network (bridge, venet), Hosts, Host Memory,
162Storage, ...
163
164We can identify our objects by an unique (file system like) path, which also
165defines a tree like hierarchy relation. ACL can be inherited. Permissions are
166inherited if the propagate flag is set on the parent. Child permissions always
167overwrite inherited permissions. User permission takes precedence over all
168group permissions. If multiple group permission apply the resulting role is the
169union of all those group privileges.
2c3a6c0a
DM
170
171There is at most one object permission per user or group
172
173We store the following attributes for ACLs:
174
175 propagate: propagate permissions down in the hierarchy
176 path: path to uniquely identify the object
177 user_or_group: ID of user or group (group ID start with @)
178 role: list of role IDs.
179
180User Database:
181
182To keep it simple, we suggest to use a single text file, which is replicated to all cluster nodes.
183
184Also, we can store ACLs inside this file.
185
186Here is a short example how such file could look like:
187
188-----User/Group/Role Database example--------
189
190user:joe@example.com:$1$nd91DtDy$mJtzWJAN2AAABKij0JgMy1/:Joe Average:Just a comment:
191user:max@example.com:$1$nd91DtDy$LANSNJAN2AAABKidhfgMy3/:Max Mustermann:Another comment:
192user:edward@example.com:$1$nd91DtDy$LANSNAAAAAAABKidhfgMy3/:Edward Example:Example VM Manager:
193
194group:admin:Internal Administrator Group:root:
195group:audit:Read only accounts used for audit::
196group:customers:Our Customers:joe@example.com,max@example.com:
197
198role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
199role:vm_manager:Virtual Machine Manager:VM.ConfigureCD,VM.Console,VM.AddNewDisk,VM.PowerOn,VM.PowerOff:
200role:vm_operator:Virtual Machine Operator:VM.Create,VM.ConfigureCD,VM.Console,VM.AddNewDisk,VM.PowerOn,VM.PowerOff:
201role:ds_consumer:DataStore Consumer:Datastore.AllocateSpace:
202role:nw_consumer:Network Consumer:Network.AssignNetwork:
203
204# group admin can do anything
205acl:0:/:@admin:Administrator:
206# group audit can view anything
207acl:1:/:@audit:read_only:
208
209# user max can manage all qemu/kvm machines
210acl:1:/vm/qemu:max@example.com:vm_manager:
211
212# user joe can use openvz vm 230
213acl:1:/vm/openvz/230:joe@example.com:vm_user:
214
215# user Edward can create openvz VMs using vmbr0 and store0
216acl:1:/vm/openvz:edward@example.com:vm_operator:
217acl:1:/network/vmbr0:edward@example.com:ds_consumer:
218acl:1:/storage/store0:edward@example.com:nw_consumer:
219
220---------------------------------------------
221
222Basic model RBAC -> http://en.wikipedia.org/wiki/Role-based_access_control
223
224# Subject: A person or automated agent
225subject:joe@example.com:
226subject:max@example.com:
227
228# Role: Job function or title which defines an authority level
229role:vm_user:Virtual Machine User:
230role:admin:Administrator:
231
232# Subject Assignment: Subject -> Role(s)
233SA:vm_user:joe@example.com,max@example.com:
234SA:admin:joe@example.com:
235
236# Permissions: An approval of a mode of access to a resource
237# Permission Assignment: Role -> Permissions (set of allowed operation)
238perm:vm_user:VM.ConfigureCD,VM.Console:
239perm:admin:VM.ConfigureCD,VM.Console,VM.Create:
240
241---------------------------------------------
242
243We can merge 'perm' into the 'role' table, because it is
244a 1 -> 1 mapping
245
246subject:joe@example.com:
247subject:max@example.com:
248
249role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
250role:admin:Administrator:VM.ConfigureCD,VM.Console,VM.Create:
251
252SA:vm_user:joe@example.com,max@example.com:
253SA:admin:joe@example.com:
254
255-----------------------------------------------
256
257We can have different subject assignment for different objects.
258
259subject:joe@example.com:
260subject:max@example.com:
261
262role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
263role:admin:Administrator:VM.ConfigureCD,VM.Console,VM.Create:
264
265# joe is 'admin' for openvz VMs, but 'vm_user' for qemu VMs
266SA:/vm/openvz:admin:joe@example.com:
267SA:/vm/qemu:vm_user:joe@example.com,max@example.com:
268
269-----------------------------------------------
270
271Let us use more convenient names.
272Use 'user' instead of 'subject'.
273Use 'acl' instead of 'SA'.
274
275user:joe@example.com:
276user:max@example.com:
277
278role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
279role:admin:Administrator:VM.ConfigureCD,VM.Console,VM.Create:
280
281# joe is 'admin' for openvz VMs, but 'vm_user' for qemu VMs
282acl:/vm/openvz:admin:joe@example.com:
283acl:/vm/qemu:vm_user:joe@example.com,max@example.com:
284
285-----------------------------------------------
286
287Finally introduce groups to group users. ACL can then
288use 'users' or 'groups'.
289
290user:joe@example.com:
291user:max@example.com:
292
293group:customers:Our Customers:joe@example.com,max@example.com:
294
295role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
296role:admin:Administrator:VM.ConfigureCD,VM.Console,VM.Create:
297
298acl:/vm/openvz:admin:joe@example.com:
299acl:/vm/qemu:vm_user:@customers:
300
301
302-----------------------------------------------