DOVEADM-ACL(1)
β¨ DOVEADM-ACL(1) β¨
okay bestie, sit down, hydrate, because today we're learning doveadm-acl from the Dovecot manual β it's the page about managing Access Control Lists (ACLs, iykyk) π
πΈ NAME πΈ
doveadm-acl β Manage Access Control List (ACL). that's it, that's the whole assignment π
π¦ SYNOPSIS π¦
doveadm [GLOBAL OPTIONS] acl command [OPTIONS] [ARGUMENTS]
π DESCRIPTION π
The doveadm acl COMMANDS are your little toolbox for doing basically every Access Control List related action you could ever want. it's giving "I control who sees what and I'm thriving" π
π GLOBAL OPTIONS π
these are the global doveadm(1) options, the ones that apply before we even get to the acl-specific stuff:
-Dβ turns on verbosity and debug messages. chaos mode, but make it informative π-Oβ do not read any config file, just use defaults. thedovecot_storage_versionsetting defaults to the latest version, but you can override it with-o. no cap.-kβ preserve the entire environment fordoveadm, not just theimport_environmentsetting. full vibe preservation π«Ά-vβ enables verbosity, including a progress counter. so you can watch it work, main character behavior β¨-iinstance-name β if you're running multiple Dovecot instances, pick the config file based on this instance name. see theinstance_namesetting for more info.-cconfig-file β read configuration from the given config-file. by default it first reads config socket, and then falls back to/etc/dovecot/dovecot.conf. you can also point this at the config socket of some instance running a compatible version π-osetting=value β overrides the configuration setting from/etc/dovecot/dovecot.confand from the userdb with the given value. wanna override multiple settings? the-ooption may be specified multiple times, babe. stack 'em π-fformatter β specifies the formatter for formatting the output. supported formatters are:flowβ prints each line with key=value pairs.jsonβ prints a JSON array of JSON objects.pagerβ prints each key: value pair on its own line and separates records with form feed character (^L).tabβ prints a table header followed by tab separated value lines.tableβ prints a table header followed by adjusted value lines.
This command uses by default the output formatter table. periodt. π
π OPTIONS π
-Aβ if the-Aoption is present, the command will be performed for all users. using this with system users fromuserdb { driver = passwd }is not recommended, because it also contains users with a lower UID than the one configured with thefirst_valid_uidsetting. > β οΈ bestie, read that again. not recommended. I'm serious.- When the SQL userdb module is used, make sure that the
userdb_sql_iterate_querysetting matches your database layout. - When using the LDAP userdb module, make sure that the
userdb_fieldssetting and theuserdb_ldap_iterate_fieldssetting match your LDAP schema. otherwisedoveadm(1)will be unable to iterate over all users π
- When the SQL userdb module is used, make sure that the
-Ffile β execute the command for all the users in the file. this is similar to the-Aoption, but instead of getting the list of users from the userdb, they're read from the given file. the file contains one username per line. cute, simple, slay π--no-userdb-lookupβ do not perform userdb lookup. use theUSERenvironment variable to specify the username.-Ssocket_path β the option's argument is either an absolute path to a local UNIX domain socket, or a hostname and port (hostname:port), in order to connect a remote host via a TCP socket.- this allows an administrator to execute
doveadm(1)mail commands through the given socket π
- this allows an administrator to execute
-uuser/mask β run the command only for the given user. it's also possible to use'*'and'?'wildcards (e.g.-u *@example.org). wildcard era π¦
π ARGUMENTS π
π id
the id (identifier) is one of:
group-override = group_nameuser = user_nameownergroup = group_nameauthenticatedanyoneanonymous, which is an alias foranyone
The ACLs are processed in the precedence given above, so for example if you have given read-access to a group, you can still remove that from specific users inside the group. order matters, bestie, it's not decorative π
Group-override identifier allows you to override users' ACLs. Probably the most useful reason to do this is to temporarily disable access for some users. For example:
user=timo rw
group-override=tempdisabled
Now if timo is a member of the tempdisabled group, he has no access to the mailbox. This wouldn't be possible with a normal group identifier, because the user=timo would override it. iconic loophole, honestly π
π§ mailbox
the name of the mailbox for which the ACL manipulation should be done. it's also possible to use the wildcard characters "*" and/or "?" in the mailbox name.
π right
Dovecot ACL right name. This isn't the same as the IMAP ACL letters, which aren't currently supported.
here's the mapping of the IMAP ACL letters to Dovecot ACL names:
l->lookup: Mailbox is visible in mailbox list. Mailbox can be subscribed to.r->read: Mailbox can be opened for reading.w->write: Message flags and keywords can be changed, except\Seenand\Deleted.s->write-seen:\Seenflag can be changed.t->write-deleted:\Deletedflag can be changed.i->insert: Messages can be written or copied to the mailbox.p->post: Messages can be posted to the mailbox bydovecot-lda, e.g. from Sieve scripts.e->expunge: Messages can be expunged.k->create: Mailboxes can be created/renamed directly under this mailbox (but not necessarily under its children, seeacl_inheritance. Note: Renaming also requires thedeleteright.x->delete: Mailbox can be deleted.a->admin: Administration rights to the mailbox (currently: ability to change ACLs for mailbox).
π₯ COMMANDS π₯
β acl add
doveadm [GLOBAL OPTIONS] acl add [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path] mailbox id right [right ...]
Add ACL rights to the mailbox/id. If the id already exists, the existing rights are preserved. we're adding, not replacing, okay? respect the originals π«Ά
β acl debug
doveadm [GLOBAL OPTIONS] acl debug [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path] mailbox
This command can be used to debug why a shared mailbox isn't accessible to the user. It will list exactly what the problem is. your little detective π΅οΈββοΈβ¨
β acl delete
doveadm [GLOBAL OPTIONS] acl delete [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path] mailbox id
Remove the whole ACL entry for the mailbox/id. gone. deleted. not me being dramatic π
β acl get
doveadm [GLOBAL OPTIONS] acl get [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path] [-m] mailbox
Show all the ACLs for the mailbox.
-mβ only show ACLs that match the mailbox.
β acl recalc
doveadm [GLOBAL OPTIONS] acl recalc [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path]
Make sure the user's shared mailboxes exist correctly in the acl_sharing_map. a lil maintenance moment π§ΉπΈ
β acl remove
doveadm [GLOBAL OPTIONS] acl remove [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path] mailbox id right [right ...]
Remove the specified ACL rights from the mailbox/id. If all rights are removed, the entry still exists without any rights. so the entry is still there, just empty β like a group chat nobody talks in anymore π
β acl rights
doveadm [GLOBAL OPTIONS] acl rights [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path] mailbox
Show the user's current ACL rights for the mailbox. the vibe check, but for permissions β¨
β acl set
doveadm [GLOBAL OPTIONS] acl set [-u user | -A | -F file | --no-userdb-lookup] [-S socket_path] mailbox id right [right ...]
Set ACL rights to the mailbox/id. If the id already exists, the existing rights are replaced. full glow-up, out with the old π
π REPORTING BUGS π
Report bugs, including doveconf -n output, to the Dovecot Mailing List β¨dovecot@dovecot.orgβ©. Information about reporting bugs is available at: β¨https://dovecot.org/bugreport.htmlβ©
π«Ά bestie, include that doveconf -n output. it's not optional and it's not a vibe, it's how they fix your thing.
π¦ SEE ALSO π¦
Additional resources:
acl_inheritance
and that's the whole page, bestie β¨ this was DOVEADM-ACL(1), source f979264, dated April 2026 β go forth and manage those ACLs, you absolute icon πππ¦
π¦ where this page comes from
- alpine 3.23: dovecot-doc 2.4.5-r0 Β· MIT AND LGPL-2.1-or-later
- alpine 3.24: dovecot-doc 2.4.5-r0 Β· MIT AND LGPL-2.1-or-later
- arch rolling: dovecot 2.4.5-1 Β· MIT AND LGPL-2.1-only
- fedora 43: dovecot 1:2.4.5-1.fc43 Β· MIT AND LGPL-2.1-only
- fedora 44: dovecot 1:2.4.5-1.fc44 Β· MIT AND LGPL-2.1-only
- nixos 26.05: dovecot 2.4.5
- nixpkgs unstable: dovecot 2.4.5
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- opensuse-leap 16.0: dovecot24 2.4.5-160000.1.1 Β· BSD-3-Clause AND LGPL-2.1-or-later AND MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms