Add diagnostic script to manifest and create menu action for user diagnostics
parent
76bbec7264
commit
38891fa183
|
|
@ -5,7 +5,14 @@
|
||||||
# Use this script to diagnose SFTP/SSH account creation issues
|
# Use this script to diagnose SFTP/SSH account creation issues
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
|
||||||
USERNAME="${1:-mightyuser1}"
|
# Get username from argument or prompt
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Usage: $0 <username>"
|
||||||
|
echo "Example: $0 mightyuser1"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
USERNAME="$1"
|
||||||
|
|
||||||
echo "=============================================================================="
|
echo "=============================================================================="
|
||||||
echo "SFTP/SSH User Diagnostic Script"
|
echo "SFTP/SSH User Diagnostic Script"
|
||||||
|
|
@ -106,15 +113,39 @@ if id "$USERNAME" &>/dev/null; then
|
||||||
USER_HOME=$(getent passwd $USERNAME | cut -d: -f6)
|
USER_HOME=$(getent passwd $USERNAME | cut -d: -f6)
|
||||||
if [ -d "$USER_HOME/data" ]; then
|
if [ -d "$USER_HOME/data" ]; then
|
||||||
print_status "OK" "Data directory exists: $USER_HOME/data"
|
print_status "OK" "Data directory exists: $USER_HOME/data"
|
||||||
echo " Ownership: $(stat -c '%U:%G' $USER_HOME/data)"
|
echo " Ownership: $(stat -c '%U:%G' $USER_HOME/data 2>/dev/null || echo 'N/A')"
|
||||||
echo " Permissions: $(stat -c '%a' $USER_HOME/data)"
|
echo " Permissions: $(stat -c '%a' $USER_HOME/data 2>/dev/null || echo 'N/A')"
|
||||||
|
|
||||||
if [ -d "$USER_HOME/data/ROOT" ]; then
|
if [ -d "$USER_HOME/data/ROOT" ]; then
|
||||||
print_status "OK" "ROOT directory exists: $USER_HOME/data/ROOT"
|
print_status "OK" "ROOT directory exists: $USER_HOME/data/ROOT"
|
||||||
# Check if it's a mount point
|
# Check if it's a mount point
|
||||||
if mountpoint -q "$USER_HOME/data/ROOT" 2>/dev/null; then
|
if mountpoint -q "$USER_HOME/data/ROOT" 2>/dev/null; then
|
||||||
print_status "OK" "ROOT is properly mounted (bind mount)"
|
print_status "OK" "ROOT is properly mounted (bind mount)"
|
||||||
echo " Mount info: $(mount | grep "$USER_HOME/data/ROOT")"
|
MOUNT_INFO=$(mount | grep "$USER_HOME/data/ROOT" 2>/dev/null || echo "No mount info found")
|
||||||
|
echo " Mount info: $MOUNT_INFO"
|
||||||
|
|
||||||
|
# Check webroot permissions
|
||||||
|
WEBROOT_DIR="/var/www/webroot/ROOT"
|
||||||
|
if [ -d "$WEBROOT_DIR" ]; then
|
||||||
|
WEBROOT_PERMS=$(stat -c '%a' "$WEBROOT_DIR" 2>/dev/null)
|
||||||
|
WEBROOT_GROUP=$(stat -c '%G' "$WEBROOT_DIR" 2>/dev/null)
|
||||||
|
WEBROOT_OWNER=$(stat -c '%U:%G' "$WEBROOT_DIR" 2>/dev/null)
|
||||||
|
echo " Webroot permissions: $WEBROOT_PERMS ($WEBROOT_OWNER)"
|
||||||
|
|
||||||
|
# Check if group has write permission
|
||||||
|
GROUP_WRITE_BIT=$(echo "$WEBROOT_PERMS" | cut -c2)
|
||||||
|
if [ "$GROUP_WRITE_BIT" = "4" ] || [ "$GROUP_WRITE_BIT" = "5" ] || [ "$GROUP_WRITE_BIT" = "1" ] || [ "$GROUP_WRITE_BIT" = "0" ]; then
|
||||||
|
print_status "WARNING" "Webroot does NOT have group write permissions (current: $WEBROOT_PERMS)"
|
||||||
|
echo " Fix: chmod -R g+w $WEBROOT_DIR"
|
||||||
|
else
|
||||||
|
print_status "OK" "Webroot has group write permissions"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$WEBROOT_GROUP" != "litespeed" ]; then
|
||||||
|
print_status "WARNING" "Webroot group is not litespeed (current: $WEBROOT_GROUP)"
|
||||||
|
echo " Fix: chgrp -R litespeed $WEBROOT_DIR"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
print_status "WARNING" "ROOT directory exists but is not mounted"
|
print_status "WARNING" "ROOT directory exists but is not mounted"
|
||||||
echo " Fix: mount --bind /var/www/webroot/ROOT $USER_HOME/data/ROOT"
|
echo " Fix: mount --bind /var/www/webroot/ROOT $USER_HOME/data/ROOT"
|
||||||
|
|
@ -312,3 +343,5 @@ echo "==========================================================================
|
||||||
echo "Diagnostic complete!"
|
echo "Diagnostic complete!"
|
||||||
echo "=============================================================================="
|
echo "=============================================================================="
|
||||||
|
|
||||||
|
# Exit with success status
|
||||||
|
exit 0
|
||||||
|
|
|
||||||
68
manifest.jps
68
manifest.jps
|
|
@ -57,6 +57,15 @@ settings:
|
||||||
required: true
|
required: true
|
||||||
regex: ^[a-zA-Z0-9_]{3,32}$
|
regex: ^[a-zA-Z0-9_]{3,32}$
|
||||||
regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores"
|
regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores"
|
||||||
|
diagnosticForm:
|
||||||
|
fields:
|
||||||
|
- type: string
|
||||||
|
name: diagnostic_username
|
||||||
|
caption: Username to Diagnose
|
||||||
|
description: "Enter the username you want to diagnose."
|
||||||
|
required: true
|
||||||
|
regex: ^[a-zA-Z0-9_]{3,32}$
|
||||||
|
regexText: "Username must be 3-32 characters long and contain only letters, numbers, and underscores"
|
||||||
|
|
||||||
globals:
|
globals:
|
||||||
username: ${settings.custom_username}
|
username: ${settings.custom_username}
|
||||||
|
|
@ -96,8 +105,14 @@ onInstall:
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Downloading check-sftp-user.sh..." >> /opt/add-sftp-user-addon/logs/script_output.log
|
||||||
|
if ! wget --no-check-certificate -O /opt/add-sftp-user-addon/check-sftp-user.sh "https://deploy-proxy.mightybox.io/addons/add-sftp-user/raw/branch/main/check-sftp-user.sh" 2>&1 | tee -a /opt/add-sftp-user-addon/logs/script_output.log; then
|
||||||
|
echo "ERROR: Failed to download check-sftp-user.sh" >> /opt/add-sftp-user-addon/logs/script_output.log
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Verify files were downloaded and are not empty
|
# Verify files were downloaded and are not empty
|
||||||
for file in /opt/add-sftp-user-addon/add-sftp.sh /opt/add-sftp-user-addon/scripts/logging.sh /opt/add-sftp-user-addon/scripts/system_prep.sh; do
|
for file in /opt/add-sftp-user-addon/add-sftp.sh /opt/add-sftp-user-addon/scripts/logging.sh /opt/add-sftp-user-addon/scripts/system_prep.sh /opt/add-sftp-user-addon/check-sftp-user.sh; do
|
||||||
if [ ! -f "$file" ]; then
|
if [ ! -f "$file" ]; then
|
||||||
echo "ERROR: File not found: $file" >> /opt/add-sftp-user-addon/logs/script_output.log
|
echo "ERROR: File not found: $file" >> /opt/add-sftp-user-addon/logs/script_output.log
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -116,6 +131,7 @@ onInstall:
|
||||||
done
|
done
|
||||||
|
|
||||||
chmod +x /opt/add-sftp-user-addon/add-sftp.sh
|
chmod +x /opt/add-sftp-user-addon/add-sftp.sh
|
||||||
|
chmod +x /opt/add-sftp-user-addon/check-sftp-user.sh
|
||||||
chmod +x /opt/add-sftp-user-addon/scripts/*.sh
|
chmod +x /opt/add-sftp-user-addon/scripts/*.sh
|
||||||
|
|
||||||
# Source libraries and run the system preparation function
|
# Source libraries and run the system preparation function
|
||||||
|
|
@ -186,12 +202,12 @@ onInstall:
|
||||||
- return: installSuccess
|
- return: installSuccess
|
||||||
|
|
||||||
menu:
|
menu:
|
||||||
confirmText: "Do you want to list all users?"
|
- confirmText: "Do you want to list all users?"
|
||||||
loadingText: "Loading users..."
|
loadingText: "Loading users..."
|
||||||
action: "list_users"
|
action: "list_users"
|
||||||
caption: "List Users"
|
caption: "List Users"
|
||||||
successText: "Users listed successfully!"
|
successText: "Users listed successfully!"
|
||||||
logsNodeGroup: cp
|
logsNodeGroup: cp
|
||||||
|
|
||||||
actions:
|
actions:
|
||||||
add_sftp_user:
|
add_sftp_user:
|
||||||
|
|
@ -437,6 +453,36 @@ actions:
|
||||||
type: warning
|
type: warning
|
||||||
message: "No SFTP users found. Use the Add SFTP/SSH User button to create one."
|
message: "No SFTP users found. Use the Add SFTP/SSH User button to create one."
|
||||||
- return: listUsers
|
- return: listUsers
|
||||||
|
diagnose_user:
|
||||||
|
- cmd[cp]:
|
||||||
|
user: root
|
||||||
|
commands: |-
|
||||||
|
# Create log file for this run
|
||||||
|
LOG_FILE="/opt/add-sftp-user-addon/logs/diagnostic.log"
|
||||||
|
touch "$LOG_FILE"
|
||||||
|
|
||||||
|
# Run diagnostic script
|
||||||
|
if [ -f "/opt/add-sftp-user-addon/check-sftp-user.sh" ]; then
|
||||||
|
/opt/add-sftp-user-addon/check-sftp-user.sh "${settings.diagnostic_username}" >> "$LOG_FILE" 2>&1
|
||||||
|
DIAGNOSTIC_EXIT=$?
|
||||||
|
|
||||||
|
# Output the diagnostic results
|
||||||
|
cat "$LOG_FILE"
|
||||||
|
|
||||||
|
if [ $DIAGNOSTIC_EXIT -eq 0 ]; then
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
exit $DIAGNOSTIC_EXIT
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "ERROR: Diagnostic script not found at /opt/add-sftp-user-addon/check-sftp-user.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
- if ("${response.exitStatus}" != "0"):
|
||||||
|
return:
|
||||||
|
type: error
|
||||||
|
message: "Diagnostic check failed for ${settings.diagnostic_username}. Check logs for details."
|
||||||
|
- return: diagnosticSuccess
|
||||||
|
|
||||||
responses:
|
responses:
|
||||||
installSuccess:
|
installSuccess:
|
||||||
|
|
@ -466,6 +512,9 @@ responses:
|
||||||
listUsers:
|
listUsers:
|
||||||
type: info
|
type: info
|
||||||
message: "${response.out}"
|
message: "${response.out}"
|
||||||
|
diagnosticSuccess:
|
||||||
|
type: info
|
||||||
|
message: "Diagnostic check completed for ${settings.diagnostic_username}.\n\n${response.out}"
|
||||||
|
|
||||||
buttons:
|
buttons:
|
||||||
- settings: sfpform
|
- settings: sfpform
|
||||||
|
|
@ -483,6 +532,11 @@ buttons:
|
||||||
caption: Delete User
|
caption: Delete User
|
||||||
confirmText: "Are you sure you want to delete this user? This action cannot be undone."
|
confirmText: "Are you sure you want to delete this user? This action cannot be undone."
|
||||||
submitButtonText: Delete User
|
submitButtonText: Delete User
|
||||||
|
- settings: diagnosticForm
|
||||||
|
action: diagnose_user
|
||||||
|
caption: Diagnose User
|
||||||
|
confirmText: "Do you want to run diagnostics on this user?"
|
||||||
|
submitButtonText: Run Diagnostics
|
||||||
|
|
||||||
onUninstall:
|
onUninstall:
|
||||||
- cmd[cp]:
|
- cmd[cp]:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue