На этой странице был какой-то код, который привел меня к этому, http://antonym.org/2005/12/dropping-privileges-in-python.html
Я полагаю, что установка umask необходима для завершения работы, это единственное, что, похоже, делает этот код, если мои попытки не были выполнены (я не уверен, какие настройки действительно делает umask, в контексте применения процесс)
Я немного порвал его пример, и, кроме того, эта страница с 2005 года, поэтому я публикую здесь свое рабочее решение,
def drop_privileges(uid_name='nobody', gid_name='nogroup'):
# Get the uid/gid from the name
running_uid = pwd.getpwnam(uid_name)[2]
running_gid = grp.getgrnam(gid_name)[2]
# Try setting the new uid/gid
try:
os.setgid(running_gid)
except OSError, e:
logging.error('Could not set effective group id: %s' % e)
exit()
try:
os.setuid(running_uid)
except OSError, e:
logging.error('Could not set effective user id: %s' % e)
exit()
# Ensure a very convervative umask
new_umask = 077
old_umask = os.umask(new_umask)
logging.info('drop_privileges: Old umask: %s, new umask: %s' % \
(oct(old_umask), oct(new_umask)))
final_uid = os.getuid()
final_gid = os.getgid()
logging.info('drop_privileges: running as %s/%s' % \
(pwd.getpwuid(final_uid)[0],
grp.getgrgid(final_gid)[0]))