[BACK]Return to user_manager.sh CVS log [TXT][DIR] Up to [local] / botnow

Annotation of botnow/user_manager.sh, Revision 1.1.1.1

1.1       bountyht    1: #!/bin/sh
                      2:
                      3: htdocs_chroot_path="/home/www/htdocs"
                      4: log_path="/var/log/user_manager.log"
                      5: lock_list="jrmu,fizi,baytuch,vasya,gry,brk,mailman"
                      6:
                      7: user_exists="NO"
                      8: group_exists="NO"
                      9: target_user_id=""
                     10: target_group_id=""
                     11: error_trig="NO"
                     12:
                     13:
                     14: check_exists() {
                     15:   user_exists=NO
                     16:   group_exists=NO
                     17:   if [ ! -z "$(grep "^$1:.*$" /etc/passwd)" ]; then
                     18:     user_exists="YES"
                     19:   fi
                     20:   if [ ! -z "$(grep "^$1:.*$" /etc/group)" ]; then
                     21:     group_exists="YES"
                     22:   fi
                     23: }
                     24:
                     25: create_user() {
                     26:   groupadd -ov -g $3 $1
                     27:   useradd -v -m -d /home/$1 -g $3 -s /bin/ksh -u $2 $1
                     28:   passwd $1
                     29: }
                     30:
                     31: delete_user() {
                     32:   userdel -rv $1
                     33:   groupdel -v $1
                     34: }
                     35:
                     36: logger() {
                     37:   if [ ! -f $log_path ]; then
                     38:     touch $log_path
                     39:   fi
                     40:   mess=[$(date '+%Y-%m-%d %H:%M:%S')]" "$1
                     41:   echo $mess >> $log_path
                     42:   echo $mess
                     43: }
                     44:
                     45: get_target_ids() {
                     46:   if [ $user_exists == "YES" ]; then
                     47:     target_user_id=$(grep "^$1" /etc/passwd | sed -r -e 's|^.*:([0-9]+):[0-9]+:.*$|\1|g')
                     48:     target_group_id=$(grep "^$1" /etc/passwd | sed -r -e 's|^.*:[0-9]+:([0-9]+):.*$|\1|g')
                     49:   else
                     50:     users_ids=$(cat /etc/passwd | sed -r -e 's|^.*:([0-9]+:[0-9]+):.*$|\1|g')
                     51:     tmp_last_user_id=0
                     52:     for line in $users_ids; do
                     53:       tmp_user_id=${line%:*}
                     54:       tmp_group_id=${line#*:}
                     55:       if [ ${#tmp_user_id} -eq 4 ] && [ ${#tmp_group_id} -eq 4 ]; then
                     56:         if [ $tmp_user_id -eq $tmp_group_id ]; then
                     57:           if [ $tmp_user_id -gt $tmp_last_user_id ]; then
                     58:             tmp_last_user_id=$tmp_user_id
                     59:           fi
                     60:         fi
                     61:       fi
                     62:     done
                     63:     target_user_id=$tmp_last_user_id
                     64:     target_group_id=$tmp_last_user_id
                     65:   fi
                     66:   target_user_id=$(echo $target_user_id | sed 's/[^0-9]//g')
                     67:   target_group_id=$(echo $target_group_id | sed 's/[^0-9]//g')
                     68:   if [ $user_exists == "NO" ] && [ ! -z $target_user_id ] && [ ! -z $target_group_id ]; then
                     69:     target_user_id=$((target_user_id + 1))
                     70:     target_group_id=$((target_group_id + 1))
                     71:   fi
                     72: }
                     73:
                     74: user_tree_config() {
                     75:   if [ -d /home/$1 ]; then
                     76:     chmod 700 /home/$1
                     77:     chmod 700 /home/$1/.ssh
                     78:     chmod 600 /home/$1/{.Xdefaults,.cshrc,.cvsrc,.login,.mailrc,.profile}
                     79:     logger "TREE CONFIG: was configured home dir"
                     80:     if [ -d $htdocs_chroot_path ]; then
                     81:       mkdir $htdocs_chroot_path/$1
                     82:       chown $1:$1 $htdocs_chroot_path/$1
                     83:       ln -s $htdocs_chroot_path/$1 /home/$1/htdocs
                     84:       chown $1:$1 /home/$1/htdocs
                     85:       logger "TREE CONFIG: was configured htdocs dir"
                     86:     else
                     87:       logger "TREE CONFIG: htdocs chroot not found!"
                     88:     fi
                     89:   else
                     90:     logger "TREE CONFIG: home folder not found!"
                     91:   fi
                     92: }
                     93:
                     94: user_tree_delete() {
                     95:   if [ -d /home/$1 ]; then
                     96:     if [ -d /home/$1/htdocs ]; then
                     97:       rm -rf /home/$1/htdocs
                     98:     fi
                     99:     if [ -d $htdocs_chroot_path/$1 ]; then
                    100:       rm -rf $htdocs_chroot_path/$1
                    101:     fi
                    102:     if [ ! -d /home/$1/htdocs ] && [ ! -d $htdocs_chroot_path/$1 ]; then
                    103:       logger "TREE DELETE: was deteled htdocs dir"
                    104:     else
                    105:       error_trig="YES"
                    106:       logger "TREE DELETE: failed to delete folder tree!"
                    107:     fi
                    108:   else
                    109:     error_trig="YES"
                    110:     logger "TREE DELETE: home folder not found!"
                    111:   fi
                    112: }
                    113:
                    114: do_create_user() {
                    115:   logger "WORKER: create a new user..."
                    116:   if [ -z $1 ]; then
                    117:     logger "WORKER: you must provide username!"
                    118:   else
                    119:     check_exists $1
                    120:     if [ $user_exists == "YES" ]; then
                    121:       logger "WORKER: user $1 already exists"
                    122:     else
                    123:       get_target_ids $1
                    124:       if [ ${#target_user_id} -eq 4 ] && [ ${#target_group_id} -eq 4 ]; then
                    125:         logger "WORKER: process of creating a new user has started"
                    126:         logger "WORKER: -> login - $1"
                    127:         logger "WORKER: -> user_id - $target_user_id"
                    128:         logger "WORKER: -> group_id - $target_group_id"
                    129:         create_user $1 $target_user_id $target_group_id
                    130:         check_exists $1
                    131:         if [ $user_exists == "YES" ]; then
                    132:           logger "WORKER: user created successfully"
                    133:           logger "WORKER: user folder tree configuration..."
                    134:           user_tree_config $1
                    135:         else
                    136:           logger "WORKER: user creation failure!"
                    137:         fi
                    138:       else
                    139:         logger "WORKER: error generating identifiers!"
                    140:       fi
                    141:     fi
                    142:   fi
                    143: }
                    144:
                    145: do_delete_user() {
                    146:   logger "WORKER: removing a user account..."
                    147:   if [ -z $1 ]; then
                    148:     logger "WORKER: you must provide username!"
                    149:   else
                    150:     check_exists $1
                    151:     if [ $user_exists == "NO" ]; then
                    152:       logger "WORKER: user $1 not found!"
                    153:     else
                    154:       get_target_ids $1
                    155:       if [ ${#target_user_id} -ne 4 ]; then
                    156:         logger "WORKER: you cannot delete the service user!"
                    157:       else
                    158:         deny_del="NO"
                    159:         for tmp_user_name in $(echo $lock_list | tr "," "\n"); do
                    160:           if [ $1 == $tmp_user_name ]; then
                    161:             deny_del="YES"
                    162:             break
                    163:           fi
                    164:         done
                    165:         if [ $deny_del == "NO" ]; then
                    166:           logger "WORKER: deleting a user's folder tree..."
                    167:           user_tree_delete $1
                    168:           if [ $error_trig == "NO" ]; then
                    169:             logger "WORKER: deleting a user account..."
                    170:             delete_user $1
                    171:             check_exists $1
                    172:             if [ $user_exists == "NO" ]; then
                    173:               logger "WORKER: user account of $1 deleted"
                    174:             else
                    175:               logger "WORKER: failed to delete account!"
                    176:             fi
                    177:           fi
                    178:         else
                    179:           logger "WORKER: the deletion of this user is blocked!"
                    180:         fi
                    181:       fi
                    182:     fi
                    183:   fi
                    184: }
                    185:
                    186: if [ $(whoami) == "root" ]; then
                    187:   case "$1" in
                    188:     create)
                    189:     do_create_user $2
                    190:     ;;
                    191:     delete)
                    192:     do_delete_user $2
                    193:     ;;
                    194:     *)
                    195:     logger "SELECTOR: unknown command"
                    196:     ;;
                    197:   esac
                    198:   exit 0
                    199: else
                    200:   echo "must be run as root!"
                    201:   exit 1
                    202: fi

CVSweb