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