v-add-web-domain-ftp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #!/bin/bash
  2. # info: add ftp account for web domain.
  3. # options: USER DOMAIN FTP_USER FTP_PASSWORD [FTP_PATH]
  4. #
  5. # The function creates additional ftp account for web domain.
  6. #----------------------------------------------------------#
  7. # Variable&Function #
  8. #----------------------------------------------------------#
  9. # Argument definition
  10. user=$1
  11. domain=$2
  12. ftp_user=${1}_${3}
  13. password=$4; HIDE=4
  14. ftp_path=$5
  15. # Includes
  16. source $VESTA/func/main.sh
  17. source $VESTA/func/domain.sh
  18. source $VESTA/conf/vesta.conf
  19. # Additional argument formatting
  20. format_domain
  21. format_domain_idn
  22. #----------------------------------------------------------#
  23. # Verifications #
  24. #----------------------------------------------------------#
  25. check_args '4' "$#" 'USER DOMAIN FTP_USER FTP_PASSWORD [FTP_PATH]'
  26. is_format_valid 'user' 'domain' 'ftp_user'
  27. is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
  28. is_object_valid 'user' 'USER' "$user"
  29. is_object_unsuspended 'user' 'USER' "$user"
  30. is_object_valid 'web' 'DOMAIN' "$domain"
  31. is_object_unsuspended 'web' 'DOMAIN' "$domain"
  32. check_ftp_user=$(grep "^$ftp_user:" /etc/passwd)
  33. if [ ! -z "$check_ftp_user" ] && [ "$FTP_USER" != "$ftp_user" ]; then
  34. echo "Error: ftp user $ftp_user already exists"
  35. log_event "$E_EXISTS" "$ARGUMENTS"
  36. exit $E_EXISTS
  37. fi
  38. is_password_valid
  39. #----------------------------------------------------------#
  40. # Action #
  41. #----------------------------------------------------------#
  42. # Get domain values
  43. get_domain_values 'web'
  44. # Defining ftp user shell
  45. shell=$(which nologin)
  46. if [ ! -z "$FTP_SHELL" ]; then
  47. shell=$FTP_SHELL
  48. fi
  49. # Defining path
  50. if [ -z "$ftp_path" ]; then
  51. ftp_path_a="$HOMEDIR/$user/web/$domain"
  52. else
  53. # Validating absolute path
  54. ftp_path_a=$(readlink -f "$HOMEDIR/$user/web/$domain/$ftp_path")
  55. if [ -z "$(echo $ftp_path_a |grep $HOMEDIR/$user/web/$domain)" ]; then
  56. echo "Error: absolute path $ftp_path_a is invalid"
  57. log_event "$E_INVALID" "$ARGUMENTS"
  58. exit $E_INVALID
  59. fi
  60. # Creating ftp user home directory
  61. if [ ! -e "$ftp_path_a" ]; then
  62. mkdir -p $ftp_path_a
  63. chown $user:$user "$ftp_path_a"
  64. chmod 751 "$ftp_path_a"
  65. fi
  66. fi
  67. # Adding ftp user
  68. /usr/sbin/useradd $ftp_user \
  69. -s $shell \
  70. -o -u $(id -u $user) \
  71. -g $(id -u $user) \
  72. -M -d "$ftp_path_a" > /dev/null 2>&1
  73. # Set ftp user password
  74. echo "$ftp_user:$password" | /usr/sbin/chpasswd
  75. ftp_md5=$(awk -v user=$ftp_user -F : 'user == $1 {print $2}' /etc/shadow)
  76. # Adding jailed sftp env
  77. if [ ! -z "$SFTPJAIL_KEY" ]; then
  78. $BIN/v-add-user-sftp-jail $ftp_user
  79. fi
  80. #----------------------------------------------------------#
  81. # Vesta #
  82. #----------------------------------------------------------#
  83. # Transforming absolute path to relative
  84. ftp_path_r=$(echo $ftp_path_a |sed "s%$HOMEDIR/$user/web/$domain%%")
  85. # Concatenating ftp variables
  86. if [ ! -z "$FTP_USER" ]; then
  87. ftp_user="$FTP_USER:$ftp_user"
  88. ftp_md5="$FTP_MD5:$ftp_md5"
  89. ftp_path="$FTP_PATH:$ftp_path_r"
  90. fi
  91. # Adding new key into web.conf
  92. add_object_key "web" 'DOMAIN' "$domain" 'FTP_PATH' 'PROXY'
  93. # Updating config
  94. update_object_value 'web' 'DOMAIN' "$domain" '$FTP_USER' "$ftp_user"
  95. update_object_value 'web' 'DOMAIN' "$domain" '$FTP_MD5' "$ftp_md5"
  96. update_object_value 'web' 'DOMAIN' "$domain" '$FTP_PATH' "$ftp_path"
  97. # Logging
  98. log_history "added ftp account ${1}_${3}@$domain"
  99. log_event "$OK" "$ARGUMENTS"
  100. exit