#!/bin/bash
setenforce 0 # 临时关闭selinux
getenforce # 查看selinux状态
sed -i "s/SELINUX\=.*/SELINUX=disabled/g" /etc/selinux/config
# 永久关闭selinux,重启系统生效
repo="centos-yum.sh"
if [ ! -e $repo ]; then # -e 判断文件存在;参考:Shell if 条件判断文件或目录
yum install -y wget
wget www.eisc.cn/file/shell/centos-yum.sh ; sh centos-yum.sh
else
echo "yum已经切换"
fi
vsftpdinstall(){
vsftpdc=(`find /etc/vsftpd -name "vsftpd.conf" | sed "s/ //g"`) # shell 小括号属性是 定义数组变量 lsnginx 它的值是一条命令的执行结 果
echo "
vsftpd 配置文件总个数为:${#vsftpdc[*]}
列出 nginx 配置文件" ${vsftpdc[*]} # [*] 星号列出所有元素, 星号改成1 为指定角标1,含义为第二个元素,默认从0开始
if [ ${#vsftpdc[*]} -lt 1 ] # -lt 小于; $ 为空,! 非运算; $? 判断上一条命令执行状态,0正常; 参考:linux shell $$,$! 等的特殊用法
then
echo "
配置文件为空,#开始安装vsftpd
安装vsftp需要的密码验证模块等环境"
#yum -y install pam pam-devel db4 de4-devel db4-tcl vsftpd
yum -y install vsftpd
mkdir -p /var/ftp/virtual # -p 自动创建父目录文件夹: [?v?? t??(?) l] 虚拟
useradd vsftpd -M -s /sbin/nologin # 创建 vsftpd 用户: ,如果此目录不存在,则同时使用-m选项,可以创建主目录。
# -s Shell文件 指定用户的登录Shell。
useradd ftpvload -d /var/ftp/ -s /sbin/nologin
# -d 目录 指定用户主目录
sleep 3 # 等待 3 秒
chown -R ftpvload.ftpvload /var/ftp/ # -R 目录拥有者ftpvload:ftpvload 其中 . 可以换成 :
sleep 5
echo "#-------------------------- 开始配置vsftpd --------------------------#"
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.back
# mv 重命名
# 注意配置文件每行末尾不能有空格或注释
echo "
pasv_promiscuous=YES
#[prəˈmɪskjʊəs] 混杂 ,否则导致被动模式无法ls查看文件
anonymous_enable=NO
# [?? n? n? m? s] 匿名:匿名登录
local_enable=YES
# [?l?? k(?)l] 本地 [?? ne? b(?)l] 允许
write_enable=YES
# [r?? t] 写,权限
local_umask=022
#umask = 022 时,新建的目录 权限是755,文件的权限是 644
#umask = 077 时,新建的目录 权限是700,文件的权限时 600
#vsftpd的local_umask和anon_umask借鉴了它
anon_upload_enable=NO
# anonymous 的简写:匿名,上传文件
anon_mkdir_write_enable=NO
dirmessage_enable=YES
# 允许为目录配置显示信息,显示每个目录下面的message_file文件的内容。
xferlog_enable=YES
# 启用记录上传/下载活动日志功能。
connect_from_port_20=YES
# [k?? n? k t] 连接 启用FTP数据端口的连接请求
chown_uploads=NO
# 是否具有上传权限.用户由chown_username参数指定。
xferlog_file=/var/log/vsftpd.log
# 日志目录
xferlog_std_format=YES
# 使用标准的ftpdxferlog日志格式
async_abor_enable=no
# 强烈建议不要启用该选项,否则将可能导致出错!
ascii_upload_enable=YES
ascii_download_enable=YES
# ascii 编码的上传下载启动
ftpd_banner=Welcome to FTP Server
# [?ba n?] 标语
chroot_local_user=YES
# 虚拟列表用户是不受限制目录
ls_recurse_enable=NO
listen=YES
# [?l? s(?)n] 听,监听端口
hide_ids=YES
# [h??d] 隐藏
pam_service_name=vsftpd
# 设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/
userlist_enable=YES
tcp_wrappers=NO
# [?r? p?z] 包装 在VSFTPD中使用TCP_Wrappers远程访问控制机制,强烈建议改为 NO 否则ls 无法
guest_enable=YES
# [?? s t] 客人
guest_username=ftpvload
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vconf
# 用户的配置文件,类似于nginx多网站一样
#------- 配置被动模式 ----------
pasv_enable=YES
pasv_min_port=63000
pasv_max_port=65535
" > /etc/vsftpd/vsftpd.conf # 将echo 打印的内容写入配置文件
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
# cp 复制,备份文件
sed -i s/^/#/g /etc/pam.d/vsftpd # 删除开头为 # 符号的行
echo "auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers" >> /etc/pam.d/vsftpd
sleep 3
echo "#-------------------------- 配置虚拟用户 --------------------------#"
touch /var/log/vsftpd.log
chown vsftpd.vsftpd /var/log/vsftpd.log
mkdir /etc/vsftpd/vconf/ -p
sleep 3
echo -e "test\ntest1234" >> /etc/vsftpd/virtusers
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
# 生效虚拟用户配置
mkdir /var/ftp/virtual/test
echo "
# 允许可写
allow_writeable_chroot=YES
#设定支持ASCII模式的上传和下载功能
ascii_upload_enable=YES
ascii_download_enable=YES
local_root=/var/ftp/virtual/username
#指定虚拟用户的具体主路径
anonymous_enable=NO
#设定不允许匿名用户访问
write_enable=YES
#设定允许写操作
local_umask=022
#设定上传文件权限掩码
anon_upload_enable=NO
#设定不允许匿名用户上传
anon_mkdir_write_enable=NO
#设定不允许匿名用户建立目录
idle_session_timeout=600
#设定空闲连接超时时间
data_connection_timeout=120
#设定单次连续传输最大时间
max_clients=10
#设定并发客户端访问个数
max_per_ip=5
#设定单个客户端的最大线程数,这个配置主要来照顾Flashget、迅雷等多线程下载软件
#local_max_rate=50000
#设定该用户的最大传输速率,单位b/s" >> /etc/vsftpd/vconf/vconf.tmp
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/test
sed -i s/username/test/g /etc/vsftpd/vconf/test
echo "完成"
else
echo "已经安装vsftpd"
fi
}
vsftpdinstall
echo "
#---------------- 创建虚拟用户 ----------------
请输入ftp账户名确认后输入密码
"
if read -t 5 -p "Please enter you name: " username
then
if [ -f /etc/vsftpd/vconf/$username ] #判断用户是否存在
then
echo "The $username is exists, please input another name."
else
read -s -p "Please enter your password: " passwd
echo -e "$username\n$passwd" >> /etc/vsftpd/virtusers
# 将ftp账户密码写入配置文件
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
# 将密码生成密钥
mkdir -p /var/ftp/virtual/$username
# 创建ftp 用户的家目录
chown -R ftpvload.ftpvload /var/ftp
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/$username
sed -i s/username/$username/g /etc/vsftpd/vconf/$username
echo "The config is over."
fi
else
echo -e "\n 您超过5s没有配置信息,系统自动创建默认ftp账户
ftp 用户名:eisc 密码:eisc.cn 默认路径:/var/ftp/virtual/eisc
"
echo -e "eisc\neisc.cn" >> /etc/vsftpd/virtusers
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
mkdir -p /var/ftp/virtual/eisc
chown -R ftpvload.ftpvload /var/ftp
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/eisc
sed -i s/username/eisc/g /etc/vsftpd/vconf/eisc # 修改用户家目录
fi
chmod 755 /var/ftp/*
systemctl restart firewalld
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=63000-65535/tcp
# 开放端口范围:3000到4000
systemctl restart firewalld vsftpd
# 开放防火墙端口和重启vsftpd
#---------------- win 文件管理访问ftp出现问题 ----------------
#解决办法:设置IE浏览器>>Internet选项>>高级>>将“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”选项去掉>>确定即可
#---------------- ftp 下载文件以及常用命令 ----------------
#open # 与ftp服务器相连接;
#send(put) # 上传文件
#get: # 下载文件
#mget: # 下载多个文件;
#cd: # 切换目录;
# 脚本执行:wget eisc.cn/file/shell/vsftpd.sh ; sh vsftpd.sh
################################ftp报错含义#############################
FTP 数字代码的意义
110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路埠开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接埠关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令: 服务器处理:ftp 500 用户ftp配置文件绑定了不存在的家目录路径
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。
532 储存文件需要账户登入。
550 未执行请求的操作: 没有读写权限
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。
553 未执行请求的的命令,名称不正确。