Giter Club home page Giter Club logo

useradm's Introduction

!DEPRECATION WARNING!

This tool has become more trouble than it's worth to continually work on. Useradm remains in production in its current state for the time being, but will eventually be superceded by redbrick/rb-ldap. Please contact [email protected] with any questions.

Useradm

CircleCI Code Climate

Modular Python User Management Tool

Useradm is used to manage Redbrick's membership.

Testing RRS

To test rrs run

python server.py

Then open localhost:8000/rrs.cgi

Functions

New User Creation

  1. Queries DCU's AD server for User information:

    • Fullname
    • Student ID
    • DCU altmail
    • Course of Study
    • Year of Study.
  2. Asks user for nickname, queries if nick exists in Redbrick LDAP.

  3. If the user doesn't exist.

    • Creates the user's homedir
    • Populates .forward with altmail address
    • Assigns quotas.
    • Adds the user to the announce-redbrick mailman list
    • Mails user's password and account details.

Renew User

  1. Queries RB LDAP using user nickname.
  2. Set yearsPaid=1 Set yeats paid to 1 if less than 1
  3. Reset user shell from /usr/local/shell/expired back to previous user's shell
  4. Restores the correct user type before expiration (committee/associate)

Installation Manual:

Cillian Sharkey, CASE3, 50716197

  1. Introduction
  2. Pre-requisites
    1. Requirements for all setups
    2. Requirements for main setup
    3. Requirements for web setup
  3. Installation
    1. Installing software
    2. Setting up database
  4. Configuration

Introduction

There are essentially two kinds of setups for RRS:

  • Main setup - this is the setup of the machine where the user database and accounts permanently reside. There is at a minimum, full use of useradm for both database and account administration.
  • Web setup - this is the machine used for hosting the clubs & societies day system. Full use of the rrs cgi for database administration and limited use of useradm for database only administration.

Note that the web setup could also be used on the main setup, so that full use of useradm and the rrs cgi would be available.

The installation requirements and steps below will indicate if they only pertain to one of the given setups ('main' or 'web') above, otherwise it can be assumed that they are required for both types of setup.

It is also worth noting that much of RRS is very specific to the RedBrick and DCU environment and so as such is not designed for widespread use on generic machines. The web setup mentioned above however, is not as specific in its requirements and is intended to be reasonably 'portable'.

Pre-requisites

Requirements for all setups

Platform

RRS is designed primarily to run on a Unix platform however, it should be possible to run the web interface part on a non-Unix platform although this has not been tested. Note that root (superuser) access is required for performing any account or filesystem operations with useradm, everything else can be performed using a user / unprivileged account (assuming it has access to the user database).

PostgresSQL

PostgresSQL version 7.2 or higher must be installed. Details on doing this vary depending on the operating system and is outside the scope of this document however, full instructions can be found on the PostgresSQL website.

Python

Python version 3 or higher must be installed. Details on doing this vary depending on the operating system and is outside the scope of this document however, full instructions can be found on the Python website.

The following Python modules are included in the standard Python release, but may need to be installed or configured to work:

  • readline - provides command line editing and completion functionality for useradm. Requires GNU readline to be installed.

The following additional 3rd party Python modules must be installed:

  • PyGresSQL - Python interface to PostgresSQL database. Note that this is actually included in the PostgresSQL database release, however ensure that version 3.2 or later is installed.
  • pyldap - a Python interface to LDAP, and a fork of python-ldap. OpenLDAP > 2.4 is required. This module is currently only used by rebuild_userdb_student and the rebuild_userdb_staff scripts.

Requirements for main setup

Account utilities

The account utilities useradd, usermod and userdel need to be installed. Typically, these are provided as part of the native operating system and have been found to have a consistent interface on Solaris, Linux and NetBSD.

Setquota

The 3rd party utility setquota must be installed for the manipulation of disk quotas. There appear to be a number of implementations of this command each with different command line syntax for different operating systems. Tested with a setquota utility for Solaris written by David Mitchell of Dept of Computer Science, Sheffield University.

Mailman

RRS automatically subscribes (and unsubscribes) users to a variety of RedBrick mailing lists, specifically the announce-redbrick, redbrick-newsletter, comittee, rb-admins and admin-discuss lists. For this reason the mailing list software Mailman should be installed with the above mentioned lists created and working. It is not entirely necessary however as "dummy" scripts can be used in place of the add_members and remove_members mailman commands.

Mail Transfer Agent

Any MTA that provides the generic sendmail command line interface will suffice, e.g. Exim, Postfix, Sendmail, etc.

Requirements for web setup

Apache

A web server is required for the rrs cgi. Web servers other than Apache should work as the CGI standard is web server independant. Tested against Apache 1.3.26.

Installation

Installing software

The installation of RRS simply involves unpacking the RRS distribution tarball in a filesystem location of your choosing. Say you have downloaded the tarball to /tmp/rrs.tar.gz. Installation to the directory /usr/local/rrs is as follows:

