403Webshell
Server IP : 172.67.149.12  /  Your IP : 104.23.243.226
Web Server : Apache
System : Linux vm3310.eosdns.net 4.18.0-553.132.1.el8_10.x86_64 #1 SMP Thu Jun 11 14:27:43 UTC 2026 x86_64
User : carnalmedia ( 1000)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /mojo/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /mojo/mjact_ftp
#!/bin/bash
#
# Script: mjact_ftp
#
# Usage: mjact_ftp -a <action (list/add/remove/changepassword)> -n <FTP username> -u <local username> -f <path> -p
#
# Description: A tool for managing FTP accounts
#
# Author: Nikita Shchetinin
#
# Changelog:
# * 07.04.2023: Nikita Shchetinin
# - Removal function fix
# * 02.03.2021: Nikita Shchetinin
# - Initial write

if [ "$(whoami)" != 'root' ]
then
	echo "You must execute this script as the root user!"
	exit 1
fi

LIST () {
if [ ! -f /etc/vsftpd/virtual_users.db ]
then
	echo "No FTP user is added to this server!"
	exit 1
else
	echo $'FTP user\tLocal user\tLocal path'
	for i in $(db_dump -p /etc/vsftpd/virtual_users.db | sed -n '/HEADER=END/,/DATA=END/{/HEADER=END/b;/DATA=END/b;p}' | sed -n '1~2p' | tr -d ' ')
		do
		    echo -n "$i"
			echo -n $'\t\t'
			if [ -f /etc/vsftpd/users/$i ]
			then
				if grep -qoP "(?<=guest_username=).*" /etc/vsftpd/users/$i
				then
					grep -oP "(?<=guest_username=).*" /etc/vsftpd/users/$i | tr '\n' '\t'
				else
					grep -oP "(?<=guest_username=).*" /etc/vsftpd/vsftpd.conf | tr '\n' '\t'
				fi
				echo -n $'\t'
				if grep -qoP "(?<=local_root=).*" /etc/vsftpd/users/$i
				then
					grep -oP "(?<=local_root=).*" /etc/vsftpd/users/$i
				else
					grep -oP "(?<=local_root=).*" /etc/vsftpd/vsftpd.conf
				fi
			else
				grep -oP "(?<=guest_username=).*" /etc/vsftpd/vsftpd.conf | tr '\n' '\t'
				echo -n $'\t'
				grep -oP "(?<=local_root=).*" /etc/vsftpd/vsftpd.conf
			fi
	done
fi
}

ADD () {
if [ -n "$username" ]
then
	if ! id -u $username > /dev/null 2>&1
	then
		echo "The provided local user does not exist!"
		exit 1
	fi
fi
if [ -n "$path" ]
then
	if [ ! -d "$path" ]
	then
		echo "The provided local path does not exist or is not a directory!"
		exit 1
	fi
fi
if [ -f /root/virtual_users.txt ]
then
	rm -f /root/virtual_users.txt
	echo "/root/virtual_users.txt existed and has been deleted"
fi
if [ -z "$name" ]
then
	echo "The username is required!"
	exit 1
else
	if [ -f /etc/vsftpd/virtual_users.db ]
	then
		if db_dump -p /etc/vsftpd/virtual_users.db | grep -qw "$name"
		then
			echo "The provided FTP username is already added!"
			exit 1
		else
		    db_dump -p /etc/vsftpd/virtual_users.db | sed -n '/HEADER=END/,/DATA=END/{/HEADER=END/b;/DATA=END/b;p}' | tr -d ' ' > /root/virtual_users.txt
		fi
	fi
	echo "$name" >> /root/virtual_users.txt
	if [ "$passprompt" == "YES" ]
	then
		read -p "Enter the password: " password
		while [ -z "$password" ]
		do
		echo "The password is required!"
		read -p "Enter the password: " password
		done
	else
		password=$(</dev/urandom tr -dc A-Za-z0-9 | head -c16)
	fi
	echo "$password" >> /root/virtual_users.txt
	rm -f /etc/vsftpd/virtual_users.db
	db_load -T -t hash -f /root/virtual_users.txt /etc/vsftpd/virtual_users.db
	chmod 600 /etc/vsftpd/virtual_users.db
	rm -f /root/virtual_users.txt
	if [ -n "$username" ]
	then
		echo "guest_username=$username" >> /etc/vsftpd/users/$name
	fi
	if [ -n "$path" ]
	then
		echo "local_root=$path" >> /etc/vsftpd/users/$name
	fi
	systemctl restart vsftpd
	echo "Hostname: $(hostname)"
	echo "Port: 21"
	echo "FTP user: $name"
	echo "FTP password: $password"
fi
}

