Security Configuration: Difference between revisions

From OSNEXUS Online Documentation Site
Jump to navigation Jump to search
m QSTOR-6277: normalize all 20 screenshots to a single consistent 800px centered thumbnail so they do not fill the browser window until clicked
m EDR: OSNEXUS recommended GravityZone package modules and performance guidance
 
(23 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:admin_guide]]
[[Category:admin_guide]]


QuantaStor provides a layered set of security controls: grid-wide password and
QuantaStor provides a layered set of security controls: grid-wide password and login policy, role based access control over every management operation, multi-factor authentication, an integrated firewall, TLS certificate management, and endpoint detection and response agent deployment.  This page covers each of them.
login policy, role based access control over every management operation,
multi-factor authentication, an integrated firewall, TLS certificate
management, and endpoint detection and response agent deployment.  This page
covers each of them.


Many industries require compliance with government security standards covering
Many industries require compliance with government security standards covering everything from audit logging to password policies.  These include Health and Human Services security standards [https://www.hhs.gov/hipaa/index.html (HIPAA)], federal law enforcement security standards [https://www.fbi.gov/services/cjis/cjis-security-policy-resource-center (CJIS)], and the general standards outlined by NIST for Controlled Unclassified Information (CUI) in Non-Federal Information Systems and Organizations, covered in NIST 800-53 and [https://csrc.nist.gov/publications/detail/sp/800-171/rev-2/final 800-171].
everything from audit logging to password policies.  These include Health and
Human Services security standards [https://www.hhs.gov/hipaa/index.html (HIPAA)],
federal law enforcement security standards
[https://www.fbi.gov/services/cjis/cjis-security-policy-resource-center (CJIS)],
and the general standards outlined by NIST for Controlled Unclassified
Information (CUI) in Non-Federal Information Systems and Organizations, covered
in NIST 800-53 and
[https://csrc.nist.gov/publications/detail/sp/800-171/rev-2/final 800-171].


Nearly all of the settings on this page are reached from the '''Security''' tab
Nearly all of the settings on this page are reached from the '''Security''' tab of the QuantaStor web management interface, which contains these sections:
of the QuantaStor web management interface, which contains these sections:


* '''Management Users''' -- user accounts, password policy, and multi-factor authentication
{| class="wikitable"
* '''Management Groups''' -- user groups and their shared POSIX GID
! Security tab section !! Covers !! On this page
* '''Management Roles''' -- RBAC roles and their permission assignments
|-
* '''Object Users & Tenants''' -- S3/object storage users and tenants
| '''Management Users''' || User accounts, password policy, multi-factor authentication || [[#Security Settings Management|Security Settings]], [[#User Management|Users]], [[#Multi-factor Authentication|MFA]]
* '''Scale-out File & Block Keyrings''' -- keyrings for scale-out storage
|-
* '''Certificates''' -- the grid-wide TLS certificate inventory
| '''Management Groups''' || User groups and their shared POSIX GID || [[#User Group Management|User Groups]]
* '''Key Server Profiles''' -- external key server (KMIP) profiles
|-
* '''EDR Agents''' -- endpoint detection and response agents
| '''Management Roles''' || RBAC roles and their permission assignments || [[#Role Based Access Controls (RBAC)|RBAC]]
|-
| '''Object Users & Tenants''' || S3/object storage users and tenants || [[#Multitenancy / Resource Group Management|Multitenancy]]
|-
| '''Scale-out File & Block Keyrings''' || Keyrings for scale-out storage || not covered here
|-
| '''Certificates''' || The grid-wide TLS certificate inventory || [[#Certificate Management|Certificate Management]]
|-
| '''Key Server Profiles''' || External key server (KMIP) profiles || not covered here
|-
| '''EDR Agents''' || Endpoint detection and response agents || [[#Endpoint Detection & Response (EDR)|EDR]]
|}
 
Also on this page: [[#Firewall Configuration|Firewall Configuration]],
[[#SSL/TLS Certificate & Web Access Security|SSL/TLS and Web Access Security]],
[[#System Setup Security Checks|System Setup Security Checks]],
[[#Security Updates|Security Updates]] and
[[#Multi-admin Approvals|Multi-admin Approvals]].


== Security Settings Management ==
== Security Settings Management ==


[[File:security_manager_general.png|thumb|center|800px|Security Manager, General tab -- grid-wide password and login policy.]]
[[File:security_manager_general.png|thumb|right|530px|Security Manager, General tab -- grid-wide password and login policy.]]


The '''Security Manager''' holds the password and login policy for the entire
The '''Security Manager''' holds the password and login policy for the entire Storage Grid.  These settings apply to all user accounts on all systems in the grid, not per-system.
Storage Grid.  These settings apply to all user accounts on all systems in the
grid, not per-system.


'''Navigation:''' Security --> Management Users --> User --> Security Manager ''(toolbar)''
{{Navigation|Security → Management Users → User → Security Manager ''(toolbar)''}}


Choosing '''Suggested Defaults''' automatically configures the password and
Choosing '''Suggested Defaults''' automatically configures the password and lockout policies to meet the standards listed above.  This is the recommended starting point -- apply it first, then tune individual settings for the requirements of your deployment.  '''Discard Changes''' reverts the dialog to the currently saved policy.
lockout policies to meet the standards listed above.  This is the recommended
starting point -- apply it first, then tune individual settings for the
requirements of your deployment.  '''Discard Changes''' reverts the dialog to
the currently saved policy.


The '''General''' tab controls:
The '''General''' tab controls:
Line 60: Line 58:
* '''Default Login Username''' -- the username pre-filled on the login page.
* '''Default Login Username''' -- the username pre-filled on the login page.


The '''Multi-admin Approvals''' tab configures which operation types require a
The '''Multi-admin Approvals''' tab chooses which deletes are held until a set number of administrators approve them; see '''[[#Multi-admin Approvals|Multi-admin Approvals]]'''.
second administrator's approval before they run; approvals are then granted or
refused from the '''Multi-admin Approval''' group in the Security toolbar.


The '''Advanced Settings''' tab holds the '''Web Access Mode''' (see
The '''Advanced Settings''' tab holds the '''Web Access Mode''' (see '''[[#Web Access Mode|Web Access Mode]]'''), an optional '''System Use Notification''' banner shown to users at login, and the LDAP single-sign-on settings described next.
'''[[#Web Access Mode|Web Access Mode]]'''), an optional '''System Use
Notification''' banner shown to users at login, and the LDAP single-sign-on
settings described next.


'''Note:''' saving the Security Manager prompts a confirmation that the change
'''Note:''' saving a change to the password or login policy prompts a confirmation that the change may log users out of the interface and cause passwords to expire.  Plan policy changes accordingly.  Changes made only on the '''Multi-admin Approvals''' tab save without this prompt.
may log users out of the interface and cause passwords to expire.  Plan policy
changes accordingly.


=== LDAP Single-Sign-On Authentication ===
=== LDAP Single-Sign-On Authentication ===


[[File:security_manager_advanced.png|thumb|center|800px|Security Manager, Advanced Settings -- Web Access Mode and LDAP single sign-on.]]
[[File:security_manager_advanced.png|thumb|right|530px|Security Manager, Advanced Settings -- Web Access Mode and LDAP single sign-on.]]


The Advanced Settings tab can connect the Storage Grid to an LDAP or Active
The Advanced Settings tab can connect the Storage Grid to an LDAP or Active Directory domain for '''management user''' authentication.
Directory domain for '''management user''' authentication.


To configure this:
To configure this:


* In your LDAP/AD environment, create one or more groups for QuantaStor administration -- for example <code>QS-Administrator</code> and <code>QS-Monitor</code> -- and add the appropriate users to them.
* In your LDAP/AD environment, create one or more groups for QuantaStor administration -- for example {{Code|1=QS-Administrator}} and {{Code|1=QS-Monitor}} -- and add the appropriate users to them.
* In QuantaStor, edit the Role you want each LDAP group to map to and set its '''LDAP Group''' field.  For example set the '''Administrator''' role's LDAP Group to <code>QS-Administrator</code>, and the '''System Monitor''' role's to <code>QS-Monitor</code>.  The LDAP Group field is on the Create Role and Modify Role dialogs.
* In QuantaStor, edit the Role you want each LDAP group to map to and set its '''LDAP Group''' field.  For example set the '''Administrator''' role's LDAP Group to {{Code|1=QS-Administrator}}, and the '''System Monitor''' role's to {{Code|1=QS-Monitor}}.  The LDAP Group field is on the Create Role and Modify Role dialogs.
* Set your DNS and NTP servers to point at your AD server, in the Storage System Modify dialog.  Do this '''before''' enabling single sign-on.
* Set your DNS and NTP servers to point at your AD server, in the Storage System Modify dialog.  Do this '''before''' enabling single sign-on.
* Return to Security Manager --> Advanced Settings, tick '''Enable Single Sign-on''', and fill in the LDAP settings.  The two fields are greyed out until the checkbox is ticked.
* Return to Security Manager --> Advanced Settings, tick '''Enable Single Sign-on''', and fill in the LDAP settings.  The two fields are greyed out until the checkbox is ticked.
Line 89: Line 79:
The LDAP fields are:
The LDAP fields are:


* '''LDAP Server (FQDN)''' -- the fully qualified domain name of the LDAP/AD server, for example <code>dc01.example.com</code>
* '''LDAP Server (FQDN)''' -- the fully qualified domain name of the LDAP/AD server, for example {{Code|1=dc01.example.com}}
* '''LDAP Server Base DN for Users''' -- the base DN under which user accounts are searched, for example <code>dc=example,dc=com</code>
* '''LDAP Server Base DN for Users''' -- the base DN under which user accounts are searched, for example {{Code|1=dc=example,dc=com}}


This integration provides single sign-on for '''administrative''' access to the
This integration provides single sign-on for '''administrative''' access to the Storage Grid via the QuantaStor web interface, CLI, and REST API.  It does '''not''' provide Active Directory integration for SMB network share access. For that, join each system to the domain via '''Storage Management --> Storage Systems --> Active Directory ''(toolbar)'' --> Join AD Domain'''.
Storage Grid via the QuantaStor web interface, CLI, and REST API.  It does
'''not''' provide Active Directory integration for SMB network share access.
For that, join each system to the domain via '''Storage Management --> Storage
Systems --> Active Directory ''(toolbar)'' --> Join AD Domain'''.


=== Audit Logging ===
=== Audit Logging ===


Audit logging of management operations is on by default on all QuantaStor
Audit logging is always on. Every management operation, login attempt and authorization decision is recorded in {{Code|1=/var/log/qs/qs_audit.log}} on the appliance that handled it. Starting with QuantaStor 7.0 the records are RFC 5424 syslog records, signed with a chained HMAC-SHA256 so that tampering can be detected with {{Code|1=qs audit-log-verify}}. The record format, facility settings, rotation, verification, SIEM forwarding and the Audit Log Analyzer are covered on their own page: '''[[Audit Logging]]'''.
systems and cannot be disabled. Every API, CLI, and web interface operation
 
passes through the same core service and is recorded.
=== Sending Logs to Support ===
 
QuantaStor can collect and upload system logs to OSNEXUS Support, scrubbing usernames and other security related information first so that no personally-identifiable information is transmitted, and never including data files from Storage Pools. That makes the collection GDPR compliant.
 
Full detail is on its own page: '''[[Send System Log Report|Sending Logs to Support]]'''.
 
== Multi-admin Approvals ==
 
Multi-admin approvals stop a single administrator from destroying data on their own. When the policy covers an object type, a delete of that type does not run when it is requested. QuantaStor holds it as a pending request until enough other administrators approve it, and only then carries out the delete. A mistaken click, a compromised administrator account or a lone insider can therefore no longer remove a pool, volume, share or bucket unnoticed.
 
The policy is part of the grid-wide password and login policy held by the [[#Security Settings Management|Security Manager]], so it applies to every system in the Storage Grid.
 
=== Enabling multi-admin approvals ===
 
[[File:security_madm_policy.png|thumb|right|532px|Security Manager, Multi-admin Approvals tab -- the approval count, the expiry and the object types whose deletes need approval.]]
 
{{Navigation|Security &rarr; Management Users &rarr; User &rarr; Security Manager ''(toolbar)'' &rarr; Multi-admin Approvals ''(tab)''}}
 
Tick '''Enable Multi-admin Approvals''', then set the two fields under '''Approval Settings''' and choose the object types under '''Required Approval Types'''.
 
* '''Minimum Approvals''' -- how many administrators must agree to a delete, '''counting the administrator who requested it'''. The default and the minimum are both 2, which means one other administrator has to approve. Set 3 to require two approvers besides the requester.
* '''Hours Until Auto-expiration''' -- how long a request stays open for approval. The default and the minimum are both 48 hours, so a request raised on a Friday is still open on Monday. An expired request can no longer be approved; request the delete again to start over.
* '''Required Approval Types''' -- the deletes that need approval. '''Select All''' and '''Clear All''' tick or clear the whole list.
 
{| class="wikitable"
! Required Approval Type !! Held for approval
|-
| Storage Volume : Delete || Deleting a Storage Volume, including a volume snapshot
|-
| Network Share : Delete || Deleting a Network Share
|-
| Bucket : Delete || Deleting an object storage bucket
|-
| Scale-up Storage Pool : Delete || Deleting a ZFS-based [[Storage Pools|Storage Pool]]
|-
| Scale-out Block Pool : Delete || Deleting a Ceph block storage pool
|-
| Scale-out File Pool : Delete || Deleting a Ceph file system
|-
| Scale-out Object Pool : Delete || Deleting an object storage pool group
|-
| Object Storage Class : Delete || Deleting an object storage class
|-
| Ceph Cluster : Delete || Deleting a Ceph cluster
|}
 
Tick at least one type. With the checkbox enabled but no type ticked, nothing is held for approval, and the tab shows the feature as disabled the next time you open it.
 
To turn the feature off, clear '''Enable Multi-admin Approvals''' and click '''OK'''. Requests that are already open stay in the list until they are approved, rejected or expire.
 
Saving changes that touch only this tab does not raise the Security Manager's "may log users out" confirmation, because approval settings do not affect sessions or passwords.


The audit log is at:
=== How a held delete proceeds ===


<pre>
# '''An administrator requests the delete''' in the usual way. Instead of deleting, the task completes with a description such as ''"Multi-admin approval pending for Storage Volume 'vol1' (1 of 2 approvals met). The delete will proceed once the required number of approvals is met."'' The object stays in place, and its state detail reads ''"Delete requested, pending approvals."''
/var/log/qs/qs_audit.log
# '''Other administrators approve it''' from the '''Approve''' dialog described below. Each approval raises the count by one.
</pre>
# '''When the count reaches Minimum Approvals''', the request becomes approved and QuantaStor starts the delete straight away as a new task, run as the administrator who requested it. The options chosen with the original request carry through. For example, a Storage Pool delete keeps its '''Shred Encryption Keys''' and '''Shred Data''' choices.
# '''QuantaStor records the result.''' The request is marked completed once the object is gone, or failed if the object still exists after the delete task has finished.
 
A few rules apply throughout:
 
* '''The requester cannot approve their own request''', and each administrator can approve a request only once.
* '''One request per object.''' QuantaStor keeps a single open request for each object and operation. When a different administrator requests the same delete again, that counts as their approval rather than opening a second request. If the original requester issues the same delete again, it is refused, because they cannot approve their own request.
* '''Rejecting ends the request.''' Any administrator can reject an open request, and the delete does not happen. To delete the object later, start a new request.
* '''Expired requests are closed automatically.''' QuantaStor checks for expired requests periodically, so a request can still show as pending for a short time after its expiry time. It cannot be approved once it has expired.
 
=== Approving and rejecting requests ===
 
[[File:security_madm_approve.png|thumb|right|800px|Multi-admin Approval Request. Select one or more pending requests, then click Approve.]]
 
{{Navigation|Security &rarr; Management Users &rarr; Multi-admin Approval ''(toolbar group)'' &rarr; Approve}}
 
The '''Approve''' dialog lists every request still waiting for approval under '''Pending Multi-admin Approval Requests'''. For each request it shows the object's name, type and ID, the '''Request Status''', the '''Required Count''' and '''Current Count''', the '''Request Originator''' and the '''Expires Time'''. Select one or more requests and click '''Approve''', then confirm.
 
To refuse a request instead, open '''Reject''' from the same toolbar group. It lists the same pending requests. Select the ones to stop and click '''Reject'''.
 
Approving and rejecting need the '''Administrator''' role, or a custom role granted the approve and reject operations on the ''PendingOperationRequest'' object type. The built-in '''Security Administrator''' role does not currently include them (see [[#Role Based Access Controls (RBAC)|Role Based Access Controls]]).
 
You can approve from any system in the grid. QuantaStor forwards each approval to the system that owns the request, and the delete itself runs on the system that owns the object.


It is written in a NIST compliant CEE JSON format, one JSON object per line, so
=== Request status ===
it can be ingested directly by a log aggregator or SIEM without custom parsing.
Each record identifies the operation, the user account that invoked it, the
source address, and the outcome.


To ship the audit log to a central collector, point your syslog or log agent at
{| class="wikitable"
this file; QuantaStor does not rotate it out from under a reader.
! Status !! Meaning
|-
| Pending || Waiting for approvals. It can be approved or rejected.
|-
| Approved || Enough approvals have been received. The delete is about to start.
|-
| Running || The delete task is running.
|-
| Completed Success || The delete finished and the object is gone.
|-
| Completed Failed || The delete ran but the object still exists, or the object or the requesting user no longer existed when the delete was due to run.
|-
| Rejected || An administrator rejected the request. The delete did not run.
|-
| Expired || The request reached its expiry time before it was approved.
|}


=== GDPR Compliant Secure Log Send ===
QuantaStor removes finished requests (completed, rejected and expired) automatically after 48 hours.


[[File:security_send_support_logs.png|thumb|center|800px|Send Support Log Files dialog.]]
=== Multi-admin approvals from the CLI ===


QuantaStor has a '''Send Support Logs''' feature which sends system logs for
Set the policy with <code>qs password-policy-set</code>. The object types are the internal type names, comma separated: {{Code|1=StorageVolume}}, {{Code|1=NetworkShare}}, {{Code|1=Bucket}}, {{Code|1=StoragePool}}, {{Code|1=CephPool}}, {{Code|1=CephFilesystem}}, {{Code|1=CephObjectPoolGroup}}, {{Code|1=CephObjectStorageClass}} and {{Code|1=CephCluster}}. Give the count and expiry explicitly: the CLI does not apply the minimums the web interface enforces. To turn the feature off from the CLI, clear the type list and set the count and expiry to 0 in one command, which is what clearing '''Enable Multi-admin Approvals''' in the Security Manager does.
the selected systems to OSNEXUS Support.


'''Navigation:''' Storage Management --> Send Support Logs ''(toolbar)''
<pre style="font-size: smaller">
qs password-policy-set --multiadmin-approval-types=StorageVolume,NetworkShare,StoragePool --multiadmin-approval-count=2 --multiadmin-approval-expiration-hours=48
qs password-policy-set --multiadmin-approval-types="" --multiadmin-approval-count=0 --multiadmin-approval-expiration-hours=0
</pre>


The dialog lets you select which Storage Systems to collect from -- the grid
Manage requests with the {{Code|1=por-*}} (por refers to pending-object-request) commands. <code>qs por-list</code> shows each request's object, status ({{Code|1=pending}}, {{Code|1=approved}}, {{Code|1=running}}, {{Code|1=completed-success}}, {{Code|1=completed-failed}}, {{Code|1=rejected}} or {{Code|1=expired}}), current and required counts, expiry time and request ID, and <code>qs por-approve</code> and <code>qs por-reject</code> take a comma-separated list of request IDs:
shows each system's service, kernel, and distribution version -- and record the
'''Support Ticket''' number, a '''Contact Email''', and a '''Message/Reason'''
so the bundle arrives attached to the right case.  '''Skip log server ping
pre-checks''' is available for environments where the outbound connectivity
test does not reflect actual reachability.


The collection gathers syslog, system hardware configuration information, and
<pre style="font-size: smaller">
much of what is found under <code>/var/log/</code>.  To ensure no
qs por-list
personally-identifiable information (PII) is sent, the log collection scrubs
qs por-get --request-id=<request-id>
usernames and other security related information before the logs are
qs por-approve --request-ids=<request-id>,<request-id>
transmitted, for GDPR compliance. QuantaStor log collection '''never'''
qs por-reject --request-ids=<request-id>
collects data files from Storage Pools -- only system log and configuration
qs por-clear-all
files.
</pre>
 
<code>qs por-clear-all</code> removes every finished request (completed, rejected and expired) without waiting for the 48-hour automatic cleanup. It leaves pending requests alone.


== Role Based Access Controls (RBAC) ==
== Role Based Access Controls (RBAC) ==


[[File:security_roles_section.png|thumb|center|800px|Management Roles section with the default roles.]]
[[File:security_roles_section.png|thumb|right|800px|Management Roles section with the default roles.]]


QuantaStor's '''R'''ole '''B'''ased '''A'''ccess '''C'''ontrol system lets IT
QuantaStor's '''R'''ole '''B'''ased '''A'''ccess '''C'''ontrol system lets IT and security administrators grant access limited to a job function, following the [https://en.wikipedia.org/wiki/Principle_of_least_privilege principle of least privilege].
and security administrators grant access limited to a job function, following
the [https://en.wikipedia.org/wiki/Principle_of_least_privilege principle of
least privilege].


The RBAC system is highly granular.  Each '''permission''' has three parts:
The RBAC system is highly granular.  Each '''permission''' has three parts:
Line 157: Line 223:
* a '''scope''' -- system, resource group, user, or none
* a '''scope''' -- system, resource group, user, or none


Every QuantaStor API, CLI, and web interface command goes through the same core
Every QuantaStor API, CLI, and web interface command goes through the same core service, and every call passes an authentication and an authorization check. Because of that shared path, RBAC applies uniformly no matter how the account connects -- web interface, {{Code|1=qs}} CLI, or REST API.
service, and every call passes an authentication and an authorization check.
Because of that shared path, RBAC applies uniformly no matter how the account
connects -- web interface, <code>qs</code> CLI, or REST API.


This granularity is especially useful for automation: a dedicated account can
This granularity is especially useful for automation: a dedicated account can be created for a script whose role permits only the task it performs, such as creating and deleting a nightly snapshot of a Network Share.
be created for a script whose role permits only the task it performs, such as
creating and deleting a nightly snapshot of a Network Share.


QuantaStor ships with four default roles:
QuantaStor ships with four default roles:
Line 175: Line 236:
=== Role Management ===
=== Role Management ===


[[File:security_role_create.png|thumb|center|800px|Create Role, showing the permission assignment grid.]]
[[File:security_role_create.png|thumb|right|570px|Create Role, showing the permission assignment grid.]]


'''Navigation:''' Security --> Management Roles --> Role --> Create ''(toolbar)''
{{Navigation|Security &rarr; Management Roles &rarr; Role &rarr; Create ''(toolbar)''}}


Each user is assigned a single Role, and a role change takes effect
Each user is assigned a single Role, and a role change takes effect immediately.  If a user logged in as '''Administrator''' has their role changed to '''System Monitor''', which has only view permissions, the new permissions apply to their next action.  Tasks already running -- a Storage Volume create, for example -- complete at the authorization level held when the task started.
immediately.  If a user logged in as '''Administrator''' has their role changed
to '''System Monitor''', which has only view permissions, the new permissions
apply to their next action.  Tasks already running -- a Storage Volume create,
for example -- complete at the authorization level held when the task started.


The Create Role dialog takes a '''Name''', a '''Description''', and an
The Create Role dialog takes a '''Name''', a '''Description''', and an optional '''LDAP Group''' used for '''[[#LDAP Single-Sign-On Authentication|single sign-on]]'''.
optional '''LDAP Group''' used for
'''[[#LDAP Single-Sign-On Authentication|single sign-on]]'''.


Because a role carries hundreds of individual permissions, the dialog provides
Because a role carries hundreds of individual permissions, the dialog provides two shortcuts:
two shortcuts:


* '''Copy Permissions from Role''' -- start from an existing role's permission set (pick the source role in the adjacent dropdown) and adjust from there.  This is by far the fastest way to build a new role.
* '''Copy Permissions from Role''' -- start from an existing role's permission set (pick the source role in the adjacent dropdown) and adjust from there.  This is by far the fastest way to build a new role.
* '''Apply Permission Scope to Selected''' -- tick a set of rows in the grid, choose a scope, and apply it to all of them at once.
* '''Apply Permission Scope to Selected''' -- tick a set of rows in the grid, choose a scope, and apply it to all of them at once.


The '''Web Interface Customization''' tab hides web interface tab panels and
The '''Web Interface Customization''' tab hides web interface tab panels and sections for every user holding the role -- the same mechanism described under '''[[#Web Interface Customization|Web Interface Customization]]''', but applied per role rather than per user.
sections for every user holding the role -- the same mechanism described under
'''[[#Web Interface Customization|Web Interface Customization]]''', but applied
per role rather than per user.


=== Role Permissions - Object Types ===
=== Role Permissions - Object Types ===


The '''Permission Assignments''' grid lists every permission as a row of
The '''Permission Assignments''' grid lists every permission as a row of '''Object Type''', '''Operation''', and '''Permission Scope'''.
'''Object Type''', '''Operation''', and '''Permission Scope'''.


On QuantaStor 6.9 there are '''207 object types''' and '''662 individual
There are '''207 object types''' and '''662 individual permissions''', covering everything from the common types such as Storage Volume, Network Share, and Object Bucket through to internal types such as Acl, AlertConfiguration, and TargetPort.
permissions''', covering everything from the common types such as Storage
Volume, Network Share, and Object Bucket through to internal types such as
Acl, AlertConfiguration, and TargetPort.


Because that list is long, use the '''<Show All Object Types>''' filter above
Because that list is long, use the '''<Show All Object Types>''' filter above the grid to narrow it to the object type you are working on, then set the operations for that type.
the grid to narrow it to the object type you are working on, then set the
operations for that type.


=== Role Permissions - Operation Types ===
=== Role Permissions - Operation Types ===


Every permission is a combination of an object type and an '''operation''' that
Every permission is a combination of an object type and an '''operation''' that can be performed on it.  Across the default Administrator role there are 120 distinct operations; the most common are '''view''', '''modify''', '''create''', and '''delete''', with more specific ones such as '''add''', '''remove''', '''rescan''', '''enable''', '''disable''', '''identify''', '''set''', and '''clear''' on the object types that support them.
can be performed on it.  Across the default Administrator role there are 120
distinct operations; the most common are '''view''', '''modify''', '''create''',
and '''delete''', with more specific ones such as '''add''', '''remove''',
'''rescan''', '''enable''', '''disable''', '''identify''', '''set''', and
'''clear''' on the object types that support them.


This per-operation granularity is what lets a role fit a job function.  A
This per-operation granularity is what lets a role fit a job function.  A "Provisioning Administrator" role, for example, can be given '''create''' but not '''delete''', so the routine task of provisioning storage can be delegated without the risk of data deletion.
"Provisioning Administrator" role, for example, can be given '''create''' but
not '''delete''', so the routine task of provisioning storage can be delegated
without the risk of data deletion.


All object types also have a '''view''' permission, and this one deserves
All object types also have a '''view''' permission, and this one deserves attention: some parts of the web management interface require view permission on a type in order to function.  Removing '''view''' is useful when a role should have no visibility of a type at all -- an administrator responsible only for Network Shares could have '''view''' on '''StorageVolume''' set to '''None''', so that no Storage Volumes are visible to them.
attention: some parts of the web management interface require view permission
on a type in order to function.  Removing '''view''' is useful when a role
should have no visibility of a type at all -- an administrator responsible only
for Network Shares could have '''view''' on '''StorageVolume''' set to
'''None''', so that no Storage Volumes are visible to them.


=== Role Permissions - Operation Scope ===
=== Role Permissions - Operation Scope ===


Each permission's '''scope''' determines the breadth of the grant.  Click a
Each permission's '''scope''' determines the breadth of the grant.  Click a '''Permission Scope''' cell in the grid to change it.
'''Permission Scope''' cell in the grid to change it.


* '''Global/System''' -- grid-wide access to the operation on all systems.
* '''Global/System''' -- grid-wide access to the operation on all systems.
Line 246: Line 277:
== User Management ==
== User Management ==


[[File:security_users_section.png|thumb|center|800px|Security tab, Management Users section.]]
[[File:security_users_section.png|thumb|right|800px|Security tab, Management Users section.]]


Users in QuantaStor are '''management users''' -- accounts with access to the
Users in QuantaStor are '''management users''' -- accounts with access to the management interface under a specific Role.
management interface under a specific Role.


These accounts are also created as local (Linux/Unix) users on '''every'''
These accounts are also created as local (Linux/Unix) users on '''every''' Storage System in the grid, with the same POSIX UID and GID on each.  This enables management accounts to be used for SMB file access, which matters in environments where AD/LDAP is not configured, or where direct non-AD user access is needed.
Storage System in the grid, with the same POSIX UID and GID on each.  This
enables management accounts to be used for SMB file access, which matters in
environments where AD/LDAP is not configured, or where direct non-AD user
access is needed.


For security, the local accounts created for SMB access are given
For security, the local accounts created for SMB access are given {{Code|1=/usr/sbin/nologin}} as their shell, so they cannot log in over SSH or at the console.  By default the only accounts with a login shell are '''qadmin''' and '''root''', and those should be reserved for maintenance activities.  That restriction can be overridden with standard Linux user management commands, but doing so widens your attack surface and is not recommended.
<code>/usr/sbin/nologin</code> as their shell, so they cannot log in over SSH or at the
console.  By default the only accounts with a login shell are '''qadmin''' and
'''root''', and those should be reserved for maintenance activities.  That
restriction can be overridden with standard Linux user management commands, but
doing so widens your attack surface and is not recommended.


=== Adding New Users ===
=== Adding New Users ===


[[File:security_user_add.png|thumb|center|800px|Add User dialog, General tab.]]
[[File:security_user_add.png|thumb|right|610px|Add User dialog, General tab.]]


'''Navigation:''' Security --> Management Users --> User --> Add ''(toolbar)''
{{Navigation|Security &rarr; Management Users &rarr; User &rarr; Add ''(toolbar)''}}


The '''General''' tab takes:
The '''General''' tab takes:
Line 278: Line 299:
* '''User Information''' -- optional First Name, Last Name, and Description.
* '''User Information''' -- optional First Name, Last Name, and Description.


The default '''admin''' account can be modified but cannot be deleted, and
The default '''admin''' account can be modified but cannot be deleted, and cannot be assigned any role other than '''Administrator'''.
cannot be assigned any role other than '''Administrator'''.


A newly created user appears in the Users grid with its assigned Role and the
A newly created user appears in the Users grid with its assigned Role and the POSIX User ID allocated to it, and the matching local account exists on every system in the grid immediately.
POSIX User ID allocated to it, and the matching local account exists on every
system in the grid immediately.


==== Alert Subscriptions ====
==== Alert Subscriptions ====


[[File:security_user_alerts.png|thumb|center|800px|Add User, Alert Subscriptions tab.]]
[[File:security_user_alerts.png|thumb|right|610px|Add User, Alert Subscriptions tab.]]


Entering a user's email address and selecting the alert severity levels to
Entering a user's email address and selecting the alert severity levels to subscribe to routes email alerts to that administrator.  Several users can subscribe at different severities, so that (for example) only critical alerts page the on-call administrator while an operations mailbox receives everything.
subscribe to routes email alerts to that administrator.  Several users can
subscribe at different severities, so that (for example) only critical alerts
page the on-call administrator while an operations mailbox receives everything.


Once configured, use the '''Alert Manager''' to send a test alert and confirm
Once configured, use the '''Alert Manager''' to send a test alert and confirm delivery end to end.
delivery end to end.


==== Web Interface Customization ====
==== Web Interface Customization ====


[[File:security_user_webcustom.png|thumb|center|800px|Add User, Web Interface Customization tab.]]
[[File:security_user_webcustom.png|thumb|right|610px|Add User, Web Interface Customization tab.]]


In larger deployments with many administrators, or on systems built for a
In larger deployments with many administrators, or on systems built for a narrow use case, it can help to hide the interface tab panels and sections a given user does not need.  This reduces complexity and makes the interface clearer for admins with a narrow remit.
narrow use case, it can help to hide the interface tab panels and sections a
given user does not need.  This reduces complexity and makes the interface
clearer for admins with a narrow remit.


Un-check the panels and sections to hide them.  The user must '''log out and
Un-check the panels and sections to hide them.  The user must '''log out and back in''' for the customized layout to take effect.
back in''' for the customized layout to take effect.


The same customization can be applied to a Role instead of an individual user,
The same customization can be applied to a Role instead of an individual user, which is usually preferable when several people share a job function -- see '''[[#Role Management|Role Management]]'''.
which is usually preferable when several people share a job function -- see
'''[[#Role Management|Role Management]]'''.


==== User Account Advanced Settings ====
==== User Account Advanced Settings ====


[[File:security_user_advanced.png|thumb|center|800px|Add User, Advanced Settings tab.]]
[[File:security_user_advanced.png|thumb|right|610px|Add User, Advanced Settings tab.]]


The '''Advanced Settings''' tab holds three things:
The '''Advanced Settings''' tab holds three things:
Line 321: Line 329:
* '''User Default CHAP settings''' -- a '''CHAP User''' and '''CHAP Password''' used as this account's defaults for iSCSI authentication.
* '''User Default CHAP settings''' -- a '''CHAP User''' and '''CHAP Password''' used as this account's defaults for iSCSI authentication.
* '''Customize UID/GID''' -- tick this to set an explicit '''POSIX UID''' and '''POSIX GID''' rather than letting QuantaStor allocate them.  Set these deliberately when the account is used for SMB and NFS access and must match UIDs already in use elsewhere in your environment; the fields are greyed out until the box is ticked.
* '''Customize UID/GID''' -- tick this to set an explicit '''POSIX UID''' and '''POSIX GID''' rather than letting QuantaStor allocate them.  Set these deliberately when the account is used for SMB and NFS access and must match UIDs already in use elsewhere in your environment; the fields are greyed out until the box is ticked.
* '''Enable '[QSCLITKN]' token based authentication for QS CLI via 'root' console account''' -- lets someone logged into a QuantaStor system as '''root''' run <code>qs</code> CLI commands without supplying a password each time.
* '''Enable '[QSCLITKN]' token based authentication for QS CLI via 'root' console account''' -- lets someone logged into a QuantaStor system as '''root''' run {{Code|1=qs}} CLI commands without supplying a password each time.


To use the token authentication, tick that checkbox for the account, then, as
To use the token authentication, tick that checkbox for the account, then, as '''root''' on the system, write a {{Code|1=~/.qs.cnf}} naming the account:
'''root''' on the system, write a <code>~/.qs.cnf</code> naming the account:


<pre>
<pre style="font-size: smaller">
echo "localhost,admin,[QSCLITKN]" > ~/.qs.cnf
echo "localhost,admin,[QSCLITKN]" > ~/.qs.cnf
</pre>
</pre>


Replace <code>admin</code> with whichever account you enabled the option for.
Replace {{Code|1=admin}} with whichever account you enabled the option for.


'''Note:''' the first one or two <code>qs</code> commands after creating this file fail
'''Note:''' the first one or two {{Code|1=qs}} commands after creating this file fail with ''"Service authentication token check failed ... remote caller will update token"'' while the token is being established.  This is expected -- retry and the command succeeds, after which authentication is transparent.
with ''"Service authentication token check failed ... remote caller will update
token"'' while the token is being established.  This is expected -- retry and
the command succeeds, after which authentication is transparent.


The same mechanism can be used with a remote host rather than <code>localhost</code> by
The same mechanism can be used with a remote host rather than {{Code|1=localhost}} by changing the first field.
changing the first field.


=== Modifying Users ===
=== Modifying Users ===


[[File:security_user_modify.png|thumb|center|800px|Modify User dialog.]]
[[File:security_user_modify.png|thumb|right|610px|Modify User dialog.]]


'''Navigation:''' Security --> Management Users --> ''select a user'' --> User --> Modify ''(toolbar)''
{{Navigation|Security &rarr; Management Users &rarr; ''select a user'' &rarr; User &rarr; Modify ''(toolbar)''}}


The Modify User dialog exposes the same settings as Create User across the same
The Modify User dialog exposes the same settings as Create User across the same four tabs, so a user's role, alert subscriptions, interface customization, and advanced settings can all be changed after the fact.  Changes take effect on the user's next action.
four tabs, so a user's role, alert subscriptions, interface customization, and
advanced settings can all be changed after the fact.  Changes take effect on
the user's next action.


To change only a password, use '''Set Password''' from the User group in the
To change only a password, use '''Set Password''' from the User group in the toolbar rather than the full Modify dialog.
toolbar rather than the full Modify dialog.


More information: [[User_Modify|Modify User]].
More information: [[User_Modify|Modify User]].
Line 358: Line 357:
=== Removing Users ===
=== Removing Users ===


[[File:security_user_remove.png|thumb|center|800px|Remove User dialog.]]
[[File:security_user_remove.png|thumb|right|390px|Remove User dialog.]]


'''Navigation:''' Security --> Management Users --> ''select a user'' --> User --> Remove ''(toolbar)''
{{Navigation|Security &rarr; Management Users &rarr; ''select a user'' &rarr; User &rarr; Remove ''(toolbar)''}}


The dialog confirms the '''Username''' and shows the account's properties
The dialog confirms the '''Username''' and shows the account's properties before removal.
before removal.


Removal takes effect immediately and grid-wide.  A user who is logged into the
Removal takes effect immediately and grid-wide.  A user who is logged into the web interface when their account is removed loses access to all systems in the grid at once, and the matching local POSIX account is deleted from every Storage System.
web interface when their account is removed loses access to all systems in the
grid at once, and the matching local POSIX account is deleted from every
Storage System.


The default '''admin''' account cannot be removed.
The default '''admin''' account cannot be removed.
Line 376: Line 371:
== User Group Management ==
== User Group Management ==


[[File:security_usergroup_create.png|thumb|center|800px|Create User Group dialog.]]
[[File:security_usergroup_create.png|thumb|right|534px|Create User Group dialog.]]


User Groups collect users under a common POSIX GID, which is useful when
User Groups collect users under a common POSIX GID, which is useful when several users need to be owners of the same Network Share.
several users need to be owners of the same Network Share.


'''Navigation:''' Security --> Management Groups --> User Group --> Create ''(toolbar)''
{{Navigation|Security &rarr; Management Groups &rarr; User Group &rarr; Create ''(toolbar)''}}


The Create User Group dialog takes a '''Name''', an optional
The Create User Group dialog takes a '''Name''', an optional '''Description''', an optional '''POSIX GID''' (allocated automatically if left blank), and a grid from which to '''select one or more users for the group'''.
'''Description''', an optional '''POSIX GID''' (allocated automatically if left
blank), and a grid from which to '''select one or more users for the group'''.


Group membership can be changed later with '''Add/Remove Users''', and the
Group membership can be changed later with '''Add/Remove Users''', and the group's other properties with '''Modify'''.  '''Delete''' removes the group; the user accounts themselves are unaffected.
group's other properties with '''Modify'''.  '''Delete''' removes the group;
the user accounts themselves are unaffected.


== Multitenancy / Resource Group Management ==
== Multitenancy / Resource Group Management ==


[[File:security_multitenancy.png|thumb|center|800px|Multitenancy tab.]]
[[File:security_multitenancy.png|thumb|right|800px|Multitenancy tab.]]


Resource Groups are multi-tenant containers that group users together with
Resource Groups are multi-tenant containers that group users together with resources -- [[Storage Volumes]], [[Network Shares]] -- and with provisioning quotas for self-service provisioning from Storage Pools.
resources -- Storage Volumes, Network Shares -- and with provisioning quotas
for self-service provisioning from Storage Pools.


'''Navigation:''' Multitenancy ''(main tab)''
{{Navigation|Multitenancy ''(main tab)''}}


The '''Resource Group''' toolbar group provides '''Add/Remove Users''',
The '''Resource Group''' toolbar group provides '''Add/Remove Users''', '''Add/Remove Tenants''', '''Add/Remove Service Configs''', and '''Add Network Association''' / '''Remove Network Association''' for binding a group to specific networks.  The '''Provisioning Quota''' group provides '''Create''', '''Modify''', and '''Delete''' for quotas, plus '''Add/Remove Volumes''' and '''Add/Remove Shares''' to place resources into a group.
'''Add/Remove Tenants''', '''Add/Remove Service Configs''', and '''Add Network
Association''' / '''Remove Network Association''' for binding a group to
specific networks.  The '''Provisioning Quota''' group provides '''Create''',
'''Modify''', and '''Delete''' for quotas, plus '''Add/Remove Volumes''' and
'''Add/Remove Shares''' to place resources into a group.


Users assigned to a Resource Group should hold a role whose permissions are
Users assigned to a Resource Group should hold a role whose permissions are scoped to '''Resource Group''' rather than '''Global/System''', so that their view of the grid is limited to the resources in their group.  The '''Object Tenant Admin''' role is the shipped starting point for object storage tenants; for file and block multi-tenancy, create a role with the permissions you want at '''Resource Group''' scope -- see '''[[#Role Permissions - Operation Scope|Operation Scope]]'''.
scoped to '''Resource Group''' rather than '''Global/System''', so that their
view of the grid is limited to the resources in their group.  The
'''Object Tenant Admin''' role is the shipped starting point for object storage
tenants; for file and block multi-tenancy, create a role with the permissions
you want at '''Resource Group''' scope -- see
'''[[#Role Permissions - Operation Scope|Operation Scope]]'''.


Further information: [[Create_Resource_Group|Create a Resource Group]].
Further information: [[Create_Resource_Group|Create a Resource Group]].
== System Setup Security Checks ==
== System Setup Security Checks ==


The steps in this section are the minimum hardening pass for a newly deployed
The steps in this section are the minimum hardening pass for a newly deployed QuantaStor system.  All of them should be completed before the system carries production data.
QuantaStor system.  All of them should be completed before the system carries
production data.


# Change the '''qadmin''' console password from its default.
# Change the '''qadmin''' console password from its default.
Line 433: Line 408:
=== Change Passwords ===
=== Change Passwords ===


QuantaStor ships with two default accounts that must both be changed.  They are
QuantaStor ships with two default accounts that must both be changed.  They are separate accounts with separate passwords: '''qadmin''' is the console/SSH account, '''admin''' is the management interface account.
separate accounts with separate passwords: '''qadmin''' is the console/SSH
account, '''admin''' is the management interface account.


==== Change SSH Console Administrator Account 'qadmin' Password ====
==== Change SSH Console Administrator Account 'qadmin' Password ====


One of the most important steps in configuring a new QuantaStor system is
One of the most important steps in configuring a new QuantaStor system is changing the '''qadmin''' console password from its default of '''qadmin''' on each Storage System.
changing the '''qadmin''' console password from its default of '''qadmin''' on
each Storage System.


Log in at the console as '''qadmin''', or connect over '''SSH''' as
Log in at the console as '''qadmin''', or connect over '''SSH''' as '''qadmin''', then run:
'''qadmin''', then run:


<pre>
<pre style="font-size: smaller">
passwd
passwd
</pre>
</pre>


Choose a strong password containing upper and lower case letters, numbers, and
Choose a strong password containing upper and lower case letters, numbers, and symbols.  Repeat this on every Storage System in the grid -- this is a local console account, so changing it on one system does not change it on the others.
symbols.  Repeat this on every Storage System in the grid -- this is a local
console account, so changing it on one system does not change it on the others.


Note that this password is independent of the grid password policy configured
Note that this password is independent of the grid password policy configured in the Security Manager, which governs '''management''' users only.
in the Security Manager, which governs '''management''' users only.


==== Change Management Administrator Account 'admin' Password ====
==== Change Management Administrator Account 'admin' Password ====


[[File:security_set_password.png|thumb|center|800px|Set Password dialog.]]
[[File:security_set_password.png|thumb|right|361px|Set Password dialog.]]


Log in to the web management interface as '''admin''' and change the default
Log in to the web management interface as '''admin''' and change the default password, which is '''password'''.
password, which is '''password'''.


'''Navigation:''' Security --> Management Users --> ''select the'' admin ''user'' --> User --> Set Password ''(toolbar)''
{{Navigation|Security &rarr; Management Users &rarr; ''select the'' admin ''user'' &rarr; User &rarr; Set Password ''(toolbar)''}}


The new password must satisfy the grid password policy.  Use at least 10
The new password must satisfy the grid password policy.  Use at least 10 characters with upper and lower case letters and numbers -- or raise the policy first with '''Suggested Defaults''' so the requirement is enforced for every account rather than relying on convention.
characters with upper and lower case letters and numbers -- or raise the policy
first with '''Suggested Defaults''' so the requirement is enforced for every
account rather than relying on convention.


Unlike '''qadmin''', this is a grid-wide management account: changing it once
'''Old Password''' is disabled while the session is logged in as <code>admin</code>, so changing that account's password needs only the new password and its confirmation.  For every other account the field is required and the current password has to be entered as well.  The permitted length range comes from the grid password policy rather than being fixed by the dialog.
changes it for the whole Storage Grid.
 
Unlike '''qadmin''', this is a grid-wide management account: changing it once changes it for the whole Storage Grid.


== Firewall Configuration ==
== Firewall Configuration ==


[[File:security_firewall.png|thumb|center|800px|Storage System Modify, Firewall tab.]]
[[File:security_firewall.png|thumb|right|600px|Storage System Modify, Firewall tab.]]


QuantaStor has an integrated firewall management system that controls protocol
QuantaStor has an integrated firewall management system that controls protocol access both at the system level and per network port.  For high-security environments it is recommended to block every protocol that will not be used.
access both at the system level and per network port.  For high-security
environments it is recommended to block every protocol that will not be used.


'''Navigation (system level):''' Storage Management --> ''select a Storage System'' --> Modify ''(toolbar)'' --> Firewall ''(tab)''
'''Navigation (system level):''' Storage Management --> ''select a Storage System'' --> Modify ''(toolbar)'' --> Firewall ''(tab)''
Line 486: Line 448:
'''Navigation (per port):''' Storage Management --> Network Ports --> ''select a port'' --> Modify Network Port ''(toolbar or right-click)'' --> Firewall ''(tab)''
'''Navigation (per port):''' Storage Management --> Network Ports --> ''select a port'' --> Modify Network Port ''(toolbar or right-click)'' --> Firewall ''(tab)''


The Firewall tab lists each service with a description and an '''Allow'''
The Firewall tab lists each service with a description and an '''Allow''' checkbox.  The services managed are:
checkbox.  The services managed are:


* '''QS Web Management''' -- web management interface access
* '''QS Web Management''' -- web management interface access
Line 500: Line 461:
* '''Chronograf''' -- Chronograf monitoring
* '''Chronograf''' -- Chronograf monitoring


Clear the '''Allow''' box for any service you do not use.  A common hardening
Clear the '''Allow''' box for any service you do not use.  A common hardening pass on a file-only deployment, for example, is to leave SMB and NFS enabled and clear iSCSI Target, NVMeoF Target, and Ceph.
pass on a file-only deployment, for example, is to leave SMB and NFS enabled
and clear iSCSI Target, NVMeoF Target, and Ceph.


Be careful not to block the protocol you are managing the system with: clearing
Be careful not to block the protocol you are managing the system with: clearing '''QS Web Management''' on the port you are connected through will cut off your own session.  Note also that '''[[#Web Access Mode|Web Access Mode]]''' set to ''HTTP disabled'' installs its own rule dropping port 80, independently of these checkboxes.
'''QS Web Management''' on the port you are connected through will cut off your
own session.  Note also that '''[[#Web Access Mode|Web Access Mode]]''' set to
''HTTP disabled'' installs its own rule dropping port 80, independently of
these checkboxes.


Use '''Apply''' to commit changes without closing the dialog.
Use '''Apply''' to commit changes without closing the dialog.
== SSL/TLS Certificate & Web Access Security ==
== SSL/TLS Certificate & Web Access Security ==


QuantaStor serves the web management interface, the REST API, and the internal
QuantaStor serves the web management interface, the REST API, and the internal grid communication channels over TLS.  The web management interface is served by '''nginx''' and the TLS settings, ciphers, and certificates are all managed by QuantaStor.
grid communication channels over TLS.  The web management interface is served by
'''nginx''' and the TLS settings, ciphers, and certificates are all managed by
QuantaStor.
 
'''Note for administrators upgrading from QuantaStor v4:''' older releases served
the web interface from Apache Tomcat and required generating a Java keystore
with <code>keytool</code>.  That is no longer the case.  There is no keystore, no
<code>server.xml</code>, and no tomcat service on QuantaStor v5 and newer -- use
the procedures below instead.


=== Web Access Mode ===
=== Web Access Mode ===


The single most important web security setting is the '''Web Access Mode''',
The single most important web security setting is the '''Web Access Mode''', which controls whether plain HTTP is served at all.
which controls whether plain HTTP is served at all.


'''Navigation:''' Security --> Management Users --> User --> Security Manager ''(toolbar)'' --> Advanced Settings
{{Navigation|Security &rarr; Management Users &rarr; User &rarr; Security Manager ''(toolbar)'' &rarr; Advanced Settings}}


The three modes are:
The three modes are:
Line 537: Line 482:
* '''HTTP disabled''' -- port 80 is dropped at the firewall entirely.  Use this in high-security environments where an open port 80, even one that only redirects, is not acceptable.
* '''HTTP disabled''' -- port 80 is dropped at the firewall entirely.  Use this in high-security environments where an open port 80, even one that only redirects, is not acceptable.


Changing this setting switches the active nginx site configuration and, for
Changing this setting switches the active nginx site configuration and, for '''HTTP disabled''', also installs a firewall rule that drops port 80.  The change applies immediately -- no reboot is required.
'''HTTP disabled''', also installs a firewall rule that drops port 80.  The
change applies immediately -- no reboot is required.


The Web Access Mode affects '''port 80 only'''.  The HTTPS listener on port 443
The Web Access Mode affects '''port 80 only'''.  The HTTPS listener on port 443 uses the same TLS versions, cipher list, and certificate in every mode, so switching modes does not change the encryption offered to HTTPS clients -- it only determines whether an unencrypted alternative is reachable.  Setting the mode to '''HTTP redirects to HTTPS''' should nonetheless be treated as a required hardening step on every production deployment.
uses the same TLS versions, cipher list, and certificate in every mode, so
switching modes does not change the encryption offered to HTTPS clients -- it
only determines whether an unencrypted alternative is reachable.  Setting the
mode to '''HTTP redirects to HTTPS''' should nonetheless be treated as a
required hardening step on every production deployment.


Changing this setting prompts a confirmation warning that the change may log
Changing this setting prompts a confirmation warning that the change may log users out of the interface and cause passwords to expire; the mode change itself takes effect as soon as you confirm.
users out of the interface and cause passwords to expire; the mode change itself
takes effect as soon as you confirm.


=== Supported TLS Versions and Ciphers ===
=== Supported TLS Versions and Ciphers ===


QuantaStor's nginx configuration accepts '''TLS 1.2 and TLS 1.3''' only, in all
QuantaStor's nginx configuration accepts '''TLS 1.2 and TLS 1.3''' only, in all web access modes, with server cipher preference enabled and the cipher list restricted to modern AEAD suites: ''(Note: due to the frequency of security updates this may be out of date and system configuration files should be referenced.)''
web access modes, with server cipher preference enabled and the cipher list
restricted to modern AEAD suites:


<pre>
<pre style="font-size: smaller">
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:
ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
Line 564: Line 498:
</pre>
</pre>


SSLv3, TLS 1.0, and TLS 1.1 are not accepted.  The interface also sends an
SSLv3, TLS 1.0, and TLS 1.1 are not accepted. ''(Note: due to the frequency of security updates this may be out of date and system configuration files should be referenced.)'' The interface also sends an HSTS header ({{Code|1=Strict-Transport-Security}}) with a one year max-age.
HSTS header (<code>Strict-Transport-Security</code>) with a one year max-age.


The shipped defaults live in this file, which is replaced on upgrade and should
The shipped defaults live in this file, which is replaced on upgrade and should '''not''' be edited in place:
'''not''' be edited in place:


<pre>
<pre style="font-size: smaller">
/opt/osnexus/common/lib/nginx_quantastor_ssl_default.conf
/opt/osnexus/common/lib/nginx_quantastor_ssl_default.conf
</pre>
</pre>


To customize the TLS settings or point nginx at your own certificate, use the
To customize the TLS settings or point nginx at your own certificate, use the {{Code|1=qs-util}} helper to copy the defaults to a user-editable location that upgrades will not overwrite:
<code>qs-util</code> helper to copy the defaults to a user-editable location
that upgrades will not overwrite:


<pre>
<pre style="font-size: smaller">
qs-util wuicustomcerts
qs-util wuicustomcerts
</pre>
</pre>
Line 584: Line 514:
This creates the following file, which you then edit:
This creates the following file, which you then edit:


<pre>
<pre style="font-size: smaller">
/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf
/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf
</pre>
</pre>


Cipher settings for the QuantaStor grid communication channels (separate from
Cipher settings for the QuantaStor grid communication channels (separate from the web interface) are controlled by:
the web interface) are controlled by:


<pre>
<pre style="font-size: smaller">
/opt/osnexus/common/lib/qsciphers
/opt/osnexus/common/lib/qsciphers
</pre>
</pre>


That shipped file is replaced on upgrade, so it should not be edited in place.
That shipped file is replaced on upgrade, so it should not be edited in place. To customize the grid communication ciphers, place your own copy at the override location below.  The override does not exist by default -- create it only when you intend to depart from the shipped cipher list, and QuantaStor will use it in preference to the shipped file and leave it untouched across upgrades:
To customize the grid communication ciphers, place your own copy at the
override location below.  The override does not exist by default -- create it
only when you intend to depart from the shipped cipher list, and QuantaStor will
use it in preference to the shipped file and leave it untouched across upgrades:


<pre>
<pre style="font-size: smaller">
/var/opt/osnexus/quantastor/ssl/qsciphers
/var/opt/osnexus/quantastor/ssl/qsciphers
</pre>
</pre>
Line 607: Line 532:
=== Default Certificate ===
=== Default Certificate ===


QuantaStor ships with a common self-signed certificate that is pre-generated and
QuantaStor ships with a common self-signed certificate that is pre-generated and included with all deployments.  Because it is self-signed and shared across all deployments, browsers will warn on first connection, and it provides no identity assurance.  Replacing it is recommended for any deployment reachable beyond a trusted management network.
included with all deployments.  Because it is self-signed and shared across all
deployments, browsers will warn on first connection, and it provides no identity
assurance.  Replacing it is recommended for any deployment reachable beyond a
trusted management network.


The certificate and key used by the web interface and REST service are here:
The certificate and key used by the web interface and REST service are here:


<pre>
<pre style="font-size: smaller">
/var/opt/osnexus/quantastor/ssl/qsrestsrv.pem
/var/opt/osnexus/quantastor/ssl/qsrestsrv.pem
</pre>
</pre>
Line 621: Line 542:
Grid communication uses a separate pair:
Grid communication uses a separate pair:


<pre>
<pre style="font-size: smaller">
/opt/osnexus/common/lib/qsserver.pem
/opt/osnexus/common/lib/qsserver.pem
/opt/osnexus/common/lib/qsclient.pem
/opt/osnexus/common/lib/qsclient.pem
</pre>
</pre>


All of these are discovered and monitored automatically -- see
All of these are discovered and monitored automatically -- see '''[[#Certificate Management|Certificate Management]]''' below, which is the recommended way to review and replace them.
'''[[#Certificate Management|Certificate Management]]''' below, which is the
recommended way to review and replace them.


=== Installing a Custom Certificate ===
=== Installing a Custom Certificate ===


The '''recommended''' way to install your own certificate is through
The '''recommended''' way to install your own certificate is through '''[[#Certificate Management|Certificate Management]]''' -- add the certificate as a template once, then apply it to the '''NGINX''' use case on each Storage System.  That keeps the certificate inventory, expiry monitoring, and alerting accurate, and avoids editing nginx configuration by hand.  See '''[[#Installing Your Own Certificate|Installing Your Own Certificate]]'''.
'''[[#Certificate Management|Certificate Management]]''' -- add the certificate
as a template once, then apply it to the '''NGINX''' use case on each Storage
System.  That keeps the certificate inventory, expiry monitoring, and alerting
accurate, and avoids editing nginx configuration by hand.  See
'''[[#Installing Your Own Certificate|Installing Your Own Certificate]]'''.


Use the manual procedure below only when you need to change nginx TLS
Use the manual procedure below only when you need to change nginx TLS directives themselves (for example to further restrict the cipher list), since those are not expressible as a certificate template:
directives themselves (for example to further restrict the cipher list), since
those are not expressible as a certificate template:


* Run <code>qs-util wuicustomcerts</code> to copy the shipped defaults to an editable file that upgrades will not overwrite.
* Run {{Code|1=qs-util wuicustomcerts}} to copy the shipped defaults to an editable file that upgrades will not overwrite.
* Edit <code>/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf</code>.
* Edit {{Code|1=/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf}}.
* Reload nginx to apply:
* Reload nginx to apply:


<pre>
<pre style="font-size: smaller">
systemctl reload nginx
systemctl reload nginx
</pre>
</pre>
Line 653: Line 565:
* Verify the negotiated protocol and cipher from a client:
* Verify the negotiated protocol and cipher from a client:


<pre>
<pre style="font-size: smaller">
openssl s_client -connect &lt;system-ip&gt;:443 &lt;/dev/null 2&gt;/dev/null \
openssl s_client -connect &lt;system-ip&gt;:443 &lt;/dev/null 2&gt;/dev/null \
   | grep -E 'Protocol|Cipher is'
   | grep -E 'Protocol|Cipher is'
</pre>
</pre>


Repeat on each Storage System in the grid, or use the Certificate Management
Repeat on each Storage System in the grid, or use the Certificate Management section to confirm all systems at once.
section to confirm all systems at once.


'''Note:''' if you are using Firefox and have previously accepted the old
'''Note:''' if you are using Firefox and have previously accepted the old self-signed certificate, clear the cached certificate exception for the host or Firefox will continue to present the stale certificate warning.
self-signed certificate, clear the cached certificate exception for the host or
Firefox will continue to present the stale certificate warning.
=== [[Custom SSL_TLS Security|Custom SSL Certificates and TLS Security]] ===
=== [[Custom SSL_TLS Security|Custom SSL Certificates and TLS Security]] ===
* Generating and installing custom SSL certificates, and applying custom TLS security settings.  For most deployments the '''[[#Certificate Management|Certificate Management]]''' section above is the better route, since it keeps the certificate inventory and expiry alerting accurate.
* Generating and installing custom SSL certificates, and applying custom TLS security settings.  For most deployments the '''[[#Certificate Management|Certificate Management]]''' section above is the better route, since it keeps the certificate inventory and expiry alerting accurate.
Line 671: Line 580:
== Certificate Management ==
== Certificate Management ==


[[File:security_certificates.png|thumb|center|800px|Certificates section showing every certificate on every Storage System in the grid.]]
[[File:security_certificates.png|thumb|right|800px|Certificates section showing every certificate on every Storage System in the grid.]]


QuantaStor discovers, inventories, and monitors every TLS certificate in use
QuantaStor discovers, inventories, and monitors every TLS certificate in use across the Storage Grid, so administrators can see at a glance what is installed, what it is used for, and when it expires.
across the Storage Grid, so administrators can see at a glance what is
installed, what it is used for, and when it expires.


'''Navigation:''' Security --> Certificates
{{Navigation|Security &rarr; Certificates}}


The Certificates section lists certificates grouped by Storage System.  For each
The Certificates section lists certificates grouped by Storage System.  For each certificate the grid shows its file path, '''State''', '''Use Case''', description, certificate modulus MD5, serial number, and the start and end of its validity period.  Because the view spans the whole grid, a single screen confirms that every system is using the certificate you expect.
certificate the grid shows its file path, '''State''', '''Use Case''',
description, certificate modulus MD5, serial number, and the start and end of
its validity period.  Because the view spans the whole grid, a single screen
confirms that every system is using the certificate you expect.


=== Certificate Use Cases ===
=== Certificate Use Cases ===
Line 694: Line 597:
* '''Client [Grid Communication]''' -- the client-side certificate a node presents to its peers.
* '''Client [Grid Communication]''' -- the client-side certificate a node presents to its peers.
* '''HAProxy''' -- the certificate used by the integrated load balancer, when configured.
* '''HAProxy''' -- the certificate used by the integrated load balancer, when configured.
* '''Object Gateway''' -- the certificate used by the Ceph S3/Object Gateway.  Two use cases are available, for a first and second gateway instance (<code>cephrgw-1</code> and <code>cephrgw-2</code> on the CLI).
* '''Object Gateway''' -- the certificate used by the Ceph S3/Object Gateway.  Two use cases are available, for a first and second gateway instance ({{Code|1=cephrgw-1}} and {{Code|1=cephrgw-2}} on the CLI).


Note that the same PEM file may appear more than once with different use cases
Note that the same PEM file may appear more than once with different use cases when one certificate serves several roles -- for example {{Code|1=qsrestsrv.pem}} is used for both '''NGINX''' and '''Rest Service'''.
when one certificate serves several roles -- for example
<code>qsrestsrv.pem</code> is used for both '''NGINX''' and '''Rest Service'''.


=== Certificate Expiration Alerts ===
=== Certificate Expiration Alerts ===


QuantaStor monitors validity dates and raises alerts as a certificate
QuantaStor monitors validity dates and raises alerts as a certificate approaches expiry, so a certificate never lapses unnoticed.  Alerts are raised at '''90, 60, 30, 7, and 2 days''' before expiry, and again once the certificate has actually expired.
approaches expiry, so a certificate never lapses unnoticed.  Alerts are raised
at '''90, 60, 30, 7, and 2 days''' before expiry, and again once the
certificate has actually expired.


The longer-lead warnings are only raised for certificates with a
The longer-lead warnings are only raised for certificates with a correspondingly long lifetime -- the 90 day warning applies to certificates valid for more than 18 months, the 60 day warning to those valid for more than a year, and the 30 day warning to those valid for more than 90 days.  This prevents short-lived certificates from generating alerts the moment they are installed.  The 7 day, 2 day, and expired alerts always apply.
correspondingly long lifetime -- the 90 day warning applies to certificates
valid for more than 18 months, the 60 day warning to those valid for more than
a year, and the 30 day warning to those valid for more than 90 days.  This
prevents short-lived certificates from generating alerts the moment they are
installed.  The 7 day, 2 day, and expired alerts always apply.


Alerts are delivered through the standard QuantaStor alerting system, so they
Alerts are delivered through the standard QuantaStor alerting system, so they reach whatever email and SNMP destinations you have configured in the Alert Manager.
reach whatever email and SNMP destinations you have configured in the Alert
Manager.


=== Certificate Templates ===
=== Certificate Templates ===


A '''certificate template''' holds a certificate (and its private key) that you
A '''certificate template''' holds a certificate (and its private key) that you have obtained from your CA, stored once in the grid so it can be applied to any service on any Storage System.  Templates are what make it possible to roll out your own certificate across the grid from the management interface instead of copying PEM files onto each node by hand.
have obtained from your CA, stored once in the grid so it can be applied to any
service on any Storage System.  Templates are what make it possible to roll out
your own certificate across the grid from the management interface instead of
copying PEM files onto each node by hand.


'''Navigation:''' Security --> Certificates --> ''Certificate Templates'' ''(tab)''
{{Navigation|Security &rarr; Certificates &rarr; ''Certificate Templates'' ''(tab)''}}


The toolbar provides '''Add Template''', '''Update''', '''Remove Template''',
The toolbar provides '''Add Template''', '''Update''', '''Remove Template''', and '''Certificate Template Manager''' for reviewing and maintaining templates.
and '''Certificate Template Manager''' for reviewing and maintaining templates.


=== Installing Your Own Certificate ===
=== Installing Your Own Certificate ===


This is the recommended way to replace any of QuantaStor's default self-signed
This is the recommended way to replace any of QuantaStor's default self-signed certificates, including the one served by the web management interface.
certificates, including the one served by the web management interface.


* Obtain a certificate and private key from your CA.
* Obtain a certificate and private key from your CA.
Line 741: Line 626:
* Repeat the apply step for each Storage System, and for each use case the certificate should cover.
* Repeat the apply step for each Storage System, and for each use case the certificate should cover.


'''IMPORTANT -- the certificate must contain a Subject Alternative Name (SAN).'''
'''IMPORTANT -- the certificate must contain a Subject Alternative Name (SAN).''' QuantaStor validates certificates before accepting them as a template and rejects any certificate without a SAN extension, with the error ''"Certificate validation failed. Unable to create certificate template out of invalid certificate."''  A Common Name alone is not sufficient.  Include every name and address the systems will be reached by -- the FQDN, the short hostname, and the management IP.  When generating a self-signed certificate with {{Code|1=openssl req}}, add the SAN explicitly:
QuantaStor validates certificates before accepting them as a template and
rejects any certificate without a SAN extension, with the error
''"Certificate validation failed. Unable to create certificate template out of
invalid certificate."''  A Common Name alone is not sufficient.  Include every
name and address the systems will be reached by -- the FQDN, the short
hostname, and the management IP.  When generating a self-signed certificate
with <code>openssl req</code>, add the SAN explicitly:


<pre>
<pre style="font-size: smaller">
openssl req -x509 -newkey rsa:2048 -nodes -days 365 \
openssl req -x509 -newkey rsa:2048 -nodes -days 365 \
   -subj "/C=US/ST=&lt;state&gt;/L=&lt;city&gt;/O=&lt;org&gt;/CN=&lt;fqdn&gt;" \
   -subj "/C=US/ST=&lt;state&gt;/L=&lt;city&gt;/O=&lt;org&gt;/CN=&lt;fqdn&gt;" \
Line 759: Line 637:
</pre>
</pre>


You can check a certificate against QuantaStor's validation rules before
You can check a certificate against QuantaStor's validation rules before importing it:
importing it:


<pre>
<pre style="font-size: smaller">
/opt/osnexus/quantastor/bin/qs_certutil.sh validate --pem-file &lt;path-to-pem&gt;
/opt/osnexus/quantastor/bin/qs_certutil.sh validate --pem-file &lt;path-to-pem&gt;
</pre>
</pre>
Line 768: Line 645:
From the CLI the two steps are:
From the CLI the two steps are:


<pre>
<pre style="font-size: smaller">
qs cert-tmpl-add --name=&lt;template-name&gt; --description=&lt;text&gt; \
qs cert-tmpl-add --name=&lt;template-name&gt; --description=&lt;text&gt; \
                 --certificate-pem-data=&lt;path-to-pem&gt; \
                 --certificate-pem-data=&lt;path-to-pem&gt; \
Line 777: Line 654:
</pre>
</pre>


'''Note:''' <code>--cert-use-case</code> currently requires the numeric use
'''Note:''' {{Code|1=--cert-use-case}} currently requires the numeric use case value rather than its name.  The values are ''0'' none, ''1'' haproxy, ''2'' nginx, ''3'' cephrgw-1, ''4'' cephrgw-2, ''5'' qsrest, ''6'' qsserver, ''7'' qsclient.
case value rather than its name.  The values are ''0'' none, ''1'' haproxy,
''2'' nginx, ''3'' cephrgw-1, ''4'' cephrgw-2, ''5'' qsrest, ''6'' qsserver,
''7'' qsclient.


QuantaStor reloads the affected service automatically once the certificate is
QuantaStor reloads the affected service automatically once the certificate is applied, so the new certificate is served without further action -- nginx for the '''NGINX''' and '''Rest Service''' use cases, HAProxy for '''HAProxy''', and the Object Gateway services for the gateway use cases.  nginx is reloaded rather than restarted, so applying a web interface certificate does not disconnect your own management session.
applied, so the new certificate is served without further action -- nginx for
the '''NGINX''' and '''Rest Service''' use cases, HAProxy for '''HAProxy''',
and the Object Gateway services for the gateway use cases.  nginx is reloaded
rather than restarted, so applying a web interface certificate does not
disconnect your own management session.


'''Note for QuantaStor releases prior to 6.9:''' the nginx reload was not
'''Note for QuantaStor releases prior to 6.9:''' the nginx reload was not performed automatically, and the appliance would continue to present the previous certificate until nginx was reloaded by hand:
performed automatically, and the appliance would continue to present the
previous certificate until nginx was reloaded by hand:


<pre>
<pre style="font-size: smaller">
systemctl reload nginx
systemctl reload nginx
</pre>
</pre>
Line 799: Line 666:
Confirm what is actually being served, including the SAN:
Confirm what is actually being served, including the SAN:


<pre>
<pre style="font-size: smaller">
openssl s_client -connect &lt;system-ip&gt;:443 &lt;/dev/null 2&gt;/dev/null \
openssl s_client -connect &lt;system-ip&gt;:443 &lt;/dev/null 2&gt;/dev/null \
   | openssl x509 -noout -subject -dates -ext subjectAltName
   | openssl x509 -noout -subject -dates -ext subjectAltName
Line 806: Line 673:
=== Rescanning Certificates ===
=== Rescanning Certificates ===


If a certificate is replaced outside of QuantaStor -- for example by editing the
If a certificate is replaced outside of QuantaStor -- for example by editing the nginx configuration directly, or by a external renewal process dropping in a new PEM -- use '''Rescan''' to re-read the certificates from disk and refresh the inventory, validity dates, and alert state.
nginx configuration directly, or by a external renewal process dropping in a new
PEM -- use '''Rescan''' to re-read the certificates from disk and refresh the
inventory, validity dates, and alert state.


'''Navigation:''' Security --> Certificates --> Rescan ''(toolbar)''
{{Navigation|Security &rarr; Certificates &rarr; Rescan ''(toolbar)''}}


=== Reviewing Certificates from the CLI ===
=== Reviewing Certificates from the CLI ===


The same inventory is available from the QuantaStor CLI, which is convenient for
The same inventory is available from the QuantaStor CLI, which is convenient for scripted compliance checks:
scripted compliance checks:


<pre>
<pre style="font-size: smaller">
qs cert-list
qs cert-list
qs cert-get --cert=&lt;name-or-id&gt;
qs cert-get --cert=&lt;name-or-id&gt;
Line 826: Line 689:
Certificate templates have a matching set of commands:
Certificate templates have a matching set of commands:


<pre>
<pre style="font-size: smaller">
qs cert-tmpl-list
qs cert-tmpl-list
qs cert-tmpl-get --cert=&lt;name-or-id&gt;
qs cert-tmpl-get --cert=&lt;name-or-id&gt;
Line 832: Line 695:
</pre>
</pre>


For TLS version and cipher settings, see
For TLS version and cipher settings, see '''[[#Supported TLS Versions and Ciphers|Supported TLS Versions and Ciphers]]'''.
'''[[#Supported TLS Versions and Ciphers|Supported TLS Versions and Ciphers]]'''.
== Endpoint Detection & Response (EDR) ==
== Endpoint Detection & Response (EDR) ==


[[File:security_edr_agents.png|thumb|center|800px|EDR Agents section.  Agents are installed per Storage System and report vendor, status, version, and enabled features.]]
[[File:security_edr_agents.png|thumb|right|800px|EDR Agents section.  Agents are installed per Storage System and report vendor, status, version, and enabled features.]]


Many security standards and cyber-insurance policies require an endpoint
Many security standards and cyber-insurance policies require an endpoint detection and response (EDR) agent on every server, including storage appliances.  QuantaStor can deploy and manage a vendor EDR agent on each Storage System in the grid directly from the web management interface, so the appliances are covered by the same endpoint security tooling as the rest of the fleet without hand-installing agents over SSH.
detection and response (EDR) agent on every server, including storage
appliances.  QuantaStor can deploy and manage a vendor EDR agent on each
Storage System in the grid directly from the web management interface, so the
appliances are covered by the same endpoint security tooling as the rest of the
fleet without hand-installing agents over SSH.


'''Navigation:''' Security --> EDR Agents
{{Navigation|Security &rarr; EDR Agents}}


The EDR Agents section lists the installed agents with their '''Name''',
The EDR Agents section lists the installed agents with their '''Name''', '''State''', '''Storage System''', '''Vendor''', '''Status''', '''Version''', and the set of '''Features''' the agent has enabled.
'''State''', '''Storage System''', '''Vendor''', '''Status''', '''Version''',
and the set of '''Features''' the agent has enabled.


=== Supported EDR Vendors ===
=== Supported EDR Vendors ===


'''Bitdefender GravityZone''' is the currently supported EDR platform, on
'''Bitdefender GravityZone''' is the currently supported EDR platform, on Ubuntu 22.04, Ubuntu 24.04, RHEL 8, and RHEL 9.  Additional vendor modules use the same framework and are being added; contact OSNEXUS at info@osnexus.com if you need a specific EDR platform supported.
Ubuntu 22.04, Ubuntu 24.04, RHEL 8, and RHEL 9.  Additional vendor modules use
the same framework and are being added; contact OSNEXUS at info@osnexus.com if
you need a specific EDR platform supported.


Vendor modules are defined on the appliance in:
Vendor modules are defined on the appliance in:


<pre>
<pre style="font-size: smaller">
/opt/osnexus/quantastor/conf/qs_endpoint_security.conf
/opt/osnexus/quantastor/conf/qs_endpoint_security.conf
</pre>
</pre>
Line 866: Line 718:
=== Installing an EDR Agent ===
=== Installing an EDR Agent ===


[[File:security_edr_install.png|thumb|center|800px|Install EDR Security Agent dialog.]]
[[File:security_edr_install.png|thumb|right|500px|Install EDR Security Agent dialog.]]


Before starting, create an installation package for Linux servers in your
Before starting, create an installation package for Linux servers in your Bitdefender GravityZone console and note either the '''package id''' or the full '''setup downloader URL''' the console provides.  The feature set of the agent (which protection modules are enabled) is chosen in the GravityZone console when the package is created, and QuantaStor reads that selection back from the installer.  Individual protection modules can optionally be overridden from the QuantaStor side at install time -- see the {{Code|1=--feature-flags}} argument in the CLI section below.
Bitdefender GravityZone console and note either the '''package id''' or the
full '''setup downloader URL''' the console provides.  The feature set of the
agent (which protection modules are enabled) is chosen in the GravityZone
console when the package is created, and QuantaStor reads that selection back
from the installer.  Individual protection modules can optionally be overridden
from the QuantaStor side at install time -- see the <code>--feature-flags</code>
argument in the CLI section below.


'''Navigation:''' Security --> EDR Agents --> Install Agent ''(toolbar)''
OSNEXUS recommends a package with Antimalware, Advanced Threat Control, Advanced Anti-Exploit, Network Attack Defense and the EDR Sensor enabled. These are our recommended settings, but you may find further customization is needed for your environment. In our testing we did not find that Bitdefender was using much CPU and other resources, but depending on your configuration settings you may need to narrow scanning and other options to reach a fair compromise of strong security with minimal performance impact.
 
{{Navigation|Security &rarr; EDR Agents &rarr; Install Agent ''(toolbar)''}}


You can also right-click a Storage System to install an agent on it.
You can also right-click a Storage System to install an agent on it.
Line 884: Line 731:


* '''EDR Module''' -- select the vendor module, e.g. ''Bitdefender''.
* '''EDR Module''' -- select the vendor module, e.g. ''Bitdefender''.
* '''Install Key / URL''' -- paste either the short GravityZone package id (e.g. <code>6oOK8y</code>) or the full <code>setup_downloader.tar</code> URL copied from the GravityZone console.  Both forms are accepted, which matters because the vendor's URL format changes from time to time.
* '''Install Key / URL''' -- paste either the short GravityZone package id (e.g. {{Code|1=aabbccdd}}) or the full {{Code|1=setup_downloader.tar}} URL copied from the GravityZone console.  Both forms are accepted, which matters because the vendor's URL format changes from time to time.
* '''Storage Systems''' -- tick each system to install the agent on.  The grid shows the service, kernel, and distribution version of each system so you can confirm platform support before installing.
* '''Storage Systems''' -- tick each system to install the agent on.  The grid shows the service, kernel, and distribution version of each system so you can confirm platform support before installing.


QuantaStor then downloads the installer package from GravityZone onto each
QuantaStor then downloads the installer package from GravityZone onto each selected system, installs the agent, and registers it.  Because the appliance must reach the GravityZone service to download the package, ensure outbound access to your GravityZone endpoint is permitted -- see '''[[#Firewall Configuration|Firewall Configuration]]'''.
selected system, installs the agent, and registers it.  Because the appliance
must reach the GravityZone service to download the package, ensure outbound
access to your GravityZone endpoint is permitted -- see
'''[[#Firewall Configuration|Firewall Configuration]]'''.


Note that the registration key is supplied at install time and stored per node;
Note that the registration key is supplied at install time and stored per node; it is not kept in the vendor module configuration file.
it is not kept in the vendor module configuration file.


=== Monitoring and Removing Agents ===
=== Monitoring and Removing Agents ===


Once installed, an agent's '''Status''' and '''Version''' are refreshed
Once installed, an agent's '''Status''' and '''Version''' are refreshed automatically and shown in the EDR Agents grid, so an agent that has stopped running is visible from the management interface rather than only from the vendor console.
automatically and shown in the EDR Agents grid, so an agent that has stopped
running is visible from the management interface rather than only from the
vendor console.


To remove an agent, select it and choose '''Uninstall Agent'''.
To remove an agent, select it and choose '''Uninstall Agent'''.


'''Navigation:''' Security --> EDR Agents --> Uninstall Agent ''(toolbar)''
{{Navigation|Security &rarr; EDR Agents &rarr; Uninstall Agent ''(toolbar)''}}


=== EDR Management from the CLI ===
=== EDR Management from the CLI ===
Line 911: Line 750:
The same operations are available from the QuantaStor CLI:
The same operations are available from the QuantaStor CLI:


<pre>
<pre style="font-size: smaller">
qs edr-agent-list
qs edr-agent-list
qs edr-agent-get --edr-agent=&lt;name-or-id&gt;
qs edr-agent-get --edr-agent=&lt;name-or-id&gt;
qs edr-agent-create --system-list=&lt;systems&gt; --module=bitdefender \
qs edr-agent-create --system-list=&lt;systems&gt; --module=Bitdefender \
                     --registration-key=&lt;package-id-or-url&gt;
                     --registration-key=&lt;package-id-or-url&gt;
qs edr-agent-delete --edr-agent=&lt;name-or-id&gt;
qs edr-agent-delete --edr-agent=&lt;name-or-id&gt;
Line 920: Line 759:
</pre>
</pre>


The create command also accepts an optional <code>--feature-flags</code>
{{Code|1=--module}} takes the module's vendor name exactly as <code>qs edr-agent-module-list</code> shows it -- {{Code|1=Bitdefender}}, with a capital B. The match is case-sensitive.
argument taking a JSON object, to override individual protection modules
without changing the GravityZone package:


<pre>
The create command also accepts an optional {{Code|1=--feature-flags}} argument taking a JSON object, to override individual protection modules without changing the GravityZone package:
qs edr-agent-create --system-list=qs-node-a --module=bitdefender \
 
                     --registration-key=6oOK8y \
<pre style="font-size: smaller">
qs edr-agent-create --system-list=qs-node-a --module=Bitdefender \
                     --registration-key=aabbccdd \
                     --feature-flags='{"FileScan":1,"Firewall":0}'
                     --feature-flags='{"FileScan":1,"Firewall":0}'
</pre>
</pre>
Line 932: Line 771:
To review the available vendor modules and their supported platforms:
To review the available vendor modules and their supported platforms:


<pre>
<pre style="font-size: smaller">
qs edr-agent-module-list
qs edr-agent-module-list
qs edr-agent-module-get --module=bitdefender
qs edr-agent-module-get --module=Bitdefender
</pre>
</pre>
== [[Custom S3 SSl/TLS Certificate|Custom S3 SSL/TLS Certificate]] ==
== [[Custom S3 SSl/TLS Certificate|Custom S3 SSL/TLS Certificate]] ==
* Installing a custom certificate for the S3/Object Gateway endpoint.  See also the '''Object Gateway''' certificate use cases under '''[[#Certificate Use Cases|Certificate Use Cases]]'''.
* Installing a custom certificate for the S3/Object Gateway endpoint.  See also the '''Object Gateway''' certificate use cases under '''[[#Certificate Use Cases|Certificate Use Cases]]'''.
Line 941: Line 781:
== Multi-factor Authentication ==
== Multi-factor Authentication ==


[[File:security_mfa_manager.png|thumb|center|800px|Multi-Factor Authentication Manager.]]
[[File:security_mfa_manager.png|thumb|right|615px|Multi-Factor Authentication Manager.]]


Multi-factor authentication (MFA) requires a user to present a second factor,
Multi-factor authentication (MFA) requires a user to present a second factor, such as a device, in addition to their password.  QuantaStor supports MFA for management logins.
such as a device, in addition to their password.  QuantaStor supports MFA for
management logins.


'''Navigation:''' Security --> Management Users --> User --> Multi-Factor Auth Manager ''(toolbar)''
{{Navigation|Security &rarr; Management Users &rarr; User &rarr; Multi-Factor Auth Manager ''(toolbar)''}}


An MFA '''configuration''' must exist before MFA can be enabled on any account.
An MFA '''configuration''' must exist before MFA can be enabled on any account. The manager lists the existing configurations by '''Name''' and '''Provider''' and provides '''Create...''', '''Modify...''', '''Delete...''', and '''Assign/Unassign...''' for attaching a configuration to user accounts.
The manager lists the existing configurations by '''Name''' and '''Provider'''
and provides '''Create...''', '''Modify...''', '''Delete...''', and
'''Assign/Unassign...''' for attaching a configuration to user accounts.


The supported providers are:
The supported providers are:


* '''Cisco Duo'''
* '''Cisco Duo''' -- see [[Duo Multi-Factor Authentication|Cisco Duo Multi-Factor Authentication]] for the full setup walkthrough
* '''OKTA'''
* '''OKTA''' -- see [[Okta Multi-Factor Authentication]] for the full setup walkthrough


Creating a configuration takes a '''Provider''', a '''Name''', an optional
Creating a configuration takes a '''Provider''', a '''Name''', an optional '''Description''', the '''API Host''' for your tenant, and the keys issued by the provider:
'''Description''', the '''API Host''' for your tenant, and the '''Integration
Key''' and '''Secret Key''' issued by the provider.  Obtain those values from
your Duo or Okta administration console.


Once a configuration exists, enable MFA per account with '''Enable
* '''Cisco Duo''' -- the '''Integration Key''' and '''Secret Key''' from your Duo Auth API application.
Multi-Factor Auth''' and '''Multi-Factor Auth Config''' on the Add User or
* '''OKTA''' -- an Okta API token as the '''Integration Key''', and no '''Secret Key''' (the field is disabled when OKTA is selected). The '''API Host''' is your Okta org host name, such as {{Code|1=yourcompany.okta.com}}. QuantaStor finds each user in Okta by the account's '''Email Address''', so every Okta-protected account needs one that matches its Okta user.
Modify User dialog.  The '''Force (required when in use)''' option in the
 
manager makes the second factor mandatory rather than optional.
Once a configuration exists, enable MFA per account with '''Enable Multi-Factor Auth''' and '''Multi-Factor Auth Config''' on the Add User or Modify User dialog.  The '''Force (required when in use)''' option in the manager applies to '''Delete...''': it allows deleting a configuration that is still assigned to accounts, and turns MFA off on those accounts.


Contact OSNEXUS at info@osnexus.com for guidance on additional MFA options.
Contact OSNEXUS at info@osnexus.com for guidance on additional MFA options.
Line 973: Line 805:
== Security Updates ==
== Security Updates ==


QuantaStor supports automatic security updates through the '''Upgrade
QuantaStor supports automatic security updates through the '''[[Upgrade Manager]]''' in the web management interface.
Manager''' in the web management interface.


'''Navigation:''' Storage Management --> Upgrade Manager ''(toolbar)''
{{Navigation|Storage Management &rarr; Upgrade Manager ''(toolbar)''}}


Applying security updates through the Upgrade Manager is the supported path --
Applying security updates through the Upgrade Manager is the supported path -- it applies the updates OSNEXUS has qualified against the running QuantaStor release, in the correct order, across the systems you select.  Installing distribution packages directly with {{Code|1=apt}} is not recommended, as it can introduce package versions that have not been qualified against the release.
it applies the updates OSNEXUS has qualified against the running QuantaStor
release, in the correct order, across the systems you select.  Installing
distribution packages directly with <code>apt</code> is not recommended, as it can
introduce package versions that have not been qualified against the release.


== Encrypting NFS/SMB/iSCSI via IPsec ==
== Encrypting NFS/SMB/iSCSI via IPsec ==


Protocols such as NFSv3 do not encrypt data on the wire.  Where the storage
Protocols such as NFSv3 do not encrypt data on the wire.  Where the storage network is not itself trusted, set up an encrypted tunnel between the client and the QuantaStor system so that protocol traffic is protected in transit.
network is not itself trusted, set up an encrypted tunnel between the client
 
and the QuantaStor system so that protocol traffic is protected in transit.
More information on configuring IPsec on QuantaStor systems is available [[IPSec|here]].
 
Note that IPsec protects data '''in transit'''.  For data '''at rest''', QuantaStor provides [[Storage Pools|Storage Pool]] encryption, which is configured when the pool is created and is covered separately in the administrator guide.
 
 
== Related pages ==


More information on configuring IPsec on QuantaStor systems is available
* [[Send System Log Report]] -- collecting and sending a scrubbed log bundle to support
[[IPSec|here]].
* [[Duo Multi-Factor Authentication]] -- setting up the Cisco Duo MFA provider
* [[Custom SSH Security]] -- hardening the SSH service and managing key access
* [[Custom S3 SSl/TLS Certificate|Custom S3 SSL/TLS Certificate]] -- certificates for the S3 gateway
* [[IPSec]] -- encrypting protocol traffic in transit between client and appliance
* [[Storage Pools]] -- pool encryption, which protects data at rest
* [[Upgrade Manager]] -- applying security patches and QuantaStor updates
* [[Call-home / Alerting|Alert Manager]] -- alert delivery, including certificate expiry alerts
* [[Storage System]] -- system-level configuration and the Modify dialog


Note that IPsec protects data '''in transit'''. For data '''at rest''',
----
QuantaStor provides Storage Pool encryption, which is configured when the pool
<small>''Verified against QuantaStor 6.9.0.''</small>
is created and is covered separately in the administrator guide.

Latest revision as of 05:06, 29 September 2026


QuantaStor provides a layered set of security controls: grid-wide password and login policy, role based access control over every management operation, multi-factor authentication, an integrated firewall, TLS certificate management, and endpoint detection and response agent deployment. This page covers each of them.

Many industries require compliance with government security standards covering everything from audit logging to password policies. These include Health and Human Services security standards (HIPAA), federal law enforcement security standards (CJIS), and the general standards outlined by NIST for Controlled Unclassified Information (CUI) in Non-Federal Information Systems and Organizations, covered in NIST 800-53 and 800-171.

Nearly all of the settings on this page are reached from the Security tab of the QuantaStor web management interface, which contains these sections:

Security tab section Covers On this page
Management Users User accounts, password policy, multi-factor authentication Security Settings, Users, MFA
Management Groups User groups and their shared POSIX GID User Groups
Management Roles RBAC roles and their permission assignments RBAC
Object Users & Tenants S3/object storage users and tenants Multitenancy
Scale-out File & Block Keyrings Keyrings for scale-out storage not covered here
Certificates The grid-wide TLS certificate inventory Certificate Management
Key Server Profiles External key server (KMIP) profiles not covered here
EDR Agents Endpoint detection and response agents EDR

Also on this page: Firewall Configuration, SSL/TLS and Web Access Security, System Setup Security Checks, Security Updates and Multi-admin Approvals.

Security Settings Management

Security Manager, General tab -- grid-wide password and login policy.

The Security Manager holds the password and login policy for the entire Storage Grid. These settings apply to all user accounts on all systems in the grid, not per-system.

Navigation: Security → Management Users → User → Security Manager (toolbar)

Choosing Suggested Defaults automatically configures the password and lockout policies to meet the standards listed above. This is the recommended starting point -- apply it first, then tune individual settings for the requirements of your deployment. Discard Changes reverts the dialog to the currently saved policy.

The General tab controls:

  • Password Complexity -- the required character-class mix. The factory default is Weak; raise this for any production or compliance-bound deployment.
  • Allowed Special Characters -- which non-alphanumeric characters are permitted in passwords.
  • Minimum / Maximum Password Length -- both in the range 8 to 80.
  • Login Attempts Until Short Lockout and Login Attempts Until Lockout -- consecutive failures before a temporary and then a permanent lockout. Set the second to 0 to disable permanent lockout.
  • Bad Logins Sample Period (short and permanent) -- the window, in seconds, over which failed attempts are counted.
  • Bad Logins Short Lockout Duration -- how long, in seconds, a short lockout lasts.
  • Days Until Password Expires -- 0 to 1000; 0 disables expiry.
  • Unique Passwords Until Reuse -- 0 to 20; how many previous passwords are remembered and refused.
  • Minimum Days Between Password Change -- prevents a user cycling straight back to a previous password.
  • Maximum Days Account Inactive Until Lockout -- locks out dormant accounts.
  • Auto Logout From N Minutes Of Inactivity -- idle timeout for the web interface; 0 disables it.
  • Default Login Username -- the username pre-filled on the login page.

The Multi-admin Approvals tab chooses which deletes are held until a set number of administrators approve them; see Multi-admin Approvals.

The Advanced Settings tab holds the Web Access Mode (see Web Access Mode), an optional System Use Notification banner shown to users at login, and the LDAP single-sign-on settings described next.

Note: saving a change to the password or login policy prompts a confirmation that the change may log users out of the interface and cause passwords to expire. Plan policy changes accordingly. Changes made only on the Multi-admin Approvals tab save without this prompt.

LDAP Single-Sign-On Authentication

Security Manager, Advanced Settings -- Web Access Mode and LDAP single sign-on.

The Advanced Settings tab can connect the Storage Grid to an LDAP or Active Directory domain for management user authentication.

To configure this:

  • In your LDAP/AD environment, create one or more groups for QuantaStor administration -- for example QS-Administrator and QS-Monitor -- and add the appropriate users to them.
  • In QuantaStor, edit the Role you want each LDAP group to map to and set its LDAP Group field. For example set the Administrator role's LDAP Group to QS-Administrator, and the System Monitor role's to QS-Monitor. The LDAP Group field is on the Create Role and Modify Role dialogs.
  • Set your DNS and NTP servers to point at your AD server, in the Storage System Modify dialog. Do this before enabling single sign-on.
  • Return to Security Manager --> Advanced Settings, tick Enable Single Sign-on, and fill in the LDAP settings. The two fields are greyed out until the checkbox is ticked.

The LDAP fields are:

  • LDAP Server (FQDN) -- the fully qualified domain name of the LDAP/AD server, for example dc01.example.com
  • LDAP Server Base DN for Users -- the base DN under which user accounts are searched, for example dc=example,dc=com

This integration provides single sign-on for administrative access to the Storage Grid via the QuantaStor web interface, CLI, and REST API. It does not provide Active Directory integration for SMB network share access. For that, join each system to the domain via Storage Management --> Storage Systems --> Active Directory (toolbar) --> Join AD Domain.

Audit Logging

Audit logging is always on. Every management operation, login attempt and authorization decision is recorded in /var/log/qs/qs_audit.log on the appliance that handled it. Starting with QuantaStor 7.0 the records are RFC 5424 syslog records, signed with a chained HMAC-SHA256 so that tampering can be detected with qs audit-log-verify. The record format, facility settings, rotation, verification, SIEM forwarding and the Audit Log Analyzer are covered on their own page: Audit Logging.

Sending Logs to Support

QuantaStor can collect and upload system logs to OSNEXUS Support, scrubbing usernames and other security related information first so that no personally-identifiable information is transmitted, and never including data files from Storage Pools. That makes the collection GDPR compliant.

Full detail is on its own page: Sending Logs to Support.

Multi-admin Approvals

Multi-admin approvals stop a single administrator from destroying data on their own. When the policy covers an object type, a delete of that type does not run when it is requested. QuantaStor holds it as a pending request until enough other administrators approve it, and only then carries out the delete. A mistaken click, a compromised administrator account or a lone insider can therefore no longer remove a pool, volume, share or bucket unnoticed.

The policy is part of the grid-wide password and login policy held by the Security Manager, so it applies to every system in the Storage Grid.

Enabling multi-admin approvals

Security Manager, Multi-admin Approvals tab -- the approval count, the expiry and the object types whose deletes need approval.
Navigation: Security → Management Users → User → Security Manager (toolbar) → Multi-admin Approvals (tab)

Tick Enable Multi-admin Approvals, then set the two fields under Approval Settings and choose the object types under Required Approval Types.

  • Minimum Approvals -- how many administrators must agree to a delete, counting the administrator who requested it. The default and the minimum are both 2, which means one other administrator has to approve. Set 3 to require two approvers besides the requester.
  • Hours Until Auto-expiration -- how long a request stays open for approval. The default and the minimum are both 48 hours, so a request raised on a Friday is still open on Monday. An expired request can no longer be approved; request the delete again to start over.
  • Required Approval Types -- the deletes that need approval. Select All and Clear All tick or clear the whole list.
Required Approval Type Held for approval
Storage Volume : Delete Deleting a Storage Volume, including a volume snapshot
Network Share : Delete Deleting a Network Share
Bucket : Delete Deleting an object storage bucket
Scale-up Storage Pool : Delete Deleting a ZFS-based Storage Pool
Scale-out Block Pool : Delete Deleting a Ceph block storage pool
Scale-out File Pool : Delete Deleting a Ceph file system
Scale-out Object Pool : Delete Deleting an object storage pool group
Object Storage Class : Delete Deleting an object storage class
Ceph Cluster : Delete Deleting a Ceph cluster

Tick at least one type. With the checkbox enabled but no type ticked, nothing is held for approval, and the tab shows the feature as disabled the next time you open it.

To turn the feature off, clear Enable Multi-admin Approvals and click OK. Requests that are already open stay in the list until they are approved, rejected or expire.

Saving changes that touch only this tab does not raise the Security Manager's "may log users out" confirmation, because approval settings do not affect sessions or passwords.

How a held delete proceeds

  1. An administrator requests the delete in the usual way. Instead of deleting, the task completes with a description such as "Multi-admin approval pending for Storage Volume 'vol1' (1 of 2 approvals met). The delete will proceed once the required number of approvals is met." The object stays in place, and its state detail reads "Delete requested, pending approvals."
  2. Other administrators approve it from the Approve dialog described below. Each approval raises the count by one.
  3. When the count reaches Minimum Approvals, the request becomes approved and QuantaStor starts the delete straight away as a new task, run as the administrator who requested it. The options chosen with the original request carry through. For example, a Storage Pool delete keeps its Shred Encryption Keys and Shred Data choices.
  4. QuantaStor records the result. The request is marked completed once the object is gone, or failed if the object still exists after the delete task has finished.

A few rules apply throughout:

  • The requester cannot approve their own request, and each administrator can approve a request only once.
  • One request per object. QuantaStor keeps a single open request for each object and operation. When a different administrator requests the same delete again, that counts as their approval rather than opening a second request. If the original requester issues the same delete again, it is refused, because they cannot approve their own request.
  • Rejecting ends the request. Any administrator can reject an open request, and the delete does not happen. To delete the object later, start a new request.
  • Expired requests are closed automatically. QuantaStor checks for expired requests periodically, so a request can still show as pending for a short time after its expiry time. It cannot be approved once it has expired.

Approving and rejecting requests

Multi-admin Approval Request. Select one or more pending requests, then click Approve.
Navigation: Security → Management Users → Multi-admin Approval (toolbar group) → Approve

The Approve dialog lists every request still waiting for approval under Pending Multi-admin Approval Requests. For each request it shows the object's name, type and ID, the Request Status, the Required Count and Current Count, the Request Originator and the Expires Time. Select one or more requests and click Approve, then confirm.

To refuse a request instead, open Reject from the same toolbar group. It lists the same pending requests. Select the ones to stop and click Reject.

Approving and rejecting need the Administrator role, or a custom role granted the approve and reject operations on the PendingOperationRequest object type. The built-in Security Administrator role does not currently include them (see Role Based Access Controls).

You can approve from any system in the grid. QuantaStor forwards each approval to the system that owns the request, and the delete itself runs on the system that owns the object.

Request status

Status Meaning
Pending Waiting for approvals. It can be approved or rejected.
Approved Enough approvals have been received. The delete is about to start.
Running The delete task is running.
Completed Success The delete finished and the object is gone.
Completed Failed The delete ran but the object still exists, or the object or the requesting user no longer existed when the delete was due to run.
Rejected An administrator rejected the request. The delete did not run.
Expired The request reached its expiry time before it was approved.

QuantaStor removes finished requests (completed, rejected and expired) automatically after 48 hours.

Multi-admin approvals from the CLI

Set the policy with qs password-policy-set. The object types are the internal type names, comma separated: StorageVolume, NetworkShare, Bucket, StoragePool, CephPool, CephFilesystem, CephObjectPoolGroup, CephObjectStorageClass and CephCluster. Give the count and expiry explicitly: the CLI does not apply the minimums the web interface enforces. To turn the feature off from the CLI, clear the type list and set the count and expiry to 0 in one command, which is what clearing Enable Multi-admin Approvals in the Security Manager does.

qs password-policy-set --multiadmin-approval-types=StorageVolume,NetworkShare,StoragePool --multiadmin-approval-count=2 --multiadmin-approval-expiration-hours=48
qs password-policy-set --multiadmin-approval-types="" --multiadmin-approval-count=0 --multiadmin-approval-expiration-hours=0

Manage requests with the por-* (por refers to pending-object-request) commands. qs por-list shows each request's object, status (pending, approved, running, completed-success, completed-failed, rejected or expired), current and required counts, expiry time and request ID, and qs por-approve and qs por-reject take a comma-separated list of request IDs:

qs por-list
qs por-get --request-id=<request-id>
qs por-approve --request-ids=<request-id>,<request-id>
qs por-reject --request-ids=<request-id>
qs por-clear-all

qs por-clear-all removes every finished request (completed, rejected and expired) without waiting for the 48-hour automatic cleanup. It leaves pending requests alone.

Role Based Access Controls (RBAC)

Management Roles section with the default roles.

QuantaStor's Role Based Access Control system lets IT and security administrators grant access limited to a job function, following the principle of least privilege.

The RBAC system is highly granular. Each permission has three parts:

  • an object type -- for example Network Share, Storage Volume, Storage Pool
  • an operation -- for example create, delete, modify, view
  • a scope -- system, resource group, user, or none

Every QuantaStor API, CLI, and web interface command goes through the same core service, and every call passes an authentication and an authorization check. Because of that shared path, RBAC applies uniformly no matter how the account connects -- web interface, qs CLI, or REST API.

This granularity is especially useful for automation: a dedicated account can be created for a script whose role permits only the task it performs, such as creating and deleting a nightly snapshot of a Network Share.

QuantaStor ships with four default roles:

  • Administrator -- full access to all functions on all systems in the grid.
  • Security Administrator -- full control over security-related functions.
  • Object Tenant Admin -- for users managing object storage tenants.
  • System Monitor -- view only; no configuration changes.

Role Management

Create Role, showing the permission assignment grid.
Navigation: Security → Management Roles → Role → Create (toolbar)

Each user is assigned a single Role, and a role change takes effect immediately. If a user logged in as Administrator has their role changed to System Monitor, which has only view permissions, the new permissions apply to their next action. Tasks already running -- a Storage Volume create, for example -- complete at the authorization level held when the task started.

The Create Role dialog takes a Name, a Description, and an optional LDAP Group used for single sign-on.

Because a role carries hundreds of individual permissions, the dialog provides two shortcuts:

  • Copy Permissions from Role -- start from an existing role's permission set (pick the source role in the adjacent dropdown) and adjust from there. This is by far the fastest way to build a new role.
  • Apply Permission Scope to Selected -- tick a set of rows in the grid, choose a scope, and apply it to all of them at once.

The Web Interface Customization tab hides web interface tab panels and sections for every user holding the role -- the same mechanism described under Web Interface Customization, but applied per role rather than per user.

Role Permissions - Object Types

The Permission Assignments grid lists every permission as a row of Object Type, Operation, and Permission Scope.

There are 207 object types and 662 individual permissions, covering everything from the common types such as Storage Volume, Network Share, and Object Bucket through to internal types such as Acl, AlertConfiguration, and TargetPort.

Because that list is long, use the <Show All Object Types> filter above the grid to narrow it to the object type you are working on, then set the operations for that type.

Role Permissions - Operation Types

Every permission is a combination of an object type and an operation that can be performed on it. Across the default Administrator role there are 120 distinct operations; the most common are view, modify, create, and delete, with more specific ones such as add, remove, rescan, enable, disable, identify, set, and clear on the object types that support them.

This per-operation granularity is what lets a role fit a job function. A "Provisioning Administrator" role, for example, can be given create but not delete, so the routine task of provisioning storage can be delegated without the risk of data deletion.

All object types also have a view permission, and this one deserves attention: some parts of the web management interface require view permission on a type in order to function. Removing view is useful when a role should have no visibility of a type at all -- an administrator responsible only for Network Shares could have view on StorageVolume set to None, so that no Storage Volumes are visible to them.

Role Permissions - Operation Scope

Each permission's scope determines the breadth of the grant. Click a Permission Scope cell in the grid to change it.

  • Global/System -- grid-wide access to the operation on all systems.
  • None -- access to the operation is blocked entirely.
  • User -- access is limited to objects the user owns. A role with the permission Storage Volume + delete + User allows deleting only Storage Volumes for which that user is the owner.
  • Resource Group -- access is limited to the objects in the Resource Group the user is assigned to. This is how QuantaStor implements multi-tenancy; see Multitenancy.

User Management

Security tab, Management Users section.

Users in QuantaStor are management users -- accounts with access to the management interface under a specific Role.

These accounts are also created as local (Linux/Unix) users on every Storage System in the grid, with the same POSIX UID and GID on each. This enables management accounts to be used for SMB file access, which matters in environments where AD/LDAP is not configured, or where direct non-AD user access is needed.

For security, the local accounts created for SMB access are given /usr/sbin/nologin as their shell, so they cannot log in over SSH or at the console. By default the only accounts with a login shell are qadmin and root, and those should be reserved for maintenance activities. That restriction can be overridden with standard Linux user management commands, but doing so widens your attack surface and is not recommended.

Adding New Users

Add User dialog, General tab.
Navigation: Security → Management Users → User → Add (toolbar)

The General tab takes:

  • Username -- also becomes the local POSIX account name on every system in the grid.
  • Password and Repeat Password -- must satisfy the grid password policy set in the Security Manager. The factory default policy is deliberately permissive; raising it with Suggested Defaults is recommended.
  • Role -- see RBAC. Assign System Monitor to an account that only needs to observe, rather than Administrator.
  • Enable Multi-Factor Auth and Multi-Factor Auth Config -- require a second factor for this account; see Multi-factor Authentication. These are greyed out until at least one MFA configuration exists.
  • User Information -- optional First Name, Last Name, and Description.

The default admin account can be modified but cannot be deleted, and cannot be assigned any role other than Administrator.

A newly created user appears in the Users grid with its assigned Role and the POSIX User ID allocated to it, and the matching local account exists on every system in the grid immediately.

Alert Subscriptions

Add User, Alert Subscriptions tab.

Entering a user's email address and selecting the alert severity levels to subscribe to routes email alerts to that administrator. Several users can subscribe at different severities, so that (for example) only critical alerts page the on-call administrator while an operations mailbox receives everything.

Once configured, use the Alert Manager to send a test alert and confirm delivery end to end.

Web Interface Customization

Add User, Web Interface Customization tab.

In larger deployments with many administrators, or on systems built for a narrow use case, it can help to hide the interface tab panels and sections a given user does not need. This reduces complexity and makes the interface clearer for admins with a narrow remit.

Un-check the panels and sections to hide them. The user must log out and back in for the customized layout to take effect.

The same customization can be applied to a Role instead of an individual user, which is usually preferable when several people share a job function -- see Role Management.

User Account Advanced Settings

Add User, Advanced Settings tab.

The Advanced Settings tab holds three things:

  • User Default CHAP settings -- a CHAP User and CHAP Password used as this account's defaults for iSCSI authentication.
  • Customize UID/GID -- tick this to set an explicit POSIX UID and POSIX GID rather than letting QuantaStor allocate them. Set these deliberately when the account is used for SMB and NFS access and must match UIDs already in use elsewhere in your environment; the fields are greyed out until the box is ticked.
  • Enable '[QSCLITKN]' token based authentication for QS CLI via 'root' console account -- lets someone logged into a QuantaStor system as root run qs CLI commands without supplying a password each time.

To use the token authentication, tick that checkbox for the account, then, as root on the system, write a ~/.qs.cnf naming the account:

echo "localhost,admin,[QSCLITKN]" > ~/.qs.cnf

Replace admin with whichever account you enabled the option for.

Note: the first one or two qs commands after creating this file fail with "Service authentication token check failed ... remote caller will update token" while the token is being established. This is expected -- retry and the command succeeds, after which authentication is transparent.

The same mechanism can be used with a remote host rather than localhost by changing the first field.

Modifying Users

Modify User dialog.
Navigation: Security → Management Users → select a user → User → Modify (toolbar)

The Modify User dialog exposes the same settings as Create User across the same four tabs, so a user's role, alert subscriptions, interface customization, and advanced settings can all be changed after the fact. Changes take effect on the user's next action.

To change only a password, use Set Password from the User group in the toolbar rather than the full Modify dialog.

More information: Modify User.

Removing Users

Remove User dialog.
Navigation: Security → Management Users → select a user → User → Remove (toolbar)

The dialog confirms the Username and shows the account's properties before removal.

Removal takes effect immediately and grid-wide. A user who is logged into the web interface when their account is removed loses access to all systems in the grid at once, and the matching local POSIX account is deleted from every Storage System.

The default admin account cannot be removed.

More information: Removing Users.

User Group Management

Create User Group dialog.

User Groups collect users under a common POSIX GID, which is useful when several users need to be owners of the same Network Share.

Navigation: Security → Management Groups → User Group → Create (toolbar)

The Create User Group dialog takes a Name, an optional Description, an optional POSIX GID (allocated automatically if left blank), and a grid from which to select one or more users for the group.

Group membership can be changed later with Add/Remove Users, and the group's other properties with Modify. Delete removes the group; the user accounts themselves are unaffected.

Multitenancy / Resource Group Management

Multitenancy tab.

Resource Groups are multi-tenant containers that group users together with resources -- Storage Volumes, Network Shares -- and with provisioning quotas for self-service provisioning from Storage Pools.

Navigation: Multitenancy (main tab)

The Resource Group toolbar group provides Add/Remove Users, Add/Remove Tenants, Add/Remove Service Configs, and Add Network Association / Remove Network Association for binding a group to specific networks. The Provisioning Quota group provides Create, Modify, and Delete for quotas, plus Add/Remove Volumes and Add/Remove Shares to place resources into a group.

Users assigned to a Resource Group should hold a role whose permissions are scoped to Resource Group rather than Global/System, so that their view of the grid is limited to the resources in their group. The Object Tenant Admin role is the shipped starting point for object storage tenants; for file and block multi-tenancy, create a role with the permissions you want at Resource Group scope -- see Operation Scope.

Further information: Create a Resource Group.

System Setup Security Checks

The steps in this section are the minimum hardening pass for a newly deployed QuantaStor system. All of them should be completed before the system carries production data.

  1. Change the qadmin console password from its default.
  2. Change the admin management password from its default.
  3. Apply Suggested Defaults in the Security Manager to raise the password and lockout policy.
  4. Set Web Access Mode to HTTP redirects to HTTPS or HTTP disabled.
  5. Replace the shipped self-signed certificate -- see Installing Your Own Certificate.
  6. Block unused protocols in the firewall.
  7. Consider enabling multi-factor authentication for administrative accounts.

Change Passwords

QuantaStor ships with two default accounts that must both be changed. They are separate accounts with separate passwords: qadmin is the console/SSH account, admin is the management interface account.

Change SSH Console Administrator Account 'qadmin' Password

One of the most important steps in configuring a new QuantaStor system is changing the qadmin console password from its default of qadmin on each Storage System.

Log in at the console as qadmin, or connect over SSH as qadmin, then run:

passwd

Choose a strong password containing upper and lower case letters, numbers, and symbols. Repeat this on every Storage System in the grid -- this is a local console account, so changing it on one system does not change it on the others.

Note that this password is independent of the grid password policy configured in the Security Manager, which governs management users only.

Change Management Administrator Account 'admin' Password

Set Password dialog.

Log in to the web management interface as admin and change the default password, which is password.

Navigation: Security → Management Users → select the admin user → User → Set Password (toolbar)

The new password must satisfy the grid password policy. Use at least 10 characters with upper and lower case letters and numbers -- or raise the policy first with Suggested Defaults so the requirement is enforced for every account rather than relying on convention.

Old Password is disabled while the session is logged in as admin, so changing that account's password needs only the new password and its confirmation. For every other account the field is required and the current password has to be entered as well. The permitted length range comes from the grid password policy rather than being fixed by the dialog.

Unlike qadmin, this is a grid-wide management account: changing it once changes it for the whole Storage Grid.

Firewall Configuration

Storage System Modify, Firewall tab.

QuantaStor has an integrated firewall management system that controls protocol access both at the system level and per network port. For high-security environments it is recommended to block every protocol that will not be used.

Navigation (system level): Storage Management --> select a Storage System --> Modify (toolbar) --> Firewall (tab)

Navigation (per port): Storage Management --> Network Ports --> select a port --> Modify Network Port (toolbar or right-click) --> Firewall (tab)

The Firewall tab lists each service with a description and an Allow checkbox. The services managed are:

  • QS Web Management -- web management interface access
  • QS REST API -- REST API access to management functions
  • iSCSI Target -- iSCSI protocol access to Storage Volumes
  • NVMeoF Target -- NVMe over Fabrics access
  • SMB -- SMB/CIFS file access
  • NFS and NFS Ganesha -- NFS file access, scale-up and scale-out respectively
  • Ceph -- scale-out cluster communication
  • Grafana -- Grafana monitoring and statistics
  • Prometheus -- Prometheus monitoring and alerting
  • Chronograf -- Chronograf monitoring

Clear the Allow box for any service you do not use. A common hardening pass on a file-only deployment, for example, is to leave SMB and NFS enabled and clear iSCSI Target, NVMeoF Target, and Ceph.

Be careful not to block the protocol you are managing the system with: clearing QS Web Management on the port you are connected through will cut off your own session. Note also that Web Access Mode set to HTTP disabled installs its own rule dropping port 80, independently of these checkboxes.

Use Apply to commit changes without closing the dialog.

SSL/TLS Certificate & Web Access Security

QuantaStor serves the web management interface, the REST API, and the internal grid communication channels over TLS. The web management interface is served by nginx and the TLS settings, ciphers, and certificates are all managed by QuantaStor.

Web Access Mode

The single most important web security setting is the Web Access Mode, which controls whether plain HTTP is served at all.

Navigation: Security → Management Users → User → Security Manager (toolbar) → Advanced Settings

The three modes are:

  • HTTP enabled (INSECURE) -- port 80 serves the interface over plain, unencrypted HTTP. This is the factory default so that a newly-imaged appliance is reachable before certificates are in place; it is not appropriate for production.
  • HTTP redirects to HTTPS (recommended) -- port 80 answers with a 301 redirect to HTTPS. Nothing sensitive traverses the network in the clear, but a user who types the bare hostname still lands on the interface.
  • HTTP disabled -- port 80 is dropped at the firewall entirely. Use this in high-security environments where an open port 80, even one that only redirects, is not acceptable.

Changing this setting switches the active nginx site configuration and, for HTTP disabled, also installs a firewall rule that drops port 80. The change applies immediately -- no reboot is required.

The Web Access Mode affects port 80 only. The HTTPS listener on port 443 uses the same TLS versions, cipher list, and certificate in every mode, so switching modes does not change the encryption offered to HTTPS clients -- it only determines whether an unencrypted alternative is reachable. Setting the mode to HTTP redirects to HTTPS should nonetheless be treated as a required hardening step on every production deployment.

Changing this setting prompts a confirmation warning that the change may log users out of the interface and cause passwords to expire; the mode change itself takes effect as soon as you confirm.

Supported TLS Versions and Ciphers

QuantaStor's nginx configuration accepts TLS 1.2 and TLS 1.3 only, in all web access modes, with server cipher preference enabled and the cipher list restricted to modern AEAD suites: (Note: due to the frequency of security updates this may be out of date and system configuration files should be referenced.)

ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256

SSLv3, TLS 1.0, and TLS 1.1 are not accepted. (Note: due to the frequency of security updates this may be out of date and system configuration files should be referenced.) The interface also sends an HSTS header (Strict-Transport-Security) with a one year max-age.

The shipped defaults live in this file, which is replaced on upgrade and should not be edited in place:

/opt/osnexus/common/lib/nginx_quantastor_ssl_default.conf

To customize the TLS settings or point nginx at your own certificate, use the qs-util helper to copy the defaults to a user-editable location that upgrades will not overwrite:

qs-util wuicustomcerts

This creates the following file, which you then edit:

/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf

Cipher settings for the QuantaStor grid communication channels (separate from the web interface) are controlled by:

/opt/osnexus/common/lib/qsciphers

That shipped file is replaced on upgrade, so it should not be edited in place. To customize the grid communication ciphers, place your own copy at the override location below. The override does not exist by default -- create it only when you intend to depart from the shipped cipher list, and QuantaStor will use it in preference to the shipped file and leave it untouched across upgrades:

/var/opt/osnexus/quantastor/ssl/qsciphers

Default Certificate

QuantaStor ships with a common self-signed certificate that is pre-generated and included with all deployments. Because it is self-signed and shared across all deployments, browsers will warn on first connection, and it provides no identity assurance. Replacing it is recommended for any deployment reachable beyond a trusted management network.

The certificate and key used by the web interface and REST service are here:

/var/opt/osnexus/quantastor/ssl/qsrestsrv.pem

Grid communication uses a separate pair:

/opt/osnexus/common/lib/qsserver.pem
/opt/osnexus/common/lib/qsclient.pem

All of these are discovered and monitored automatically -- see Certificate Management below, which is the recommended way to review and replace them.

Installing a Custom Certificate

The recommended way to install your own certificate is through Certificate Management -- add the certificate as a template once, then apply it to the NGINX use case on each Storage System. That keeps the certificate inventory, expiry monitoring, and alerting accurate, and avoids editing nginx configuration by hand. See Installing Your Own Certificate.

Use the manual procedure below only when you need to change nginx TLS directives themselves (for example to further restrict the cipher list), since those are not expressible as a certificate template:

  • Run qs-util wuicustomcerts to copy the shipped defaults to an editable file that upgrades will not overwrite.
  • Edit /var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf.
  • Reload nginx to apply:
systemctl reload nginx
  • Verify the negotiated protocol and cipher from a client:
openssl s_client -connect <system-ip>:443 </dev/null 2>/dev/null \
  | grep -E 'Protocol|Cipher is'

Repeat on each Storage System in the grid, or use the Certificate Management section to confirm all systems at once.

Note: if you are using Firefox and have previously accepted the old self-signed certificate, clear the cached certificate exception for the host or Firefox will continue to present the stale certificate warning.

Custom SSL Certificates and TLS Security

  • Generating and installing custom SSL certificates, and applying custom TLS security settings. For most deployments the Certificate Management section above is the better route, since it keeps the certificate inventory and expiry alerting accurate.

Custom SSH Ciphers and Key Exchange Algorithms

  • Customizing the SSH service to enforce strong ciphers and key exchange algorithms for SSH communication.

Certificate Management

Certificates section showing every certificate on every Storage System in the grid.

QuantaStor discovers, inventories, and monitors every TLS certificate in use across the Storage Grid, so administrators can see at a glance what is installed, what it is used for, and when it expires.

Navigation: Security → Certificates

The Certificates section lists certificates grouped by Storage System. For each certificate the grid shows its file path, State, Use Case, description, certificate modulus MD5, serial number, and the start and end of its validity period. Because the view spans the whole grid, a single screen confirms that every system is using the certificate you expect.

Certificate Use Cases

Each certificate is tagged with the service that consumes it:

  • NGINX -- the certificate served to browsers for the web management interface.
  • Rest Service -- the certificate presented by the QuantaStor REST API service.
  • QuantaStor Service [Grid Communication] -- the server-side certificate for inter-node grid communication.
  • Client [Grid Communication] -- the client-side certificate a node presents to its peers.
  • HAProxy -- the certificate used by the integrated load balancer, when configured.
  • Object Gateway -- the certificate used by the Ceph S3/Object Gateway. Two use cases are available, for a first and second gateway instance (cephrgw-1 and cephrgw-2 on the CLI).

Note that the same PEM file may appear more than once with different use cases when one certificate serves several roles -- for example qsrestsrv.pem is used for both NGINX and Rest Service.

Certificate Expiration Alerts

QuantaStor monitors validity dates and raises alerts as a certificate approaches expiry, so a certificate never lapses unnoticed. Alerts are raised at 90, 60, 30, 7, and 2 days before expiry, and again once the certificate has actually expired.

The longer-lead warnings are only raised for certificates with a correspondingly long lifetime -- the 90 day warning applies to certificates valid for more than 18 months, the 60 day warning to those valid for more than a year, and the 30 day warning to those valid for more than 90 days. This prevents short-lived certificates from generating alerts the moment they are installed. The 7 day, 2 day, and expired alerts always apply.

Alerts are delivered through the standard QuantaStor alerting system, so they reach whatever email and SNMP destinations you have configured in the Alert Manager.

Certificate Templates

A certificate template holds a certificate (and its private key) that you have obtained from your CA, stored once in the grid so it can be applied to any service on any Storage System. Templates are what make it possible to roll out your own certificate across the grid from the management interface instead of copying PEM files onto each node by hand.

Navigation: Security → Certificates → Certificate Templates (tab)

The toolbar provides Add Template, Update, Remove Template, and Certificate Template Manager for reviewing and maintaining templates.

Installing Your Own Certificate

This is the recommended way to replace any of QuantaStor's default self-signed certificates, including the one served by the web management interface.

  • Obtain a certificate and private key from your CA.
  • Add a template from the certificate. Supply a name, a description, and the PEM file containing the certificate and key block. If the private key is in a separate file, supply it as well.
  • Apply the template to the use case you want it to serve on a given Storage System -- for example apply it to the NGINX use case to change the certificate browsers see for the web management interface.
  • Repeat the apply step for each Storage System, and for each use case the certificate should cover.

IMPORTANT -- the certificate must contain a Subject Alternative Name (SAN). QuantaStor validates certificates before accepting them as a template and rejects any certificate without a SAN extension, with the error "Certificate validation failed. Unable to create certificate template out of invalid certificate." A Common Name alone is not sufficient. Include every name and address the systems will be reached by -- the FQDN, the short hostname, and the management IP. When generating a self-signed certificate with openssl req, add the SAN explicitly:

openssl req -x509 -newkey rsa:2048 -nodes -days 365 \
  -subj "/C=US/ST=<state>/L=<city>/O=<org>/CN=<fqdn>" \
  -addext "subjectAltName=DNS:<fqdn>,DNS:<hostname>,IP:<system-ip>" \
  -keyout mycert.key -out mycert.crt

cat mycert.crt mycert.key > mycert.pem

You can check a certificate against QuantaStor's validation rules before importing it:

/opt/osnexus/quantastor/bin/qs_certutil.sh validate --pem-file <path-to-pem>

From the CLI the two steps are:

qs cert-tmpl-add --name=<template-name> --description=<text> \
                 --certificate-pem-data=<path-to-pem> \
                 [--privatekey-pem-data=<path-to-key-pem>]

qs cert-update --storage-system=<system> --cert-use-case=2 \
               --cert-tmpl=<template-name>

Note: --cert-use-case currently requires the numeric use case value rather than its name. The values are 0 none, 1 haproxy, 2 nginx, 3 cephrgw-1, 4 cephrgw-2, 5 qsrest, 6 qsserver, 7 qsclient.

QuantaStor reloads the affected service automatically once the certificate is applied, so the new certificate is served without further action -- nginx for the NGINX and Rest Service use cases, HAProxy for HAProxy, and the Object Gateway services for the gateway use cases. nginx is reloaded rather than restarted, so applying a web interface certificate does not disconnect your own management session.

Note for QuantaStor releases prior to 6.9: the nginx reload was not performed automatically, and the appliance would continue to present the previous certificate until nginx was reloaded by hand:

systemctl reload nginx

Confirm what is actually being served, including the SAN:

openssl s_client -connect <system-ip>:443 </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -dates -ext subjectAltName

Rescanning Certificates

If a certificate is replaced outside of QuantaStor -- for example by editing the nginx configuration directly, or by a external renewal process dropping in a new PEM -- use Rescan to re-read the certificates from disk and refresh the inventory, validity dates, and alert state.

Navigation: Security → Certificates → Rescan (toolbar)

Reviewing Certificates from the CLI

The same inventory is available from the QuantaStor CLI, which is convenient for scripted compliance checks:

qs cert-list
qs cert-get --cert=<name-or-id>
qs cert-rescan --storage-system=<system>

Certificate templates have a matching set of commands:

qs cert-tmpl-list
qs cert-tmpl-get --cert=<name-or-id>
qs cert-tmpl-rm --cert=<name-or-id>

For TLS version and cipher settings, see Supported TLS Versions and Ciphers.

Endpoint Detection & Response (EDR)

EDR Agents section. Agents are installed per Storage System and report vendor, status, version, and enabled features.

Many security standards and cyber-insurance policies require an endpoint detection and response (EDR) agent on every server, including storage appliances. QuantaStor can deploy and manage a vendor EDR agent on each Storage System in the grid directly from the web management interface, so the appliances are covered by the same endpoint security tooling as the rest of the fleet without hand-installing agents over SSH.

Navigation: Security → EDR Agents

The EDR Agents section lists the installed agents with their Name, State, Storage System, Vendor, Status, Version, and the set of Features the agent has enabled.

Supported EDR Vendors

Bitdefender GravityZone is the currently supported EDR platform, on Ubuntu 22.04, Ubuntu 24.04, RHEL 8, and RHEL 9. Additional vendor modules use the same framework and are being added; contact OSNEXUS at info@osnexus.com if you need a specific EDR platform supported.

Vendor modules are defined on the appliance in:

/opt/osnexus/quantastor/conf/qs_endpoint_security.conf

Installing an EDR Agent

Install EDR Security Agent dialog.

Before starting, create an installation package for Linux servers in your Bitdefender GravityZone console and note either the package id or the full setup downloader URL the console provides. The feature set of the agent (which protection modules are enabled) is chosen in the GravityZone console when the package is created, and QuantaStor reads that selection back from the installer. Individual protection modules can optionally be overridden from the QuantaStor side at install time -- see the --feature-flags argument in the CLI section below.

OSNEXUS recommends a package with Antimalware, Advanced Threat Control, Advanced Anti-Exploit, Network Attack Defense and the EDR Sensor enabled. These are our recommended settings, but you may find further customization is needed for your environment. In our testing we did not find that Bitdefender was using much CPU and other resources, but depending on your configuration settings you may need to narrow scanning and other options to reach a fair compromise of strong security with minimal performance impact.

Navigation: Security → EDR Agents → Install Agent (toolbar)

You can also right-click a Storage System to install an agent on it.

In the Install EDR Security Agent dialog:

  • EDR Module -- select the vendor module, e.g. Bitdefender.
  • Install Key / URL -- paste either the short GravityZone package id (e.g. aabbccdd) or the full setup_downloader.tar URL copied from the GravityZone console. Both forms are accepted, which matters because the vendor's URL format changes from time to time.
  • Storage Systems -- tick each system to install the agent on. The grid shows the service, kernel, and distribution version of each system so you can confirm platform support before installing.

QuantaStor then downloads the installer package from GravityZone onto each selected system, installs the agent, and registers it. Because the appliance must reach the GravityZone service to download the package, ensure outbound access to your GravityZone endpoint is permitted -- see Firewall Configuration.

Note that the registration key is supplied at install time and stored per node; it is not kept in the vendor module configuration file.

Monitoring and Removing Agents

Once installed, an agent's Status and Version are refreshed automatically and shown in the EDR Agents grid, so an agent that has stopped running is visible from the management interface rather than only from the vendor console.

To remove an agent, select it and choose Uninstall Agent.

Navigation: Security → EDR Agents → Uninstall Agent (toolbar)

EDR Management from the CLI

The same operations are available from the QuantaStor CLI:

qs edr-agent-list
qs edr-agent-get --edr-agent=<name-or-id>
qs edr-agent-create --system-list=<systems> --module=Bitdefender \
                    --registration-key=<package-id-or-url>
qs edr-agent-delete --edr-agent=<name-or-id>
qs edr-agent-rescan

--module takes the module's vendor name exactly as qs edr-agent-module-list shows it -- Bitdefender, with a capital B. The match is case-sensitive.

The create command also accepts an optional --feature-flags argument taking a JSON object, to override individual protection modules without changing the GravityZone package:

qs edr-agent-create --system-list=qs-node-a --module=Bitdefender \
                    --registration-key=aabbccdd \
                    --feature-flags='{"FileScan":1,"Firewall":0}'

To review the available vendor modules and their supported platforms:

qs edr-agent-module-list
qs edr-agent-module-get --module=Bitdefender

Custom S3 SSL/TLS Certificate

  • Installing a custom certificate for the S3/Object Gateway endpoint. See also the Object Gateway certificate use cases under Certificate Use Cases.

Multi-factor Authentication

Multi-Factor Authentication Manager.

Multi-factor authentication (MFA) requires a user to present a second factor, such as a device, in addition to their password. QuantaStor supports MFA for management logins.

Navigation: Security → Management Users → User → Multi-Factor Auth Manager (toolbar)

An MFA configuration must exist before MFA can be enabled on any account. The manager lists the existing configurations by Name and Provider and provides Create..., Modify..., Delete..., and Assign/Unassign... for attaching a configuration to user accounts.

The supported providers are:

Creating a configuration takes a Provider, a Name, an optional Description, the API Host for your tenant, and the keys issued by the provider:

  • Cisco Duo -- the Integration Key and Secret Key from your Duo Auth API application.
  • OKTA -- an Okta API token as the Integration Key, and no Secret Key (the field is disabled when OKTA is selected). The API Host is your Okta org host name, such as yourcompany.okta.com. QuantaStor finds each user in Okta by the account's Email Address, so every Okta-protected account needs one that matches its Okta user.

Once a configuration exists, enable MFA per account with Enable Multi-Factor Auth and Multi-Factor Auth Config on the Add User or Modify User dialog. The Force (required when in use) option in the manager applies to Delete...: it allows deleting a configuration that is still assigned to accounts, and turns MFA off on those accounts.

Contact OSNEXUS at info@osnexus.com for guidance on additional MFA options.

Security Updates

QuantaStor supports automatic security updates through the Upgrade Manager in the web management interface.

Navigation: Storage Management → Upgrade Manager (toolbar)

Applying security updates through the Upgrade Manager is the supported path -- it applies the updates OSNEXUS has qualified against the running QuantaStor release, in the correct order, across the systems you select. Installing distribution packages directly with apt is not recommended, as it can introduce package versions that have not been qualified against the release.

Encrypting NFS/SMB/iSCSI via IPsec

Protocols such as NFSv3 do not encrypt data on the wire. Where the storage network is not itself trusted, set up an encrypted tunnel between the client and the QuantaStor system so that protocol traffic is protected in transit.

More information on configuring IPsec on QuantaStor systems is available here.

Note that IPsec protects data in transit. For data at rest, QuantaStor provides Storage Pool encryption, which is configured when the pool is created and is covered separately in the administrator guide.


Related pages


Verified against QuantaStor 6.9.0.