diff options
| author | Scott Moser <smoser@ubuntu.com> | 2012-08-31 15:40:29 -0400 |
|---|---|---|
| committer | Scott Moser <smoser@ubuntu.com> | 2012-08-31 15:40:29 -0400 |
| commit | c6e4c646287e26d15b8d2402527e1f77e21113cd (patch) | |
| tree | 3d286e2598d6dc64f5c7fcdfac4b5185e7313652 /cloudinit/distros | |
| parent | 53f276c22ef57f49bfae5c6ddc233043d0ef51ad (diff) | |
| parent | a90e2802b16b0af7b9cef718d19605e2a0565a8e (diff) | |
| download | vyos-cloud-init-c6e4c646287e26d15b8d2402527e1f77e21113cd.tar.gz vyos-cloud-init-c6e4c646287e26d15b8d2402527e1f77e21113cd.zip | |
usergroup related fixes
- Converted user list to user dict to allow exclusion of the default user
on Ubuntu systems via cloud-config (LP: #1041384).
- Fixed bug with user creation on Ubuntu where the default user groups are
not set properly (LP: #1044044).
- Fixed documentation for user creation (LP: #1044508).
LP: #1041384, #1044044, #1044508
Diffstat (limited to 'cloudinit/distros')
| -rw-r--r-- | cloudinit/distros/__init__.py | 45 | ||||
| -rw-r--r-- | cloudinit/distros/ubuntu.py | 2 |
2 files changed, 31 insertions, 16 deletions
diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py index 686c6a9b..40c6aa4f 100644 --- a/cloudinit/distros/__init__.py +++ b/cloudinit/distros/__init__.py @@ -47,6 +47,7 @@ class Distro(object): __metaclass__ = abc.ABCMeta default_user = None + default_user_groups = None def __init__(self, name, cfg, paths): self._paths = paths @@ -59,16 +60,25 @@ class Distro(object): # - nopasswd sudo access user = self.get_default_user() + groups = self.get_default_user_groups() + if not user: raise NotImplementedError("No Default user") - self.create_user(user, - plain_text_passwd=user, - home="/home/%s" % user, - shell="/bin/bash", - lockpasswd=True, - gecos="%s%s" % (user[0:1].upper(), user[1:]), - sudo="ALL=(ALL) NOPASSWD:ALL") + user_dict = { + 'name': user, + 'plain_text_passwd': user, + 'home': "/home/%s" % user, + 'shell': "/bin/bash", + 'lock_passwd': True, + 'gecos': "%s%s" % (user[0:1].upper(), user[1:]), + 'sudo': "ALL=(ALL) NOPASSWD:ALL", + } + + if groups: + user_dict['groups'] = groups + + self.create_user(**user_dict) LOG.info("Added default '%s' user with passwordless sudo", user) @@ -204,6 +214,9 @@ class Distro(object): def get_default_user(self): return self.default_user + def get_default_user_groups(self): + return self.default_user_groups + def create_user(self, name, **kwargs): """ Creates users for the system using the GNU passwd tools. This @@ -220,7 +233,7 @@ class Distro(object): adduser_opts = { "gecos": '--comment', "homedir": '--home', - "primarygroup": '--gid', + "primary_group": '--gid', "groups": '--groups', "passwd": '--password', "shell": '--shell', @@ -229,10 +242,10 @@ class Distro(object): } adduser_opts_flags = { - "nousergroup": '--no-user-group', + "no_user_group": '--no-user-group', "system": '--system', - "nologinit": '--no-log-init', - "nocreatehome": "-M", + "no_log_init": '--no-log-init', + "no_create_home": "-M", } # Now check the value and create the command @@ -254,7 +267,7 @@ class Distro(object): # Default to creating home directory unless otherwise directed # Also, we do not create home directories for system users. - if "nocreatehome" not in kwargs and "system" not in kwargs: + if "no_create_home" not in kwargs and "system" not in kwargs: adduser_cmd.append('-m') # Create the user @@ -273,8 +286,8 @@ class Distro(object): self.set_passwd(name, kwargs['plain_text_passwd']) # Default locking down the account. - if ('lockpasswd' not in kwargs and - ('lockpasswd' in kwargs and kwargs['lockpasswd']) or + if ('lock_passwd' not in kwargs and + ('lock_passwd' in kwargs and kwargs['lock_passwd']) or 'system' not in kwargs): try: util.subp(['passwd', '--lock', name]) @@ -288,8 +301,8 @@ class Distro(object): self.write_sudo_rules(name, kwargs['sudo']) # Import SSH keys - if 'sshauthorizedkeys' in kwargs: - keys = set(kwargs['sshauthorizedkeys']) or [] + if 'ssh_authorized_keys' in kwargs: + keys = set(kwargs['ssh_authorized_keys']) or [] ssh_util.setup_user_keys(keys, name, None, self._paths) return True diff --git a/cloudinit/distros/ubuntu.py b/cloudinit/distros/ubuntu.py index 1f4efb59..5444cbc0 100644 --- a/cloudinit/distros/ubuntu.py +++ b/cloudinit/distros/ubuntu.py @@ -31,3 +31,5 @@ class Distro(debian.Distro): distro_name = 'ubuntu' default_user = 'ubuntu' + default_user_groups = ("adm,admin,audio,cdrom,dialout,floppy,video," + "plugdev,dip,netdev,sudo") |
