在水区做了调查,大家普遍对Linux FTP搭建很简单,不过从我自己的实际搭建过程中却不太容易。为此特意做了开源与笔记化的一键脚本,注释全面,方便后续的学习与交流。
- 安全:
- 虽说FTP爆破频率没有SSH登录那么高,但为了安全起见还是先限定自己的公网IP访问
- 限制用户出逃共享目录之外的目录,可读写。
- 自定义用户名,密码符合Linux常规创建用户就行。
- 对获取客户端IP进行了优化,从本机登录信息获取IP信息,彻底杜绝了从监听SSH端口抓取IP被混淆的风险。
scp上传与下载也挺方便,但不方便目录的整体管理。而且刚入手学习Linux的人来说知道宝塔、Zfile各种面板的人也是少数,做一键脚本的目的也是帮助新人少走弯路。
起手方式不需要了解虚拟用户映射及FTP验证、PAM模块原理,一键搞定FTP。 源码Git仓地址
sudo bash -c "$(curl -fL https://ghproxy.com/https://raw.githubusercontent.com/hoochanlon/ihs-simple/main/d-shell/lite_vsftpd.sh)"
最后在阿里云服务器的安全组,或腾讯云的防火墙放行21000端口,搞定。效果图如下:
图床由 https://cdn.jsdelivr.net 提供支持。
放行阿里云安全组/腾讯云防火墙

已可读写

策略生效状态查看

后续的自定义,可略览如下相关文件,进行此方面相关的深入学习与研究。
- 共享目录:/var/ftp/share
- 访问配置文件 /etc/security/access.conf
- FTP配置文件: /etc/vsftpd/vsftpd.conf
- FTP模块支持文件: /etc/pam.d/vsftpd
最后,附源码:
yum install -y vsftpd
yum install lsof -y
sudo systemctl enable vsftpd
sudo systemctl start vsftpd
sudo groupadd ftpusers
read -p "请输入创建FTP共享的用户名:" user_name && sudo useradd -g ftpusers $user_name
echo -e "$user_name 用户创建已完成 \n"
echo "⚠️ 注意:Linux初始密码规则,创建密码需要符合大小写及特殊字符等各项要求 ‼️"
echo -e "若已配置密码策略,可无视上面这条提示信息。"
echo -e "◉ 注:显示明文,方便密码核对后确认 \n"
read -p "请输入密码:" pass_word
echo $pass_word | passwd --stdin $user_name
sudo usermod -s /sbin/nologin $user_name
sudo sudo mkdir /var/ftp/share
echo "hello world " > /var/ftp/share/test.txt
sudo chown -R ftpuser:ftpusers /var/ftp/share
cp -rp /etc/vsftpd/vsftpd.conf{,.bak}
linux_public_ip=$(curl -s http://ip.tool.chinaz.com/ |grep 'class="fz24"' | awk -F '>|<' '{print$3}')
get_my_ip=$(who|awk '{print $5}'| cut -d '(' -f2 | cut -d ')' -f1|sed -n '1p')
sed -i '12canonymous_enable=NO' /etc/vsftpd/vsftpd.conf
sed -i '100,101s/^#//' /etc/vsftpd/vsftpd.conf
sed -i '103s/^#//' /etc/vsftpd/vsftpd.conf
sed -i 's/listen=NO/listen=YES/' /etc/vsftpd/vsftpd.conf
sed -i '123s/^/# /' /etc/vsftpd/vsftpd.conf
sed -i '52s/^#//' /etc/vsftpd/vsftpd.conf
echo -e "
local_root=/var/ftp/share
allow_writeable_chroot=YES
pasv_enable=YES
pasv_address=$linux_public_ip
pasv_min_port=21000
pasv_max_port=21000
" >> /etc/vsftpd/vsftpd.conf
touch /etc/vsftpd/chroot_list
sudo sed -i '4s/^/#/' /etc/pam.d/vsftpd
cp -rp /etc/pam.d/vsftpd{,.bak}
sudo sed -i '7i\account required pam_access.so' /etc/pam.d/vsftpd
cp -rp /etc/security/access.conf{,.bak}
echo -e "
+:ftpusers:$get_my_ip
-:ALL:ALL
" >> /etc/security/access.conf
sudo systemctl restart vsftpd
echo -e "***调试专用代码***"
echo 'scp /Users/chanlonhoo/Desktop/1.sh root@101.xxx.xxx.xxx:${HOMEPATH}'
echo -e "rm -rf ~/.ssh/known_hosts && rm -rf ~/.ssh/known_hosts.old"
echo -e "查看所有用户信息:cat /etc/passwd"
echo -e "新建用户,添加FTP共享组:useradd -G ftpusers <用户名称>"
echo -e "已有用户,添加FTP共享组:usermod -a -G ftpusers <用户名称>"
echo -e "***************** \n"
echo -e "\n ****************FTP基本说明与概况******************** \n"
echo -e "FTP专属用户已创建完成:$user_name ;密码:$pass_word"
echo -e "FTP共享目录位置:cat /var/ftp/share"
echo -e "重要 ‼️ :注意在阿里云安全组,或腾讯云服务器防火墙,放行21000端口。"
echo -e "\n至此,FTP搭建已完成,下面是FTP相关配置简览"
echo -e "查看FTP历史访问记录:/var/log/xferlog"
echo -e "核心配置文件:vi /etc/vsftpd/vsftpd.conf"
echo -e "FTP限制用户及IP访问文件:vi /etc/security/access.conf\n"
echo -e "Windows可以用文件管理器访问,就可以上传下载了。"
echo -e "Mac推荐使用Cyberduck、FileZilla、ForkLift访问,自带访达对FTP功能支持不完善。\n"
rm -rf $0
|