]> git.proxmox.com Git - pve-access-control.git/blame - README
add more privileges, improve docs
[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
40 * pve: stores paswords to "/etc/pve/priv/shadow.cfg" (SHA256 crypt);
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)
2c3a6c0a 84 VM.Audit: view VM config
c0fead8c
DM
85
86 VM.Config.XXX: modify VM config
87
88 VM.Config.Disk: add/modify/delete Disks
89 VM.Config.CDROM: eject/change CDROM
90 VM.Config.CPU: modify CPU settings
91 VM.Config.Memory: modify Memory settings
92 VM.Config.Network: add/modify/delete Network devices
93 VM.Config.HWType: modify emulated HW type
94 VM.Config.Options: modify any other VM configuration
95
96 Pool.Allocate: create/remove/modify a pool.
2c3a6c0a
DM
97
98 Datastore.Allocate: create/remove/modify a data store.
99 Datastore.AllocateSpace: allocate space on a datastore
100 Datastore.Audit: view/browse a datastore
101
102 Permissions.Modify: modify access permissions
103
104 Sys.PowerMgmt: Node power management (start, stop, reset, shutdown, ...)
105 Sys.Console: console access to Node
106 Sys.Syslog: view Syslog
107 Sys.Audit: view node status/config
108
109
110 We may need to refine those in future - the following privs
111 are just examples:
112
113 VM.Create: create new VM to server inventory
114 VM.Remove: remove VM from inventory
2c3a6c0a
DM
115 VM.AddNewDisk: add new disk to VM
116 VM.AddExistingDisk: add an existing disk to VM
117 VM.DiskModify: modify disk space for associated VM
118 VM.UseRawDevice: associate a raw device with VM
119 VM.PowerOn: power on VM
120 VM.PowerOff: power off VM
2c3a6c0a
DM
121 VM.CpuModify: modify number of CPUs associated with VM
122 VM.CpuCyclesModify: modify CPU cycles for VM
123 VM.NetworkAdd: add network device to VM
124 VM.NetworkConfigure: configure network device associated with VM
125 VM.NetworkRemove: remove network device from VM
126
127 Network.AssignNetwork: assign system networks
128
129role:
130
131 defines a sets of priviledges
132
133 predefined roles:
134
135 administrator: full administrative privileges
136 read_only: read only
137 no_access: no privileges
138
139 We store the following attribute for roles:
140
141 role_name: the name of the group
142 description: a more verbose description
143 privileges: list of privileges
144
145permission:
146
147 Assign roles to users or groups.
148
149
150ACL and Objects:
151================
152
153An access control list (ACL) is a list of permissions attached to an object. The list specifies who or what is allowed to access the object and what operations are allowed to be performed on the object.
154
155Object: A Virtual machine, Network (bridge, venet), Hosts, Host Memory, Storage, ...
156
157We can identify our objects by an unique (file system like) path, which also defines a tree like hierarchy relation. ACL can be inherited. Permissions are inherited if the propagate flag is set on the parent. Child permissions always overwrite inherited permissions. User permission takes precedence over all group permissions. If multiple group permission apply the resulting role is the union of all those group priviledges.
158
159There is at most one object permission per user or group
160
161We store the following attributes for ACLs:
162
163 propagate: propagate permissions down in the hierarchy
164 path: path to uniquely identify the object
165 user_or_group: ID of user or group (group ID start with @)
166 role: list of role IDs.
167
168User Database:
169
170To keep it simple, we suggest to use a single text file, which is replicated to all cluster nodes.
171
172Also, we can store ACLs inside this file.
173
174Here is a short example how such file could look like:
175
176-----User/Group/Role Database example--------
177
178user:joe@example.com:$1$nd91DtDy$mJtzWJAN2AAABKij0JgMy1/:Joe Average:Just a comment:
179user:max@example.com:$1$nd91DtDy$LANSNJAN2AAABKidhfgMy3/:Max Mustermann:Another comment:
180user:edward@example.com:$1$nd91DtDy$LANSNAAAAAAABKidhfgMy3/:Edward Example:Example VM Manager:
181
182group:admin:Internal Administrator Group:root:
183group:audit:Read only accounts used for audit::
184group:customers:Our Customers:joe@example.com,max@example.com:
185
186role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
187role:vm_manager:Virtual Machine Manager:VM.ConfigureCD,VM.Console,VM.AddNewDisk,VM.PowerOn,VM.PowerOff:
188role:vm_operator:Virtual Machine Operator:VM.Create,VM.ConfigureCD,VM.Console,VM.AddNewDisk,VM.PowerOn,VM.PowerOff:
189role:ds_consumer:DataStore Consumer:Datastore.AllocateSpace:
190role:nw_consumer:Network Consumer:Network.AssignNetwork:
191
192# group admin can do anything
193acl:0:/:@admin:Administrator:
194# group audit can view anything
195acl:1:/:@audit:read_only:
196
197# user max can manage all qemu/kvm machines
198acl:1:/vm/qemu:max@example.com:vm_manager:
199
200# user joe can use openvz vm 230
201acl:1:/vm/openvz/230:joe@example.com:vm_user:
202
203# user Edward can create openvz VMs using vmbr0 and store0
204acl:1:/vm/openvz:edward@example.com:vm_operator:
205acl:1:/network/vmbr0:edward@example.com:ds_consumer:
206acl:1:/storage/store0:edward@example.com:nw_consumer:
207
208---------------------------------------------
209
210Basic model RBAC -> http://en.wikipedia.org/wiki/Role-based_access_control
211
212# Subject: A person or automated agent
213subject:joe@example.com:
214subject:max@example.com:
215
216# Role: Job function or title which defines an authority level
217role:vm_user:Virtual Machine User:
218role:admin:Administrator:
219
220# Subject Assignment: Subject -> Role(s)
221SA:vm_user:joe@example.com,max@example.com:
222SA:admin:joe@example.com:
223
224# Permissions: An approval of a mode of access to a resource
225# Permission Assignment: Role -> Permissions (set of allowed operation)
226perm:vm_user:VM.ConfigureCD,VM.Console:
227perm:admin:VM.ConfigureCD,VM.Console,VM.Create:
228
229---------------------------------------------
230
231We can merge 'perm' into the 'role' table, because it is
232a 1 -> 1 mapping
233
234subject:joe@example.com:
235subject:max@example.com:
236
237role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
238role:admin:Administrator:VM.ConfigureCD,VM.Console,VM.Create:
239
240SA:vm_user:joe@example.com,max@example.com:
241SA:admin:joe@example.com:
242
243-----------------------------------------------
244
245We can have different subject assignment for different objects.
246
247subject:joe@example.com:
248subject:max@example.com:
249
250role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
251role:admin:Administrator:VM.ConfigureCD,VM.Console,VM.Create:
252
253# joe is 'admin' for openvz VMs, but 'vm_user' for qemu VMs
254SA:/vm/openvz:admin:joe@example.com:
255SA:/vm/qemu:vm_user:joe@example.com,max@example.com:
256
257-----------------------------------------------
258
259Let us use more convenient names.
260Use 'user' instead of 'subject'.
261Use 'acl' instead of 'SA'.
262
263user:joe@example.com:
264user:max@example.com:
265
266role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
267role:admin:Administrator:VM.ConfigureCD,VM.Console,VM.Create:
268
269# joe is 'admin' for openvz VMs, but 'vm_user' for qemu VMs
270acl:/vm/openvz:admin:joe@example.com:
271acl:/vm/qemu:vm_user:joe@example.com,max@example.com:
272
273-----------------------------------------------
274
275Finally introduce groups to group users. ACL can then
276use 'users' or 'groups'.
277
278user:joe@example.com:
279user:max@example.com:
280
281group:customers:Our Customers:joe@example.com,max@example.com:
282
283role:vm_user:Virtual Machine User:VM.ConfigureCD,VM.Console:
284role:admin:Administrator:VM.ConfigureCD,VM.Console,VM.Create:
285
286acl:/vm/openvz:admin:joe@example.com:
287acl:/vm/qemu:vm_user:@customers:
288
289
290-----------------------------------------------