#!/bin/bash LOG_FILE="/home/jelastic/add-sftp-user-addon/logs/script_output.log" DEBUG=${4:-0} # Set to 1 to enable debug logging, controlled by 4th argument log() { local level=${1:-INFO} local message=${2} local timestamp=$(date +"%Y-%m-%d %H:%M:%S") echo "$timestamp [$level] $message" | tee -a $LOG_FILE } log_error() { log "ERROR" "$1" } log_warning() { log "WARNING" "$1" } log_debug() { if [ "$DEBUG" -eq 1 ]; then log "DEBUG" "$1" fi } # Generate random username generate_username() { echo "user$(shuf -i 10000-99999 -n 1)" } USERNAME=$1 PASSWORD=$2 SSH_ENABLED=$3 log "Script started" # Check if user already exists, if yes generate a new one while id "$USERNAME" &>/dev/null; do USERNAME=$(generate_username) log_warning "Username $USERNAME already exists, generating a new username." done USER_HOME="/home/sftpusers/$USERNAME" ROOT_DIRECTORY="/var/www/webroot/ROOT" ROOT_GROUP=$(stat -c '%G' $ROOT_DIRECTORY) # Create the wp-admins group if it doesn't exist if ! grep -q "^wp-admins:" /etc/group; then if groupadd wp-admins; then log "Group wp-admins created successfully." else log_error "Failed to create group wp-admins." exit 1 fi fi if ! useradd -d $USER_HOME $USERNAME; then log_error "Failed to create user $USERNAME." exit 1 fi # Ensure WP-CLI is installed if ! command -v wp &> /dev/null; then if curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar; then log "WP-CLI phar file downloaded successfully." else log_error "Failed to download WP-CLI phar file." exit 1 fi if chmod +x wp-cli.phar; then log "Permissions set on WP-CLI phar file." else log_error "Failed to set execute permissions on WP-CLI phar file." exit 1 fi if mv wp-cli.phar /usr/local/bin/wp; then log "WP-CLI installed successfully." else log_error "Failed to move WP-CLI phar file to /usr/local/bin/wp." exit 1 fi else log "WP-CLI is already installed." fi [ ! -d "$ROOT_DIRECTORY" ] && { log_error "ROOT_DIRECTORY $ROOT_DIRECTORY does not exist."; exit 2; } mkdir -p $USER_HOME echo "$USERNAME:$PASSWORD" | chpasswd log "User $USERNAME created with home directory $USER_HOME" ln -s $ROOT_DIRECTORY $USER_HOME/ROOT log "Symlink created for $USERNAME pointing to $ROOT_DIRECTORY" usermod -aG $ROOT_GROUP $USERNAME log "$USERNAME added to group $ROOT_GROUP" chown $USERNAME:$ROOT_GROUP $USER_HOME chmod 750 $USER_HOME chown -R :$ROOT_GROUP /var/www/webroot/ROOT/ find /var/www/webroot/ROOT/ -type d -exec chmod 770 {} \; find /var/www/webroot/ROOT/ -type f -exec chmod 660 {} \; chmod g+s $ROOT_DIRECTORY log "Script completed for user $USERNAME" # Output the created username and password echo "export CREATED_USERNAME=$USERNAME" >> /etc/profile echo "export CREATED_PASSWORD=$PASSWORD" >> /etc/profile