Multi-Tenant Vendor Portal

One SFTP server, many customer organizations. Shared release areas, private customer uploads, ad-hoc patches per customer — with strict cross-tenant isolation.

Every Customer Wants Their Own Space

You publish releases and patches to a growing list of customers. Some artifacts are public (every customer downloads the same release build). Others are customer-specific — a hotfix for one utility, a custom configuration for another manufacturer. And when customers push data BACK to you — support bundles, sensitive telemetry, config exports — that data must never be visible to another customer.

One SFTP Home Directory Isn't Enough

The simple "one home directory per user" model works when every user is your employee. It breaks the moment you have three customers who each want a private upload area, a shared read-only release directory, and an ad-hoc patch folder that only appears when there's a patch to deliver.

Rolling one server per customer is expensive to operate. Rolling one folder per customer with prefix-based ACLs is fragile — a config typo cross-exposes tenants. Rolling different user accounts per relationship is worse: a customer contact with access to two utilities you serve has to remember two logins.

You need a real identity model: organizations for tenants, groups for roles inside a tenant, and virtual folders for the shared and private spaces — all in one server, all in one admin console.

The status quo
One folder per customer — ACL sprawl
Prefix-based paths — brittle isolation
One server per tenant — expensive
Ad-hoc patches — manual copy jobs
No org-scoped audit view
Cross-customer contacts — two accounts each

Organizations, Groups, and Virtual Folders

Model each customer as an organization. Model roles inside a customer (uploaders, downloaders, admins) as groups. Publish shared and private storage as virtual folders mapped to physical directories. Grant folder access to groups — and let users belong to groups across multiple organizations when a customer relationship requires it.

Vendor Staff support & publishing Customer Alpha Ops & QA contacts Customer Beta Support contacts Stylus SFTP Server Organization: Vendor Corp Organization: Customer Alpha Organization: Customer Beta Groups · Virtual Folders Folder ACLs enforced on every op SFTP, FTPS, WebDAV, File Portal /downloads shared release area /uploads-alpha Alpha private /patch23 Alpha ad-hoc patch /uploads-beta Beta private

Three organizations share one server. Each virtual folder is granted to specific groups, so customers see only the folders they belong in. Vendor staff see everything.

How the Pieces Fit Together

The scenario below uses fictional names — Vendor Corp is the vendor running the server; Customer Alpha and Customer Beta are two of its customers. Real deployments follow the same shape with any number of customer organizations.

Step 1 — Create the organizations

Vendor Corp is the operator organization — the vendor that runs the SFTP server. Customer Alpha and Customer Beta are customer organizations. Any number can be added later without server downtime.

Web Admin » Organizations tab » Add
Name: vendor-corp   Display: Vendor Corp  [Operator]
Name: customer-alpha   Display: Customer Alpha
Name: customer-beta   Display: Customer Beta

Step 2 — Create the virtual folders

Each virtual folder is a logical path (like /uploads-alpha/) mapped to a physical directory on disk. Folders are org-agnostic — who can reach them is decided by which groups you grant them to.

Virtual Folders tab » New folder
/downloads → D:\storage\downloads
/uploads-alpha → D:\storage\uploads\alpha
/patch23 → D:\storage\patches\alpha-patch23
/uploads-beta → D:\storage\uploads\beta

Step 3 — Create groups and grant folder access

Groups are the ACL vehicle. Grants tie a group to a folder with a permission level (READ, WRITE, or READ_WRITE).

Groups and grants
Vendor Corp / support-staff
  → READ_WRITE /downloads
  → READ_WRITE /uploads-alpha
  → READ_WRITE /uploads-beta
  → READ_WRITE /patch23
  can-sign: yes  can-checksum: yes

Vendor Corp / public-downloads  (customer contacts join this)
  → READ /downloads

Customer Alpha / alpha-team
  → READ_WRITE /uploads-alpha
  → READ /patch23

Customer Beta / beta-team
  → READ_WRITE /uploads-beta

Step 4 — Assign users to groups (including cross-organization)

A user belongs to one or more groups. Membership can span organizations — a Customer Alpha contact who needs public releases joins the Vendor Corp public-downloads group AS WELL AS their own Customer Alpha / alpha-team group. Effective access is the union.

Users and memberships
Hana  (vendor staff)
  Vendor Corp / support-staff

Alice  (Customer Alpha contact)
  Vendor Corp / public-downloads
  Customer Alpha / alpha-team

Bob  (Customer Beta contact)
  Vendor Corp / public-downloads
  Customer Beta / beta-team

Step 5 — Turn on virtual folders for the channels customers use

Virtual folders are surfaced per-channel via three independent toggles in the admin. Portal auto-enables the first time you grant a folder; SFTP and FTP are opt-in.

Virtual Folders tab » Enable for…
[✓] SFTP
[ ] FTP / FTPS
[✓] File Portal

Who Sees What After Login

Each user's file listing at the SFTP root is the union of their home directory and every virtual folder any of their groups grants them access to.

User /downloads /uploads-alpha /patch23 /uploads-beta
Hana
Vendor staff
READ_WRITE READ_WRITE READ_WRITE READ_WRITE
Alice
Customer Alpha
READ READ_WRITE READ — not visible —
Bob
Customer Beta
READ — not visible — — not visible — READ_WRITE

Alice cannot list, traverse, or even see the existence of Bob's upload directory — the folder never appears in her file tree. When Bob is added to a new customer patch, a new virtual folder appears; when the patch is retired, the grant is revoked and the folder disappears from his view without a client restart.

What This Model Buys You

🔐

Strict Isolation

Folder ACLs are enforced by the server on every file operation. A misconfigured client cannot browse another customer's folders because the server never surfaces them.

🔗

One Account per Person

A customer contact working across two of your customer relationships logs in once and sees both. Group memberships span organizations natively — no duplicate accounts.

📄

Ad-Hoc Patches

Need to deliver a hotfix to one customer? Create a virtual folder, grant it to the customer's group. Retire it later by revoking the grant — grants disappear from the client with zero disruption to unrelated sessions.

📊

Org-Scoped Audit

Every audit event is tagged with the affected organizations. Filter the audit trail by tenant to answer support and compliance questions instantly.

🗝

Signed Releases

Vendor staff with the can_sign capability produce PGP-signed release artifacts directly from the Portal. Customers verify with the free bundled verifier tool downloaded from a public endpoint — no PGP tooling required on their side.

Conflict Detection

The server refuses admin changes that would give a user two different physical paths at the same logical name. Mount conflicts are caught before they hit an SFTP client.