mirror of
				https://github.com/towalink/wgfrontend.git
				synced 2025-10-31 02:56:17 +00:00 
			
		
		
		
	Drop root privileges after binding to server port
This commit is contained in:
		| @@ -68,13 +68,18 @@ def chown(username, path): | ||||
|     uid = pwd.getpwnam(username).pw_uid | ||||
|     os.chown(path, uid, -1) | ||||
|  | ||||
| def drop_privileges(uid_name='nobody', gid_name='nogroup'): | ||||
|     """""" | ||||
|     if not is_root(): | ||||
|         raise ValueError('No privileges present to drop') | ||||
| def get_uid_gid(uid_name='nobody', gid_name='nogroup'): | ||||
|     """Returns uid and gid for the given username and groupname""" | ||||
|     uid = pwd.getpwnam(uid_name).pw_uid | ||||
|     gid = grp.getgrnam(gid_name).gr_gid | ||||
| #    os.setgroups([]) # remove group privileges | ||||
|     return uid, gid | ||||
|  | ||||
| def drop_privileges(uid_name='nobody', gid_name='nogroup'): | ||||
|     """Drop privileges towards the given username and groupname""" | ||||
|     if not is_root(): | ||||
|         raise ValueError('No privileges present to drop') | ||||
|     uid, gid = get_uid_gid(uid_name, gid_name)  | ||||
|     os.setgroups([]) # remove group privileges | ||||
|     os.setgid(gid) | ||||
|     os.setuid(uid) | ||||
|  | ||||
| @@ -168,8 +173,6 @@ def setup_environment(): | ||||
|         print(f'8d) Ensuring ownership of server private key file {cfg.sslkeyfile} in case it exists.') | ||||
|         if os.path.exists(cfg.sslkeyfile): | ||||
|             chown(cfg.user, cfg.sslkeyfile) | ||||
|         print(f'9)  Dropping root privileges to user/group "{cfg.user}".') | ||||
|         drop_privileges(cfg.user, cfg.user) | ||||
|         print(f'Attempting to start web frontend...') | ||||
|     return cfg | ||||
|  | ||||
|   | ||||
| @@ -10,6 +10,7 @@ import string | ||||
| import subprocess | ||||
|  | ||||
| from . import pwdtools | ||||
| from . import setupenv | ||||
| from . import wgcfg | ||||
|  | ||||
|  | ||||
| @@ -133,7 +134,14 @@ def run_webapp(cfg): | ||||
|     cherrypy.config.update({'server.socket_host': '0.0.0.0', | ||||
|                             'server.socket_port': 8080, | ||||
|                            }) | ||||
|     cherrypy.quickstart(app, '/', app_conf) | ||||
|     cherrypy.tree.mount(app, config=app_conf) | ||||
|     if setupenv.is_root(): | ||||
|         # Drop privileges | ||||
|         uid, gid = setupenv.get_uid_gid(cfg.user, cfg.user) | ||||
|         cherrypy.process.plugins.DropPrivileges(cherrypy.engine, umask=0o022, uid=uid, gid=gid).subscribe() | ||||
|     cherrypy.engine.start() | ||||
|     cherrypy.engine.signals.subscribe() | ||||
|     cherrypy.engine.block() | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|   | ||||
		Reference in New Issue
	
	Block a user