#!/usr/bin/env python import grp from dm.common.utility.loggingManager import LoggingManager from dmSubprocess import DmSubprocess class LinuxUtility: SUDO_CMD = '/usr/bin/sudo' GROUPADD_CMD = '/usr/sbin/groupadd' USERMOD_CMD = '/usr/sbin/usermod' SETFACL_CMD = '/usr/bin/setfacl' CHOWN_CMD = '/bin/chown' GPASSWD_CMD = '/usr/bin/gpasswd' @classmethod def getLogger(cls): logger = LoggingManager.getInstance().getLogger(cls.__name__) return logger @classmethod def executeSudoCommand(cls, cmd): p = DmSubprocess('%s %s' % (cls.SUDO_CMD, cmd)) p.run() @classmethod def createGroup(cls, name): """ Create group if it does not exist. """ logger = cls.getLogger() try: group = grp.getgrnam(name) logger.debug('Group %s already exists' % name) return except KeyError, ex: # ok, we need to create group pass logger.debug('Creating group %s' % name) cmd = '%s %s' % (cls.GROUPADD_CMD, name) cls.executeSudoCommand(cmd) @classmethod def addUserToGroup(cls, username, groupName): """ Add user to group. """ logger = cls.getLogger() logger.debug('Adding user %s to group %s' % (username, groupName)) cmd = '%s -a -G %s %s' % (cls.USERMOD_CMD, groupName, username) cls.executeSudoCommand(cmd) @classmethod def addLocalUserToGroup(cls, username, groupName): """ Add local user to group. """ logger = cls.getLogger() logger.debug('Adding local user %s to group %s' % (username, groupName)) cmd = '%s -a %s %s' % (cls.GPASSWD_CMD, username, groupName) cls.executeSudoCommand(cmd) @classmethod def deleteLocalUserFromGroup(cls, username, groupName): """ Remove local user from group. """ logger = cls.getLogger() logger.debug('Removing local user %s from group %s' % (username, groupName)) cmd = '%s -d %s %s' % (cls.GPASSWD_CMD, username, groupName) cls.executeSudoCommand(cmd) @classmethod def setGroupUsers(cls, groupName, usernameList): """ Set list of users for a given group. """ logger = cls.getLogger() logger.debug('Setting group %s users to: %s' % (groupName, usernameList)) cmd = '%s -M "%s" %s' % (cls.GPASSWD_CMD, ','.join(usernameList), groupName) cls.executeSudoCommand(cmd) @classmethod def setPathReadExecutePermissionsForGroup(cls, path, groupName): """ Set path permissions for the given group. """ logger = cls.getLogger() logger.debug('Allowing group %s to read/execute path %s' % (groupName, path)) cmd = '%s -m group\:%s\:rx %s' % (cls.SETFACL_CMD, groupName, path) cls.executeSudoCommand(cmd) @classmethod def changePathGroupOwner(cls, path, groupName): logger = cls.getLogger() logger.debug('Changing group owner to %s for path %s' % (groupName, path)) cmd = '%s \:%s %s' % (cls.CHOWN_CMD, groupName, path) cls.executeSudoCommand(cmd) ####################################################################### # Testing. if __name__ == '__main__': LinuxUtility.createGroup('exp3') LinuxUtility.addUserToGroup('hpc', 'exp3') LinuxUtility.setPathReadExecutePermissionsForGroup('/home/sveseli/Work/DM/data/ESAF/exp3', 'exp3')