Added List Users

main
Anthony 2023-11-02 00:48:25 +08:00
parent 52509d143b
commit 173a3f3d72
2 changed files with 54 additions and 63 deletions

View File

@ -1,13 +1,18 @@
#!/bin/bash #!/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" LOG_FILE="/home/jelastic/add-sftp-user-addon/logs/script_output.log"
VERBOSE=1 # Set to 1 for verbose mode, 0 for normal mode VERBOSE=1 # Set to 1 for verbose mode, 0 for normal mode
log() { log() {
local filename=${2:-$LOG_FILE}
local timestamp=$(date +"%Y-%m-%d %H:%M:%S") local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "$timestamp - $1" >> $LOG_FILE local message="$timestamp - $1"
if [ "$VERBOSE" -eq 1 ]; then if [ "$VERBOSE" -eq 1 ]; then
echo "$timestamp - $1" echo "$message" | tee -a $filename
else
echo "$message" >> $filename
fi fi
} }
@ -28,49 +33,38 @@ ROOT_DIRECTORY="/var/www/webroot/ROOT"
log "Script started" log "Script started"
# Ensure the ROOT_DIRECTORY exists # Ensure the ROOT_DIRECTORY exists
if [ ! -d "$ROOT_DIRECTORY" ]; then [ ! -d "$ROOT_DIRECTORY" ] && error_exit "ROOT_DIRECTORY $ROOT_DIRECTORY does not exist." 2
error_exit "ROOT_DIRECTORY $ROOT_DIRECTORY does not exist." 2
fi
# Get the group ownership of the ROOT_DIRECTORY # Get the group ownership of the ROOT_DIRECTORY
ROOT_GROUP=$(stat -c '%G' $ROOT_DIRECTORY) ROOT_GROUP=$(stat -c '%G' $ROOT_DIRECTORY)
# Check if user already exists # Check if user already exists
if id "$USERNAME" &>/dev/null; then id "$USERNAME" &>/dev/null && error_exit "User $USERNAME already exists." 3
log "ERROR: User $USERNAME already exists."
exit 3
fi
# Create user with their own directory under /home/sftpusers/ # Create user with their own directory under /home/sftpusers/
mkdir -p $USER_HOME mkdir -p $USER_HOME
useradd -d $USER_HOME $USERNAME useradd -d $USER_HOME $USERNAME
if [ $? -ne 0 ]; then
error_exit "Failed to create user $USERNAME." 4
fi
echo "$USERNAME:$PASSWORD" | chpasswd 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 # Create a symlink in the user's directory pointing to the shared ROOT_DIRECTORY
ln -s $ROOT_DIRECTORY $USER_HOME/ROOT 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" log "Symlink created for $USERNAME pointing to $ROOT_DIRECTORY"
# Set user's group to the ROOT_GROUP # Set user's group to the ROOT_GROUP
usermod -aG $ROOT_GROUP $USERNAME 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" log "$USERNAME added to group $ROOT_GROUP"
# Adjust permissions and ownership for the user's directory # Adjust permissions and ownership for the user's directory
chown $USERNAME:$ROOT_GROUP $USER_HOME 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 # Adjust permissions and ownership for the ROOT_DIRECTORY
chown -R :$ROOT_GROUP /var/www/webroot/ROOT/ 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 d -exec chmod 770 {} \;
find /var/www/webroot/ROOT/ -type f -exec chmod 660 {} \; # For files find /var/www/webroot/ROOT/ -type f -exec chmod 660 {} \;
# Set the SetGID bit on ROOT_DIRECTORY # Set the SetGID bit on ROOT_DIRECTORY
chmod g+s $ROOT_DIRECTORY chmod g+s $ROOT_DIRECTORY

View File