REMOVE () {
if [ -f /root/virtual_users.txt ]
then
	rm -f /root/virtual_users.txt
	echo "/root/virtual_users.txt existed and has been deleted"
fi
if [ -z "$name" ]
then
	echo "The username is required!"
	exit 1
else
	if [ -f /etc/vsftpd/virtual_users.db ]
	then
		if db_dump -p /etc/vsftpd/virtual_users.db | grep -qw "$name"
		then
			if [ $(db_dump -p /etc/vsftpd/virtual_users.db | sed -n '/HEADER=END/,/DATA=END/{/HEADER=END/b;/DATA=END/b;p}' | sed -n '1~2p' | wc -l) != 1 ]
			then
				db_dump -p /etc/vsftpd/virtual_users.db | sed -n '/HEADER=END/,/DATA=END/{/HEADER=END/b;/DATA=END/b;p}' | tr -d ' ' > /root/virtual_users.txt
				sed -i "/\<$name\>/,+1 d" /root/virtual_users.txt
				rm -f /etc/vsftpd/virtual_users.db
				db_load -T -t hash -f /root/virtual_users.txt /etc/vsftpd/virtual_users.db
				chmod 600 /etc/vsftpd/virtual_users.db
				rm -f /root/virtual_users.txt
				rm -f /etc/vsftpd/users/$name
				systemctl restart vsftpd
				echo "$name has been deleted"
			else
				rm -f /etc/vsftpd/virtual_users.db
				systemctl restart vsftpd
				echo "$name has been deleted"
			fi
		else
			echo "The provided FTP username doesn't exist!"
			exit 1
		fi
	else
		echo "No FTP user is added to this server!"
		exit 1
	fi
fi
}

CHANGE () {
if [ -f /root/virtual_users.txt ]
then
	rm -f /root/virtual_users.txt
	echo "/root/virtual_users.txt existed and has been deleted"
fi
if [ -z "$name" ]
then
	echo "The username is required!"
	exit 1
else
	if [ -f /etc/vsftpd/virtual_users.db ]
	then
		if db_dump -p /etc/vsftpd/virtual_users.db | grep -qw "$name"
		then
			if [ "$passprompt" == "YES" ]
			then
				read -p "Enter the password: " password
				while [ -z "$password" ]
				do
				echo "The password is required!"
				read -p "Enter the password: " password
				done
			else
			password=$(</dev/urandom tr -dc A-Za-z0-9 | head -c16)
			fi
			db_dump -p /etc/vsftpd/virtual_users.db | sed -n '/HEADER=END/,/DATA=END/{/HEADER=END/b;/DATA=END/b;p}' | tr -d ' ' > /root/virtual_users.txt
			escaped_password=$(echo -n "$password" | sed -e 's/[\/&]/\\&/g')
			sed -i "/\<$name\>/{n;s/.*/$escaped_password/}" /root/virtual_users.txt
			rm -f /etc/vsftpd/virtual_users.db
			db_load -T -t hash -f /root/virtual_users.txt /etc/vsftpd/virtual_users.db
			chmod 600 /etc/vsftpd/virtual_users.db
			rm -f /root/virtual_users.txt
			systemctl restart vsftpd
			echo "Hostname: $(hostname)"
			echo "Port: 21"
			echo "FTP user: $name"
			echo "FTP password: $password"
		else
			echo "The provided FTP username doesn't exist!"
			exit 1
		fi
	else
		echo "No FTP user is added to this server!"
		exit 1
	fi
fi
}

HELP () {
echo "A tool for managing FTP accounts"
echo "usage: mjact_ftp -a <action (list/add/remove/changepassword)> -n <FTP username> -u <local username> -f <path> -p (to submit password using a password prompt)"
}

if [[ "${1}" == "" ]] || [[ "${1}" == "-h" ]] || [[ "${1}" == "--help" ]]
then
	HELP
	exit
else
	while getopts ":a:n:u:f:p" OPTION
	do
		case "${OPTION}" in
			a)
				action="${OPTARG}"
			;;
			n)
				name="${OPTARG}"
			;;
			u)
				username="${OPTARG}"
			;;
			f)
				path="${OPTARG}"
			;;
			p)
				passprompt="YES"
			;;
		esac
	done
fi

case $action in
	list)
		sleep 1
		LIST
	;;
	add)
		sleep 1
		ADD
	;;
	remove)
		sleep 1
		REMOVE
	;;
	changepassword)
		sleep 1
		CHANGE
	;;
	*)
		echo "Invalid action!"
		exit 1
	;;
esac

Youez - 2016 - github.com/yon3zu
LinuXploit