mirror of
https://github.com/jupyterhub/the-littlest-jupyterhub.git
synced 2025-12-18 21:54:05 +08:00
Better suited for scripting use. adduser also seemed to cause issues when root user's password had expired, so let's see if useradd fixes that!
108 lines
1.9 KiB
Python
108 lines
1.9 KiB
Python
"""
|
|
User management for tljh.
|
|
|
|
Supports minimal user & group management
|
|
"""
|
|
import pwd
|
|
import grp
|
|
import subprocess
|
|
|
|
|
|
def ensure_user(username):
|
|
"""
|
|
Make sure a given user exists
|
|
"""
|
|
# Check if user exists
|
|
try:
|
|
pwd.getpwnam(username)
|
|
# User exists, nothing to do!
|
|
return
|
|
except KeyError:
|
|
# User doesn't exist, time to create!
|
|
pass
|
|
|
|
subprocess.check_call([
|
|
'useradd',
|
|
username
|
|
])
|
|
|
|
|
|
def remove_user(username):
|
|
"""
|
|
Remove user from system if exists
|
|
"""
|
|
try:
|
|
pwd.getpwnam(username)
|
|
except KeyError:
|
|
# User doesn't exist, nothing to do
|
|
return
|
|
|
|
subprocess.check_call([
|
|
'deluser',
|
|
'--quiet',
|
|
username
|
|
])
|
|
|
|
|
|
def ensure_group(groupname):
|
|
"""
|
|
Ensure given group exists
|
|
"""
|
|
subprocess.check_call([
|
|
'groupadd',
|
|
'--force',
|
|
groupname
|
|
])
|
|
|
|
|
|
def remove_group(groupname):
|
|
"""
|
|
Remove user from system if exists
|
|
"""
|
|
try:
|
|
grp.getgrnam(groupname)
|
|
except KeyError:
|
|
# Group doesn't exist, nothing to do
|
|
return
|
|
|
|
subprocess.check_call([
|
|
'delgroup',
|
|
'--quiet',
|
|
groupname
|
|
])
|
|
|
|
|
|
def ensure_user_group(username, groupname):
|
|
"""
|
|
Ensure given user is member of given group
|
|
|
|
Group and User must already exist.
|
|
"""
|
|
group = grp.getgrnam(groupname)
|
|
if username in group.gr_mem:
|
|
return
|
|
|
|
subprocess.check_call([
|
|
'usermod',
|
|
'--append',
|
|
'--groups',
|
|
groupname,
|
|
username
|
|
])
|
|
|
|
|
|
def remove_user_group(username, groupname):
|
|
"""
|
|
Ensure given user is *not* a member of given group
|
|
"""
|
|
group = grp.getgrnam(groupname)
|
|
if username not in group.gr_mem:
|
|
return
|
|
|
|
subprocess.check_call([
|
|
'deluser',
|
|
'--quiet',
|
|
username,
|
|
groupname
|
|
])
|