add script
This commit is contained in:
parent
b8515e6bce
commit
ecf0dadc3b
1 changed files with 80 additions and 0 deletions
80
roles/ipa/server/templates/check_sysadmin_otp.py.j2
Normal file
80
roles/ipa/server/templates/check_sysadmin_otp.py.j2
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
from python_freeipa import ClientMeta
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def login(args):
|
||||||
|
client = ClientMeta(host=args.server_address, verify_ssl=args.cert_path)
|
||||||
|
client.login(args.username, args.password)
|
||||||
|
|
||||||
|
return client
|
||||||
|
|
||||||
|
def get_sysadmins(client):
|
||||||
|
groups = client.group_find('sysadmin-')
|
||||||
|
|
||||||
|
sysadmins = []
|
||||||
|
|
||||||
|
print('Gethering all members from sysadmin-* groups')
|
||||||
|
|
||||||
|
for group in groups['result']:
|
||||||
|
try:
|
||||||
|
sysadmins = sysadmins + list(set(group['member_user']) - set(sysadmins))
|
||||||
|
except KeyError:
|
||||||
|
print('No members of group: ' + group['cn'][0])
|
||||||
|
|
||||||
|
return sysadmins
|
||||||
|
|
||||||
|
def checkotp_tokens(client):
|
||||||
|
|
||||||
|
sysadmins = get_sysadmins(client)
|
||||||
|
print("There is " + str(len(sysadmins)) + " sysadmins in the system")
|
||||||
|
|
||||||
|
tokenless = []
|
||||||
|
|
||||||
|
print('Checking which users have an otp token assigned')
|
||||||
|
|
||||||
|
for sysadmin in sysadmins:
|
||||||
|
is_token = client.otptoken_find(o_ipatokenowner=sysadmin)
|
||||||
|
if len(is_token['result']) == 0:
|
||||||
|
tokenless.append(sysadmin)
|
||||||
|
|
||||||
|
print("There are " + str(len(tokenless)) + " sysadmins without otptokens")
|
||||||
|
|
||||||
|
return tokenless
|
||||||
|
|
||||||
|
def get_email(client, users):
|
||||||
|
|
||||||
|
print('Gathering emails of the users with no tokens')
|
||||||
|
|
||||||
|
user_details = []
|
||||||
|
for user in users:
|
||||||
|
email = client.user_show(user)['result']['mail'][0]
|
||||||
|
user_details.append({'user': user, 'email': email})
|
||||||
|
|
||||||
|
return user_details
|
||||||
|
|
||||||
|
def parse_args():
|
||||||
|
parser = argparse.ArgumentParser(description="Check for sysadmin users with no otp token set, admin credentials are required to run script")
|
||||||
|
parser.add_argument("-u", "--username", default="admin", help="ipa user to use")
|
||||||
|
parser.add_argument("-c", "--cert-path", default="/etc/ipa/ca.crt", help="location of ipa cert")
|
||||||
|
parser.add_argument("-s", "--server-address", default="ipa01{{ env_suffix }}.iad2.fedoraproject.org", help="server to run against")
|
||||||
|
parser.add_argument("-p", "--password", help="ipa user password", required=True)
|
||||||
|
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
return args
|
||||||
|
|
||||||
|
def do_it(client):
|
||||||
|
|
||||||
|
tokenless_sysadmins = checkotp_tokens(client)
|
||||||
|
user_details = get_email(client, tokenless_sysadmins)
|
||||||
|
print("Details are in the file tokenless_users.json")
|
||||||
|
with open('tokenless_users.json', 'w') as outfile:
|
||||||
|
json.dump(user_details, outfile)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
args = parse_args()
|
||||||
|
client = login(args)
|
||||||
|
do_it(client)
|
Loading…
Add table
Add a link
Reference in a new issue