Published: October 8, 2025
Last updated: October 3, 2026

Configure users, permissions, and default user settings.

User Management

Users can be managed through:

  • Web UI (User Management section)
  • CLI commands
  • API

Default User Settings

There’s two main areas that user settings are configured.

User Source configuration

Configure defaults applied to new users:

YAML
1
2
3
4
5
6
server:
  sources:
    - path: "/data"
      config:
        defaultEnabled: true         # Give to all new users
        defaultUserScope: "/"       # Default access path under the source

User Defaults

User defaults are configured on the config.yaml and are the default initial values for users when they are created.

User defaults can still be listed in config.yaml to bootstrap a new instance: on first startup, values are seeded into SQLite and only the fields you set remain locked in Settings → User management → User defaults. After that, the database is authoritative. Remove userDefaults from config when you no longer need those locks on fresh installs.

Legacy flat keys (for example hideFilesInTree, permissions.modify) are no longer supported — use the nested v2 structure shown below. Move legacy permissions.modify, create, delete, and download under userDefaults to server.sources[].config.defaultPermissions for per-source defaults.

This shape is valid on v2.0.0-beta through v2.1.0-beta. Omit keys you want to leave at defaults. v2.1.0-beta also adds listing.promptRightCloseButton, listing.newFileTemplate, and account.showAdvancedProfile.

YAML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
userDefaults:
  sidebar:
    disableQuickToggles: false
    hideFileActions: false
    disableHideOnPreview: false
    sticky: true
    hideFiles: false
    showTools: true
  listing:
    deleteWithoutConfirming: false
    dateFormat: false
    showHidden: false
    quickDownload: false
    showSelectMultiple: false
    singleClick: false
    hideFileExt: ""
    showCopyPath: false
    deleteAfterArchive: true
    viewMode: "normal"
    gallerySize: 3
  preview:
    image: true
    video: true
    audio: true
    motionVideoPreview: true
    office: true
    popup: true
    disablePreviewExt: ""
    highQuality: true
    folder: true
    models: true
  fileViewer:
    editorQuickSave: false
    autoplayMedia: true
    disableViewingExt: ""
    disableOnlyOfficeExt: ".md .txt .pdf .html .xml"
    preferEditorForMarkdown: false
    debugOffice: false
  search:
    disableOptions: false
  ui:
    darkMode: true
    themeColor: "var(--blue)"
    customTheme: ""
    locale: "en"
  fileLoading:
    maxConcurrentUpload: 10
    uploadChunkSizeMb: 10
    clearAll: false
    downloadChunkSizeMb: 0
  account:
    permissions:
      api: false
      admin: false
      share: false
      realtime: false
    lockPassword: false
    disableSettings: false
    loginMethod: "password"
    disableUpdateNotifications: false

For what each fileLoading field does (matching Settings → Uploads & Downloads), see Uploads & Downloads (user preferences).

userDefaults.account.permissions are not editable by non-admin users in the profile UI. Those global flags (admin, api, share, realtime) live on the user. File-operation defaults for a new scope come from server.sources[].config.defaultPermissions unless you set explicit per-source permissions in User Management.

Creating Users

Via Web UI

  1. Log in as admin
  2. Go to User Management
  3. Click Create User
  4. Set username, password, global permissions, and per-source permissions on each scope
  5. Assign sources and scope paths

Via CLI

BASH
1
./filebrowser user set username --password secret -c config.yaml

Create as admin:

BASH
1
./filebrowser user set username --password secret -a -c config.yaml

Promote an existing user to admin without changing their password:

BASH
1
./filebrowser user promote username -c config.yaml

For scripted password resets, pipe stdin:

BASH
1
echo 'newpassword' | ./filebrowser user set username --password -c config.yaml

User Permissions

Global permissions (all sources)

Configure on the user record; apply everywhere:

PermissionPurpose
AdminFull system access, user management, configuration
APICreate API tokens, REST API access
ShareCreate and manage share links
RealtimeReal-time connections and live updates

Admins receive full file-operation access on every source automatically.

Per-source file permissions (v2.0.0+)

Configure per scope in User Management when editing a user — expand a source row to set:

PermissionTypical use
ViewBrowse folders, list files, see properties (WebDAV PROPFIND). New in v2.0.0 — in v1.x this was always granted for any source in the user’s scopes
DownloadRead or download file contents (GET, streaming, copy source)
ModifyEdit, upload/overwrite, rename, move within or across sources
CreateCreate files and folders, copy into this source
DeleteDelete files and folders

Omitting permissions on a scope when saving via API lets the server apply Access management default permissions for that source. Explicit values override defaults. See User permissions.

API user shape (v2.0.0+)

JSON
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "username": "demo",
  "password": "demo123",
  "permissions": {
    "admin": false,
    "api": true,
    "share": true,
    "realtime": false
  },
  "scopes": [
    {
      "name": "files",
      "scope": "/",
      "permissions": {
        "view": true,
        "download": true,
        "modify": true,
        "create": true,
        "delete": true
      }
    }
  ]
}

Legacy API payloads that put modify, create, delete, or download only under top-level permissions are migrated on upgrade; new integrations should use scopes[].permissions.

User Scopes

Scopes define which sources and paths a user can access.

Assign Scope

In User Management:

  1. Edit user
  2. Select source(s)
  3. Set scope path (e.g., /, /subfolder, /users/john)
  4. Expand each source row and set per-source permissions (view, download, modify, create, delete)
  5. Save

Auto-Create User Directories

Per-user directories are created under each source’s defaultUserScope using the username (the old createUserDir toggle is deprecated):

YAML
1
2
3
4
5
6
server:
  sources:
    - path: "/home/users"
      config:
        defaultEnabled: true
        defaultUserScope: "/"

This creates /home/users/<username> for each new user and scopes them to that folder.

User Groups

Groups are currently managed and provided by the LDAP or OIDC provider. Adding groups manually in technically supported via API (see swagger), but not yet implemented as a feature in the UI. Stay tuned.

Password Management

Set Password Requirements

Minimum password length for password authentication:

YAML
1
2
3
4
auth:
  methods:
    password:
      minLength: 12

Reset User Password

BASH
1
./filebrowser user set username --password newpassword -c config.yaml

Or pipe the password from a script:

BASH
1
echo 'newpassword' | ./filebrowser user set username --password -c config.yaml

Two-Factor Authentication

Users can enable 2FA in their profile settings:

  1. Go to Profile → Security
  2. Click Enable 2FA
  3. Scan QR code
  4. Enter verification code

API Tokens

Users with API permission can create tokens:

  1. Go to Settings → API Management
  2. Click Create Token
  3. Copy and save securely

Next Steps