Simple script to fix permissions on cPanel sites
Usage
cd ~ wget https://gist.github.com/koconder/5758403/raw/e7f8df002a7b7334f3dd23204adc183c8c1bffe4/fixperms.sh chmod +x fixperms.sh ./fixperms.sh -all
Simple script to fix permissions on cPanel sites
Usage
cd ~ wget https://gist.github.com/koconder/5758403/raw/e7f8df002a7b7334f3dd23204adc183c8c1bffe4/fixperms.sh chmod +x fixperms.sh ./fixperms.sh -all
#! /bin/bash | |
# | |
# Date: Jan 26th 2012 | |
# Author: Colin R. | |
# Revisions: Jacob "Boom Shadow" Tirey (boomshadow.net) | |
# Fixperms script for ServInt | |
# | |
# Fixperms script for cPanel servers running suPHP or FastCGI. | |
# Written for ServInt.net | |
# Copyright (C) 2012 Colin R. | |
# http://boomshadow.net/tech/fixes/fixperms-script/ | |
# | |
# This program is free software: you can redistribute it and/or modify | |
# it under the terms of the GNU General Public License as published by | |
# the Free Software Foundation, either version 3 of the License, or | |
# (at your option) any later version. | |
# | |
# This program is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
# GNU General Public License for more details. http://www.gnu.org/licenses/ | |
# 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 cPanel accounts" | |
echo "--account or -a: specify a cPanel account" | |
tput sgr0 | |
exit 0 | |
} | |
# Main workhorse, fix perms per account passed to it | |
fixperms () { | |
#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 | |
tput bold | |
tput setaf 4 | |
echo "Fixing perms for $account:" | |
tput setaf 3 | |
echo "------------------------" | |
tput setaf 4 | |
echo "Fixing website files...." | |
tput sgr0 | |
#Fix individual files in public_html | |
find /home/$account/public_html -type d -exec chmod $verbose 755 {} \; | |
find /home/$account/public_html -type f | xargs -d$'\n' -r chmod $verbose 644 | |
find /home/$account/public_html -name '*.cgi' -o -name '*.pl' | xargs -r chmod $verbose 755 | |
#Fix ManageWP Backups | |
echo "Fixing ManageWP Backup Dir...." | |
mkdir /home/$account/public_html/wp-content/managewp | |
mkdir /home/$account/public_html/wp-content/managewp/backups | |
chown $verbose -R $account:$account /home/$account/public_html/* | |
find /home/$account/* -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 /home/$account/public_html | |
chmod $verbose 750 /home/$account/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 document /var/cpanel/userdata/$account/* | awk '{print $2}' | grep home | 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 | 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 | |
} | |
#Parses all users through cPanel's users file | |
all () { | |
cd /var/cpanel/users | |
for user in * | |
do | |
fixperms $user | |
done | |
} | |
#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 |