mirror of
				https://github.com/usmannasir/cyberpanel.git
				synced 2025-11-03 20:05:58 +01:00 
			
		
		
		
	
		
			
	
	
		
			456 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			456 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/env bash
							 | 
						||
| 
								 | 
							
								## Author: Michael Ramsey
							 | 
						||
| 
								 | 
							
								## Objective Fix permissions issues on CyberPanel/cPanel/Plesk for a linux user or users
							 | 
						||
| 
								 | 
							
								# https://gitlab.com/wizardassistantscripts/fixperms
							 | 
						||
| 
								 | 
							
								# 
							 | 
						||
| 
								 | 
							
								# Forked from https://github.com/PeachFlame/cPanel-fixperms
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Plesk portion credits too
							 | 
						||
| 
								 | 
							
								# https://www.orware.com/blog/tips-and-how-tos/plesk/correct-httpdocs-permissions
							 | 
						||
| 
								 | 
							
								# https://support.plesk.com/hc/en-us/articles/115001969889--BUG-plesk-repair-fs-doesn-t-set-correct-owner-inside-httpdocs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## How to use.
							 | 
						||
| 
								 | 
							
								# wget https://gitlab.com/wizardassistantscripts/fixperms/-/raw/master/fixperms.sh ; bash fixperms.sh username
							 | 
						||
| 
								 | 
							
								# 
							 | 
						||
| 
								 | 
							
								# wget https://gitlab.com/wizardassistantscripts/fixperms/-/raw/master/fixperms.sh ; bash fixperms.sh exampleuserbob
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Or once of
							 | 
						||
| 
								 | 
							
								## bash <(curl -s https://gitlab.com/wizardassistantscripts/fixperms/-/raw/master/fixperms.sh || wget -qO - https://gitlab.com/wizardassistantscripts/fixperms/-/raw/master/fixperms.sh) exampleuserbob;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Permanent Install for reuse via the below
							 | 
						||
| 
								 | 
							
								# wget -O /usr/bin/fixperms https://gitlab.com/wizardassistantscripts/fixperms/-/raw/master/fixperms.sh; chmod +x /usr/bin/fixperms;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Then 
							 | 
						||
| 
								 | 
							
								# fixperms -v -a Username
							 | 
						||
| 
								 | 
							
								# fixperms -v -all
							 | 
						||
| 
								 | 
							
								# Username=$1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#Detect Control panel
							 | 
						||
| 
								 | 
							
								if [ -f /usr/local/cpanel/cpanel ]; then
							 | 
						||
| 
								 | 
							
								    	# Cpanel check for /usr/local/cpanel/cpanel -V
							 | 
						||
| 
								 | 
							
								    	ControlPanel="cpanel"
							 | 
						||
| 
								 | 
							
									#user_homedir="/home/${Username}"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
								elif [ -f /usr/bin/cyberpanel ]; then
							 | 
						||
| 
								 | 
							
								    	# CyberPanel check /usr/bin/cyberpanel
							 | 
						||
| 
								 | 
							
								    	ControlPanel="cyberpanel"
							 | 
						||
| 
								 | 
							
									#Get users homedir path
							 | 
						||
| 
								 | 
							
									#user_homedir=$(grep -E "^${Username}:" /etc/passwd | cut -d: -f6)	
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								elif [ -f /usr/local/psa/core.version ]; then
							 | 
						||
| 
								 | 
							
								    	# Plesk check /usr/local/psa/core.version
							 | 
						||
| 
								 | 
							
								    	ControlPanel="plesk"
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									#Get users homedir path
							 | 
						||
| 
								 | 
							
									#user_homedir=$(grep -E "^${Username}:" /etc/passwd | cut -d: -f6)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
									echo "Not able to detect Control panel. Unsupported Control Panel exiting now"
							 | 
						||
| 
								 | 
							
									   exit 1;
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
								echo "=============================================================";	
							 | 
						||
| 
								 | 
							
								echo "$ControlPanel Control Panel Detected"
							 | 
						||
| 
								 | 
							
								echo "=============================================================";
							 | 
						||
| 
								 | 
							
								echo "";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Set verbose to null
							 | 
						||
| 
								 | 
							
								verbose=""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#Print the help text
							 | 
						||
