TeamPass

nilsteampassnetGPL-3.0活跃维护

自托管的团队协作密码管理器,支持文件夹级权限控制、AES-256-GCM 加密、LDAP/AD 与 OAuth2 单点登录,并提供审计日志和 REST API。

Self-hosted collaborative password manager for teams: folder-level access control, AES-256-GCM encryption, LDAP/AD, OAuth2 SSO, audit trail, REST API, browser extension. PHP/MySQL, Docker.

3.2.4.2发布于 2026-11-08 08:39 UTC1,890star573fork同步于 2026-11-10 11:46 UTC

怎么上手

由 README 提炼,执行前请确认
docker pull teampass/teampass
硬件要求按 README 说明

README 未说明硬件要求;仅说明需 PHP 8.2+ 与 MySQL 5.7+/MariaDB 10.7+,可跑在树莓派或低价 VPS 上

有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

自托管团队密码管理器,用文件夹级权限和审计留痕替代聊天里传密码

自托管的团队协作密码管理器,支持文件夹级权限控制、AES-256-GCM 加密、LDAP/AD 与 OAuth2 单点登录,并提供审计日志和 REST API。

核心能力

  • 按文件夹与角色分配读写删权限,取最严格者生效
  • AES-256-GCM 加密,每用户持 RSA 包裹的对象密钥副本
  • 支持 LDAP/AD 嵌套组、OAuth2 SSO 与 TOTP 等多因素
  • 提供访问复核、合规报告与轮换追踪等审计证据
  • REST API 配 JWT 鉴权,另有浏览器扩展自动填充

容易踩的坑

