Merge pull request #471 from Spitfireap/fix-dovecot-ownership
Fix dovecot ownership
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -55,3 +55,6 @@ docs/_build/
|
|||||||
|
|
||||||
# PyBuilder
|
# PyBuilder
|
||||||
target/
|
target/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
.idea/
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ ConfigDictTemplate = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"option": "user",
|
"option": "user",
|
||||||
"default": "vmail",
|
"default": "dovecot",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"option": "home_dir",
|
"option": "home_dir",
|
||||||
|
|||||||
@@ -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.",
|
||||||
|
|||||||
@@ -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 =
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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}
|
||||||
#
|
#
|
||||||
# ====================================================================
|
# ====================================================================
|
||||||
#
|
#
|
||||||
|
|||||||
Reference in New Issue
Block a user