Appendix

This appendix provides quick-reference tables for CLI commands, audit event types, configuration settings, REST API endpoints, supported SSH algorithms, and license information.

A. CLI Command Reference

The admin tool provides the following commands. All commands are executed from the command line as admin <command> [arguments].

Database

Command Syntax Description
init-db admin init-db Initialize database schema
test-connection admin test-connection Test database connectivity

User Management

Command Syntax Description
list-users admin list-users List all user accounts
add-user admin add-user <username> <password> Create user
remove-user admin remove-user <username> Delete user
enable-user admin enable-user <username> Enable account
disable-user admin disable-user <username> Disable account
reset-password admin reset-password <username> <password> Change password
unlock-user admin unlock-user <username> Clear lockout

Home Directory

Command Syntax Description
set-home-path admin set-home-path <username> <path> Set home directory
verify-home-path admin verify-home-path <username> Verify home exists

Disk Quota

Command Syntax Description
set-quota admin set-quota <username> <bytes> Set quota override
get-quota admin get-quota <username> Show quota
clear-quota admin clear-quota <username> Remove quota override

Public Keys

Command Syntax Description
add-key admin add-key <username> <keyfile> Add SSH public key
list-keys admin list-keys <username> List SSH keys
remove-keys admin remove-keys <username> Remove all SSH keys
generate-keypair admin generate-keypair <username> <type> Generate key pair

Audit & Sessions

Command Syntax Description
audit admin audit [--limit N] [--user U] Query audit trail
sessions admin sessions List active sessions
kill-session admin kill-session <sessionId> Disconnect session

Server Control

Command Syntax Description
server-status admin server-status Show server status
start-server admin start-server Start server
stop-server admin stop-server Stop server
test-email admin test-email [--to addr] Send test email

Configuration

Command Syntax Description
get-listener-config admin get-listener-config Show listener config
set-listener-config admin set-listener-config [key=value ...] Update listener
get-security-config admin get-security-config Show security config
set-security-config admin set-security-config [key=value ...] Update security
get-filesystem-config admin get-filesystem-config Show filesystem config
set-filesystem-config admin set-filesystem-config [key=value ...] Update filesystem
get-timeouts admin get-timeouts Show timeouts
set-timeouts admin set-timeouts [key=value ...] Update timeouts
get-notifications admin get-notifications Show notifications
set-notifications admin set-notifications [key=value ...] Update notifications
get-webhooks admin get-webhooks Show webhooks
get-syslog admin get-syslog Show syslog config
set-syslog admin set-syslog [key=value ...] Update syslog

Email Addresses

Command Syntax Description
get-email admin get-email <username> Show user email
set-email admin set-email <username> <address> Set user email
get-admin-email admin get-admin-email <username> Show admin email
set-admin-email admin set-admin-email <username> <address> Set admin email

Credentials

Command Syntax Description
get-credential admin get-credential <key> Read credential store value
set-credential admin set-credential <key> <value> Write credential store value

LDAP Groups

Command Syntax Description
get-ldap-groups admin get-ldap-groups Show LDAP groups
set-ldap-groups admin set-ldap-groups [key=value ...] Update LDAP groups

Portal Configuration

Command Syntax Description
get-portal-config admin get-portal-config Show portal config
set-portal-config admin set-portal-config [key=value ...] Update portal config

Multi-Factor Authentication

Command Syntax Description
mfa-enroll admin mfa-enroll <username> Begin MFA enrollment
mfa-confirm admin mfa-confirm <username> <code> Confirm MFA enrollment
mfa-disable admin mfa-disable <username> Disable MFA for user
mfa-status admin mfa-status <username> Show MFA status
mfa-reset admin mfa-reset <username> Reset MFA (re-enroll)
mfa-admin-enroll admin mfa-admin-enroll <username> Begin admin MFA enrollment
mfa-admin-confirm admin mfa-admin-confirm <username> <code> Confirm admin MFA enrollment
mfa-admin-disable admin mfa-admin-disable <username> Disable MFA for admin
mfa-admin-status admin mfa-admin-status <username> Show admin MFA status

Certificates

Command Syntax Description
list-certs admin list-certs List certificates
import-pem admin import-pem <alias> <certfile> <keyfile> Import PEM cert
import-p12 admin import-p12 <p12file> <password> Import PKCS12
generate-cert admin generate-cert <alias> <cn> Generate self-signed

Identity — Organizations