@ -1,4 +1,7 @@
version: 0.1
id: addsftp
type: update type: update
description: An addon to add new SFTP users. It can also manage created user accounts.
name: Add SFTP User name: Add SFTP User
targetNodes: targetNodes:
@ -34,46 +37,47 @@ globals:
sftpPort: 22 sftpPort: 22
onInstall: onInstall:
- cmd[cp]: mkdir -p /home/jelastic/add-sftp-user-addon/ - cmd [cp]:
- cmd[cp]: mkdir -p /home/jelastic/add-sftp-user-addon/logs user: root
- 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 commands: |-
- cmd[cp]: chmod +x /home/jelastic/add-sftp-user-addon/*.sh 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]: - cmd[cp]:
user: root
commands: commands:
- echo -e "\nMatch User user*\nPasswordAuthentication yes" >> /etc/ssh/sshd_config - echo -e "\nMatch User user*\nPasswordAuthentication yes" >> /etc/ssh/sshd_config
user: root
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- systemctl restart sshd - systemctl restart sshd
user: root
- api: environment.control.RestartContainer - api: environment.control.RestartContainer
nodeGroup: cp nodeGroup: cp
nodeid: ${nodes.cp.id} nodeid: ${nodes.cp.id}
- return: installSuccess - 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: actions:
add_sftp_user: add_sftp_user:
- cmd[cp]: # Use cmd action to check if user exists - cmd[cp]: # Use cmd action to check if user exists
commands: id ${globals.username} || echo "User not found" commands: id ${globals.username} || echo "User not found"
- if ("${response.out}" == "User not found"): # If user doesn't exist - if ("${response.out}" == "User not found"): # If user doesn't exist
- cmd[cp]: - cmd[cp]:
commands: bash /home/jelastic/add-sftp-user-addon/add-sftp.sh ${globals.username} ${globals.password}
user: root user: root
- switch ("${response.exitStatus}"): commands: bash /home/jelastic/add-sftp-user-addon/add-sftp.sh ${globals.username} ${globals.password}
0: - if ("${response.exitStatus}" != "0"):
return: sftpSuccess
2:
return: rootDirectoryError
3:
return: userExistsError
4:
return: createUserError return: createUserError
5:
return: symlinkError
6:
return: modifyGroupError
default:
return: unknownError
- else: - else:
- setGlobals: - setGlobals:
username: "user${fn.random(10000,99999)}" username: "user${fn.random(10000,99999)}"
@ -84,22 +88,28 @@ actions:
- return: sftpSuccess - return: sftpSuccess
change_password: change_password:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- echo "${settings.manage_username}:${globals.password}" | chpasswd - echo "${settings.manage_username}:${globals.password}" | chpasswd
- echo "Password changed for ${settings.manage_username}" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - echo "Password changed for ${settings.manage_username}" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log
user: root
- if ("${response.exitStatus}" != "0"): - if ("${response.exitStatus}" != "0"):
return: passwordChangeError return: passwordChangeError
- return: passwordChangeSuccess - return: passwordChangeSuccess
delete_user: delete_user:
- cmd[cp]: - cmd[cp]:
user: root
commands: commands:
- userdel ${settings.manage_username} - userdel ${settings.manage_username}
- echo "User ${settings.manage_username} deleted" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log - echo "User ${settings.manage_username} deleted" >> /home/jelastic/add-sftp-user-addon/logs/script_output.log
user: root
- if ("${response.exitStatus}" != "0"): - if ("${response.exitStatus}" != "0"):
return: deleteUserError return: deleteUserError
- return: deleteUserSuccess - 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: responses:
installSuccess: installSuccess:
@ -123,18 +133,9 @@ responses:
deleteUserSuccess: deleteUserSuccess:
type: success type: success
message: "User ${settings.manage_username} deleted successfully." message: "User ${settings.manage_username} deleted successfully."
rootDirectoryError: listUsers:
type: error type: info
message: "ROOT_DIRECTORY does not exist. Please check the server logs for more details." message: "${response.out}"
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."
buttons: buttons:
- settings: sfpform - settings: sfpform
@ -152,10 +153,6 @@ buttons:
onUninstall: onUninstall:
- cmd[cp]: - 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 user: root
commands:
- rm -rf /home/jelastic/add-sftp-user-addon/