全部博文(528)
分类: linux
2022-05-14 11:07:35
cat run-vsftpd.sh
#!/bin/bash
# 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
# create home dir and update vsftpd user db:
mkdir -p "/home/vsftpd/${ftp_user}"
chown -r ftp:ftp /home/vsftpd/
echo -e "${ftp_user}\n${ftp_pass}" > /etc/vsftpd/virtual_users.txt
/usr/bin/db_load -t -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
# set passive mode parameters:
if [ "$pasv_address" = "**ipv4**" ]; then
export pasv_address=$(/sbin/ip route|awk '/default/ { print $3 }')
fi
echo "pasv_address=${pasv_address}" >> /etc/vsftpd/vsftpd.conf
echo "pasv_max_port=${pasv_max_port}" >> /etc/vsftpd/vsftpd.conf
echo "pasv_min_port=${pasv_min_port}" >> /etc/vsftpd/vsftpd.conf
echo "pasv_addr_resolve=${pasv_addr_resolve}" >> /etc/vsftpd/vsftpd.conf
echo "pasv_enable=${pasv_enable}" >> /etc/vsftpd/vsftpd.conf
echo "file_open_mode=${file_open_mode}" >> /etc/vsftpd/vsftpd.conf
echo "local_umask=${local_umask}" >> /etc/vsftpd/vsftpd.conf
echo "xferlog_std_format=${xferlog_std_format}" >> /etc/vsftpd/vsftpd.conf
echo "reverse_lookup_enable=${reverse_lookup_enable}" >> /etc/vsftpd/vsftpd.conf
# get log file path
export log_file=grep xferlog_file /etc/vsftpd/vsftpd.conf|cut -d= -f2
# stdout server info:
if [ ! $log_stdout ]; then
cat << eob
*************************************************
* *
* docker image: fauria/vsftpd *
* *
* *
*************************************************
server settings
---------------
· ftp user: $ftp_user
· ftp password: $ftp_pass
· log file: $log_file
· redirect vsftpd log to stdout: no.
eob
else
/usr/bin/ln -sf /dev/stdout $log_file
fi
# run vsftpd:
&>/dev/null /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
需求:需要2个ftp用户访问不同的根目录,其他的访问ftp默认目录。
2个用户为:test1、test2
首先安装vsftpd,然后配置文件如下:
这个文件的虚拟用户和密码的文本文件无法被系统帐号直接调用,所以我们需要使用db_load命令生成db口令数据库文件,命令如下:
db_load -t -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的pam模块。pam(plugable authentication module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。pam模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
我们现在切换到/etc/pam.d/ 目录下,编辑vsfptd文件。如下图:
auth是指对用户的用户名口令进行验证。
accout是指对用户的帐户有哪些权限哪些限制进行验证。
再后面的/lib64/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。
注意该函数会根据系统的位数而所在位置不同。
[root@localhost vsftpd]# cat /etc/vsftpd/vuser_conf/test1
可以通过如下两种方法来设置chroot,从而杜绝上述不安全的情况发生:
(1)设置所有的本地用户执行chroot,只要将/etc/vsftpd/vsftpd.con文件中的chroot_local_ user值置为yes,即 chroot_local_user=yes。
(2)设置指定的用户执行chroot,按照如下方法进行设置:
chroot_local_user=no
chroot_list_enable=yes
chroot_list_file=/etc/vsftpd.chroot_list
设置后,只有/etc/vsftpd.chroot_list文件中指定的用户才能够执行chroot命令。