Command Syntax Description
org-list admin org-list List organizations
org-add admin org-add <name> [--display-name <s>] [--contact-email <e>] [--quota <bytes>] [--operator] Create an organization
org-show admin org-show <name> Show one org's full details
org-edit admin org-edit <name> [--display-name <s>] [--contact-email <e>] [--quota <bytes>] [--enable|--disable] Edit an organization (enable/disable via flags)

Identity — Groups

Command Syntax Description
group-list admin group-list <org-name> List groups within an org
group-add admin group-add <org> <group> [--display-name <s>] [--readonly] [--can-checksum] [--can-sign] [--mfa-required] Create a group within an org
group-show admin group-show <org>/<group> Show one group's full details

Group edits and deletions are performed via the Web Admin Console or the Swing admin. Every group mutation emits an audit event (GROUP_UPDATED, GROUP_DELETED).

Identity — Memberships

Command Syntax Description
user-join-group admin user-join-group <username> <org>/<group> Add user to a group (rolls back on mount conflict)
user-leave-group admin user-leave-group <username> <org>/<group> Remove user from a group
user-memberships admin user-memberships <username> List every group the user belongs to
user-folders admin user-folders <username> List every folder the user can reach (home + virtual folders, with permissions)
mount-conflicts admin mount-conflicts <username> Diagnostic: report mount conflicts for a user

Identity — Mount Routing

Command Syntax Description
get-mount-routing admin get-mount-routing Show SFTP/FTP/Portal mount-routing toggle state
set-mount-routing admin set-mount-routing [--sftp true|false] [--ftp true|false] [--portal true|false] Toggle mount routing per channel (server restart required for existing sessions)

Identity — Virtual Folders

Command Syntax Description
folder-list admin folder-list List all virtual folders + status
folder-add admin folder-add <folder-path> --real-path <p> Register a virtual folder
folder-edit admin folder-edit <folder-id> [--folder-path <p>] [--real-path <p>] Rename or repoint a virtual folder (rolls back on mount conflict)
folder-delete admin folder-delete <folder-id> Remove a virtual folder + all grants
folder-health admin folder-health Report folder reconciler status (missing folders)

Folder paths are auto-normalized: a missing leading slash is prepended automatically (shared/shared). Only the root (/) and single-segment paths (/shared/) are allowed; nested paths (/a/b/c/) are rejected with a clear error.

Identity — Folder Permissions

Command Syntax Description
folder-perm-list admin folder-perm-list [--folder <id>] [--group <org>/<group>] List grants (filter by folder or by group)
folder-perm-add admin folder-perm-add --folder <id> --group <org>/<group> --permission READ|WRITE|READ_WRITE Grant a group access to a folder
folder-perm-remove admin folder-perm-remove <permission-id> Revoke a folder grant
folder-perm-set admin folder-perm-set <permission-id> <READ|WRITE|READ_WRITE> Change an existing grant's permission

Identity — Authentication Providers

Command Syntax Description
provider-list admin provider-list List authentication providers
provider-prop-list admin provider-prop-list <provider-id> List a provider's config properties (secrets masked)
provider-prop-set admin provider-prop-set <provider-id> <key> <value> [--secret] Set a provider config property (hot-reloads the registry)

Providers themselves (rows in sftp_authentication_providers) are created via the Web Admin or Swing surfaces or seeded on first boot from the legacy <ldap> / <jdbc-user-manager> XML blocks. The CLI edits provider properties; adding or removing whole providers is a UI-only operation today.

Signing (Enterprise)

Command Syntax Description
signing-status admin signing-status Show the current signing key's fingerprint, key ID, algorithm
signing-generate admin signing-generate --user-id "Name <email>" [--algorithm RSA_4096|RSA_2048] [--passphrase-file <path>] Generate a new signing keypair
signing-import admin signing-import --key-file <armored-file> [--passphrase-file <path>] Import an armored PGP key
signing-delete admin signing-delete Delete the server signing key

License

Command Syntax Description
license-status admin license-status Show edition, customer ID, expiry, source, SHA-256 fingerprint
license-update admin license-update <path-to-activation.key> Install or renew a license key. The previous key is archived to ${data}/backup_activation_keys/.
license-clear admin license-clear [--confirm] Remove activation.key (server falls back to Free Edition on next restart)

B. Event Types Reference

The following event types are recorded in the audit trail. Each event is categorized as a success or failure event, which affects notification rules and UI highlighting.

