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