class DanarchyDeploy::Users
Public Class Methods
new(deployment, options)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 4 def self.new(deployment, options) puts "\n" + self.name (useradd_result, userdel_result, archives_result) = nil deployment[:users].each do |username, user| user[:username] = username.to_s puts "\n > Checking if user '#{user[:username]}' already exists." usercheck_result = usercheck(user, options) if usercheck_result[:stdout] puts " - User: #{user[:username]} already exists!" else group = { groupname: user[:username] } group[:gid] = user[:gid] ? user[:gid] : nil group[:system] = user[:system] ? user[:system] : nil groupcheck_result = DanarchyDeploy::Groups.groupcheck(group, options) if !groupcheck_result[:stdout] && group[:gid] puts " |+ Adding group: #{group[:groupname]}" DanarchyDeploy::Groups.groupadd(group, options) end puts " |+ Adding user: #{user[:username]}" useradd_result = useradd(user, options) File.chmod(0750, user[:home]) if Dir.exist?(user[:home]) end if !options[:pretend] puts "\n > Checking groups for user: #{user[:username]}" if user[:groups] && checkgroups(usercheck_result, user, options) == false updategroups(user, options) puts " |+ Updated groups: #{user[:groups].join(',')}" else puts " - No change to groups needed." end if user[:authorized_keys] puts "\n > Checking on #{user[:authorized_keys].count} authorized_keys for user: #{user[:username]}" authorized_keys(user) end if user[:sudoer] puts "\n > Checking sudo rules for user: #{user[:username]}" sudoer(user) end end if user[:applications] puts "\n > Checking #{user[:username]}'s applications." user = DanarchyDeploy::Applicator.new(deployment[:os], user, options) end user.delete(:username) end # [useradd_result, userdel_result] deployment end
Private Class Methods
add_to_group(user, options)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 102 def self.add_to_group(user, options) groups = user[:groups].join(',') groupadd_cmd = "usermod #{user[:username]} --groups #{groups} --append" DanarchyDeploy::Helpers.run_command(groupadd_cmd, options) end
checkgroups(usercheck_result, user, options)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 89 def self.checkgroups(usercheck_result, user, options) return nil if !usercheck_result[:stdout] livegroups = usercheck_result[:stdout].split(/\s+/).last.split('=').last.gsub(/\(([^)]*)\)/, '').split(',').map(&:to_i) livegroups.delete(user[:gid]) livegroups.sort == user[:groups].sort end
remove_from_group(user, group, options)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 108 def self.remove_from_group(user, group, options) groups = user[:groups].join(',') removegroup_cmd = "gpasswd --remove #{user[:username]} #{group}" DanarchyDeploy::Helpers.run_command(removegroup_cmd, options) end
sudoer(user)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 136 def self.sudoer(user) sudoer_file = '/etc/sudoers.d/danarchy_deploy-' + user[:username] File.open(sudoer_file, 'a+') do |f| if !f.read.include?(user[:sudoer]) puts " |+ Added: '#{user[:sudoer]}'" f.puts user[:sudoer] else puts ' - No change needed' end f.close end end
updategroups(user, options)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 96 def self.updategroups(user, options) groups = user[:groups].join(',') groupupdate_cmd = "usermod #{user[:username]} --groups #{groups}" DanarchyDeploy::Helpers.run_command(groupupdate_cmd, options) end
useradd(user, options)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 64 def self.useradd(user, options) useradd_cmd = "useradd #{user[:username]} " useradd_cmd += "--home-dir #{user[:home]} " if user[:home] useradd_cmd += "--create-home " if !Dir.exist?(user[:home]) useradd_cmd += "--uid #{user[:uid]} " if user[:uid] useradd_cmd += "--gid #{user[:gid]} " if user[:gid] useradd_cmd += "--groups #{user[:groups].join(',')} " if user[:groups] useradd_cmd += "--shell /sbin/nologin " if user[:nologin] useradd_cmd += "--system " if user[:system] DanarchyDeploy::Helpers.run_command(useradd_cmd, options) end
usercheck(user, options)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 85 def self.usercheck(user, options) DanarchyDeploy::Helpers.run_command("id #{user[:username]}", options) end
userdel(user, options)
click to toggle source
# File lib/danarchy_deploy/users.rb, line 76 def self.userdel(user, options) userdel_cmd = "userdel --remove #{user[:username]}" if options[:pretend] puts "\tFake run: #{userdel_cmd}" else DanarchyDeploy::Helpers.run_command(userdel_cmd, options) end end