Merge pull request #471 from Spitfireap/fix-dovecot-ownership

Fix dovecot ownership
This commit is contained in:
Antoine Nguyen
2023-01-24 10:53:36 +01:00
committed by GitHub
5 changed files with 24 additions and 17 deletions

3
.gitignore vendored
View File

@@ -55,3 +55,6 @@ docs/_build/
# PyBuilder # PyBuilder
target/ target/
# PyCharm
.idea/

View File

@@ -256,7 +256,7 @@ ConfigDictTemplate = [
}, },
{ {
"option": "user", "option": "user",
"default": "vmail", "default": "dovecot",
}, },
{ {
"option": "home_dir", "option": "home_dir",

View File

@@ -30,6 +30,12 @@ class Dovecot(base.Installer):
"conf.d/10-master.conf", "conf.d/20-lmtp.conf", "conf.d/10-ssl-keys.try"] "conf.d/10-master.conf", "conf.d/20-lmtp.conf", "conf.d/10-ssl-keys.try"]
with_user = True with_user = True
def setup_user(self):
"""Setup mailbox user."""
super().setup_user()
self.mailboxes_owner = self.app_config["mailboxes_owner"]
system.create_user(self.mailbox_owner, self.home_dir)
def get_config_files(self): def get_config_files(self):
"""Additional config files.""" """Additional config files."""
return self.config_files + [ return self.config_files + [
@@ -58,7 +64,7 @@ class Dovecot(base.Installer):
def get_template_context(self): def get_template_context(self):
"""Additional variables.""" """Additional variables."""
context = super(Dovecot, self).get_template_context() context = super(Dovecot, self).get_template_context()
pw = pwd.getpwnam(self.user) pw_mailbox = pwd.getpwnam(self.mailboxes_owner)
dovecot_package = {"deb": "dovecot-core", "rpm": "dovecot"} dovecot_package = {"deb": "dovecot-core", "rpm": "dovecot"}
ssl_protocol_parameter = "ssl_protocols" ssl_protocol_parameter = "ssl_protocols"
if package.backend.get_installed_version(dovecot_package[package.backend.FORMAT]) > "2.3": if package.backend.get_installed_version(dovecot_package[package.backend.FORMAT]) > "2.3":
@@ -79,8 +85,9 @@ class Dovecot(base.Installer):
protocols = "" protocols = ""
context.update({ context.update({
"db_driver": self.db_driver, "db_driver": self.db_driver,
"mailboxes_owner_uid": pw[2], "mailboxes_owner_uid": pw_mailbox[2],
"mailboxes_owner_gid": pw[3], "mailboxes_owner_gid": pw_mailbox[3],
"mailbox_owner": self.mailboxes_owner,
"modoboa_user": self.config.get("modoboa", "user"), "modoboa_user": self.config.get("modoboa", "user"),
"modoboa_dbname": self.config.get("modoboa", "dbname"), "modoboa_dbname": self.config.get("modoboa", "dbname"),
"modoboa_dbuser": self.config.get("modoboa", "dbuser"), "modoboa_dbuser": self.config.get("modoboa", "dbuser"),
@@ -115,10 +122,7 @@ class Dovecot(base.Installer):
utils.exec_cmd("chmod +x /usr/local/bin/postlogin.sh") utils.exec_cmd("chmod +x /usr/local/bin/postlogin.sh")
# Add mailboxes user to dovecot group for modoboa mailbox commands. # Add mailboxes user to dovecot group for modoboa mailbox commands.
# See https://github.com/modoboa/modoboa/issues/2157. # See https://github.com/modoboa/modoboa/issues/2157.
system.add_user_to_group( system.add_user_to_group(self.mailboxes_owner, 'dovecot')
self.config.get("dovecot", "mailboxes_owner"),
'dovecot'
)
def restart_daemon(self): def restart_daemon(self):
"""Restart daemon process. """Restart daemon process.
@@ -161,10 +165,10 @@ class Dovecot(base.Installer):
shutil.copytree(mail_dir, home_dir) shutil.copytree(mail_dir, home_dir)
# Resetting permission for vmail # Resetting permission for vmail
for dirpath, dirnames, filenames in os.walk(home_dir): for dirpath, dirnames, filenames in os.walk(home_dir):
shutil.chown(dirpath, self.user, self.user) shutil.chown(dirpath, self.mailboxes_owner, self.mailboxes_owner)
for filename in filenames: for filename in filenames:
shutil.chown(os.path.join(dirpath, filename), shutil.chown(os.path.join(dirpath, filename),
self.user, self.user) self.mailboxes_owner, self.mailboxes_owner)
else: else:
utils.printcolor( utils.printcolor(
"It seems that emails were not backed up, skipping restoration.", "It seems that emails were not backed up, skipping restoration.",

View File

@@ -92,14 +92,14 @@ service postlogin {
service stats { service stats {
# To allow modoboa to access available cipher list. # To allow modoboa to access available cipher list.
unix_listener stats-reader { unix_listener stats-reader {
user = vmail user = %{mailboxes_owner}
group = vmail group = %{mailboxes_owner}
mode = 0660 mode = 0660
} }
unix_listener stats-writer { unix_listener stats-writer {
user = vmail user = %{mailboxes_owner}
group = vmail group = %{mailboxes_owner}
mode = 0660 mode = 0660
} }
} }
@@ -120,7 +120,7 @@ service auth {
# permissions (e.g. 0777 allows everyone full permissions). # permissions (e.g. 0777 allows everyone full permissions).
unix_listener auth-userdb { unix_listener auth-userdb {
#mode = 0666 #mode = 0666
user = vmail user = %{mailboxes_owner}
#group = #group =
} }
@@ -154,7 +154,7 @@ service dict {
# For example: mode=0660, group=vmail and global mail_access_groups=vmail # For example: mode=0660, group=vmail and global mail_access_groups=vmail
unix_listener dict { unix_listener dict {
mode = 0600 mode = 0600
user = vmail user = %{mailboxes_owner}
#group = #group =
} }
} }

View File

@@ -78,7 +78,7 @@ scache unix - - - - 1 scache
# Also specify in main.cf: maildrop_destination_recipient_limit=1 # Also specify in main.cf: maildrop_destination_recipient_limit=1
# #
maildrop unix - n n - - pipe maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient} flags=DRhu user=%{dovecot_mailboxes_owner} argv=/usr/bin/maildrop -d ${recipient}
# #
# ==================================================================== # ====================================================================
# #