cd /usr/local
tar zxf /tmp/rrs.tar.gz

Setting up database

A database userdb needs to be created with the postgres command "createdb userdb" run as the postgres user. For the account setup, the root user will need access to the database. For the web setup, the user the web server runs as will need access to the database. This is achieved by first creating the users if they don't already exist with the postgres createuser command and making sure that postgres is setup to grant access to the userdb database for these users by appropriate editing of the pg_hba.conf and possibly pg_ident.conf files.

Creating database [main setup]

This step sets up a new database from scratch.

Create the tables for the database:

cat userdb_reserved.sql userdb_staff.sql userdb_students.sql \
userdb_usertypes.sql userdb_users.sql | psql userdb

Make sure that access to these tables is granted to all users who need it. The above scripts include full access for root and SELECT (read only) access for users www and webgroup as this is the default used on the RedBrick system.

Then populate the student, staff and reserved tables by running each of the rebuild scripts, e.g:

$ ./rebuild_userdb_reserved
userdb/reserved: Purge. Populate. Done [45]
$ ./rebuild_userdb_students
userdb/students: Search [19523]. Purge. Populate. Done [19436/19523].
$ ./rebuild_userdb_staff
userdb/staff: Search [1829]. Purge. Populate. Done [397/1829].

Creating database [web setup]

If the web setup is on a seperate machine to the main system machine, the database must be copied across. This can be achieved as follows:

pg_dump -f userdb.dump userdb

copy file userdb.dump to the web machine

psql userdb < userdb.dump

You will need to grant full access to the users table to the user the web server runs as. The GRANT ALL ON users TO <username> SQL command achieves this when run as the owner of the userdb.

An empty rrs.log file needs to be created before any actions can be performed with the web interface. This can be achieved by creating rrs.log in a directory that rrs is installed and making sure the web server user can write to that file:

touch rrs.log
chown www rrs.log

Configuration

Local configuration can be performed by editing the rbconfig.py file. The majority of this configuration file is for providing local account and filesystem location paths to the rbaccount module. The defaults provided are of course suited for the RedBrick system.

At this point, all necessary installation and configuration should be complete for use of RRS.

Contribution

Our open issues can be found here!

useradm's People

Contributors

butlerx avatar csmartt avatar gruunday avatar liisberg avatar rodolfoferro avatar voytechnology avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

useradm's Issues

LDAP: Password crypt

Password crypt has to be DES until Solaris supports better methods crypted password gets sent by pam to ldap when checking authentication anyone can directly connect to ldap to try for correct passwords with no delay involved for incorrect passwords. This should be logged.

Pylint Errors

So I ran pylint on useradm out of curiosity. I suppose a good start to cleaning up the repo would be to fix these errors. The output is too long to paste into this issue so I've attached it here: pylint.txt. Fixing these errors will be a fantastic start to cleaning up the repo.

Testing user renewal

Test user renewal works as intended.

Should also change their shell back to enabled as long as they haven't been disusered

LDAP: Inconsistent home directories

Home directories not consistent! to be part of checkdb.
Also, vhosts should be in /webtree/vhosts ?
DONE?

for dn,attr in ldp.search_s('ou=accounts,o=redbrick',ldap.SCOPE_ONELEVEL, 'objectClass=posixaccount', ('uid','homeDirectory', 'objectClass')):
 if attr['homeDirectory'][0] != acc.gen_homedir(attr['uid'][0], attr['objectClass'][0]):
  print attr['uid'][0]

python_ldap

LDAP types -> python types: currently everything returned as strings, need:
newbie: boolean
yearsPaid, id, uidNumber, gidNumber: int
DONE: "converted" on the fly

fix byte errors

useradm cannot write to ldap due to strings not being btye strings

Support for --dry-run flag

A --dry-run flag would be incredibly useful for testing and debugging. Any mutating operations can be locked by this flag so other parts of the program can be tested safely. Due to the layout of the code, implementing this flag might be tedious, but still worth it I think.

Move or remove sql

theres a lot of sql code in rbuserdb.py, despite there being no sql db, his is likely for features that were never finished.
i think it should be removed from this file and either deleted, or if we want to finish these feturers moved to their own file

unable to renew usertype associate to member

if renewing && usertype is associat/committe it will hint at restoring usertype to member

  • For committe this wouldn't be as bad, but for associat this poses an issue frequently.

General: Mailman

Mailman: possible to rename user on a list ? i.e. to preserve subscription information

add badges

add codeclimate and circle ci badge to readme

OTHER STUFF

Add previous year (ou=2003,ou=accounts?) tree.
(Automate this!)

Testing user rename

Test that a user can be renamed. This is contingent on changes being made to apache vhosts

LDAP: Birthday

Birthday: lose the time, not needed

Created & updated: drop the splitsecond precision, make sure timezone is set in all values, i.e. +00 or +01
DONE

Python: Format printing

python % format printing of values as a boolean e.g.
print '%b %b' % (1,0) -> "true false"
DONE: this is in 2.3

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.