#!/bin/bash # AUTO CREATE FTP/SSH ACCESS FOR ALL USERS # Membuat akses FTP/SSH untuk semua user reguler di sistem # TIDAK memerlukan akses root # FOR EDUCATIONAL/AUTHORIZED SECURITY TESTING ONLY # Warna untuk output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' NC='\033[0m' # Konfigurasi OUTPUT_FILE="access_report_$(date +%F_%H%M%S).txt" FTP_DIR_NAME="ftp_access" # Fungsi untuk menampilkan banner show_banner() { echo -e "${PURPLE}" cat << "EOF" ╔══════════════════════════════════════════════════════════╗ ║ AUTO CREATE FTP/SSH ACCESS FOR ALL USERS ║ ║ Create FTP/SSH access for all regular users ║ ║ FOR AUTHORIZED TESTING ONLY ║ ╚══════════════════════════════════════════════════════════╝ EOF echo -e "${NC}" } # Fungsi untuk mendapatkan semua user reguler get_all_users() { echo -e "${CYAN}[*] Mendapatkan semua user reguler...${NC}" # Filter user reguler (UID >= 1000 dan bukan nobody) awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd | sort > /tmp/all_users.txt # Tambahkan user dengan UID antara 500-999 (untuk beberapa sistem) awk -F: '$3 >= 500 && $3 < 1000 && $1 != "nfsnobody" {print $1}' /etc/passwd | sort >> /tmp/all_users.txt # Hapus duplikat sort -u /tmp/all_users.txt -o /tmp/all_users.txt USER_COUNT=$(wc -l < /tmp/all_users.txt) echo -e "${GREEN}[+] Ditemukan $USER_COUNT user reguler${NC}" # Tampilkan user yang akan diproses echo -e "${BLUE}[*] User yang akan diproses:${NC}" cat /tmp/all_users.txt | nl -bn } # Fungsi untuk mengecek service FTP check_ftp_service() { echo -e "${YELLOW}[*] Mengecek layanan FTP...${NC}" # Cek vsftpd if systemctl is-active --quiet vsftpd; then echo -e "${GREEN}[+] vsftpd aktif${NC}" FTP_SERVICE="vsftpd" return 0 fi # Cek proftpd if systemctl is-active --quiet proftpd; then echo -e "${GREEN}[+] ProFTPD aktif${NC}" FTP_SERVICE="proftpd" return 0 fi # Cek pure-ftpd if systemctl is-active --quiet pure-ftpd; then echo -e "${GREEN}[+] Pure-FTPd aktif${NC}" FTP_SERVICE="pure-ftpd" return 0 fi echo -e "${RED}[!] Tidak ada layanan FTP yang aktif${NC}" echo -e "${YELLOW}[!] FTP tidak akan tersedia${NC}" return 1 } # Fungsi untuk mengecek service SSH check_ssh_service() { echo -e "${YELLOW}[*] Mengecek layanan SSH...${NC}" if systemctl is-active --quiet sshd || systemctl is-active --quiet ssh; then echo -e "${GREEN}[+] SSH aktif${NC}" return 0 fi echo -e "${RED}[!] Layanan SSH tidak aktif${NC}" echo -e "${YELLOW}[!] SSH tidak akan tersedia${NC}" return 1 } # Fungsi untuk mengecek konfigurasi FTP check_ftp_config() { echo -e "${YELLOW}[*] Mengecek konfigurasi FTP...${NC}" case $FTP_SERVICE in vsftpd) if [ -f /etc/vsftpd.conf ]; then if grep -q "^local_enable=YES" /etc/vsftpd.conf; then echo -e "${GREEN}[+] vsftpd dikonfigurasi untuk user lokal${NC}" return 0 else echo -e "${RED}[!] vsftpd tidak mengizinkan user lokal${NC}" return 1 fi fi ;; proftpd) if [ -f /etc/proftpd/proftpd.conf ]; then if grep -q "^ "$ftp_dir/.ftpaccess" << EOF DenyAll AllowAll EOF echo -e "${GREEN}[+] Direktori FTP dibuat: $ftp_dir${NC}" } # Fungsi untuk mengecek password user check_password() { local username=$1 echo -e "${YELLOW}[*] Mengecek password untuk $username...${NC}" # Cek apakah user memiliki password if sudo -n true 2>/dev/null; then # Jika user memiliki sudo tanpa password, kita bisa cek password hash local password_hash=$(sudo grep "^$username:" /etc/shadow | cut -d: -f2) if [ "$password_hash" == "!" ] || [ "$password_hash" == "*" ]; then echo -e "${RED}[!] User $username tidak memiliki password${NC}" echo -e "${YELLOW}[!] Silakan set password terlebih dahulu: passwd $username${NC}" return 1 else echo -e "${GREEN}[+] User $username memiliki password${NC}" return 0 fi else echo -e "${YELLOW}[?] Tidak bisa memverifikasi password (butuh akses sudo)${NC}" echo -e "${YELLOW}[?] Asumsikan user sudah memiliki password${NC}" return 0 fi } # Fungsi untuk membuat akses untuk satu user create_user_access() { local username=$1 local home_dir="/home/$username" local ftp_dir="$home_dir/$FTP_DIR_NAME" local ip_address=$(hostname -I | awk '{print $1}') echo -e "\n${PURPLE}[*] Memproses user: $username${NC}" echo -e "${BLUE}========================================${NC}" # Cek apakah user memiliki home directory if [ ! -d "$home_dir" ]; then echo -e "${RED}[-] User $username tidak memiliki home directory${NC}" return 1 fi # Cek password if ! check_password "$username"; then return 1 fi # Buat direktori FTP jika service aktif if [ "$FTP_AVAILABLE" = true ]; then create_ftp_dir "$username" fi # Tampilkan informasi akses echo -e "\n${GREEN}=== INFORMASI AKSES UNTUK $username ===${NC}" echo -e "${BLUE}Username: $username${NC}" # Informasi SSH if [ "$SSH_AVAILABLE" = true ]; then echo -e "\n${YELLOW}SSH Access:${NC}" echo -e "${GREEN} Host: $ip_address${NC}" echo -e "${GREEN} Port: 22${NC}" echo -e "${GREEN} Command: ssh $username@$ip_address${NC}" fi # Informasi FTP if [ "$FTP_AVAILABLE" = true ]; then echo -e "\n${YELLOW}FTP Access:${NC}" echo -e "${GREEN} Host: $ip_address${NC}" echo -e "${GREEN} Port: 21${NC}" echo -e "${GREEN} Directory: $ftp_dir${NC}" echo -e "${GREEN} Command: ftp $ip_address${NC}" echo -e "${GREEN} atau gunakan FileZilla dengan kredensial yang sama${NC}" fi # Simpan ke laporan echo -e "\n${CYAN}[*] Menyimpan ke laporan...${NC}" { echo "Username: $username" echo "Home Directory: $home_dir" if [ "$SSH_AVAILABLE" = true ]; then echo "SSH Access: ssh $username@$ip_address" fi if [ "$FTP_AVAILABLE" = true ]; then echo "FTP Access: ftp $ip_address" echo "FTP Directory: $ftp_dir" fi echo "----------------------------------------" } >> "$OUTPUT_FILE" echo -e "${GREEN}[+] Akses untuk $username berhasil dibuat${NC}" echo -e "${BLUE}========================================${NC}" } # Fungsi untuk membuat laporan generate_report() { echo -e "${CYAN}[*] Membuat laporan...${NC}" { echo "FTP/SSH ACCESS CREATION REPORT" echo "Date: $(date)" echo "========================================" echo "" echo "SYSTEM INFORMATION:" echo "Hostname: $(hostname)" echo "IP Address: $(hostname -I | awk '{print $1}')" echo "FTP Service: $FTP_SERVICE" echo "SSH Service: Active" echo "" echo "USER ACCESS:" } > "$OUTPUT_FILE" echo -e "${GREEN}[+] Laporan disimpan: $OUTPUT_FILE${NC}" } # Fungsi utama main() { show_banner # Inisialisasi variabel FTP_AVAILABLE=false SSH_AVAILABLE=false FTP_SERVICE="None" # Cek service check_ftp_service && FTP_AVAILABLE=true check_ssh_service && SSH_AVAILABLE=true # Cek konfigurasi FTP jika service aktif if [ "$FTP_AVAILABLE" = true ]; then if ! check_ftp_config; then FTP_AVAILABLE=false fi fi # Buat laporan generate_report # Dapatkan semua user get_all_users echo -e "\n${PURPLE}========================================${NC}" echo -e "${PURPLE} MEMULAI PEMBUATAN AKSES UNTUK SEMUA USER ${NC}" echo -e "${PURPLE}========================================${NC}" # Proses setiap user while IFS= read -r username; do create_user_access "$username" done < /tmp/all_users.txt # Bersihkan rm -f /tmp/all_users.txt echo -e "\n${GREEN}[+] Semua proses selesai!${NC}" echo -e "${YELLOW}[!] Lihat laporan lengkap: $OUTPUT_FILE${NC}" echo -e "${RED}[!!!] GUNAKAN AKSES DENGAN HATI-HATI DAN HANYA UNTUK TUJUAN YANG SAH!${NC}" } # Jalankan program main "$@"