Event Type Description Success
AUTH_SUCCESS User authenticated successfully Yes
AUTH_FAILURE Authentication attempt failed No
AUTH_ACCOUNT_LOCKED Account locked after threshold failures No
SESSION_CONNECT Client TCP connection established Yes
SESSION_CLOSED Client disconnected Yes
UPLOAD_COMPLETE File upload committed to filesystem Yes
UPLOAD_ABORTED Upload cancelled by client before completion No
UPLOAD_REJECTED Upload denied (quota, read-only, path error) No
DOWNLOAD_COMPLETE File download completed Yes
DIR_LIST Directory listing requested Yes
LICENSE_REJECTED Activation key missing, expired, or invalid No
MFA_SUCCESS TOTP verification succeeded Yes
MFA_FAILURE TOTP verification failed No
MFA_ENROLLED MFA enrollment confirmed for user Yes
MFA_DISABLED MFA disabled for user Yes
MFA_RECOVERY_USED Recovery code used instead of TOTP Yes
QUOTA_EXCEEDED Upload rejected due to quota limit No
Admin mutations — users, orgs, groups, folders
USER_CREATED SFTP user created via admin surface Yes
USER_UPDATED User property changed (home path, quota, read-only, enabled, email, password) Yes
USER_DELETED SFTP user deleted Yes
ORG_CREATED Organization created Yes
ORG_UPDATED Organization edited (display name, contact, quota, enable/disable) Yes
ORG_DELETED Organization deleted Yes
GROUP_CREATED Group created within an organization Yes
GROUP_UPDATED Group edited (capabilities, quota, description, enable/disable) Yes
GROUP_DELETED Group deleted Yes
USER_JOINED_GROUP User added to a group Yes
USER_LEFT_GROUP User removed from a group Yes
FOLDER_CREATED Virtual folder registered Yes
FOLDER_UPDATED Virtual folder renamed or repointed Yes
FOLDER_DELETED Virtual folder removed Yes
FOLDER_PERMISSION_GRANTED Group granted access to a virtual folder Yes
FOLDER_PERMISSION_REVOKED Group's access to a virtual folder revoked Yes
FOLDER_PERMISSION_SET Grant's permission level changed (READ ↔ WRITE ↔ READ_WRITE) Yes
Authentication orchestrator (multi-provider)
AUTH_AMBIGUOUS More than one enabled provider returned Success for the same username — login rejected No
AUTH_PROVIDER_TIMEOUT A provider exceeded its per-provider timeout during a probe No
AUTH_PROVIDER_CIRCUIT_BROKEN Provider circuit breaker opened (repeated timeouts or errors) No
AUTH_PROVIDER_CIRCUIT_RECOVERED Provider circuit breaker closed (provider responsive again) Yes
AUTH_MOUNT_CONFLICT Login rejected because the user's effective mount table would be inconsistent No
AUTH_MOUNT_CONFLICT_SUPPRESSED LDAP post-auth refresh skipped a group addition because it would introduce a mount conflict No
License administration
LICENSE_UPDATE Activation key installed or renewed via admin surface Yes
LICENSE_CLEAR Activation key removed via admin surface (server falls back to Free) Yes
Update check
UPDATE_AVAILABLE The update check found a newer published version than last observed (fires once per new version, never on steady-state checks) No
UPDATE_CHECK_RUN An administrator ran a manual update check ("Check Now" / admin check-update) Yes

The sftp_audit table also carries an executed_by column populated for events that originate from an admin surface (Web, Swing, CLI). Protocol-triggered events (uploads, downloads, session events) leave it null. All timestamps are stored as UTC and displayed in the operator's local timezone.

Every audit event can be tagged with one or more organizations via the sftp_audit_to_organization link table. This lets the Audit view filter events by tenant. Old rows (pre-identity-model) have no links and surface in unfiltered queries only.

C. Configuration Quick Reference

The following table lists commonly used configuration settings, the file they belong to, the XML element path, and the default value.

Listener Settings

Setting File Element Default
SFTP port sftp-server.xml listeners/listener[@type=sftp]/port 22
FTP port sftp-server.xml listeners/listener[@type=ftp]/port 21
Bind address sftp-server.xml listeners/listener/bind-address 0.0.0.0
Idle timeout sftp-server.xml listeners/listener/idle-timeout-seconds 600
Auth timeout sftp-server.xml listeners/listener/auth-timeout-seconds 30

Threading

