v_add_user 5.4 KB

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