forked from fauria/docker-vsftpd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun-vsftpd.sh
102 lines (85 loc) · 3.03 KB
/
run-vsftpd.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
#################################
# Variables
#################################
VIRTUAL_USERS_FILE="/etc/vsftpd/virtual_users.txt"
VIRTUAL_USERS_DB_FILE="/etc/vsftpd/virtual_users.db"
VSFTPD_CONFIG_FILE="/etc/vsftpd/vsftpd.conf"
VSFTPD_HOME_DIR="/home/vsftpd/"
# If no env var for FTP_USER has been specified, use 'admin':
if [[ "$FTP_USER" = "**String**" ]]; then
export FTP_USER='admin'
fi
# If no env var has been specified, generate a random password for FTP_USER:
if [[ "$FTP_PASS" = "**Random**" ]]; then
export FTP_PASS=$(cat /dev/urandom | tr -dc A-Z-a-z-0-9 | head -c${1:-16})
fi
# Do not log to STDOUT by default:
if [[ "$LOG_STDOUT" = "**Boolean**" ]]; then
export LOG_STDOUT=''
else
export LOG_STDOUT='Yes.'
fi
# Set passive mode parameters:
if [[ "$PASV_ADDRESS" = "**IPv4**" ]]; then
export PASV_ADDRESS=$(/sbin/ip route|awk '/default/ { print $3 }')
fi
info(){
echo -e "INFO: $1"
}
# Verify if 'main' user exist, if so do nothing.
verify_user(){
if [[ ! -e $VIRTUAL_USERS_FILE ]]; then
info "Fresh deployment"
info "Creating virtual user: ${FTP_USER}"
echo -e "${FTP_USER}\n${FTP_PASS}" > $VIRTUAL_USERS_FILE
else
local exist=$(grep -o "$1" $VIRTUAL_USERS_FILE && grep -o "$2" $VIRTUAL_USERS_FILE)
if [[ $exist -ne 0 ]]; then
echo "Creating virtual user: ${FTP_USER}"
echo -e "${FTP_USER}\n${FTP_PASS}" >> $VIRTUAL_USERS_FILE
fi
fi
}
# Generate database file based on txt file
db_load(){
/usr/bin/db_load -T -t hash -f $1 $2
}
# Create home dir and update vsftpd user db:
mkdir -p "${VSFTPD_HOME_DIR}/${FTP_USER}"
chown -R ftp:ftp $VSFTPD_HOME_DIR
verify_user $FTP_USER $FTP_PASS
db_load $VIRTUAL_USERS_FILE $VIRTUAL_USERS_DB_FILE
echo "pasv_address=${PASV_ADDRESS}" >> $VSFTPD_CONFIG_FILE
echo "pasv_max_port=${PASV_MAX_PORT}" >> $VSFTPD_CONFIG_FILE
echo "pasv_min_port=${PASV_MIN_PORT}" >> $VSFTPD_CONFIG_FILE
echo "pasv_addr_resolve=${PASV_ADDR_RESOLVE}" >> $VSFTPD_CONFIG_FILE
echo "pasv_enable=${PASV_ENABLE}" >> $VSFTPD_CONFIG_FILE
echo "file_open_mode=${FILE_OPEN_MODE}" >> $VSFTPD_CONFIG_FILE
echo "local_umask=${LOCAL_UMASK}" >> $VSFTPD_CONFIG_FILE
echo "xferlog_std_format=${XFERLOG_STD_FORMAT}" >> $VSFTPD_CONFIG_FILE
echo "reverse_lookup_enable=${REVERSE_LOOKUP_ENABLE}" >> $VSFTPD_CONFIG_FILE
echo "pasv_promiscuous=${PASV_PROMISCUOUS}" >> $VSFTPD_CONFIG_FILE
echo "port_promiscuous=${PORT_PROMISCUOUS}" >> $VSFTPD_CONFIG_FILE
# Get log file path
export LOG_FILE=$(grep xferlog_file $VSFTPD_CONFIG_FILE|cut -d'=' -f2)
# stdout server info:
if [[ ! $LOG_STDOUT ]]; then
cat << EOB
*************************************************
* Based on: *
* Docker image: fauria/vsftpd *
* https://github.com/fauria/docker-vsftpd *
*************************************************
EOB
else
/usr/bin/ln -sf /dev/stdout $LOG_FILE
fi
info "
--------------- \n
· FTP User: $FTP_USER
· FTP Password: $FTP_PASS
· Log file: $LOG_FILE
· Redirect vsftpd log to STDOUT: No. \n"
# Run vsftpd:
&>/dev/null /usr/sbin/vsftpd $VSFTPD_CONFIG_FILE