v-add-user 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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 definition
  10. user=$1
  11. password=$2; HIDE=2
  12. email=$3
  13. package=${4-default}
  14. fname=$5
  15. lname=$6
  16. # Includes
  17. source $HESTIA/func/main.sh
  18. source $HESTIA/conf/hestia.conf
  19. is_user_free() {
  20. check_sysuser=$(cut -f 1 -d : /etc/passwd | grep "^$user$" )
  21. if [ ! -z "$check_sysuser" ] || [ -e "$USER_DATA" ]; then
  22. check_result $E_EXISTS "user $user exists"
  23. fi
  24. }
  25. #----------------------------------------------------------#
  26. # Verifications #
  27. #----------------------------------------------------------#
  28. check_args '3' "$#" 'USER PASSWORD EMAIL [PACKAGE] [FNAME] [LNAME]'
  29. is_format_valid 'user' 'email' 'package'
  30. if [ ! -z "$fname" ]; then
  31. is_format_valid 'fname' 'lname'
  32. fi
  33. is_user_free "$user"
  34. is_password_valid
  35. is_package_valid
  36. # Perform verification if read-only mode is enabled
  37. check_hestia_demo_mode
  38. #----------------------------------------------------------#
  39. # Action #
  40. #----------------------------------------------------------#
  41. # Parsing package data
  42. pkg_data=$(cat $HESTIA/data/packages/$package.pkg |egrep -v "TIME|DATE")
  43. # Checking shell
  44. shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \')
  45. shell=$(grep -w "$shell_conf" /etc/shells |head -n1)
  46. # Adding user
  47. /usr/sbin/useradd "$user" -s "$shell" -c "$email" -m -d "$HOMEDIR/$user"
  48. check_result $? "user creation failed" $E_INVALID
  49. # Adding password
  50. echo "$user:$password" | /usr/sbin/chpasswd
  51. # Add a general group for normal users created by Hestia
  52. if [ -z "$(grep ^hestia-users: /etc/group)" ]; then
  53. groupadd --system "hestia-users"
  54. fi
  55. # Add membership to hestia-users group to non-admin users
  56. if [ "$user" = "admin" ]; then
  57. setfacl -m "g:admin:r-x" "$HOMEDIR/$user"
  58. else
  59. usermod -a -G "hestia-users" "$user"
  60. setfacl -m "u:$user:r-x" "$HOMEDIR/$user"
  61. fi
  62. setfacl -m "g:hestia-users:---" "$HOMEDIR/$user"
  63. # Building directory tree
  64. mkdir $HOMEDIR/$user/conf
  65. if [ ! -z "$WEB_SYSTEM" ]; then
  66. mkdir $HOMEDIR/$user/conf/web $HOMEDIR/$user/web $HOMEDIR/$user/tmp
  67. chmod 751 $HOMEDIR/$user/conf/web
  68. chmod 700 $HOMEDIR/$user/tmp
  69. chown $user:$user $HOMEDIR/$user/web $HOMEDIR/$user/tmp
  70. fi
  71. if [ ! -z "$MAIL_SYSTEM" ]; then
  72. mkdir $HOMEDIR/$user/conf/mail $HOMEDIR/$user/mail
  73. chmod 751 $HOMEDIR/$user/mail
  74. chmod 755 $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 > /dev/null 2>&1
  83. #----------------------------------------------------------#
  84. # Hestia #
  85. #----------------------------------------------------------#
  86. # Adding user dir
  87. mkdir -p $USER_DATA/ssl $USER_DATA/dns $USER_DATA/mail
  88. # Creating configuration files and pipes
  89. touch $USER_DATA/backup.conf \
  90. $USER_DATA/history.log \
  91. $USER_DATA/stats.log \
  92. $USER_DATA/web.conf \
  93. $USER_DATA/dns.conf \
  94. $USER_DATA/mail.conf \
  95. $USER_DATA/db.conf \
  96. $USER_DATA/cron.conf
  97. chmod 770 $USER_DATA \
  98. $USER_DATA/ssl \
  99. $USER_DATA/dns \
  100. $USER_DATA/mail
  101. chmod 660 $USER_DATA/backup.conf \
  102. $USER_DATA/history.log \
  103. $USER_DATA/stats.log \
  104. $USER_DATA/web.conf \
  105. $USER_DATA/dns.conf \
  106. $USER_DATA/mail.conf \
  107. $USER_DATA/db.conf \
  108. $USER_DATA/cron.conf
  109. # Updating queue pipes
  110. echo "$BIN/v-update-user-disk $user" >> $HESTIA/data/queue/disk.pipe
  111. if [ ! -z "$WEB_SYSTEM" ]; then
  112. echo "$BIN/v-update-web-domains-traff $user" \
  113. >> $HESTIA/data/queue/traffic.pipe
  114. echo "$BIN/v-update-web-domains-disk $user" >> $HESTIA/data/queue/disk.pipe
  115. fi
  116. if [ ! -z "$MAIL_SYSTEM" ]; then
  117. echo "$BIN/v-update-mail-domains-disk $user" >> $HESTIA/data/queue/disk.pipe
  118. fi
  119. if [ ! -z "$DB_SYSTEM" ]; then
  120. echo "$BIN/v-update-databases-disk $user" >> $HESTIA/data/queue/disk.pipe
  121. fi
  122. # Generating timestamp
  123. time_n_date=$(date +'%T %F')
  124. time=$(echo "$time_n_date" |cut -f 1 -d \ )
  125. date=$(echo "$time_n_date" |cut -f 2 -d \ )
  126. # Filling user config
  127. if [ "$user" != 'admin' ]; then
  128. ip_avail=$($BIN/v-list-user-ips admin plain |grep -w shared|wc -l)
  129. u_users=0
  130. else
  131. ip_avail=0
  132. u_users=1
  133. fi
  134. echo "FNAME='$fname'
  135. LNAME='$lname'
  136. PACKAGE='$package'
  137. $pkg_data
  138. CONTACT='$email'
  139. CRON_REPORTS='yes'
  140. MD5='$(awk -v user=$user -F : 'user == $1 {print $2}' /etc/shadow)'
  141. RKEY='$(generate_password)'
  142. SUSPENDED='no'
  143. SUSPENDED_USERS='0'
  144. SUSPENDED_WEB='0'
  145. SUSPENDED_DNS='0'
  146. SUSPENDED_MAIL='0'
  147. SUSPENDED_DB='0'
  148. SUSPENDED_CRON='0'
  149. IP_AVAIL='$ip_avail'
  150. IP_OWNED='0'
  151. U_USERS='$u_users'
  152. U_DISK='0'
  153. U_DISK_DIRS='0'
  154. U_DISK_WEB='0'
  155. U_DISK_MAIL='0'
  156. U_DISK_DB='0'
  157. U_BANDWIDTH='0'
  158. U_WEB_DOMAINS='0'
  159. U_WEB_SSL='0'
  160. U_WEB_ALIASES='0'
  161. U_DNS_DOMAINS='0'
  162. U_DNS_RECORDS='0'
  163. U_MAIL_DOMAINS='0'
  164. U_MAIL_DKIM='0'
  165. U_MAIL_ACCOUNTS='0'
  166. U_MAIL_SSL='0'
  167. U_DATABASES='0'
  168. U_CRON_JOBS='0'
  169. U_BACKUPS='0'
  170. LANGUAGE=''
  171. NOTIFICATIONS='no'
  172. TIME='$time'
  173. DATE='$date'" > $USER_DATA/user.conf
  174. chmod 660 $USER_DATA/user.conf
  175. # Updating quota
  176. if [ "$DISK_QUOTA" = 'yes' ]; then
  177. $BIN/v-update-user-quota "$user"
  178. fi
  179. # Updating admin counter
  180. if [ "$user" != 'admin' ]; then
  181. increase_user_value 'admin' '$U_USERS'
  182. fi
  183. # Run template trigger
  184. if [ -x "$HESTIA/data/packages/$package.sh" ]; then
  185. $HESTIA/data/packages/$package.sh "$user" "$email" "$fname" "$lname"
  186. fi
  187. # Adding jailed sftp env
  188. $BIN/v-add-user-sftp-jail $user
  189. # Logging
  190. log_history "added system user $user" '' 'admin'
  191. log_event "$OK" "$ARGUMENTS"
  192. exit