# How to create and manage public folder [TOC] iRedMail has setting for public folder in `/etc/dovecot/dovecot.conf`, what you need to do is: * enable the setting for public folder * choose a preferred directory as public folder * set proper ACL rules to control the access In this tutorial, we will show you how to share a public folder named `TestFolder`. ## Enable public folder in Dovecot Find sample settings like below in Dovecot config file `/etc/dovecot/dovecot.conf`: ``` # Public mailboxes. # Refer to Dovecot wiki page for more details: # http://wiki2.dovecot.org/SharedMailboxes/Public #namespace { # type = public # separator = / # prefix = Public/ # # # CONTROL=: Mark this public folder as read-only mailbox # # INDEX=: Per-user \Seen flag # location = maildir:/var/vmail/public/:CONTROL=~/Maildir/public:INDEX=~/Maildir/public # # # Allow users to subscribe to the public folders. # subscriptions = yes #} ``` Remove comment marks (`#`) for above `namespace {}` block, like below: ``` # Public mailboxes. # Refer to Dovecot wiki page for more details: # http://wiki2.dovecot.org/SharedMailboxes/Public namespace { type = public separator = / prefix = Public/ # CONTROL=: Mark this public folder as read-only mailbox # INDEX=: Per-user \Seen flag location = maildir:/var/vmail/public/:CONTROL=~/Maildir/public:INDEX=~/Maildir/public # Allow users to subscribe to the public folders. subscriptions = yes } ``` If you want to share the public folder to all users hosted on same server, please also remove the comment mark in below line in `dovecot.conf`: ``` acl_anyone = allow ``` Restarting Dovecot service is required after changed its config file. Important notes: * With above setting, it uses `/var/vmail/public` as public folder. You're free to change it to a preferred directory. We use `/var/vmail/public/` in this tutorial for example. * Please make sure the public folder is owned by user/group `vmail:vmail` with permission `0700`. Now let's create required folder and our first shared folder `TestFolder`. ``` mkdir -p /var/vmail/public/.TestFolder chown -R vmail:vmail /var/vmail/public/.TestFolder chmod -R 0700 /var/vmail/public/.TestFolder ``` !!! note "Notes" * There's a dot in folder name while creating it, it's `.TestFolder`, not `TestFolder`. All folders with a prefixed dot will be considered as an IMAP folder by Dovecot with iRedMail default settings. * There are no `cur/`, `new/` or `tmp/` directories directly under the `/var/mail/public/` folder, because the `Public/` namespace isn't a mailbox itself. If you create them manually, it does become a selectable mailbox. With steps above, if you login to webmail (or other IMAP client) as any mail user hosted on same server, there's no visible public folder at all -- this is correct, because no one has permission to access this folder right now. ## Manage Access Control with `doveadm` Before we set any permission, let's check the access control of this public folder first with command `doveadm acl get`: ``` doveadm acl get -A "Public/TestFolder" ``` You can see output like below, no access control at all: ``` Username ID Global Rights ``` Below is list of all available permissions. Please check [Dovecot web site](http://wiki2.dovecot.org/ACL) for more details or update. !!! note "Permissions" Permission name (short) | Permission name (full) | Comment ---|---|--- 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 `\Seen` and `\Deleted` s | write-seen | `\Seen` flag can be changed t | write-deleted | `\Deleted` flag can be changed i | insert | Messages can be written or copied to the mailbox p | post | Messages can be posted to the mailbox by LDA, e.g. from Sieve scripts e | expunge | Messages can be expunged k | create | Mailboxes can be created (or renamed) directly under this mailbox x | delete | Mailbox can be deleted a | admin | Administration rights to the mailbox (currently: ability to change ACLs for mailbox) With shell command below, we grant some permissions to user `postmaster@test.com` (again, this user is hosted on same server): ``` doveadm acl set -A "Public/TestFolder" "user=postmaster@test.com" lookup read write write-seen write-deleted insert delete expunge create ``` Check the ACl with `doveadm` again: ``` # doveadm acl get -A "Public/TestFolder" Username ID Global Rights postmaster@a.cn user=postmaster@test.com create delete expunge insert lookup read write ``` If you now login to webmail (or other IMAP client) as user `postmaster@test.com`, you can see a new folder `TestFolder`. With shell command below, we grant all users hosted on same server `lookup`, and `read` permissions: ``` doveadm acl set -A "Public/TestFolder" "anyone" lookup read ``` Check the ACl with `doveadm` now: ``` # doveadm acl get -A "Public/TestFolder" Username ID Global Rights postmaster@a.cn anyone lookup read postmaster@a.cn user=postmaster@test.com create delete expunge insert lookup read write ``` If you login to webmail (or other IMAP client) as any user hosted on same server, you can see a new folder `TestFolder`. With shell command below we delete access control for user `postmaster@test.com`: ``` doveadm acl delete -A "Public/TestFolder" "user=postmaster@test.com" ``` For more details about ACL control, please read Dovecot tutorials mentioned in [References](#references) below. ## Troubleshooting * If public folder doesn't work as expected, please [turn on debug mode in Dovecot](./debug.dovecot.html) to get debug message. If you don't understand the debug message, you can post them to our [online support forum](https://forum.iredmail.org/) to get help. * It's also a good idea to run `doveadm` command with `-D` flag to turn on verbose logging, like below: ``` doveadm -D acl ... ``` ## Use someone's mailbox as public folder If you want to use someone's mailbox as public folder, here's a simplest way to achieve it. Let's say you want to share user `public@domain.com`'s mailbox as public folder `PublicMailbox`, and its maildir path is `/var/vmail/vmail1/domain.com/p/u/b/public-20160714100502/Maildir/`. What you need to do are: * creating a symbol link to this maildir path like below * set proper ACL with `doveadm acl` (check steps above) !!! warning There's a dot prepended in public mailbox name, it's `public/.PublicMailbox`, not `public/PublicMailbox`. ``` ln -s /var/vmail/vmail1/domain.com/p/u/b/public-20160714100502/Maildir /var/vmail/public/.PublicMailbox ``` ## References * Dovecot official documents: * [Public Mailboxes](http://wiki2.dovecot.org/SharedMailboxes/Public) * [Access Control Lists](http://wiki2.dovecot.org/ACL) * [Manage Access Control List with doveadm](http://wiki2.dovecot.org/Tools/Doveadm/ACL) ## See Also * [Mailbox sharing](./mailbox.sharing.html)