v-add-user 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #!/bin/bash
  2. # info: add system user
  3. # options: USER PASSWORD EMAIL [PACKAGE] [FNAME] [LNAME]
  4. #
  5. # The function creates new user account.
  6. #----------------------------------------------------------#
  7. # Variable&Function #
  8. #----------------------------------------------------------#
  9. # Argument defenition
  10. user=$1
  11. password=$2
  12. email=$3
  13. package=${4-default}
  14. fname=$5
  15. lname=$6
  16. # Includes
  17. source $VESTA/conf/vesta.conf
  18. source $VESTA/func/main.sh
  19. # Hiding password
  20. A2='******'
  21. EVENT="DATE='$DATE' TIME='$TIME' CMD='$SCRIPT' A1='$A1' A2='$A2' A3='$A3'"
  22. EVENT="$EVENT A4='$A4' A5='$A5' A6='$A6' A7='$A7' A8='$A8' A9='$A9'"
  23. is_user_free() {
  24. check_sysuser=$(cut -f 1 -d : /etc/passwd | grep -w "$user" )
  25. if [ ! -z "$check_sysuser" ] || [ -e "$USER_DATA" ]; then
  26. echo "Error: user $user exist"
  27. log_event "$E_EXISTS" "$EVENT"
  28. exit $E_EXISTS
  29. fi
  30. }
  31. #----------------------------------------------------------#
  32. # Verifications #
  33. #----------------------------------------------------------#
  34. check_args '3' "$#" 'USER PASSWORD EMAIL [PACKAGE] [FNAME] [LNAME]'
  35. validate_format 'user' 'password' 'email' 'package'
  36. if [ ! -z "$fname" ]; then
  37. validate_format 'fname' 'lname'
  38. fi
  39. is_user_free "$user"
  40. is_package_valid
  41. #----------------------------------------------------------#
  42. # Action #
  43. #----------------------------------------------------------#
  44. # Parsing package data
  45. pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |grep -v DATE)
  46. # Checking shell
  47. shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
  48. shell=$(grep -w "$shell_conf" /etc/shells |head -n1)
  49. # Adding user
  50. /usr/sbin/useradd "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user"
  51. if [ $? -ne 0 ]; then
  52. echo "Error: user creation failed"
  53. log_event "$E_INVALID" "$EVENT"
  54. exit $E_INVALID
  55. fi
  56. # Adding password
  57. echo "$user:$password" | /usr/sbin/chpasswd
  58. # Building directory tree
  59. mkdir $HOMEDIR/$user/conf
  60. if [ ! -z "$WEB_SYSTEM" ]; then
  61. mkdir $HOMEDIR/$user/conf/web
  62. mkdir $HOMEDIR/$user/web
  63. mkdir $HOMEDIR/$user/tmp
  64. chmod 751 $HOMEDIR/$user/conf/web
  65. chmod 751 $HOMEDIR/$user/web
  66. chmod 771 $HOMEDIR/$user/tmp
  67. chown $user:$user $HOMEDIR/$user/web
  68. chown $user:$user $HOMEDIR/$user/tmp
  69. fi
  70. if [ ! -z "$MAIL_SYSTEM" ]; then
  71. mkdir $HOMEDIR/$user/conf/mail
  72. mkdir $HOMEDIR/$user/mail
  73. chmod 751 $HOMEDIR/$user/mail
  74. chmod 751 $HOMEDIR/$user/conf/mail
  75. fi
  76. if [ ! -z "$DNS_SYSTEM" ]; then
  77. mkdir $HOMEDIR/$user/conf/dns
  78. chmod 751 $HOMEDIR/$user/conf/dns
  79. fi
  80. # Set permissions
  81. chmod a+x $HOMEDIR/$user
  82. chattr +i $HOMEDIR/$user/conf
  83. # Checking quota
  84. if [ ! -z "$DISK_QUOTA" ]; then
  85. DISK_QUOTA=$(echo "$pkg_data" | grep 'DISK_QUOTA' | cut -f 2 -d \')
  86. #$BIN/v-add-user_quota "$user" "$DISK_QUOTA"
  87. fi
  88. #----------------------------------------------------------#
  89. # Vesta #
  90. #----------------------------------------------------------#
  91. # Adding user dir
  92. mkdir $USER_DATA
  93. chmod 770 $USER_DATA
  94. # Creating configuration files and pipes
  95. touch $USER_DATA/backup.conf
  96. chmod 660 $USER_DATA/backup.conf
  97. touch $USER_DATA/history.log
  98. chmod 660 $USER_DATA/history.log
  99. touch $USER_DATA/stats.log
  100. chmod 660 $USER_DATA/stats.log
  101. echo "$BIN/v-update-user-disk $user" >> $VESTA/data/queue/disk.pipe
  102. if [ ! -z "$WEB_SYSTEM" ]; then
  103. mkdir $USER_DATA/ssl
  104. chmod 770 $USER_DATA/ssl
  105. touch $USER_DATA/web.conf
  106. chmod 660 $USER_DATA/web.conf
  107. echo "$BIN/v-update-web-domains-traff $user" \
  108. >> $VESTA/data/queue/traffic.pipe
  109. echo "$BIN/v-update-web-domains-disk $user" >> $VESTA/data/queue/disk.pipe
  110. fi
  111. if [ ! -z "$DNS_SYSTEM" ]; then
  112. mkdir $USER_DATA/dns
  113. chmod 770 $USER_DATA/dns
  114. touch $USER_DATA/dns.conf
  115. chmod 660 $USER_DATA/dns.conf
  116. fi
  117. if [ ! -z "$MAIL_SYSTEM" ]; then
  118. mkdir $USER_DATA/mail
  119. chmod 770 $USER_DATA/mail
  120. touch $USER_DATA/mail.conf
  121. chmod 660 $USER_DATA/mail.conf
  122. echo "$BIN/v-update-mail-domains-disk $user" >> $VESTA/data/queue/disk.pipe
  123. fi
  124. if [ ! -z "$DB_SYSTEM" ]; then
  125. touch $USER_DATA/db.conf
  126. chmod 660 $USER_DATA/db.conf
  127. echo "$BIN/v-update-databases-disk $user" >> $VESTA/data/queue/disk.pipe
  128. fi
  129. if [ ! -z "$CRON_SYSTEM" ]; then
  130. touch $USER_DATA/cron.conf
  131. chmod 660 $USER_DATA/cron.conf
  132. fi
  133. # Filling user config
  134. if [ "$user" != 'admin' ]; then
  135. ip_avail=$($BIN/v-list-user-ips admin plain |grep -w shared|wc -l)
  136. u_users=0
  137. else
  138. ip_avail=0
  139. u_users=1
  140. fi
  141. echo "FNAME='$fname'
  142. LNAME='$lname'
  143. PACKAGE='$package'
  144. $pkg_data
  145. CONTACT='$email'
  146. CRON_REPORTS='yes'
  147. MD5='$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)'
  148. RKEY='$(gen_password)'
  149. SUSPENDED='no'
  150. SUSPENDED_USERS='0'
  151. SUSPENDED_WEB='0'
  152. SUSPENDED_DNS='0'
  153. SUSPENDED_MAIL='0'
  154. SUSPENDED_DB='0'
  155. SUSPENDED_CRON='0'
  156. IP_AVAIL='$ip_avail'
  157. IP_OWNED='0'
  158. U_USERS='$u_users'
  159. U_DISK='0'
  160. U_DISK_DIRS='0'
  161. U_DISK_WEB='0'
  162. U_DISK_MAIL='0'
  163. U_DISK_DB='0'
  164. U_BANDWIDTH='0'
  165. U_WEB_DOMAINS='0'
  166. U_WEB_SSL='0'
  167. U_WEB_ALIASES='0'
  168. U_DNS_DOMAINS='0'
  169. U_DNS_RECORDS='0'
  170. U_MAIL_DOMAINS='0'
  171. U_MAIL_DKIM='0'
  172. U_MAIL_ACCOUNTS='0'
  173. U_DATABASES='0'
  174. U_CRON_JOBS='0'
  175. U_BACKUPS='0'
  176. LANGUAGE=''
  177. TIME='$TIME'
  178. DATE='$DATE'" > $USER_DATA/user.conf
  179. chmod 660 $USER_DATA/user.conf
  180. # Updating admin counter
  181. if [ "$user" != 'admin' ]; then
  182. increase_user_value 'admin' '$U_USERS'
  183. fi
  184. # Run template trigger
  185. if [ -x "$VESTA/data/packages/$package.sh" ]; then
  186. $VESTA/data/packages/$package.sh "$user" "$email" "$fname" "$lname"
  187. fi
  188. # Logging
  189. log_history "added system user $user" '' 'admin'
  190. log_event "$OK" "$EVENT"
  191. exit