FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。
#!/bin/bash
#此脚本目前只是为了方便centos7下安装vsftp,其他版本后期集成。
#ftp数据存放目录
ftp_data=/home/ftp
check_friewalld(){
echo "开始检查防火墙设置"
systemctl status firewalld |grep runing & >/dev/null
if [ $? -ne 0 ]
then
firewall-cmd --add-port=21/tcp --zone=public --permanent
firewall-cmd --add-service=ftp
firewall-cmd --reload
fi
if [ $? -eq 0 ]
then
echo "防火墙开启成功"
fi
useradd -s /sbin/nologin ftp
}
#搭建ftp
install_vsftp(){
echo "开始安装vsftp 并且检查环境"
yum -y install vsftpd libdb-utils
if [ $? -ne 0 ]
then
echo "请检查你的yum源情况,是否出现无法用,可单独在终端执行 yum makecache 测试"
exit 1
fi
#检查防火墙,开放21端口
check_friewalld
echo "开始配置ftp"
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
#配置数据写入到配置文件
cat >/etc/vsftpd/vsftpd.conf</etc/vsftpd/user.txt
echo $ftp_passwd >>/etc/vsftpd/user.txt
db_load -T -t hash -f user.txt vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db
touch /etc/pam.d/vsftpd.vu
echo "判断此系统是32位操作系统还是64位"
#判断centos系统位64位还是32位
xd=`getconf LONG_BIT`
if [ $xd -eq '64' ];then
echo "此系统为64位"
echo "auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd.vu
echo "account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd.vu
else
echo "auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" > /etc/pam.d/vsftpd.vu
echo "account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login" >> /etc/pam.d/vsftpd.vu
fi
#限制用户切换工作目录
touch /etc/vsftpd/chroot_list
echo $ftp_user >>/etc/vsftpd/chroot_list
#配置虚拟用户的配置文件
mkdir -p /etc/vsftpd/vsftpd_user_conf
cd /etc/vsftpd/vsftpd_user_conf
#写入用户权限配置
cat >$ftp_user <>$ftp_user
mkdir -p $ftp_data
chown -R ftp:root $ftp_data
chmod o+rw $ftp_data
mkdir -p $ftp_data/$ftp_user
chmod -R 777 $ftp_data/$ftp_user
systemctl restart vsftpd.service
}
#创建虚拟用户
create_user(){
ftp_passwd=123456
read -p "输入你要创建的用户名:" ftp_user
if [ ! -n "$ftp_user" ];then
echo "你没有输入用户名,退出"
exit 1
else
read -p "输入密码:" ftp_pass
if [ ! -n "$ftp_pass" ];then
echo "密码没有输入,默认123456"
else
ftp_passwd=$ftp_pass
fi
fi
cd /etc/vsftpd
echo $ftp_user >>/etc/vsftpd/user.txt
echo $ftp_passwd >>/etc/vsftpd/user.txt
db_load -T -t hash -f user.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db
echo $ftp_user >>/etc/vsftpd/chroot_list
cd /etc/vsftpd/vsftpd_user_conf
cat >$ftp_user<>$ftp_user
mkdir -p $ftp_data/$ftp_user
chmod -R 777 $ftp_data/$ftp_user
}
echo "输入你要操作的内容"
select var in install_vsftpd create_user quit
do
case $var in
install_vsftpd)
install_vsftp;
;;
create_user)
create_user
;;
quit)
exit 1
;;
esac
done