需自备 MySQL 5.7+ 或 MariaDB 10.7+ 数据库,镜像不含数据库;PHP 版本需 8.2 以上,低版本无法运行;README 未给出完整启动参数,需参照官方文档配置

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本3.2.4.2
  1. 3.2.4.2最新正式版2026-11-08 · 2026-11-08 08:39 UTC

    What's Changed

    This is a security release on the 3.2.4 line. It fixes six advisories. Four of them are places where a manager or HR manager could act beyond the accounts and folders they administer: folders granted to an account, the root-folder creation right, the folder rights of any account, and the Users list, which plain users could also read. The other two are a folder path returned for any folder id, and administration actions that did not check the session key. The release also makes generic OpenID Connect providers such as authentik and Keycloak work (PR #5445), lets OAuth2 users generate new keys again, and fixes an LDAP first login that ended with an HTTP 500 (issue #5451) and a command-line upgrade that lost its database connection (issue #5450). Upgrading is recommended for all installations, and strongly recommended for those where managers or HR managers administer accounts.

    This release is code only: no ALTER TABLE, no schema change and no new data migration. UPGRADE_MIN_DATE is deliberately left at its 3.2.4.0 value, so installations already running 3.2.4.0 or 3.2.4.1 are not sent back through the upgrade wizard.

    🔒 Security fixes

    • Managers and HR managers can only grant folders within their own scope (GHSA-vrhq-38vx-9vjp, reported by @fernandobortotti) — account creation, the user edit form and the rights propagation limited the roles to the caller's scope, but stored the Allowed folders and Forbidden folders exactly as the browser sent them. A folder granted directly gives write access, and a new account receives a key for every shared item, so a manager could create an account, grant it any shared folder and read that folder's items through it. For a non-administrator, both lists are now reconciled with the caller's own accessible folders, minus personal folders and the folders denied to the caller. A folder outside that scope is dropped. A folder already on the account is kept, so saving the form never revokes it. Every 3.x release before 3.2.4.2 is affected.
    • Every administration action requires the session key (GHSA-7wvw-wxqx-v364, reported by @carfeii) — ten administration requests never compared the key sent with the request against the session key. Four of them change something: enabling or disabling the REST API, deleting logs older than 90 days, and starting or stopping the WebSocket server. The other six only read data or write a log line. A forged request carrying only an administrator's cookie could trigger them. The session cookie is SameSite=Lax, so the attacker needs a same-site position. Each action now refuses a missing or wrong key first, like the rest of the handler, and a test checks every action of the handler so a new one cannot skip the check. Every 3.x release before 3.2.4.2 is affected.
    • The Users list is limited to users who may open the Users page (GHSA-5cwc-6hfp-2mr7, reported by @Artur12555) — the request that fills the table of the Users page checked the Items page right, which every user holds. A plain or read-only user holding a role that administers other accounts could list those accounts: last IP address, MFA, lock and passkey state, privilege level and roles. Sorting on hidden columns also let them work out colleagues' e-mail addresses. The request now checks the Users page right, and only the displayed columns can be sorted. Every 3.x release before 3.2.4.2 is affected.
    • The folder rights of an account are only shown to the people who administer it ([GHSA-28mq-vx4v-72h8](https://github.com/
  2. 3.2.4.12026-11-03 · 2026-11-03 21:43 UTC
    查看更新说明

    What's Changed

    This is a security release on the 3.2.4 line. It fixes six advisories. Four of them are places where the per-item restriction was not applied: item history, one-time codes, attachment previews, item details, exports and item creation. The other two concern sessions that survived a password change, and a key generation request that reset the caller's own password without asking for it. The release also updates two Symfony components that had published fixes, makes the import target folder list work for non-admin users again (issue #5446), and moves the pre-upgrade backup of the command-line upgrade to the On-the-fly tab. Upgrading is recommended for all installations.

    This release is code only: no ALTER TABLE, no schema change and no new data migration. UPGRADE_MIN_DATE is deliberately left at its 3.2.4.0 value, so installations already running 3.2.4.0 are not sent back through the upgrade wizard.

    🔒 Security fixes

    • Item history and one-time codes now respect the per-item restriction (GHSA-75qw-h7p8-ppr3, reported by @tsurutanmen, also found by @Artur12555) — the item history and the TOTP code requests only checked that the folder was visible to the user. That check ignores the item's own restriction, and it also lets administrators through on every shared folder. A folder member excluded from an item could therefore read its previous passwords, its previous custom-field values and its current one-time code. Both requests now require read access to the item itself, and a disabled one-time code is no longer served. Every 3.x release before 3.2.4.1 is affected.
    • Attachment previews check access to the attachment (GHSA-jxj9-mcx4-h34j) — the image preview only checked that the user held a decryption key for the file. Every user holds one for the attachments of shared items, so any signed-in user could read any shared attachment through the preview. The preview now checks access to the attachment's item before decrypting it.
    • Role restrictions apply to the item details and to the exports (GHSA-h66m-8w9q-86r2) — the item details request ignored an item restricted to roles only, and returned its TOTP seed to folder members holding none of those roles. The four export formats checked the user restriction but never the role restriction. Both now apply the same decision as the item card and the REST API. The export handler also enforces the Export permission itself: until now only the Export menu and page did, so any signed-in user could export by posting to the handler directly (see the upgrade notes).
    • Creating an item can no longer put a role restriction on another item (GHSA-jgmv-3gr2-fjpw, reported by @Artur12555) — item creation saved its role restriction under the item id sent by the browser instead of the id of the item it had just created. Any user allowed to create an item could therefore add role restrictions to any existing item: hide an item from the users who rely on it, or give their own role access to an item restricted to other users. The restriction is now attached to the new item. Every 3.x release before 3.2.4.1 is affected.
    • A password change now ends the sessions opened before it (GHSA-p84q-3h9h-qvh6, reported by @wyx200612) — the password change dialog, the e-mail password recovery and an administrator's key generation for another user all replaced the password but kept the existing web session and API sessions valid. A copied session cookie kept working after the ch
  3. 3.2.4.02026-11-01 · 2026-11-01 11:27 UTC
    查看更新说明

    What's Changed

    This release opens the 3.2.4 line. It adds a command-line upgrade that backs up the database, runs the upgrade in maintenance mode and restores the backup if a step fails. The item view and the item edit form are redesigned: one page with foldable sections, a sticky action bar, an icon picker and tags edited as chips. Users get an inventory of their active Secure Send links, and administrators are reminded to save a Recovery Package. The release also fixes folder, favourite and Knowledge Base names stored with HTML entities (O'Brien instead of O'Brien), makes searches match the displayed text again, and repairs several upgrade paths: maintenance mode in the web wizard, the data clean-ups in Docker, and background tasks that ran against an older schema. It closes a High severity flaw that let a session opened on the installer before the setup rewrite settings.php on a live instance (GHSA-6x8j-28p6-mmfm), and several HTML injection and information disclosure paths in the item view, the tag suggestions and the command palette. Upgrading is recommended for all installations, and strongly recommended for instances installed with 3.2.3.1 to 3.2.3.3: delete or lock down their public/install directory if it is still reachable.

    This release does not change the database schema: no new table, no new column, no data migration. UPGRADE_MIN_DATE keeps its 3.2.3.3 value. Because the version moves to a new line (3.2.3 → 3.2.4), every installation still goes through the upgrade once, through the web wizard, the new command line or the Docker entrypoint. The upgrade only records the new release.

    🔒 Security fixes

    • The installer no longer accepts a pre-install session after the setup (GHSA-6x8j-28p6-mmfm, High, reported by @kta1kri) - on instances installed with 3.2.3.1 to 3.2.3.3, a session opened on install.php before the setup finished kept every installer step usable after go-live, including the one that rewrites app/config/settings.php: someone holding such a session could point the instance at their own database or replace its encryption key. Once settings.php exists, the steps now refuse every install session except the one that wrote it, which may only finish step 6 while the file is unchanged. The install grant is revoked when the installation completes, and the key file name written into settings.php must be a plain file name. Upgraded instances were never exposed. The advisory lists indicators of compromise.
    • Tags can no longer run script in the item view - the tag badges were built as HTML with an inline onclick handler, so a crafted tag ran script for every user opening the item. They are now built as text, and the click handler is bound in JavaScript.
    • Knowledge Base labels are rendered as text in the item view - a double-encoded label survived the server-side purifier and was turned back into live markup by the client decoding. The chips are now built with text-only DOM operations, as the tags and the Knowledge Base page already were.
    • Tag suggestions only offer the tags of items the user can read - the tag field of the item form suggested every tag of the instance, which revealed the tags of folders and items the user has no access to.
    • The command palette no longer reveals the names of inaccessible parent folders - the path shown next to a result listed every ancestor folder, including folders the user cannot see. Only folders within the user's search scope are now shown (PR #5444, @guerricv).
    • Knowledge Base item suggestions respect item restrictions - linking an item to an article offered items restricted to other users or roles in folders the user can see (PR #5444, @guerricv).

    ✨ New features

  4. 3.2.3.32026-10-26 · 2026-10-26 05:59 UTC
    查看更新说明

    What's Changed

    This is a maintenance release on the 3.2.3 line. It fixes an attachment authorization flaw (GHSA-r6r4-5mr3-rppm), several upgrade paths that stopped or silently skipped migrations (2.x → 3.x wizard, the 3.1.5 unique index, Docker images coming from 3.2.2.6 or earlier), and an unusable TP account key that silently left users without access when their keys were generated. It also ships two contributions from @guerricv: disaster recovery onto a fresh server, and experimental QR pairing for external devices (off by default). Upgrading is recommended for all installations.

    This release changes the database schema. UPGRADE_MIN_DATE is raised, so every installation goes through the upgrade wizard once. Docker containers apply the upgrade on their own at start-up.

    🔒 Security fixes

    • Attachments now require the edit right, and a new item only receives the files its own session uploaded (GHSA-r6r4-5mr3-rppm, reported by @NotAFlightRisk) — deleting an attachment only checked that the folder was visible to the user, which read-only folders grant: a read-only member could permanently delete any attachment in the folder, including those of items restricted to others. Triage found a more severe flaw in item creation: new_item attached every file stored under the staging identifier sent by the browser, so a user could move another item's attachments onto an item of their own and read them. Uploads are now recorded in the user's session, and creating an item or confirming attachments only takes the files that session uploaded. The upload refuses a staging identifier that designates an existing item, and checks the edit right whenever it targets an existing item. Every 3.x release before 3.2.3.3 is affected.

    ✨ New features

    • Disaster recovery on a fresh server (PR #5439, @guerricv) — a new installer assistant (/install/recovery.php) and its CLI (app/scripts/disaster-recovery.php) restore a complete encrypted .tpbackup and its original .tprecovery Recovery Package without running a normal installation first. The assistant imports into an empty dedicated database and verifies the original key chain and document references. It then replays the shipped 3.2.2/3.2.3 migrations in isolated processes and checks item decryption. Only after that does it publish a newly generated configuration, in maintenance mode. The operator is then guided through file permissions, installer removal and scheduler restoration. Restored sessions, tokens, device credentials and Secure Send links are invalidated, and backup schedules and LAPR stay disabled until an administrator reviews them. Supported sources: 3.2.2.x and 3.2.3.x, complete backups taken with Include documents, no downgrade. Read the Disaster recovery guide, and rehearse a restore before you need one.
    • Experimental QR pairing for external devices (PR #5437, @guerricv) — off by default, enabled in Settings → API → Mobile application. Once it is on, a user pairs a compatible client from the External devices tab of their profile. The QR code only carries the instance URL and a short-lived invitation; the user compares a six-digit code on both screens and approves the exact device, and a dedicated Personal Access Token is then delivered encrypted to the device's ephemeral key. Device credentials expire (90 days by default) and each one can be revoked by its owner. Administrators can inspect and revoke them from the same settings tab, and revoking a credential ends its API sessions. Pairing requires HTTPS. No client is published yet: the feature targets client developers, with the protocol in [docs/api/device-pairing.md](https://documentation.teampass.net/#/api/dev
  5. 3.2.3.22026-10-20 · 2026-10-20 20:21 UTC
    查看更新说明

    What's Changed

    This is a corrective release on the 3.2.3 line. TeamPass 3.2.3.1 cannot be installed from scratch: the database step of the web installer stops on 35 tables (GHSA-pxjv-6qgf-xhcg). 3.2.3.2 fixes the installer, verifies the certificate of the SMTP server, shows creation and modification dates in the knowledge base, and displays the licence dates in the date format of the instance. Upgrading is recommended for every installation, and 3.2.3.2 is the version to use for any new installation. Do not fall back to 3.2.3.0 or an earlier release to get a working installation: they are exposed to the two critical vulnerabilities fixed in 3.2.3.1.

    This release changes the database schema. The kb table gains two columns for the article dates, so UPGRADE_MIN_DATE is raised and every installation goes through the upgrade wizard once.

    🔒 Security fixes

    • Fresh installations work again (GHSA-pxjv-6qgf-xhcg, Low, found and fixed by @guerricv) - the GHSA-8xp7-fh3p-5pcr fix of 3.2.3.1 replaced the dynamic dispatch of the installer with a list of allowed actions, but the list for step 5 stopped at user_private_keys. The 35 tables created after it were refused with Action not recognized, the installation stopped at step 5 and no usable instance was produced, from the archive and from the Docker image alike. Existing and upgraded installations were not affected. The list now holds every table the installer creates, and a test compares it with the installer's schedule so a new table can no longer be left out. The issue is not exploitable; it has an advisory because the obvious workaround, installing an older release, exposes the new instance to GHSA-8xp7-fh3p-5pcr and GHSA-988j-pf6f-2m2r. After a failed 3.2.3.1 installation, the database holds no user data yet: drop and recreate it, or empty it, then run the installer of 3.2.3.2.

    • The certificate of the SMTP server can be verified - TeamPass disabled the verification of the mail server certificate unconditionally: with SSL or TLS the connection was encrypted but not authenticated, so anyone on the network path to the relay could impersonate it and read the SMTP credentials and every email TeamPass sends. The new option Verify the SMTP server certificate (Admin → Emails) is enabled on new installations. On an upgraded installation it is off, so a relay with a self-signed or internal certificate keeps working, and the administrator dashboard recommends enabling it while an SSL/TLS relay is not verified. If the test email then fails with certificate verify failed, add the certificate authority of the relay to the trust store of the TeamPass server. See Security hardening.

    ✨ New features

    • Creation and modification dates in the knowledge base (PR #5435, @guerricv) - an open article shows its creation date and its last modification date next to its category, comments and author; the article list shows the last modification date, or the creation date when no modification is recorded, with the full timestamp on hover. Dates follow the date and time formats and the timezone of the instance. Changes to the article, its associated items or its attachments update the modification date; reading, commenting and saving without changes do not, and deleting then restoring an article keeps its dates. The dates are stored with the article, so purging the activity logs no longer loses them. See Knowledge base.

    🐛 Bug fixes

    • Licence dates follow the date format of the instance (PR #5434, @guerricv) - the expiry tile of Statistics → Licence and the Browser Extension ti

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    Teampass

    Self-hosted password management your whole team can trust

    Folder-level access control · authenticated AES-256-GCM encryption · compliance evidence Your secrets never leave your infrastructure.

    🌐 teampass.net · 📖 Documentation · 💬 Discussions · 🐳 Docker Hub

    Release License PHP Docker Pulls Stars

    CodeQL Docker Build Security policy Sponsor


    Contents


    About

    Teampass is an open-source credential vault you run yourself. No account to create, no company behind the curtain holding your data — just a PHP/MySQL application on your own server, with folder-level access control, per-user encryption keys and a full audit trail.

    It has been built and maintained since 2009, driven by what real teams actually run into: who should see which credential, how to prove it to an auditor, and how to stop passwords living in chat threads and spreadsheets.

    Items and secrets

    Folders and roles

    Authentication and MFA

    Encryption keys

    Search, export, one-time view

    Background tasks


    Who it's for

    🏠 Individuals & Homelab

    Own your vault, literally.

    • Runs on a Raspberry Pi or a €5 VPS
    • Personal folders encrypted with your own key
    • Import from Bitwarden, LastPass, 1Password or KeePassXC
    • Free forever, no sign-up required

    👥 Teams & SMB

    Stop sharing passwords in chat.

    • Folders and roles instead of a shared document
    • A record of who accessed what, and when
    • Secure Send for clients and contractors
    • Browser extension for day-to-day autofill

    🏛️ Enterprise & Regulated

    Prove your access controls, don't just claim them.

    • Access recertification campaigns with immutable decisions
    • Compliance reports and evidence export
    • LDAP/AD with nested groups, OAuth2 SSO
    • Data classification and ownership

    Security

    Encryption you can describe to an auditor

    Secrets are encrypted with AES-256-GCM using random nonces and per-secret salts, under 256-bit object keys. The private key that unlocks them is derived from your password with PBKDF2-SHA256 at 600 000 iterations.

    • Authenticated encryption — tampering is detected, not silently decrypted - Per-user key distribution — every user holds their own RSA-wrapped copy of each object key, so removing an account actually revokes access instead of just hiding a button
    • Lazy migration — format upgrades happen on access, with no maintenance window

    Transparency over silence

    A password manager that reports no vulnerabilities is not a password manager that has none.

    Findings are triaged, fixed and published as GitHub Security Advisories with CVE identifiers.

    Found a vulnerability? Please report it privately through GitHub Security Advisories — never in a public issue.


    Features

    • Folders — unlimited nesting, per-folder password complexity rules
    • Roles — grant access by role, not user by user
    • Rights — read, write, no-edit, no-delete, resolved least-permissive-wins
    • Users — per-user overrides on top of roles
    • Personal folders that nobody else can read, including administrators
    • Security posture — a personal score for weak, reused and breached credentials, and Have I Been Pwned checks without sending your passwords
    • Password renewal — expiry policies and reminders
    • Micro-learning — in-app nudges instead of a yearly slideshow
    • Authentication — local, LDAP/AD with nested groups, OAuth2 / SSO
    • Multi-factor: TOTP (Google Authenticator), Duo Security, YubiKey, AGSES
    • Network ACL — restrict access by IP range
    • Session management — timeouts, concurrent sessions, Redis-backed storage
    • Import — Bitwarden, LastPass, 1Password, KeePassXC, CSV
    • Export — CSV, PDF, and a self-contained encrypted offline HTML vault
    • No lock-in: it is your database, on your server, under GPL-3.0

    Get started

    Requirements

    DatabaseMySQL 5.7+ or MariaDB 10.7+
    PHP8.2 or newer (tested against 8.3)
    Required extensionsopenssl mysqli mbstring bcmath iconv xml gd curl gmp — plus ldap for LDAP/AD
    Recommended extensionsapcu (config cache) · opcache (performance) · redis (HA sessions) · pcntl + posix (WebSocket daemon)

    Teampass follows active PHP support. Running the latest stable PHP release is strongly recommended for both security and performance.

    🐳 Docker

    docker run -d --name teampass \
      -p 8080:80 \
      -v teampass_data:/var/www/html \
      teampass/teampass:latest
    

    Images are published to both registries:

    • Docker Hub — teampass/teampass
    • GitHub Container Registry — ghcr.io/nilsteampassnet/teampass

    📖 Docker guide · Migrating an existing install to Docker

    🖥️ Bare metal (recommended for production)

    Installing directly on a PHP/MySQL server gives the best performance and the most control over your environment.


    Documentation

    📖 Full documentationInstall, features, administration
    🚀 InstallationStep-by-step first setup
    🔄 UpgradeMoving between versions
    🛡️ Security hardeningProduction checklist
    ⚙️ PerformancePHP-FPM, caching, tuning
    🔌 REST APIEndpoints, JWT auth, clients
    🧩 Browser extensionSetup and usage
    🩺 TroubleshootingWhen something goes wrong

    Languages

    Teampass ships in 25 languages, translated by the community.

    Translations are managed on POEditor — a few strings from you go a long way.

    Help translate


    Community

    Contributing

    Contributions of any kind are very welcome. Fork the repo, make your changes, then open a pull request — see CONTRIBUTING.md for the development setup, coding standards and branch conventions, and CODE_OF_CONDUCT.md for how we work together.

    Submit a PR

    Reporting bugs

    If something does not work as it should, raise a ticket. Please include the steps to reproduce, your server configuration, and the diagnostic report from Admin → Bug icon (bottom left).

    Raise an Issue

    Asking questions

    Questions, deployment advice and ideas belong in Discussions rather than the issue tracker.

    Discussions

    Contributors

    Teampass is what it is thanks to these people.

    Contributors

    Star history

    Star History Chart


    Support Teampass

    Teampass is free, GPL-3.0, and has been maintained by one person since 2009. There is no company behind it — which is exactly the point, and also why support matters.

    Help others find it — free

    There is no marketing budget either. Teams looking for a self-hosted password manager find Teampass on GitHub and on listing sites, whose rankings come from users. If Teampass serves you well, a few seconds on any of these makes a real difference:

    What sponsorship funds

    • Security work — triaging reports, fixing them, and publishing advisories with CVEs
    • Releases — testing, upgrade paths, and keeping older installations able to move forward
    • Documentation — the guides at documentation.teampass.net
    • Translations — coordinating 25 languages
    • Infrastructure — Docker images, CI, and the project websites

    Become a sponsor

    The goal is 100 monthly sponsors. Every tier helps, and small recurring amounts help most because they make the work predictable.

    Sponsor on GitHub Donate via PayPal

    Sponsors

    Huge thanks to everyone who sponsors this work — you keep Teampass free for everyone else.

    Sponsors

    Commercial support

    Sponsorship funds the free server. The browser extension and professional services fund the roadmap.

    Pro ExtensionBrowser autofill, capture and phishing protection — from €49/year, 30-day trial
    ServicesFeature development, deployment assistance, priority handling — quoted per engagement

    Pricing


    License

    Teampass is released under the GNU General Public License v3.0.

    You are free to use, study, modify and redistribute it — including commercially — provided derivative works remain under the same license.

    📋 Dependency license compliance report


    Built and maintained by Nils Laumaillé since 2009.

    Copyright © 2009-2026 Nils Laumaillé

    StandWithUkraine