Setting File Element Default
IO threads sftp-server.xml threading/io-threads 0 (auto)
Worker threads sftp-server.xml threading/worker-threads 0 (auto)

Authentication & Security

Setting File Element Default
Auth provider sftp-server.xml user-manager/provider xml
Lockout threshold sftp-server.xml password-policy/lockout-threshold 0 (disabled)
Lockout duration sftp-server.xml password-policy/lockout-duration-minutes 30

Filesystem & Uploads

Setting File Element Default
Home root filesystem-config.xml home-root ${STYLUS_SFTPSERVER_HOME}/homes/${username}
Default access filesystem-config.xml default-access read-write
Rename pattern filesystem-config.xml upload/rename-pattern ${basename}
On duplicate filesystem-config.xml upload/on-duplicate timestamp-suffix
Orphan max age filesystem-config.xml upload/orphan-max-age PT2H
Quota limit filesystem-config.xml quota/default-limit-bytes 1073741824 (1 GiB)
Quota enforcement filesystem-config.xml quota/enforcement hard

Administration

Setting File Element Default
Admin port admin-console.xml port 9980
Admin bind admin-console.xml bind-address 127.0.0.1
Portal enabled admin-console.xml file-portal/enabled false
Portal max upload admin-console.xml file-portal/max-upload-bytes 1073741824 (1 GiB)
SFTP mount routing sftp-server.xml sftp-mount-routing/enabled false (auto-enabled on first VD grant)
FTP mount routing sftp-server.xml ftp-mount-routing/enabled false
Portal mount routing admin-console.xml file-portal/portal-mount-routing/enabled false

D. Web Admin REST API Endpoints

The web admin console exposes the following REST API endpoints. All endpoints require authentication via the /api/login endpoint unless otherwise noted.

Authentication

Method Endpoint Description
POST /api/login Admin authentication
POST /api/logout End admin session
GET /api/session/check Check auth status

User Management

Method Endpoint Description
GET /api/users List users
POST /api/users Create user
DELETE /api/users/{user} Delete user
POST /api/users/{user}/enable Enable user
POST /api/users/{user}/disable Disable user
POST /api/users/{user}/reset-password Change password
POST /api/users/{user}/unlock Unlock account
GET /api/users/{user}/quota Get quota
POST /api/users/{user}/quota Set quota
DELETE /api/users/{user}/quota Clear quota

Audit & Sessions

Method Endpoint Description
GET /api/audit Query audit trail
GET /api/sessions List active sessions
POST /api/sessions/{id}/kill Kill session

Server Control

Method Endpoint Description
GET /api/server/status Server status
POST /api/server/start Start server
POST /api/server/stop Stop server

Configuration

Method Endpoint Description
GET /api/config/listeners Listener config
POST /api/config/listeners Update listeners
GET /api/config/security Security config
POST /api/config/security Update security
GET /api/config/filesystem Filesystem config
POST /api/config/filesystem Update filesystem
GET /api/config/timeouts Timeout config
POST /api/config/timeouts Update timeouts
GET /api/config/notifications Notification config
POST /api/config/notifications Update notifications
GET /api/config/syslog Syslog config
POST /api/config/syslog Update syslog
GET /api/config/webhooks Webhook config

Certificates

Method Endpoint Description
GET /api/certs List certificates
POST /api/certs/import-pem Import PEM
POST /api/certs/import-p12 Import PKCS12
POST /api/certs/generate Generate self-signed

Identity Model

The identity endpoints operate on organizations, groups, virtual folders, and the grants between them. All identity endpoints are gated by the Standard edition or above.

Method Endpoint Description
GET/api/orgsList organizations
POST/api/orgsCreate org
GET/api/orgs/{id}Get one org
PUT/api/orgs/{id}Update org
DELETE/api/orgs/{id}Delete org
GET/api/orgs/{id}/groupsList groups in org
POST/api/orgs/{id}/groupsCreate group in org
GET/api/groupsList all groups (across orgs)
GET/api/groups/{id}Get one group
PUT/api/groups/{id}Update group
DELETE/api/groups/{id}Delete group
GET/api/groups/{id}/usersList members
POST/api/groups/{id}/usersAdd user to group
DELETE/api/groups/{id}/users/{userId}Remove user from group
GET/api/users/{user}/membershipsList every group the user belongs to
GET/api/users/{user}/foldersList every folder the user can reach
GET/api/users/{user}/mount-conflictsDiagnostic: mount conflicts for the user
GET/api/foldersList virtual folders
POST/api/foldersRegister virtual folder
GET/api/folders/{id}Get one folder
PUT/api/folders/{id}Rename or repoint folder (409 on mount conflict)
DELETE/api/folders/{id}Remove folder + attached grants
GET/api/folder-permissionsList grants
POST/api/folder-permissionsGrant folder to group
PUT/api/folder-permissions/{id}Change grant permission
DELETE/api/folder-permissions/{id}Revoke grant
GET/api/folder-healthFolder reconciler status
GET/api/config/mount-routingRead mount-routing toggles
PUT/api/config/mount-routingChange mount-routing toggles (hot-reload)
GET/api/providersList auth providers
GET/api/providers/{id}/propertiesList provider config properties
PUT/api/providers/{id}/properties/{key}Set provider config property (hot-reloads registry)

