ზ3በંવવხްុլRxስសلçໂH℅૩/usr/local/bin/
#!/bin/bash #1.CONSTANTS FOR COLORS: RED_COLOR=$'\033[31;1m' GREEN_COLOR=$'\033[32;1m' YELLOW_COLOR=$'\033[33;1m' DEFAULT_COLOR=$'\033[0m' #2.INPUT DOMAIN NAME: printf "%sTYPE THE DOMAIN NAME THAT YOU WISH TO BE RESTICTED.%s\\n" "$GREEN_COLOR" "$DEFAULT_COLOR" #2.1.CHECK IF INPUT DOMAIN EXISTS AND ASK FOR INPUT UNTIL EXISTING DOMAIN IS PROVIDED: current_user=$(whoami) counter=0 while [ -z "$doc_root" ]; do if [ "$counter" != 0 ]; then printf "%sINVALID DOMAIN! TYPE THE DOMAIN AGAIN:%s\\n" "$RED_COLOR" "$DEFAULT_COLOR" fi read -e -r -p $'\e[36mDomain/Subdomain:\e[0m ' input_domain; #2.1.1.CONVERT INPUT TO LOWERCASE: input_domain="${input_domain,,}" #2.1.2.REMOVE ANY '/' AT THE END OF THE INPUT: last_char="${input_domain: -1}" while [ "$last_char" = '/' ]; do input_domain=${input_domain%?}; last_char="${input_domain: -1}" done sub_folder=$( echo "${input_domain}" | cut -d '/' -s -f 2- ) domain_name=$( echo "$input_domain" | cut -d '/' -f 1 ) if [ "$current_user" = 'root' ]; then cpanel_user=$( /scripts/whoowns "$domain_name" ) if [ -n "$cpanel_user" ]; then doc_root=$( uapi --user="$cpanel_user" DomainInfo single_domain_data domain="$domain_name" | grep 'documentroot:' | cut -d ' ' -f 6 ) fi else doc_root=$( uapi DomainInfo single_domain_data domain="$domain_name" | grep 'documentroot:' | cut -d ' ' -f 6 ) fi if [ -n "$doc_root" ]; then if [ -n "$sub_folder" ]; then doc_root=${doc_root}/${sub_folder} fi fi ((counter++)) done #3.NAVIGATE TO DOCUMENT ROOT OF THE DOMAIN AND DENY ACCESS cd "$doc_root" 2> /dev/null || ( printf "%sDOCUMENT ROOT DOES NOT EXIST! EXITING ...%s\\n" "$RED_COLOR" "$DEFAULT_COLOR"; exit; ) if [[ -f .htaccess && -s .htaccess ]]; then if [[ "$current_user" = 'root' && -n $(lsattr .htaccess | grep 'a\|i' | awk '{print$1}') ]]; then chattr -ai .htaccess fi sed -i '1s/^/ErrorDocument 403 default\nDeny from All\n/' .htaccess else printf 'ErrorDocument 403 default\nDeny from All' > .htaccess if [ "$current_user" = 'root' ]; then chown "$cpanel_user": .htaccess fi fi counter=0 #4.CHECK RECURSIVLY FOR .HTACCESS FILES WITH ALLOW FROM ALL RULES read -r -a files <<< "$(find "$doc_root" -type f -name '.htaccess' -exec grep -w -l -i 'allow from all' {} \; | grep -v 'akismet' | tr '\n' ' ')" number_of_files=${#files[@]} if [ "$number_of_files" -gt 0 ]; then printf "%sAllow From All FOUND IN THE FOLLOWING FILES:%s\\n" "$RED_COLOR" "$DEFAULT_COLOR" printf "%s\\n" "${files[@]}" #5.REMOVE ALL ENTRIES OF ALLOW FROM ALL read -e -r -p $'\e[36mWould you like to remove the rule from all files?(y/n):\e[0m ' remove; if [ "$remove" = 'y' ]; then for file in "${files[@]}"; do sed -i '/Allow From All/Id' "$file" line_removed=$(grep -w -l -i 'allow from all' "$file") if [ -z "$line_removed" ]; then printf "%sRule removed from "$file"%s\\n" "$GREEN_COLOR" "$DEFAULT_COLOR" else printf "%sRule NOT removed from "$file"%s\\n" "$RED_COLOR" "$DEFAULT_COLOR" fi done else printf "%sRule NOT removed from the files.%s\\n" "$RED_COLOR" "$DEFAULT_COLOR" fi fi #6.CHATTR .HTACCESS IF POSSIBLE if [ "$current_user" = 'root' ]; then chattr +ai .htaccess if [ -n $(lsattr .htaccess | grep 'ia' | awk '{print$1}') ]; then printf "%sChattr added to "$doc_root"/.htaccess.%s\\n" "$GREEN_COLOR" "$DEFAULT_COLOR" fi fi