From 173a3f3d72c5b7ffafc2ba3587c7580163be8ac5 Mon Sep 17 00:00:00 2001 From: Anthony Date: Thu, 2 Nov 2023 00:48:25 +0800 Subject: [PATCH] Added List Users --- add-sftp.sh | 36 ++++++++++------------- manifest.jps | 81 +++++++++++++++++++++++++--------------------------- 2 files changed, 54 insertions(+), 63 deletions(-) diff --git a/add-sftp.sh b/add-sftp.sh index 8d6baea..43d406c 100644 --- a/add-sftp.sh +++ b/add-sftp.sh @@ -1,13 +1,18 @@ #!/bin/bash +set -e # Exit immediately if a command exits with a non-zero status + LOG_FILE="/home/jelastic/add-sftp-user-addon/logs/script_output.log" VERBOSE=1 # Set to 1 for verbose mode, 0 for normal mode log() { + local filename=${2:-$LOG_FILE} local timestamp=$(date +"%Y-%m-%d %H:%M:%S") - echo "$timestamp - $1" >> $LOG_FILE + local message="$timestamp - $1" if [ "$VERBOSE" -eq 1 ]; then - echo "$timestamp - $1" + echo "$message" | tee -a $filename + else + echo "$message" >> $filename fi } @@ -28,49 +33,38 @@ ROOT_DIRECTORY="/var/www/webroot/ROOT" log "Script started" # Ensure the ROOT_DIRECTORY exists -if [ ! -d "$ROOT_DIRECTORY" ]; then - error_exit "ROOT_DIRECTORY $ROOT_DIRECTORY does not exist." 2 -fi +[ ! -d "$ROOT_DIRECTORY" ] && error_exit "ROOT_DIRECTORY $ROOT_DIRECTORY does not exist." 2 # Get the group ownership of the ROOT_DIRECTORY ROOT_GROUP=$(stat -c '%G' $ROOT_DIRECTORY) # Check if user already exists -if id "$USERNAME" &>/dev/null; then - log "ERROR: User $USERNAME already exists." - exit 3 -fi +id "$USERNAME" &>/dev/null && error_exit "User $USERNAME already exists." 3 # Create user with their own directory under /home/sftpusers/ mkdir -p $USER_HOME useradd -d $USER_HOME $USERNAME -if [ $? -ne 0 ]; then - error_exit "Failed to create user $USERNAME." 4 -fi echo "$USERNAME:$PASSWORD" | chpasswd +# Log to sftp-users.log +log "User $USERNAME created with home directory $USER_HOME" "/home/jelastic/add-sftp-user-addon/logs/sftp-users.log" + # Create a symlink in the user's directory pointing to the shared ROOT_DIRECTORY ln -s $ROOT_DIRECTORY $USER_HOME/ROOT -if [ $? -ne 0 ]; then - error_exit "Failed to create symlink for $USERNAME." 5 -fi log "Symlink created for $USERNAME pointing to $ROOT_DIRECTORY" # Set user's group to the ROOT_GROUP usermod -aG $ROOT_GROUP $USERNAME -if [ $? -ne 0 ]; then - error_exit "Failed to modify groups for $USERNAME." 6 -fi log "$USERNAME added to group $ROOT_GROUP" # Adjust permissions and ownership for the user's directory chown $USERNAME:$ROOT_GROUP $USER_HOME -chmod 750 $USER_HOME # Owner has rwx, group has r-x, others have no permissions +chmod 750 $USER_HOME # Adjust permissions and ownership for the ROOT_DIRECTORY chown -R :$ROOT_GROUP /var/www/webroot/ROOT/ -find /var/www/webroot/ROOT/ -type d -exec chmod 770 {} \; # For directories -find /var/www/webroot/ROOT/ -type f -exec chmod 660 {} \; # For files +find /var/www/webroot/ROOT/ -type d -exec chmod 770 {} \; +find /var/www/webroot/ROOT/ -type f -exec chmod 660 {} \; # Set the SetGID bit on ROOT_DIRECTORY chmod g+s $ROOT_DIRECTORY diff --git a/manifest.jps b/manifest.jps index 059d366..5ca56f7 100644 --- a/manifest.jps +++ b/manifest.jps @@ -1,4 +1,7 @@ +version: 0.1 +id: addsftp type: update +description: An addon to add new SFTP users. It can also manage created user accounts. name: Add SFTP User targetNodes: @@ -34,46 +37,47 @@ globals: sftpPort: 22 onInstall: - - cmd[cp]: mkdir -p /home/jelastic/add-sftp-user-addon/ - - cmd[cp]: mkdir -p /home/jelastic/add-sftp-user-addon/logs - - cmd[cp]: wget https://deploy-proxy.mightybox.io/addons/add-sftp-user/raw/branch/main/add-sftp.sh -O /home/jelastic/add-sftp-user-addon/add-sftp.sh - - cmd[cp]: chmod +x /home/jelastic/add-sftp-user-addon/*.sh + - cmd [cp]: + user: root + commands: |- + mkdir -p /home/jelastic/add-sftp-user-addon/ + mkdir -p /home/jelastic/add-sftp-user-addon/logs + touch /home/jelastic/add-sftp-user-addon/logs/script_output.log + touch /home/jelastic/add-sftp-user-addon/logs/sftp-users.log + wget https://deploy-proxy.mightybox.io/addons/add-sftp-user/raw/branch/main/add-sftp.sh -O /home/jelastic/add-sftp-user-addon/add-sftp.sh + chmod +x /home/jelastic/add-sftp-user-addon/*.sh - cmd[cp]: + user: root commands: - echo -e "\nMatch User user*\nPasswordAuthentication yes" >> /etc/ssh/sshd_config - user: root - cmd[cp]: + user: root commands: - systemctl restart sshd - user: root - api: environment.control.RestartContainer nodeGroup: cp nodeid: ${nodes.cp.id} - return: installSuccess +menu: + confirmText: "Do you want to list all users?" + loadingText: "Loading users..." + action: "list_users" + caption: "List Users" + successText: "Users listed successfully!" + logsPath: "/home/jelastic/add-sftp-user-addon/logs/sftp-users.log" + logsNodeGroup: cp + actions: add_sftp_user: - cmd[cp]: # Use cmd action to check if user exists commands: id ${globals.username} || echo "User not found" - if ("${response.out}" == "User not found"): # If user doesn't exist - cmd[cp]: - commands: bash /home/jelastic/add-sftp-user-addon/add-sftp.sh ${globals.username} ${globals.password} user: root - - switch ("${response.exitStatus}"): - 0: - return: sftpSuccess - 2: - return: rootDirectoryError - 3: - return: userExistsError - 4: - return: createUserError - 5: - return: symlinkError - 6: - return: modifyGroupError - default: - return: unknownError + commands: bash /home/jelastic/add-sftp-user-addon/add-sftp.sh ${globals.username} ${globals.password} + - if ("${response.exitStatus}" != "0"): + return: createUserError - else: - setGlobals: username: "user${fn.random(10000,99999)}" @@ -84,22 +88,28 @@ actions: - return: sftpSuccess change_password: - cmd[cp]: + user: root commands: - echo "${settings.manage_username}:${globals.password}" | chpasswd - echo "Password changed for ${settings.manage_username}" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - user: root - if ("${response.exitStatus}" != "0"): return: passwordChangeError - return: passwordChangeSuccess delete_user: - cmd[cp]: + user: root commands: - userdel ${settings.manage_username} - echo "User ${settings.manage_username} deleted" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - user: root + - if ("${response.exitStatus}" != "0"): return: deleteUserError - return: deleteUserSuccess + list_users: + - cmd[cp]: + user: root + commands: "grep -oP '^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} - user\\d{5}' /home/litespeed/add-sftp-user-addon/logs/script_output.log | while read line; do printf \"%s\\n\" \"$line\"; done" + - return: listUsers responses: installSuccess: @@ -123,18 +133,9 @@ responses: deleteUserSuccess: type: success message: "User ${settings.manage_username} deleted successfully." - rootDirectoryError: - type: error - message: "ROOT_DIRECTORY does not exist. Please check the server logs for more details." - symlinkError: - type: error - message: "Failed to create symlink for the user. Check logs for details." - modifyGroupError: - type: error - message: "Failed to modify groups for the user. Check logs for details." - unknownError: - type: error - message: "An unknown error occurred. Please check the server logs for more details." + listUsers: + type: info + message: "${response.out}" buttons: - settings: sfpform @@ -152,10 +153,6 @@ buttons: onUninstall: - cmd[cp]: - commands: - - rm -vf /home/jelastic/add-sftp-user-addon/add-sftp.sh - - rm -vf /home/jelastic/add-sftp-user-addon/logs/script_output.log - - rmdir -v /home/jelastic/add-sftp-user-addon/logs/ - - rmdir -v /home/jelastic/add-sftp-user-addon/ user: root - + commands: + - rm -rf /home/jelastic/add-sftp-user-addon/ \ No newline at end of file