[pve-devel] [PATCH v3 access-control 1/2] fix #2079: add periodic auth key rotation

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Mar 14 10:49:36 CET 2019


On 3/13/19 3:01 PM, Fabian Gr├╝nbichler wrote:
> and modify checks to accept still valid tickets generated using the
> previous auth key.
> 
> the slightly complicated caching mechanism is needed for reading the key and
> its modification timestamp in one go while only reading and parsing it again if
> it has changed.
> 
> the +- 300 seconds fuzzing is kept for slightly out-of-sync clusters, since the
> time encoded in the tickets is the result of time() on whichever node the
> ticket API call got forwarded to.
> 
> Signed-off-by: Fabian Gr├╝nbichler <f.gruenbichler at proxmox.com>
> ---
> Notes:
>     VERSIONED DEPENDENCY: on pve-cluster with cfs_lock_authkey needed
>     
>     changes since v2:
>     - make error handling more readable
>     - disable rotation until PVE 6.0
>     
>     changes since v1:
>     - only clamp current key if cluster is quorate, warn otherwise but accept tickets.
>     - bump auth key lifetime to 24h
>     - add some newlines to warn statements
> 
>  PVE/AccessControl.pm | 218 +++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 198 insertions(+), 20 deletions(-)
> 
> diff --git a/PVE/AccessControl.pm b/PVE/AccessControl.pm
> index bdadfd2..19d008c 100644
> --- a/PVE/AccessControl.pm
> +++ b/PVE/AccessControl.pm
> @@ -9,6 +9,8 @@ use Net::SSLeay;
>  use Net::IP;
>  use MIME::Base64;
>  use Digest::SHA;
> +use IO::File;
> +use File::stat;
>  
>  use PVE::OTP;
>  use PVE::Ticket;
> [snip]
>  
> -    return $pve_auth_pub_key if $pve_auth_pub_key;
> +sub rotate_authkey {
> +    return if $authkey_lifetime == 0;
>  
> -    my $input = PVE::Tools::file_get_contents($authpubkeyfn);
> +    cfs_lock_authkey(undef, sub {

in the previous version you still had the Perl module PVE::Cluster prefix,
here not - but the "cfs_lock_authkey" method is not in PVE::Cluster's EXPORT,
nor in its EXPORT_OK and here in the import list?

One gets a non-ideal:
"Undefined subroutine &PVE::AccessControl::cfs_lock_authkey" error if trying to
login with this enabled (authkey_lifetime changed to non-zero)...

Did some last-minute modifications sneak in here? ;-)

> +	# re-check with lock to avoid double rotation in clusters
> +	return if check_authkey();
>  





More information about the pve-devel mailing list