[pve-devel] applied: [PATCH access-control 1/1] fix #233: return cluster name on successful login
Thomas Lamprecht
t.lamprecht at proxmox.com
Thu Nov 15 09:32:34 CET 2018
On 11/13/18 12:06 PM, Thomas Lamprecht wrote:
> If a cluster is configured then return the cluster name on successful
> login - if the user has Sys.Audit privileges on the '/' path (same
> as for returning cluster info, like the join info path uses)
>
> This is more for the reason that some admins do not want to expose
> this to lesser privileged (API) users. While yes, you can
> theoretically launch a (DDOS resembling) attack which stresses the
> corosync network if you know the cluster_name (it's still encrypted
> but you can back-calculate the multicast group membership info) you
> need to be able to send multicast traffic on the corosync LAN -
> which can be seen as a pretty big privilege anyway.
>
> But, for now reduce permissions - we can more easily loosen them than
> tighten without causing issues anyway.
>
> Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
> ---
> PVE/API2/AccessControl.pm | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/PVE/API2/AccessControl.pm b/PVE/API2/AccessControl.pm
> index 414da3a..93f384a 100644
> --- a/PVE/API2/AccessControl.pm
> +++ b/PVE/API2/AccessControl.pm
> @@ -7,6 +7,7 @@ use PVE::Exception qw(raise raise_perm_exc);
> use PVE::SafeSyslog;
> use PVE::RPCEnvironment;
> use PVE::Cluster qw(cfs_read_file);
> +use PVE::Corosync;
> use PVE::RESTHandler;
> use PVE::AccessControl;
> use PVE::JSONSchema qw(get_standard_option);
> @@ -246,6 +247,7 @@ __PACKAGE__->register_method ({
> username => { type => 'string' },
> ticket => { type => 'string', optional => 1},
> CSRFPreventionToken => { type => 'string', optional => 1 },
> + clustername => { type => 'string', optional => 1 },
> }
> },
> code => sub {
> @@ -277,6 +279,16 @@ __PACKAGE__->register_method ({
>
> $res->{cap} = &$compute_api_permission($rpcenv, $username);
>
> + if (PVE::Corosync::check_conf_exists(1)) {
> + if ($rpcenv->check($username, '/', ['Sys.Audit'], 1)) {
> + my $conf = cfs_read_file('corosync.conf');
> + my $totem = PVE::Corosync::totem_config($conf);
> + if ($totem->{cluster_name}) {
> + $res->{clustername} = $totem->{cluster_name};
> + }
> + }
> + }
> +
> PVE::Cluster::log_msg('info', 'root at pam', "successful auth for user '$username'");
>
> return $res;
>
applied this one
More information about the pve-devel
mailing list