[pve-devel] [PATCH v2 manager] pve6to7: add check for pool permissions

Thomas Lamprecht t.lamprecht at proxmox.com
Wed Jun 16 14:49:55 CEST 2021


On 16.06.21 14:45, Fabian Grünbichler wrote:
> On June 16, 2021 2:16 pm, Lorenz Stechauner wrote:
>> the two checks make sure that:
>> * no user defined role 'PVEPoolUser' exists
>> * the user gets a hint for roles only containing Pool.Allocate and
>>     not Pool.Audit
>>
>> Signed-off-by: Lorenz Stechauner <l.stechauner at proxmox.com>
>> ---
>> changes to v1:
>> * rebased on master
>>
>>  PVE/CLI/pve6to7.pm | 25 +++++++++++++++++++++++++
>>  1 file changed, 25 insertions(+)
>>
>> diff --git a/PVE/CLI/pve6to7.pm b/PVE/CLI/pve6to7.pm
>> index 90f92a55..b391d006 100644
>> --- a/PVE/CLI/pve6to7.pm
>> +++ b/PVE/CLI/pve6to7.pm
>> @@ -9,6 +9,7 @@ use PVE::API2::LXC;
>>  use PVE::API2::Qemu;
>>  use PVE::API2::Certificates;
>>  
>> +use PVE::AccessControl;
>>  use PVE::Ceph::Tools;
>>  use PVE::Cluster;
>>  use PVE::Corosync;
>> @@ -693,6 +694,30 @@ sub check_misc {
>>  
>>      check_backup_retention_settings();
>>      check_cifs_credential_location();
>> +
>> +    log_info("Check custom roles");
>> +    my $usercfg = PVE::Cluster::cfs_read_file("user.cfg");
>> +    foreach my $role (sort keys %{$usercfg->{roles}}) {
>> +	if (PVE::AccessControl::role_is_special($role)) {
>> +	    next;
>> +	}
>> +
>> +	if ($role eq "PVEPoolUser") {
>> +	    # the user created a custom role named PVEPoolUser
>> +	    log_fail("Custom role '$role' has a restricted name - a built-in role 'PVEPoolUser' will be available with the upgrade");
>> +	} else {
>> +	    log_pass("Custom role '$role' has no restricted name");
>> +	}
>> +
>> +	my $perms = $usercfg->{roles}->{$role};
>> +	if ($perms->{'Pool.Allocate'} && $perms->{'Pool.Audit'}) {
>> +	    log_pass("Custom role '$role' contains updated pool permissions");
> 
> that does not work for PVE 6.x, where Pool.Audit is not yet a valid 
> privilege, so gets dropped on parsing user.cfg ;)
> 
> so either we add it as valid privilege (without using it for anything) 
> in a new stable-6 branch, or we switch to lower-level parsing/checks 
> here.. the file format is pretty simple, so the following should 
> probably work for the purposes of the check:

did not try, but in theory you could also just mock the relevant subs in the pve 6
case to add that as valid priv there for this script only?





More information about the pve-devel mailing list