Blob


1 #!/bin/sh
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"
7 user_exists="NO"
8 group_exists="NO"
9 target_user_id=""
10 target_group_id=""
11 error_trig="NO"
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 }
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 }
31 delete_user() {
32 userdel -rv $1
33 groupdel -v $1
34 }
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 }
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 }
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 }
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
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
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
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