diff --git a/postfix_mta_sts_resolver/daemon.py b/postfix_mta_sts_resolver/daemon.py
index b4f304cd623487c94078488363abf863e4db5ba4..f079f255184895350c7efbe33b81b031cbc44bc0 100644
--- a/postfix_mta_sts_resolver/daemon.py
+++ b/postfix_mta_sts_resolver/daemon.py
@@ -3,8 +3,11 @@
 import os
 import argparse
 import asyncio
+import grp
 import logging
+import pwd
 import signal
+import sys
 from functools import partial
 
 from .asdnotify import AsyncSystemdNotifier
@@ -26,12 +29,18 @@ def parse_args():
                         help="config file location",
                         metavar="FILE",
                         default=defaults.CONFIG_LOCATION)
+    parser.add_argument("-g", "--group",
+                        help="change eGID to this group")
     parser.add_argument("-l", "--logfile",
                         help="log file location",
                         metavar="FILE")
     parser.add_argument("--disable-uvloop",
                         help="do not use uvloop even if it is available",
                         action="store_true")
+    parser.add_argument("-p", "--pidfile",
+                        help="name of the file to write the current pid to")
+    parser.add_argument("-u", "--user",
+                        help="change eUID to this user")
 
     return parser.parse_args()
 
@@ -96,8 +105,24 @@ async def amain(cfg, loop):  # pragma: no cover
 
 
 def main():  # pragma: no cover
-    # Parse command line arguments and setup basic logging
     args = parse_args()
+    if args.pidfile is not None:
+        with open(args.pidfile, 'w') as f:
+            f.write(str(os.getpid()))
+    if args.group is not None:
+        try:
+            g = grp.getgrnam(args.group)
+            os.setegid(g.gr_gid)
+        except Exception as e:
+            print("Unable to change eGID to '{}': {}".format(args.group, e), file=sys.stderr)
+            return os.EX_OSERR
+    if args.user is not None:
+        try:
+            p = pwd.getpwnam(args.user)
+            os.seteuid(p.pw_uid)
+        except Exception as e:
+            print("Unable to change eUID to '{}': {}".format(args.user, e), file=sys.stderr)
+            return os.EX_OSERR
     with utils.AsyncLoggingHandler(args.logfile) as log_handler:
         logger = utils.setup_logger('MAIN', args.verbosity, log_handler)
         utils.setup_logger('STS', args.verbosity, log_handler)