linux 安装 ftp并配置用户目录-ftp报错数字含义

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
简介: linux 文件传输--自动化部署ftp

#!/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 未执行请求的的命令,名称不正确。

目录
相关文章
|
15天前
|
Linux 数据安全/隐私保护 Windows
Linux共享Windows目录
Linux共享Windows目录
|
8天前
|
Linux 应用服务中间件 nginx
|
14天前
|
Linux
linux如何去掉目录背景颜色
linux如何去掉目录背景颜色
15 1
|
18天前
|
JSON Linux 网络安全
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
【Azure 应用服务】如何从App Service for Linux 的环境中下载Container中非Home目录下的文件呢?
|
6天前
|
域名解析 负载均衡 网络协议
Linux网络接口配置不当所带来的影响
总而言之,Linux网络接口的恰当配置是保证网络稳定性、性能和安全性的基础。通过遵循最佳实践和定期维护,可以最大程度地减少配置错误带来的负面影响。
26 0
|
9天前
|
监控 安全 网络协议
快速配置Linux云服务器
快速配置Linux云服务器
|
18天前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
18天前
|
应用服务中间件 Linux PHP
【Azure 应用服务】App Service For Linux 环境中,如何修改 Nginx 配置中 server_name的默认值 example.com
【Azure 应用服务】App Service For Linux 环境中,如何修改 Nginx 配置中 server_name的默认值 example.com
|
18天前
|
Java Linux Shell
【Azure 应用服务】部署Jar到App Service for Linux,因启动命令路径配置错误而引起:( Application Error 问题
【Azure 应用服务】部署Jar到App Service for Linux,因启动命令路径配置错误而引起:( Application Error 问题
|
20天前
|
Shell Linux 开发工具
在Linux中,如何编写shell脚本将当前目录下大于10K的文件转移到/tmp目录下?
在Linux中,如何编写shell脚本将当前目录下大于10K的文件转移到/tmp目录下?