linux centos 搭建 ftp 创建虚拟用户 并使用 ftp 命令上传和下载文件

2021-02-25 15:31:24 浏览数 (1)

#!/bin/bash

repo="/etc/yum.repos.d/epel-7.repo"

if [ ! -e $repo ]; then # -e 判断文件存在;参考:Shell if 条件判断文件或目录

yum install -y wget

cd /etc/yum.repos.d/

mkdir bak

mv * bak

wget http://mirrors.aliyun.com/repo/Centos-7.repo

wget http://mirrors.aliyun.com/repo/epel-7.repo

# 移动两个文件到 目录

#wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

#sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo

# yum源没有对应版本包匹配;修改yum为centos7

yum clean all # 清除原有缓存

yum makecache # 生成新的缓存

# make cache [me?k] [ka?] 制作 缓存{ka xi}

yum list # 校验yum

cd

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

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 Serve

# [?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=YES

# [?r? p?z] 包装 在VSFTPD中使用TCP_Wrappers远程访问控制机制,默认值为YES

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=3000

pasv_max_port=4000

" > /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 "testntest1234" >> /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

#---------------- 创建虚拟用户 ----------------

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 "$usernamen$passwd" >> /etc/vsftpd/virtusers

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

mkdir -p /var/ftp/virtual/$username

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 "nThe 5s has passed, you are to slow! "

fi

chmod 755 /var/ftp/*

systemctl restart firewalld

firewall-cmd --permanent --add-port=21/tcp

systemctl restart firewalld vsftpd

# 开放防火墙端口和重启vsftpd

#---------------- win 文件管理访问ftp出现问题 ----------------

#解决办法:设置IE浏览器>>Internet选项>>高级>>将“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”选项去掉>>确定即可

#---------------- ftp 下载文件以及常用命令 ----------------

#open # 与ftp服务器相连接;

#send(put) # 上传文件

#get: # 下载文件

#mget: # 下载多个文件;

#cd: # 切换目录;

0 人点赞