Security Configuration: Difference between revisions

From OSNEXUS Online Documentation Site
Jump to navigation Jump to search
m EDR: OSNEXUS recommended GravityZone package modules and performance guidance
 
(26 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 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.


''' OSNEXUS Videos '''
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].
* [[Image:youtube_icon.png|50px|link=https://www.youtube.com/watch?v=bcg9M5TGbBA]] [https://www.youtube.com/watch?v=bcg9M5TGbBA Covers QuantaStor 5 Security Configuration for HIPAA, CJIS, NIST, and GDPR Compliance. (25:09)]


Nearly all of the settings on this page are reached from the '''Security''' tab of the QuantaStor web management interface, which contains these sections:
{| class="wikitable"
! Security tab section !! Covers !! On this page
|-
| '''Management Users''' || User accounts, password policy, multi-factor authentication || [[#Security Settings Management|Security Settings]], [[#User Management|Users]], [[#Multi-factor Authentication|MFA]]
|-
| '''Management Groups''' || User groups and their shared POSIX GID || [[#User Group Management|User Groups]]
|-
| '''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:Securitymanager.PNG|thumb|left|500px]]  
[[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 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|Multi-admin Approvals]]'''.
 
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.
 
'''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 ===
 
[[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 Directory domain for '''management user''' authentication.
 
To configure this:
 
* 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|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.
* 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 {{Code|1=dc01.example.com}}
* '''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 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 {{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]]'''.
 
=== 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 → 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.
 
{| 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.


[[File:Scrty Manager Web.jpg|512px|thumb|Edit Security Settings.]]
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.


Many industries require compliance with government security standards which require products to enforce rules ranging from audit logging to password policies.  These include Health and Human Services (HSS) 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 general security standards outlined by NIST for
=== How a held delete proceeds ===
Controlled Unclassified Information (CUI) in Non-Federal Information Systems and Organizations which are covered in NIST 800-53 and [https://csrc.nist.gov/publications/detail/sp/800-171/rev-2/final 800-171].


To configure a QuantaStor Storage Grid to meet compliance rules for these various standards navigate to the Security Manager section in the web management interface.
# '''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."''
# '''Other administrators approve it''' from the '''Approve''' dialog described below. Each approval raises the count by one.
# '''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.


'''Navigation:''' Security --> Management User --> User --> Security Manager ''(toolbar)'' [[https://wiki.osnexus.com/index.php?title=Password_Policy_set Security Manager]]
A few rules apply throughout:


Choosing the '''Suggested Defaults''' option will automatically setup the password and other policies to meet the various standards mentioned above. Further tuning of these settings can then be done to meet the specific requirements for a given deployment and environment.
* '''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 → 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 (RBAC)|Role Based Access Controls]]).


=== LDAP Single-Sign-On Authentication ===
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.


[[File:Securitymanager_adv.PNG|thumb|right|500px]]
=== Request status ===


In the Advanced Settings page there are some options for connecting your QuantaStor Storage Grid to your LDAP/AD domain for management user authentication. To configure this you'll need to add one or more LDAP groups to your LDAP environment such as "QS-Administrator" and "QS-Monitor" and then associate one or more of your LDAP users with those groups. Next, within QuantaStor one will use the Modify Role dialog to edit an existing Role to associated it with the LDAP groups.  For example, the "Administrator" role could be modified to associate it with the LDAP group "QS-Administrator" and similarly, the role for "System Monitor" may be associated with the LDAP group "QS-Monitor".
{| class="wikitable"
! 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.
|}


After that you'll enable Single-Sign-On and provide the LDAP domain information for your LDAP environment.  Note also that your DNS and NTP settings should be configured to point to your AD server for both local DNS and NTP.  This can be configured in the Storage System Modify dialog and should be setup before enabling Single-Sign-On.
QuantaStor removes finished requests (completed, rejected and expired) automatically after 48 hours.


* LDAP Server (FQDN): EXAMPLE
=== Multi-admin approvals from the CLI ===
* LDAP Server Base DN for Users: dc=ldapserver,dc=example,dc=com


Note, this integration with LDAP is for SSO access to the storage grid for administrative access via the QuantaStor WUI, CLI, and APIs. It does not provide integration with Active Directory for Network Shares and SMB protocol access.  For that you'll need to join each system to your AD domain using the dialog under '''Storage Management --> Storage Systems --> Active Directory [toolbar] --> Join AD Domain'''.
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.


=== Audit Logging ===
<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>


Audit logging of management operations is on by default on all QuantaStor systems and cannot be disabled. The audit log information is available on QuantaStor systems at '''/var/log/qs/qs_audit.log''' and is stored in a NIST compliant CEE JSON format for easy parsing.
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:


=== GDPR Compliant Secure Log Send ===
<pre style="font-size: smaller">
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
</pre>


QuantaStor systems have a Send Logs feature which will send the system logs for the selected systems to OSNEXUS Support.  The log collection collects the syslog as well as system hardware configuration information and much of the log information found under /var/log/ on the system.  To ensure no personally-identifiable-information (PII) is sent to OSNEXUS the log collection system built into QuantaStor scrubs the logs of usernames and other security related information before the logs are sent to OSNEXUS to ensure GDPR compliance. QuantaStor log collection never collects data files from Storage Pools only system log and configuration files.
<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:Add Mdfy Rmv Users.jpg|512px|thumb| Add/Modify/Remove Users.]]
[[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 (RBAC) system makes it possible for IT administrators and security admins to setup access to QuantaStor systems which is limited to job functions following the [https://en.wikipedia.org/wiki/Principle_of_least_privilege principal of least privilege] security practices. QuantaStor's RBAC system is highly granular so that one can control access to specific operations such as provisioning Network Shares or snapshot Network Shares.  Each '''permission''' in the RBAC system has three parts, a object type (eg: Network Share, Storage Volume, Storage Pool), an operations (eg: create, delete, modify, view), and a scope (eg: system, resource-group, user, or none). This enables one to control at a very granular level what a given Role allows and is especially useful in automation as a user accounts can be created for scripts with have a role which limits the given script to just it's assigned task such as creating and deleting a nightly snapshot of a Network Share.
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].
 
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, {{Code|1=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 ===
=== Role Management ===
To create a new Role in the RBAC system navigate to this section of the web management interface.  Each user can be assigned to a single Role and once assigned to a given Role it becomes active immediately.  For example, if a user is logged in as an '''Administrator''' and their Role is changed to '''System Monitor''' which only has view permissions their new permissions are in effect for the next action they take.  Tasks that are already running such as a Storage Volume create would complete given the authorization level a given user is at at the time the task starts.


'''Navigation:''' Security --> Management Users --> Role --> Create ''(toolbar)''
[[File:security_role_create.png|thumb|right|570px|Create Role, showing the permission assignment grid.]]
 
{{Navigation|Security &rarr; Management Roles &rarr; Role &rarr; 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 '''[[#LDAP Single-Sign-On Authentication|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.


[[File:Create User Role.jpg|thumb|412px]]
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.


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


Every QuantaStor API/CLI/WUI command in QuantaStor goes through the same core QuantaStor service and every call goes through an authentication and a authorization check. When creating a new Role one can copy the permissions from another Role to help save time as there are over 100 different object types and over 600 permissions that can be set including the most common types such as Storage Volumes, Network Shares, and S3 Buckets.
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 ===
=== Role Permissions - Operation Types ===


Every permission is a combination of a Object Type (eg: Storage Volume) and an '''operation''' that can be done on that object type such as '''create''' and '''delete'''. This per-operation level of granularity is important so that one can create Roles that fit job functions.  For example, a Role such as "Provisioning Administrator" could be created with the ability to do '''create''' operations but not '''delete''' operations so that the common task of provisioning storage can be delegated without the risk of that leading to data deletion or other configuration changes.
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.


Note that all objects have a '''view''' permission associated with them as well and this permission is important for some parts of the QuantaStor web management interface to function.  Removing '''view''' permissions from a Role can be useful when a given Role should not have any visibility to a given type of object.  For example, an administrator role that's setup to manage only Network Shares could have the '''view''' permission for '''StorageVolume''' object type set to '''None''' so that that admin cannot see any of the Storage Volumes.  Because of the SOA architecture of the QuantaStor storage grid these security settings are applied universally irrespective of how that user account is accessing the system be it by QS CLI, web management interface or the QuantaStor REST API.
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 ===
=== Role Permissions - Operation Scope ===


When a Role is assigned an operation it is generally given a '''scope''' of either '''Global/System''' which provides grid-wide access to the given operation on all systems or it is set to a '''scope''' of '''None''' which universally blocks access to the given operation.
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 / Resource Group Management|Multitenancy]]'''.
== User Management ==
 
[[File:security_users_section.png|thumb|right|800px|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 {{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.
 
=== Adding New Users ===


There are two other scopes, specifically '''User''' scope and '''Resource Group''' scope. The '''User''' scope limits management access to those objects which the '''User''' is the assigned owner.
[[File:security_user_add.png|thumb|right|610px|Add User dialog, General tab.]]


For example, Role can be created with the permission '''Storage Volume + delete + User'''.  Any user assigned this Role would only be able to delete Storage Volumes for which they are the owner.
{{Navigation|Security &rarr; Management Users &rarr; User &rarr; Add ''(toolbar)''}}


Resource Group level scope is how QuantaStor implements Multi-tenancy.  In the Multi-tenancy tab one can create Resource Groups which are a collection of objects such as Storage Volumes and Network Shares.  If a user is assigned to a Resource Group then all of their permissions at the scope of '''Resource Group''' become active for the set of objects in that Resource Group.
The '''General''' tab takes:


== User Management ==
* '''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 Settings Management|Security Manager]]'''.  The factory default policy is deliberately permissive; raising it with '''Suggested Defaults''' is recommended.
* '''Role''' -- see '''[[#Role Based Access Controls (RBAC)|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|Multi-factor Authentication]]'''.  These are greyed out until at least one MFA configuration exists.
* '''User Information''' -- optional First Name, Last Name, and Description.


[[File:user_create.png|thumb|600px]]
The default '''admin''' account can be modified but cannot be deleted, and cannot be assigned any role other than '''Administrator'''.


Users in QuantaStor are '''management users''' which are given access to the QuantaStor web management interface with specific permissions.  These user accounts are also created as local (Linux/Unix) users within each '''Storage System''' the Storage Grid.  This is done to enable use of management accounts for SMB file access, especially for environments where AD/LDAP is not configured or where special direct non-AD user access is needed.  Note that for security reasons the local Linux user accounts created to enable SMB access do not allow login access to the system via SSH or the console.  That can be overridden by using Linux user management commands which edit the /etc/passwd file to allow a login shell.  By default the only SSH and console accounts that allow login should be the '''qadmin''' console user account and/or the '''root''' user account and these accounts should only be used for special maintenance activities.
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.


=== Adding New Users ===
==== Alert Subscriptions ====
To add a new user to the Storage Grid with management permissions limited to the selected Role simply bring up the Add User dialog from the web management interface.
[[https://wiki.osnexus.com/index.php?title=User_Add Add Users]]


Each user associated with a Role that grants them permissions. The '''Administrator''' role enables access to all management functions on all systems in a given Storage Grid. The default '''admin''' user account can be modified but cannot be deleted and cannot be set to any role except the '''Administrator''' role.  When adding a new user that should only have access to monitor systems assign them to the '''System Monitor''' role rather than the '''Administrator''' role.  The other default roles such as '''Cloud Administrator''' and '''Cloud User''' are useful for multi-tenancy applications.
[[File:security_user_alerts.png|thumb|right|610px|Add User, Alert Subscriptions tab.]]


When assigning a password to a new user note that the password must be compliant to the security profile configured for the Storage Grid.  The default policy is very flexible but it is generally recommended to increase security compliance level for your storage grid using the Security Manager and the '''Suggested Defaults''' option.
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.


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


[[File:user_alerts.png|thumb|300px]]
==== Web Interface Customization ====


By inputting a given user's email address and selecting alert levels to subscribe to one can route email based system alerts to multiple administrators. Once configured here use the Alert Manager to send one or more test alerts to ensure they're being received by the user.
[[File:security_user_webcustom.png|thumb|right|610px|Add User, Web Interface Customization tab.]]


==== Customizing Web Management User Experience ====
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.


In larger configurations with many administrators or for QuantaStor systems setup for narrow use cases it can be helpful to turn off the tab panels in the QuantaStor web management interface for features that a given user need not see.  This reduces complexity and makes the user experience better for admin users with narrow roles or systems deployed for a specific narrow use case.  Simply un-check the panels and sections to hide them and then re-login as that user to get the customized web management interface experience.
Un-check the panels and sections to hide them.  The user must '''log out and back in''' for the customized layout to take effect.


[[File:user_web_access.png|thumb|300px]]
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]]'''.


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


[[File:Add User - Adv Settings.jpg|400px]]
[[File:security_user_advanced.png|thumb|right|610px|Add User, Advanced Settings tab.]]
 
The '''Advanced Settings''' tab holds three things:


The Advanced Settings section enables one to customize the posix UID/GID of the user which is helpful for user accounts that are used for SMB and NFS access.  Another key feature in this section is the option to '''Enable Console CLI Authentication'''.  This enables one to run '''qs''' CLI commands when logged into a QuantaStor system as root without having to input the password each time.
* '''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 {{Code|1=qs}} CLI commands without supplying a password each time.


When logged in as '''root''' on a given QuantaStor system run this command to save the auto-authentication credentials after enabling '''Enable Console CLI Authentication''' and replace the '''admin''' username with whichever account you've enabled this feature for if not the '''admin''' user.
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:


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


=== Modifing Users ===
Replace {{Code|1=admin}} with whichever account you enabled the option for.
The User Modify dialog provides the ability to change all the same settings provided in the Create User dialog, more information is available [[User_Modify|here]].
 
'''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.
 
The same mechanism can be used with a remote host rather than {{Code|1=localhost}} by changing the first field.
 
=== Modifying Users ===
 
[[File:security_user_modify.png|thumb|right|610px|Modify User dialog.]]
 
{{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 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: [[User_Modify|Modify User]].


=== Removing Users ===
=== Removing Users ===


User accounts can be removed from a Storage Grid at any time and come into effect immediately.  A user that is logged into the QuantaStor web manager interface that has their user account removed will lose all access from all systems in the grid immediately. For more information on Removing Users see this section on [[User_Remove|Removing Users]].
[[File:security_user_remove.png|thumb|right|390px|Remove User dialog.]]
 
{{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 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: [[User_Remove|Removing Users]].


== User Group Management ==
== User Group Management ==


Just as one can create User accounts one can also create User Groups. User Groups are helpful for grouping users under a common GID which is helpful when assigning multiple users as owners of a given Network Share. To Create and Modify User Groups navigate to the '''Users & Groups''' main tab, then choose the '''Management Groups''' section.
[[File:security_usergroup_create.png|thumb|right|534px|Create User Group dialog.]]
Next add, modify or remove a given User Group.
 
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 &rarr; Management Groups &rarr; User Group &rarr; Create ''(toolbar)''}}


'''Navigation:''' Users & Groups --> Management Users --> 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'''.


[[File:Create User Grp.jpg|300px|thumb]]
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 / Resource Group Management ==


Resource Groups are multi-tenant containers for grouping users with resources such as storage volumes, network shares, and provisioning quotas for self-service provisioning from storage pools. Users that are assigned to a storage cloud should be assigned the '''Cloud User''' or the '''Cloud Administrator''' role so that their view of the available resources in the grid is limited to just those that have been added to their assigned Resource Group.  See the '''Multitenancy''' tab to Create, Modify and Delete Resource Groups. Further information is available here under [[Create_Resource_Group| Create a Resource Group...]]
[[File:security_multitenancy.png|thumb|right|800px|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 '''[[#Role Permissions - Operation Scope|Operation Scope]]'''.
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 QuantaStor system.  All of them should be completed before the system carries production data.
# Change the '''qadmin''' console password from its default.
# Change the '''admin''' management password from its default.
# Apply '''Suggested Defaults''' in the '''[[#Security Settings Management|Security Manager]]''' to raise the password and lockout policy.
# Set '''[[#Web Access Mode|Web Access Mode]]''' to ''HTTP redirects to HTTPS'' or ''HTTP disabled''.
# Replace the shipped self-signed certificate -- see '''[[#Installing Your Own Certificate|Installing Your Own Certificate]]'''.
# Block unused protocols in the '''[[#Firewall Configuration|firewall]]'''.
# Consider enabling '''[[#Multi-factor Authentication|multi-factor authentication]]''' for administrative accounts.


=== Change Passwords ===
=== Change Passwords ===


====Change SSH Console Administrator Account 'qadmin' Password====
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:
 
<pre style="font-size: smaller">
passwd
</pre>
 
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.


One of the most important steps in the configuration of a new QuantaStor system is to change the qadmin console user password for each Storage System to something other than the default password '''qadmin'''.  One can login to the console using the 'qadmin' account or access the system via SSD to login as 'qadmin'.  Next type 'passwd' and change the password from '''qadmin''' to a strong password which includes letters and numbers.
Note that this password is independent of the grid password policy configured in the Security Manager, which governs '''management''' users only.


[[File:Set Password - Web.jpg|300px|thumb]]
==== Change Management Administrator Account 'admin' Password ====


====Change Management Administrator Account 'admin' Password====
[[File:security_set_password.png|thumb|right|361px|Set Password dialog.]]


Login to the web management interface as the 'admin' user and then change the default password which is '''password''' to something else that is at least 10 characters in length and includes upper and lower cases letters and numbers.  Navigate to the '''Users & Groups''' tab and select "Set Password" from the "User" section of the ribbon/toolbar.
Log in to the web management interface as '''admin''' and change the default password, which is '''password'''.


{{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 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 <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.


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


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


[[File:firewall_settings.png|480px]]
[[File:security_firewall.png|thumb|right|600px|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.


QuantaStor v5 and newer versions have an integrated firewall management system that provides the ability to customize protocol access at a system level as well as at a per port level.  For high-security environments it is recommended to block all protocols that will not be used.
'''Navigation (system level):''' Storage Management --> ''select a Storage System'' --> Modify ''(toolbar)'' --> Firewall ''(tab)''


Firewall configuration for a given Storage System is accessible in the Storage System Modify dialog in the '''Firewall''' tab.  Similarly, for modifying firewall settings on a port level select the network port and choose '''Modify Network Port...''' via right-click or via the toolbar to change the firewall settings via the '''Firewall''' tab.
'''Navigation (per port):''' Storage Management --> Network Ports --> ''select a port'' --> Modify Network Port ''(toolbar or right-click)'' --> Firewall ''(tab)''


== SSL/TLS 1.2 Key Management ==
The Firewall tab lists each service with a description and an '''Allow''' checkbox. The services managed are:


QuantaStor grid communication and web access is limited to SSL TLS 1.2 and newer.  The supported ciphers are controlled via a configuration file at:
* '''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


<pre>
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|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 &rarr; Management Users &rarr; User &rarr; Security Manager ''(toolbar)'' &rarr; 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.)''
 
<pre style="font-size: smaller">
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
</pre>
 
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.
 
The shipped defaults live in this file, which is replaced on upgrade and should '''not''' be edited in place:
 
<pre style="font-size: smaller">
/opt/osnexus/common/lib/nginx_quantastor_ssl_default.conf
</pre>
 
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:
 
<pre style="font-size: smaller">
qs-util wuicustomcerts
</pre>
 
This creates the following file, which you then edit:
 
<pre style="font-size: smaller">
/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf
</pre>
 
Cipher settings for the QuantaStor grid communication channels (separate from the web interface) are controlled by:
 
<pre style="font-size: smaller">
/opt/osnexus/common/lib/qsciphers
/opt/osnexus/common/lib/qsciphers
</pre>
</pre>


Cipher options may be customized but note that the customized version should be placed at this directory to ensure it is not automatically overwritten when the system is upgraded.
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:


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


=== Changing the SSL Key for QuantaStor Web Management Interface ===
=== 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:
 
<pre style="font-size: smaller">
/var/opt/osnexus/quantastor/ssl/qsrestsrv.pem
</pre>
 
Grid communication uses a separate pair:
 
<pre style="font-size: smaller">
/opt/osnexus/common/lib/qsserver.pem
/opt/osnexus/common/lib/qsclient.pem
</pre>
 
All of these are discovered and monitored automatically -- see '''[[#Certificate Management|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|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 directives themselves (for example to further restrict the cipher list), since those are not expressible as a certificate template:
 
* Run {{Code|1=qs-util wuicustomcerts}} to copy the shipped defaults to an editable file that upgrades will not overwrite.
* Edit {{Code|1=/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf}}.
* Reload nginx to apply:
 
<pre style="font-size: smaller">
systemctl reload nginx
</pre>
 
* Verify the negotiated protocol and cipher from a client:
 
<pre style="font-size: smaller">
openssl s_client -connect &lt;system-ip&gt;:443 &lt;/dev/null 2&gt;/dev/null \
  | grep -E 'Protocol|Cipher is'
</pre>
 
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_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.
 
=== [[Custom SSH Security|Custom SSH Ciphers and Key Exchange Algorithms]] ===
* Customizing the SSH service to enforce strong ciphers and key exchange algorithms for SSH communication.
== Certificate Management ==
 
[[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 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 &rarr; 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 ({{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 when one certificate serves several roles -- for example {{Code|1=qsrestsrv.pem}} is used for both '''NGINX''' and '''Rest Service'''.
 
=== Certificate Expiration Alerts ===


The SSL key provided with QuantaStor is a common self-signed SSL key that is pre-generated and included with all deployments. This is generally OK for most deployments on private networks but for increased security it is recommended to generate a new SSL keystore for the Apache Tomcat server used to serve the QuantaStor web management interface.
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.


==== Keystore Password Selection ====
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.
'''IMPORTANT NOTE''' You must set the password for the keystore to 'changeit' (without the quotes) as this is the default password that Tomcat uses to unlock the keystore.  If you do not want to use the default password ('changeit') you can select a password of your choice but you will also need to manually edit the connector section of the /opt/osnexus/quantastor/tomcat/conf/server.xml file to add a line containing the keystore password (example: keystorePass="YOURPASSWORD").  Here's an example of what that will look like if you select the password "YOURPASSWORD".


<pre>
Alerts are delivered through the standard QuantaStor alerting system, so they reach whatever email and SNMP destinations you have configured in the Alert Manager.
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
 
              maxThreads="150" scheme="https" secure="true"
=== Certificate Templates ===
              keystoreFile="/opt/osnexus/quantastor/tomcat/conf/keystore"
 
              keystorePass="YOURPASSWORD"
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.
              clientAuth="false" sslProtocol="TLS" />
 
{{Navigation|Security &rarr; Certificates &rarr; ''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 {{Code|1=openssl req}}, add the SAN explicitly:
 
<pre style="font-size: smaller">
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;" \
  -addext "subjectAltName=DNS:&lt;fqdn&gt;,DNS:&lt;hostname&gt;,IP:&lt;system-ip&gt;" \
  -keyout mycert.key -out mycert.crt
 
cat mycert.crt mycert.key > mycert.pem
</pre>
</pre>


==== New Keystore Generation ====
You can check a certificate against QuantaStor's validation rules before importing it:
 
<pre style="font-size: smaller">
/opt/osnexus/quantastor/bin/qs_certutil.sh validate --pem-file &lt;path-to-pem&gt;
</pre>


To generate a new keystore you'll need to do the following steps.
From the CLI the two steps are:


* Login to QuantaStor via the console or via SSH then generate a keystore using the keytool utility. It will prompt you to enter a bunch of data including name, company, location, etc. This will produce a new .keystore file in the current directory.  Remember to use the default Tomcat 'changeit' password for the keystore unless you plan to edit the /opt/osnexus/quantastor/tomcat/conf/server.xml file to add your custom keystore password.
<pre style="font-size: smaller">
<pre>
qs cert-tmpl-add --name=&lt;template-name&gt; --description=&lt;text&gt; \
keytool -genkey -alias tomcat -keyalg RSA -validity 365
                --certificate-pem-data=&lt;path-to-pem&gt; \
                [--privatekey-pem-data=&lt;path-to-key-pem&gt;]
 
qs cert-update --storage-system=&lt;system&gt; --cert-use-case=2 \
              --cert-tmpl=&lt;template-name&gt;
</pre>
</pre>
* Next, backup the original keystore file and then overwrite the original with your newly generated keystore file:
 
<pre>
'''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.
cp /opt/osnexus/quantastor/tomcat/conf/keystore ./keystore.qs.conf
 
cp .keystore /opt/osnexus/quantastor/tomcat/conf/keystore
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.
mv .keystore keystore.custom
 
'''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:
 
<pre style="font-size: smaller">
systemctl reload nginx
</pre>
</pre>
* Finally, restart tomcat services so that the new key is loaded.
 
<pre>
Confirm what is actually being served, including the SAN:
service tomcat restart
 
<pre style="font-size: smaller">
openssl s_client -connect &lt;system-ip&gt;:443 &lt;/dev/null 2&gt;/dev/null \
  | openssl x509 -noout -subject -dates -ext subjectAltName
</pre>
</pre>


'''IMPORTANT NOTE''' If you are using Firefox as your browser, you must clear the browser history in order to clear the old cached key information.  If you don't clear the history you'll see that the "Confirm Security Exception" button will be greyed out and you won't be able to login to your QuantaStor system via https. IE and Chrome do not have this issue.
=== Rescanning Certificates ===


That's the whole process.  Here's an example of what we enter into these fields as OSNEXUS Engineering, you'll want to put your own company name and other details here:
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.


<pre>
{{Navigation|Security &rarr; Certificates &rarr; Rescan ''(toolbar)''}}
keytool -genkey -alias qs-tomcat -keyalg RSA -validity 365


Enter keystore password:
=== Reviewing Certificates from the CLI ===
Re-enter new password:
 
What is your first and last name?
The same inventory is available from the QuantaStor CLI, which is convenient for scripted compliance checks:
  [Unknown]:  OSNEXUS
 
What is the name of your organizational unit?
<pre style="font-size: smaller">
  [Unknown]:  OSNEXUS Engineering
qs cert-list
What is the name of your organization?
qs cert-get --cert=&lt;name-or-id&gt;
  [Unknown]:  OSNEXUS, Inc.
qs cert-rescan --storage-system=&lt;system&gt;
What is the name of your City or Locality?
  [Unknown]: Bellevue
What is the name of your State or Province?
  [Unknown]: Washington
What is the two-letter country code for this unit?
  [Unknown]:  US
Is CN=OSNEXUS, OU=OSNEXUS Engineering, O="OSNEXUS, Inc.", L=Bellevue, ST=Washington, C=US correct?
  [no]:  yes
</pre>
</pre>


=== [[Custom SSL_TLS Security|Custom SSL Certificates and TLS Security]] ===
Certificate templates have a matching set of commands:
* Information on how to Generate and Install Custom SSL Certificates and set Custom TLS security settings.
 
<pre style="font-size: smaller">
qs cert-tmpl-list
qs cert-tmpl-get --cert=&lt;name-or-id&gt;
qs cert-tmpl-rm --cert=&lt;name-or-id&gt;
</pre>
 
For TLS version and cipher settings, see '''[[#Supported TLS Versions and Ciphers|Supported TLS Versions and Ciphers]]'''.
== Endpoint Detection & Response (EDR) ==
 
[[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 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 &rarr; 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:
 
<pre style="font-size: smaller">
/opt/osnexus/quantastor/conf/qs_endpoint_security.conf
</pre>
 
=== Installing an EDR Agent ===
 
[[File:security_edr_install.png|thumb|right|500px|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 {{Code|1=--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 &rarr; EDR Agents &rarr; 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. {{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.
 
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]]'''.
 
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 &rarr; EDR Agents &rarr; Uninstall Agent ''(toolbar)''}}
 
=== EDR Management from the CLI ===
 
The same operations are available from the QuantaStor CLI:
 
<pre style="font-size: smaller">
qs edr-agent-list
qs edr-agent-get --edr-agent=&lt;name-or-id&gt;
qs edr-agent-create --system-list=&lt;systems&gt; --module=Bitdefender \
                    --registration-key=&lt;package-id-or-url&gt;
qs edr-agent-delete --edr-agent=&lt;name-or-id&gt;
qs edr-agent-rescan
</pre>
 
{{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.
 
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:
 
<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}'
</pre>
 
To review the available vendor modules and their supported platforms:


=== [[Custom SSH Security|Custom SSH Ciphers and Key Exchange Algorithms]] ===
<pre style="font-size: smaller">
* Information on how to customize the ssh service to enforce strong Cipher and Key Exchange Algorithms for SSH communication.
qs edr-agent-module-list
qs edr-agent-module-get --module=Bitdefender
</pre>


== [[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]]'''.


== Multi-factor Authentication ==
== Multi-factor Authentication ==
QuantaStor supports [[Duo Multi-Factor Authentication|Cisco Duo Multi-Factor Authentication]] as the primary multi-factor authentication method. Additional methods are being added, please contact OSNEXUS at info@osnexus.com for more information on MFA options.
 
[[File:security_mfa_manager.png|thumb|right|615px|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 &rarr; Management Users &rarr; User &rarr; 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:
 
* '''Cisco Duo''' -- see [[Duo Multi-Factor Authentication|Cisco Duo Multi-Factor Authentication]] for the full setup walkthrough
* '''OKTA''' -- see [[Okta Multi-Factor Authentication]] for the full setup walkthrough
 
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 {{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.
 
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 ==
== Security Updates ==
QuantaStor v5 and newer supports automatic security updates via the Upgrade Manager which is accessible via the web management interface. Older QuantaStor v3 & v4 systems required running security updates via the console/ssh as the '''root''' user.  More information on the old method of upgrading system security patches for QuantaStor v4 systems is available here: [[QuantaStor Security Updates|QS v4 Security Updates]]
 
QuantaStor supports automatic security updates through the '''[[Upgrade Manager]]''' in the web management interface.
 
{{Navigation|Storage Management &rarr; 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 {{Code|1=apt}} 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 require one to setup an encrypted tunnel between a client and the QuantaStor system in order to ensure traffic is encrypted on the wire. More information on how to setup IPsec in QuantaStor systems is available [[IPSec|here]].
 
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 [[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 ==
 
* [[Send System Log Report]] -- collecting and sending a scrubbed log bundle to support
* [[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
 
----
<small>''Verified against QuantaStor 6.9.0.''</small>

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.