前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux centos 搭建 ftp 创建虚拟用户 并使用 ftp 命令上传和下载文件

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

原创
作者头像
eisc
修改2021-02-25 15:31:24
8.1K0
修改2021-02-25 15:31:24
举报

#!/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 "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

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

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

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: # 切换目录;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com