License

Method Endpoint Description
GET/api/licenseShow current activation.key summary
POST/api/licenseInstall / renew activation.key (body: raw key text or base64)
DELETE/api/license?confirm=trueRemove activation.key (falls back to Free on next restart)

Signing (Enterprise)

Method Endpoint Description
GET/api/signingShow signing key status (fingerprint, key ID, algorithm)
POST/api/signing/generateGenerate a new signing keypair
POST/api/signing/importImport an armored PGP key
DELETE/api/signingDelete the signing key

Branding (Enterprise)

Method Endpoint Description
GET/api/brandingRead Portal white-label configuration
PUT/api/brandingUpdate Portal branding fields
POST/api/branding/logoUpload Portal logo image
POST/api/branding/faviconUpload Portal favicon

Public (Unauthenticated)

The following endpoints are served without authentication so download recipients can verify signed releases with no Portal account.

Method Endpoint Description
GET/KEYSOperator's PGP public key (armored)
GET/portal/KEYSAlias for /KEYS
GET/portal/tools/verify.jarVerifier tool (shaded JAR)
GET/portal/tools/verify-portable.zipVerifier tool (portable bundle with jlink JRE + launchers)

Miscellaneous

Method Endpoint Description
POST /api/test-email Send test email
GET /api/version Server build number and edition
GET /api/update-status Update-check state + changes since the running version
POST /api/update-check Run an update check now (audited)

E. Supported SSH Algorithms

Stylus SFTP Server supports the following SSH algorithms. Default algorithms are enabled out of the box; legacy algorithms can be enabled via the security section of sftp-server.xml.

Ciphers

Algorithm Status
chacha20-poly1305@openssh.com Default
aes256-gcm@openssh.com Default
aes128-gcm@openssh.com Default
aes256-ctr Default
aes192-ctr Default
aes128-ctr Default
aes128-cbc Legacy (disabled)
aes192-cbc Legacy (disabled)
aes256-cbc Legacy (disabled)

MACs

Algorithm Status
hmac-sha2-256-etm@openssh.com Default
hmac-sha2-512-etm@openssh.com Default
hmac-sha2-256 Default
hmac-sha2-512 Default
hmac-sha1 Legacy (disabled)
hmac-sha1-etm@openssh.com Legacy (disabled)

Key Exchange

Algorithm Status
mlkem768x25519-sha256 Default
curve25519-sha256 Default
curve25519-sha256@libssh.org Default
ecdh-sha2-nistp256 Default
ecdh-sha2-nistp384 Default
ecdh-sha2-nistp521 Default
diffie-hellman-group-exchange-sha256 Default
diffie-hellman-group18-sha512 Default
diffie-hellman-group16-sha512 Default
diffie-hellman-group14-sha256 Default

Host Key Types

Type Notes
RSA Traditional; widely supported
ECDSA (P-256) Elliptic curve; faster than RSA
Ed25519 Modern; compact keys; recommended

F. License Information

Stylus SFTP Server uses the following runtime dependencies. All are compatible with commercial redistribution.

Library License
SSH / SFTP Engine (built-in) Apache 2.0
Apache FtpServer 1.2.0 Apache 2.0
H2 Database MPL-2.0 / EPL-1.0
HikariCP Apache 2.0
Caffeine Apache 2.0
Bouncy Castle MIT
Apache Commons Daemon Apache 2.0
Eclipse Angus Mail EPL-2.0 + GPLv2/CE
SLF4J MIT
Log4j 2 Apache 2.0
Note MySQL Connector/J (GPL-2.0) and PostgreSQL JDBC (BSD-2-Clause) are downloaded at configuration time and are not bundled with the distribution.