| 
								 | 
							
								helptext () {
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 2
							 | 
						||
| 
								 | 
							
								    echo "Fix perms script help:"
							 | 
						||
| 
								 | 
							
								    echo "Sets file/directory permissions to match suPHP and FastCGI schemes"
							 | 
						||
| 
								 | 
							
								    echo "USAGE: fixperms [options] -a account_name"
							 | 
						||
| 
								 | 
							
								    echo "-------"
							 | 
						||
| 
								 | 
							
								    echo "Options:"
							 | 
						||
| 
								 | 
							
								    echo "-h or --help: print this screen and exit"
							 | 
						||
| 
								 | 
							
								    echo "-v: verbose output"
							 | 
						||
| 
								 | 
							
								    echo "-all: run on all Cyberpanel accounts"
							 | 
						||
| 
								 | 
							
								    echo "--account or -a: specify a Cyberpanel/cPanel/Plesk account"
							 | 
						||
| 
								 | 
							
								#   echo "--domain or -d: specify a Cyberpanel domain"
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    exit 0
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#Detect OS
							 | 
						||
| 
								 | 
							
								if [ -f /etc/os-release ]; then
							 | 
						||
| 
								 | 
							
								    # freedesktop.org and systemd
							 | 
						||
| 
								 | 
							
								    . /etc/os-release
							 | 
						||
| 
								 | 
							
								    OS=$NAME
							 | 
						||
| 
								 | 
							
								    VER=$VERSION_ID
							 | 
						||
| 
								 | 
							
								elif type lsb_release >/dev/null 2>&1; then
							 | 
						||
| 
								 | 
							
								    # linuxbase.org
							 | 
						||
| 
								 | 
							
								    OS=$(lsb_release -si)
							 | 
						||
| 
								 | 
							
								    VER=$(lsb_release -sr)
							 | 
						||
| 
								 | 
							
								elif [ -f /etc/lsb-release ]; then
							 | 
						||
| 
								 | 
							
								    # For some versions of Debian/Ubuntu without lsb_release command
							 | 
						||
| 
								 | 
							
								    . /etc/lsb-release
							 | 
						||
| 
								 | 
							
								    OS=$DISTRIB_ID
							 | 
						||
| 
								 | 
							
								    VER=$DISTRIB_RELEASE
							 | 
						||
| 
								 | 
							
								elif [ -f /etc/debian_version ]; then
							 | 
						||
| 
								 | 
							
								    # Older Debian/Ubuntu/etc.
							 | 
						||
| 
								 | 
							
								    OS=Debian
							 | 
						||
| 
								 | 
							
								    VER=$(cat /etc/debian_version)
							 | 
						||
| 
								 | 
							
								elif [ -f /etc/SuSe-release ]; then
							 | 
						||
| 
								 | 
							
								    # Older SuSE/etc.
							 | 
						||
| 
								 | 
							
								    ...
							 | 
						||
| 
								 | 
							
								elif [ -f /etc/redhat-release ]; then
							 | 
						||
| 
								 | 
							
								    # Older Red Hat, CentOS, etc.
							 | 
						||
| 
								 | 
							
								    ...
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
								    # Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
							 | 
						||
| 
								 | 
							
								    OS=$(uname -s)
							 | 
						||
| 
								 | 
							
								    VER=$(uname -r)
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### Cyberpanel Section
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# fix mailperms
							 | 
						||
| 
								 | 
							
								fixmailperms_cyberpanel () {
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing mailperms...."
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    #Fix perms of /home/vmail
							 | 
						||
| 
								 | 
							
								    chown -R vmail:vmail /home/vmail
							 | 
						||
| 
								 | 
							
								    chmod 755 /home/vmail
							 | 
						||
| 
								 | 
							
								    find /home/vmail -type d -exec chmod 0755 {} \;
							 | 
						||
| 
								 | 
							
								    find /home/vmail -type f -exec chmod 0640 {} \;
							 | 
						||
| 
								 | 
							
								    echo "Finished fixing mailperms...."
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Main workhorse, fix perms per account passed to it
							 | 
						||
| 
								 | 
							
								fixperms_cyberpanel () {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  #Get account from what is passed to the function
							 | 
						||
| 
								 | 
							
								  account=$1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  #Make sure account isn't blank
							 | 
						||
| 
								 | 
							
								  if [ -z "$account" ]
							 | 
						||
| 
								 | 
							
								  then
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 1
							 | 
						||
| 
								 | 
							
								    echo "Need an account name!"
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    helptext
							 | 
						||
| 
								 | 
							
								  #Else, start doing work
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # Get linux user from Domain
							 | 
						||
| 
								 | 
							
								  domain_username=$(grep -E "/${1}:" /etc/passwd | cut -d: -f1)
							 | 
						||
| 
								 | 
							
								  if id "$1" >/dev/null 2>&1; then
							 | 
						||
| 
								 | 
							
								        echo "$1 exists"
							 | 
						||
| 
								 | 
							
								  elif id "$domain_username" >/dev/null 2>&1; then
							 | 
						||
| 
								 | 
							
									echo "Found user: $domain_username from domain: $1"        
							 | 
						||
| 
								 | 
							
									echo "$domain_username exists"
							 | 
						||
| 
								 | 
							
									account=$domain_username
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								        echo "user does not exist"
							 | 
						||
| 
								 | 
							
								  fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #Get the account's homedir
							 | 
						||
| 
								 | 
							
								    HOMEDIR=$(grep -E "^${account}:" /etc/passwd | cut -d: -f6)
							 | 
						||
| 
								 | 
							
								    echo "User Homedirectory: ${HOMEDIR}"
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing perms for $account:"
							 | 
						||
| 
								 | 
							
								    tput setaf 3
							 | 
						||
| 
								 | 
							
								    if [ -d "$HOMEDIR/.cagefs" ]; then
							 | 
						||
| 
								 | 
							
								            chmod 775 "$HOMEDIR"/.cagefs
							 | 
						||
| 
								 | 
							
								            chmod 700 "$HOMEDIR"/.cagefs/tmp
							 | 
						||
| 
								 | 
							
								            chmod 700 "$HOMEDIR"/.cagefs/var
							 | 
						||
| 
								 | 
							
								            chmod 777 "$HOMEDIR"/.cagefs/cache
							 | 
						||
| 
								 | 
							
								            chmod 777 "$HOMEDIR"/.cagefs/run
							 | 
						||
| 
								 | 
							
								     	fi
							 | 
						||
| 
								 | 
							
								    echo "------------------------"
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing website files...."
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   
							 | 
						||
| 
								 | 
							
								    #Fix individual files in public_html
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/public_html -type d -exec chmod "$verbose" 755 {} \;
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/public_html -type f -print0 | xargs -d$'\n' -r chmod "$verbose" 644
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/public_html -name '*.cgi' -print0 -o -name '*.pl' | xargs -0 -r chmod "$verbose" 755
							 | 
						||
| 
								 | 
							
								    chown $verbose -R "$account":"$account" "$HOMEDIR"/public_html/*
							 | 
						||
| 
								 | 
							
								    # Hidden files test support: https://serverfault.com/a/156481
							 | 
						||
| 
								 | 
							
								    chown "$verbose" -R "$account":"$account" "$HOMEDIR"/public_html/.[^.]*
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/* -name .htaccess -exec chown "$verbose" "$account"."$account" {} \;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing public_html...."
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    #Fix perms of public_html itself
							 | 
						||
| 
								 | 
							
								    chown "$verbose" "$account":nobody "$HOMEDIR"/public_html
							 | 
						||
| 
								 | 
							
								    chmod "$verbose" 755 "$HOMEDIR"/public_html
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing logs...."
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    #Fix perms of $HOMEDIR/logs
							 | 
						||
| 
								 | 
							
								    chown "$verbose" nobody:"$account" "$HOMEDIR"/logs
							 | 
						||
| 
								 | 
							
								    chmod "$verbose" 750 "$HOMEDIR"/logs
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/logs/* -name '*.access_log' -exec chown "$verbose" nobody."$account" {} \;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #Fix subdomains that lie outside of public_html
							 | 
						||
| 
								 | 
							
								    #tput setaf 3
							 | 
						||
| 
								 | 
							
								    #tput bold
							 | 
						||
| 
								 | 
							
								    #echo "------------------------"
							 | 
						||
| 
								 | 
							
								    #tput setaf 4
							 | 
						||
| 
								 | 
							
								    #echo "Fixing any domains with a document root outside of public_html...."
							 | 
						||
| 
								 | 
							
								    #for SUBDOMAIN in $(grep -i documentroot /var/cpanel/userdata/$account/* | grep -v '.cache\|_SSL' | awk '{print $2}' | grep -v public_html)
							 | 
						||
| 
								 | 
							
								    #do
							 | 
						||
| 
								 | 
							
								      #tput bold
							 | 
						||
| 
								 | 
							
								      #tput setaf 4
							 | 
						||
| 
								 | 
							
								      #echo "Fixing sub/addon domain document root $SUBDOMAIN...."
							 | 
						||
| 
								 | 
							
								      #tput sgr0
							 | 
						||
| 
								 | 
							
								      #find $SUBDOMAIN -type d -exec chmod $verbose 755 {} \;
							 | 
						||
| 
								 | 
							
								      #find $SUBDOMAIN -type f -print0 | xargs -d$'\n' -r chmod $verbose 644
							 | 
						||
| 
								 | 
							
								      #find $SUBDOMAIN -name '*.cgi' -o -name '*.pl' | xargs -r chmod $verbose 755
							 | 
						||
| 
								 | 
							
								      #chown $verbose -R $account:$account $SUBDOMAIN
							 | 
						||
| 
								 | 
							
								      #find $SUBDOMAIN -name .htaccess -exec chown $verbose $account.$account {} \;
							 | 
						||
| 
								 | 
							
								    #done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  #Finished
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 3
							 | 
						||
| 
								 | 
							
								    echo "Finished!"
							 | 
						||
| 
								 | 
							
								    echo "------------------------"
							 | 
						||
| 
								 | 
							
								    printf "\n\n"
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								  fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return 0
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#########cPanel 
							 | 
						||
| 
								 | 
							
								# Main workhorse, fix perms per account passed to it
							 | 
						||
| 
								 | 
							
								fixperms_cpanel () {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  #Get account from what is passed to the function
							 | 
						||
| 
								 | 
							
								  account=$1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  #Check account against cPanel users file
							 | 
						||
| 
								 | 
							
								  if ! grep "$account" /var/cpanel/users/*
							 | 
						||
| 
								 | 
							
								  then
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 1
							 | 
						||
| 
								 | 
							
								    echo "Invalid cPanel account"
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    exit 0
							 | 
						||
| 
								 | 
							
								  fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  #Make sure account isn't blank
							 | 
						||
| 
								 | 
							
								  if [ -z "$account" ]
							 | 
						||
| 
								 | 
							
								  then
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 1
							 | 
						||
| 
								 | 
							
								    echo "Need an account name!"
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    helptext
							 | 
						||
| 
								 | 
							
								  #Else, start doing work
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #Get the account's homedir
							 | 
						||
| 
								 | 
							
								    HOMEDIR=$(grep -E "^${account}:" /etc/passwd | cut -d: -f6)
							 | 
						||
| 
								 | 
							
								    echo "User Homedirectory: ${HOMEDIR}"
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing perms for $account:"
							 | 
						||
| 
								 | 
							
								    tput setaf 3
							 | 
						||
| 
								 | 
							
								    if [ -d "$HOMEDIR/.cagefs" ]; then
							 | 
						||
| 
								 | 
							
								            chmod 775 "$HOMEDIR"/.cagefs
							 | 
						||
| 
								 | 
							
								            chmod 700 "$HOMEDIR"/.cagefs/tmp
							 | 
						||
| 
								 | 
							
								            chmod 700 "$HOMEDIR"/.cagefs/var
							 | 
						||
| 
								 | 
							
								            chmod 777 "$HOMEDIR"/.cagefs/cache
							 | 
						||
| 
								 | 
							
								            chmod 777 "$HOMEDIR"/.cagefs/run
							 | 
						||
| 
								 | 
							
								     	fi
							 | 
						||
| 
								 | 
							
								    echo "------------------------"
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing website files...."
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #Fix individual files in public_html
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/public_html -type d -exec chmod "$verbose" 755 {} \;
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/public_html -type f -print0 | xargs -0 -d$'\n' -r chmod "$verbose" 644
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/public_html -name '*.cgi' -print0 -o -name '*.pl' | xargs -0 -r chmod "$verbose" 755
							 | 
						||
| 
								 | 
							
								    chown $verbose -R "$account":"$account" "$HOMEDIR"/public_html/*
							 | 
						||
| 
								 | 
							
								    # fix hidden files and folders like .well-known/ with root or other user perms
							 | 
						||
| 
								 | 
							
								    chown "$verbose" -R "$account":"$account" "$HOMEDIR"/public_html/.[^.]*
							 | 
						||
| 
								 | 
							
								    find "$HOMEDIR"/* -name .htaccess -exec chown "$verbose" "$account"."$account" {} \;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing public_html...."
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								    #Fix perms of public_html itself
							 | 
						||
| 
								 | 
							
								    chown "$verbose" "$account":nobody "$HOMEDIR"/public_html
							 | 
						||
| 
								 | 
							
								    chmod "$verbose" 750 "$HOMEDIR"/public_html
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    #Fix subdomains that lie outside of public_html
							 | 
						||
| 
								 | 
							
								    tput setaf 3
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    echo "------------------------"
							 | 
						||
| 
								 | 
							
								    tput setaf 4
							 | 
						||
| 
								 | 
							
								    echo "Fixing any domains with a document root outside of public_html...."
							 | 
						||
| 
								 | 
							
								    for SUBDOMAIN in $(grep -i documentroot /var/cpanel/userdata/"$account"/* | grep -v '.cache\|_SSL' | awk '{print $2}' | grep -v public_html)
							 | 
						||
| 
								 | 
							
								    do
							 | 
						||
| 
								 | 
							
								      tput bold
							 | 
						||
| 
								 | 
							
								      tput setaf 4
							 | 
						||
| 
								 | 
							
								      echo "Fixing sub/addon domain document root $SUBDOMAIN...."
							 | 
						||
| 
								 | 
							
								      tput sgr0
							 | 
						||
| 
								 | 
							
								      find "$SUBDOMAIN" -type d -exec chmod "$verbose" 755 {} \;
							 | 
						||
| 
								 | 
							
								      find "$SUBDOMAIN" -type f -print0 | xargs -0 -d$'\n' -r chmod "$verbose" 644
							 | 
						||
| 
								 | 
							
								      find "$SUBDOMAIN" -name '*.cgi' -print0 -o -name '*.pl' | xargs -0 -r chmod "$verbose" 755
							 | 
						||
| 
								 | 
							
								      chown "$verbose" -R "$account":"$account" "$SUBDOMAIN"
							 | 
						||
| 
								 | 
							
								      chmod "$verbose" 755 "$SUBDOMAIN"
							 | 
						||
| 
								 | 
							
								      find "$SUBDOMAIN" -name .htaccess -exec chown "$verbose" "$account"."$account" {} \;
							 | 
						||
| 
								 | 
							
								    done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  #Finished
							 | 
						||
| 
								 | 
							
								    tput bold
							 | 
						||
| 
								 | 
							
								    tput setaf 3
							 | 
						||
| 
								 | 
							
								    echo "Finished!"
							 | 
						||
| 
								 | 
							
								    echo "------------------------"
							 | 
						||
| 
								 | 
							
								    printf "\n\n"
							 | 
						||
| 
								 | 
							
								    tput sgr0
							 | 
						||
| 
								 | 
							
								  fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return 0
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								###################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fixperms () {
							 | 
						||
| 
								 | 
							
									Username=$1
							 | 
						||
| 
								 | 
							
									if [ "${ControlPanel}" == "cpanel" ] ; then
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									  	fixperms_cpanel "${Username}"
							 | 
						||
| 
								 | 
							
										# Fix users mailperms
							 | 
						||
| 
								 | 
							
										tput bold
							 | 
						||
| 
								 | 
							
								    		tput setaf 4
							 | 
						||
| 
								 | 
							
								    		echo "Fixing Mailperms...."
							 | 
						||
| 
								 | 
							
										tput sgr0
							 | 
						||
| 
								 | 
							
										/scripts/mailperm --verbose "${Username}"
							 | 
						||
| 
								 | 
							
										#Finished
							 | 
						||
| 
								 | 
							
										tput bold
							 | 
						||
| 
								 | 
							
										tput setaf 3
							 | 
						||
| 
								 | 
							
										echo "Finished!"
							 | 
						||
| 
								 | 
							
										echo "------------------------"
							 | 
						||
| 
								 | 
							
										printf "\n\n"
							 | 
						||
| 
								 | 
							
										tput sgr0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									elif [ "${ControlPanel}" == "cyberpanel" ] ; then
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										fixperms_cyberpanel "${Username}"
							 | 
						||
| 
								 | 
							
										fixmailperms_cyberpanel
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									elif [ "${ControlPanel}" == "plesk" ] ; then
							 | 
						||
| 
								 | 
							
										#Get users homedir path
							 | 
						||
| 
								 | 
							
										user_homedir=$(grep -E "^${Username}:" /etc/passwd | cut -d: -f6)
							 | 
						||
| 
								 | 
							
								                echo "User Homedirectory: ${user_homedir}"
							 | 
						||
| 
								 | 
							
										echo "Resetting perms/ownership for ${user_homedir}/httpdocs"
							 | 
						||
| 
								 | 
							
										sudo chown -R "${Username}":psacln "${user_homedir}"/httpdocs
							 | 
						||
| 
								 | 
							
										sudo chown "${Username}":psaserv "${user_homedir}"/httpdocs	
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fi	
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								all () {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if [ "${ControlPanel}" == "cpanel" ] ; then
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										for user in $(cut -d: -f1 /etc/domainusers)
							 | 
						||
| 
								 | 
							
										    do
							 | 
						||
| 
								 | 
							
										  	fixperms_cpanel "$user"
							 | 
						||
| 
								 | 
							
										    done
							 | 
						||
| 
								 | 
							
										# Fix all users mailperms
							 | 
						||
| 
								 | 
							
										/scripts/mailperm --verbose
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									elif [ "${ControlPanel}" == "cyberpanel" ] ; then
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if [[ $OS = 'CentOS Linux' ]] ; then
							 | 
						||
| 
								 | 
							
									   	for user in $(getent passwd | awk -F: '5001<$3 && $3<6000 {print $1}' |grep -v spamd)
							 | 
						||
| 
								 | 
							
										    do
							 | 
						||
| 
								 | 
							
										  	fixperms_cyberpanel "$user"
							 | 
						||
| 
								 | 
							
										    done
							 | 
						||
| 
								 | 
							
										   	fixmailperms_cyberpanel
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if [[ $OS = 'Ubuntu' ]] ; then
							 | 
						||
| 
								 | 
							
										   for user in $(getent passwd | awk -F: '1001<$3 && $3<2000 {print $1}')
							 | 
						||
| 
								 | 
							
										    do
							 | 
						||
| 
								 | 
							
										  	fixperms_cyberpanel "$user"
							 | 
						||
| 
								 | 
							
										    done
							 | 
						||
| 
								 | 
							
										  	fixmailperms_cyberpanel
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#Main function, switches options passed to it
							 | 
						||
| 
								 | 
							
								case "$1" in
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -h) helptext
							 | 
						||
| 
								 | 
							
								  ;;
							 | 
						||
| 
								 | 
							
								    --help) helptext
							 | 
						||
| 
								 | 
							
								      ;;
							 | 
						||
| 
								 | 
							
								    -v) verbose="-v"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  case "$2" in
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -all) all
							 | 
						||
| 
								 | 
							
								           ;;
							 | 
						||
| 
								 | 
							
								    --account) fixperms "$3"
							 | 
						||
| 
								 | 
							
								         ;;
							 | 
						||
| 
								 | 
							
								    -a) fixperms "$3"
							 | 
						||
| 
								 | 
							
								        ;;
							 | 
						||
| 
								 | 
							
								    *) tput bold
							 | 
						||
| 
								 | 
							
								           tput setaf 1
							 | 
						||
| 
								 | 
							
								       echo "Invalid Option!"
							 | 
						||
| 
								 | 
							
								       helptext
							 | 
						||
| 
								 | 
							
								       ;;
							 | 
						||
| 
								 | 
							
								  esac
							 | 
						||
| 
								 | 
							
								  ;;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    -all) all
							 | 
						||
| 
								 | 
							
								    ;;
							 | 
						||
| 
								 | 
							
								    --account) fixperms "$2"
							 | 
						||
| 
								 | 
							
								          ;;
							 | 
						||
| 
								 | 
							
								    -a) fixperms "$2"
							 | 
						||
| 
								 | 
							
								  ;;
							 | 
						||
| 
								 | 
							
								    *)
							 | 
						||
| 
								 | 
							
								       tput bold
							 | 
						||
| 
								 | 
							
								       tput setaf 1
							 | 
						||
| 
								 | 
							
								       echo "Invalid Option!"
							 | 
						||
| 
								 | 
							
								       helptext
							 | 
						||
| 
								 | 
							
								       ;;
							 | 
						||
| 
								 | 
							
								esac
							 |