Annotation of botnow/user_manager.sh, Revision 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