v_add_user 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. is_user_free() {
  22. check_sysuser=$(cut -f 1 -d : /etc/passwd | grep -w "$user" )
  23. if [ ! -z "$check_sysuser" ] || [ -e "$USER_DATA" ]; then
  24. echo "Error: user $user exist"
  25. log_event "$E_EXISTS" "$EVENT"
  26. exit $E_EXISTS
  27. fi
  28. }
  29. #----------------------------------------------------------#
  30. # Verifications #
  31. #----------------------------------------------------------#
  32. check_args '3' "$#" 'user password email [package] [fname] [lname]'
  33. validate_format 'user' 'password' 'email' 'package'
  34. if [ ! -z "$fname" ]; then
  35. validate_format 'fname' 'lname'
  36. fi
  37. is_user_free "$user"
  38. is_package_valid "$package"
  39. #----------------------------------------------------------#
  40. # Action #
  41. #----------------------------------------------------------#
  42. # Parsing package data
  43. package_data=$(cat $VESTA/data/packages/$package.pkg)
  44. # Checking shell
  45. shell_conf=$(echo "$package_data" | grep 'SHELL' | cut -f 2 -d \')
  46. shell=$(/usr/bin/chsh --list-shells | grep -w "$shell_conf" |head -n1)
  47. # Adding user
  48. /usr/sbin/adduser "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user"
  49. # Adding password
  50. echo "$password" | /usr/bin/passwd "$user" --stdin &>/dev/null
  51. # Building directory tree
  52. mkdir $HOMEDIR/$user/conf
  53. if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
  54. mkdir $HOMEDIR/$user/conf/web
  55. mkdir $HOMEDIR/$user/web
  56. mkdir $HOMEDIR/$user/tmp
  57. chmod 751 $HOMEDIR/$user/conf/web
  58. chmod 751 $HOMEDIR/$user/web
  59. chmod 777 $HOMEDIR/$user/tmp
  60. chown $user:$user $HOMEDIR/$user/web
  61. fi
  62. if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
  63. mkdir $HOMEDIR/$user/conf/mail
  64. mkdir $HOMEDIR/$user/mail
  65. chmod 751 $HOMEDIR/$user/mail
  66. chmod 751 $HOMEDIR/$user/conf/mail
  67. fi
  68. if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
  69. mkdir $HOMEDIR/$user/conf/dns
  70. chmod 751 $HOMEDIR/$user/conf/dns
  71. fi
  72. # Set permissions
  73. chmod -R a+x $HOMEDIR/$user
  74. # Checking quota
  75. if [ ! -z "$DISK_QUOTA" ] && [ "$DISK_QUOTA" != 'no' ]; then
  76. DISK_QUOTA=$(echo "$package_data" | grep 'DISK_QUOTA' | cut -f 2 -d \')
  77. #$BIN/v_add_user_quota "$user" "$DISK_QUOTA"
  78. fi
  79. #----------------------------------------------------------#
  80. # Vesta #
  81. #----------------------------------------------------------#
  82. # Adding user dir
  83. mkdir $USER_DATA
  84. chmod 770 $USER_DATA
  85. # Creating configuration files and pipes
  86. touch $USER_DATA/backup.conf
  87. chmod 660 $USER_DATA/backup.conf
  88. touch $USER_DATA/history.log
  89. chmod 660 $USER_DATA/history.log
  90. touch $USER_DATA/stats.log
  91. chmod 660 $USER_DATA/stats.log
  92. echo "v_update_user_disk $user" >> $VESTA/data/queue/disk.pipe
  93. if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB_SYSTEM" != 'no' ]; then
  94. mkdir $USER_DATA/ssl
  95. chmod 770 $USER_DATA/ssl
  96. touch $USER_DATA/web.conf
  97. chmod 660 $USER_DATA/web.conf
  98. echo "$BIN/v_update_web_domains_traff $user" \
  99. >> $VESTA/data/queue/traffic.pipe
  100. echo "v_update_web_domains_disk $user" >> $VESTA/data/queue/disk.pipe
  101. fi
  102. if [ ! -z "$DNS_SYSTEM" ] && [ "$DNS_SYSTEM" != 'no' ]; then
  103. mkdir $USER_DATA/dns
  104. chmod 770 $USER_DATA/dns
  105. touch $USER_DATA/dns.conf
  106. chmod 660 $USER_DATA/dns.conf
  107. fi
  108. if [ ! -z "$MAIL_SYSTEM" ] && [ "$MAIL_SYSTEM" != 'no' ]; then
  109. mkdir $USER_DATA/mail
  110. chmod 770 $USER_DATA/mail
  111. touch $USER_DATA/mail.conf
  112. chmod 660 $USER_DATA/mail.conf
  113. echo "v_update_mail_domains_disk $user" >> $VESTA/data/queue/disk.pipe
  114. fi
  115. if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ]; then
  116. touch $USER_DATA/db.conf
  117. chmod 660 $USER_DATA/db.conf
  118. echo "v_update_databases_disk $user" >> $VESTA/data/queue/disk.pipe
  119. fi
  120. if [ ! -z "$CRON_SYSTEM" ] && [ "$CRON_SYSTEM" != 'no' ]; then
  121. touch $USER_DATA/cron.conf
  122. chmod 660 $USER_DATA/cron.conf
  123. fi
  124. # Filling user config
  125. if [ "$user" != 'admin' ]; then
  126. ip_avail=$($BIN/v_list_user_ips admin plain |grep -w shared|wc -l)
  127. u_users=0
  128. else
  129. ip_avail=0
  130. u_users=1
  131. fi
  132. echo "FNAME='$fname'
  133. LNAME='$lname'
  134. PACKAGE='$package'
  135. $package_data
  136. CONTACT='$email'
  137. CRON_REPORTS='yes'
  138. MD5='$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)'
  139. RKEY='$(gen_password)'
  140. SUSPENDED='no'
  141. SUSPENDED_USERS='0'
  142. SUSPENDED_WEB='0'
  143. SUSPENDED_DNS='0'
  144. SUSPENDED_MAIL='0'
  145. SUSPENDED_DB='0'
  146. SUSPENDED_CRON='0'
  147. IP_AVAIL='$ip_avail'
  148. IP_OWNED='0'
  149. U_USERS='$u_users'
  150. U_DISK='0'
  151. U_DISK_DIRS='0'
  152. U_DISK_WEB='0'
  153. U_DISK_MAIL='0'
  154. U_DISK_DB='0'
  155. U_BANDWIDTH='0'
  156. U_WEB_DOMAINS='0'
  157. U_WEB_SSL='0'
  158. U_WEB_ALIASES='0'
  159. U_DNS_DOMAINS='0'
  160. U_DNS_RECORDS='0'
  161. U_MAIL_DOMAINS='0'
  162. U_MAIL_DKIM='0'
  163. U_MAIL_ACCOUNTS='0'
  164. U_DATABASES='0'
  165. U_CRON_JOBS='0'
  166. U_BACKUPS='0'
  167. TIME='$TIME'
  168. DATE='$DATE'" > $USER_DATA/user.conf
  169. chmod 660 $USER_DATA/user.conf
  170. # Updating admin counter
  171. if [ "$user" != 'admin' ]; then
  172. increase_user_value 'admin' '$U_USERS'
  173. fi
  174. # Logging
  175. log_event "$OK" "$EVENT"
  176. exit