v-add-web-domain-ftp 3.6 KB

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