zoukankan      html  css  js  c++  java
  • FTP 参数详细解释与简单搭建和测试

    linux下ftp配置文件详解

    如果是默认安装vsftpd的话,以下是一些文件的位置约定:
    /usr/sbin/vsftpd ---- VSFTPD的主程序
    /etc/rc.d/init.d/vsftpd ---- 启动脚本
    /etc/vsftpd/vsftpd.conf ---- 主配置文件
    /etc/pam.d/vsftpd ---- PAM认证文件
    /etc/vsftpd/ftpusers ---- 禁止使用VSFTPD的用户列表文件
    /etc/vsftpd/user_list ---- 禁止或允许使用VSFTPD的用户列表文件
    /var/ftp ---- 匿名用户主目录
    /var/ftp/pub ---- 匿名用户的下载目录
    /etc/vsftpd/chroot_list  ---此文件包含对服务器上所有FTP内容有权限的用户名。对其他用户来说,他们在服务器上的主目录对他们显示为根目录
    /etc/shells  --在允许本地用户登录之前,系统默认检查是否有有效的用户 shell。以防 PAM 认证不可用的情况

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文件传输协议”。
    用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。
    vsftpd 是一个基于GPL发布的FTP服务器软件。其中的vs是“ Very Secure”的缩写
    控制连接:TCP 21,用于发送FTP命令信息
    数据连接:TCP 20,用于上传、下载数据

    Vsftp工作模式
    FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式
    主动模式:服务端从20端口主动向客户端发起连接
    被动模式:服务端在指定范围内某个端口被动等待客户端连接
    VSFTP传输模式
    文本模式:ASCII模式,以文本序列传输数据
    二进制模式:Binary模式,以二进制序列传输数据
    FTP用户的类型
    匿名用户:anonymous或ftp
    本地用户:帐号名称、密码等信息保存在passwd/shadow文件中
    虚拟用户:使用独立的帐号/密码数据文件

    --配置文件

    [root@db1 vsftpd]#  cat /etc/vsftpd/vsftpd.conf | grep -v '^#' | grep -v '^$'
    #常用全局配置,配置文件中=两边值不能有空格
    listen_address=192.168.4.1 设置监听的IP地址
    listen=YES #是否以独立运行的方式监听服务
    listen_port=21 #设置监听FTP服务的端口号
    download_enable=YES #是否允许下载文件
    max_clients=0 #限制并发客户端连接数
    max_per_ip=0 #限制同一IP地址的并发连接数
    pasv_enable=yes #开启被动模式
    pasv_min_port=9981 #设置最小的被动端口号
    pasv_max_port=9981 #设置最大的被动端口号
    
    # 匿名用户配置,说明:匿名用户账号名称默认为ftp或anonymous,不需要登录密码,默认只能下载无法上传。
    anonymous_enable=YES         # 是否允许匿名ftp,如否则选择NO
    anon_umask=022 #匿名用户所上传文件的权限掩码
    anon_upload_enable=YES       # 匿名用户是否能上传
    anon_mkdir_write_enable=YES  # 匿名用户是否能创建目录 
    anon_other_write_enable=YES  # 修改文件名和删除文件
    anon_root=/var/ftp #匿名用户的FTP根目录
    anon_max_rate=0 #限制最大传输速率(字节/秒)
    
    # 本地用户配置,本地用户访问限制
    local_enable=YES # 是否允许本地用户登录
    local_umask=022  # umask 默认755,本地用户所上传文件的权限掩码
    write_enable=YES #是否启用写入权限
    local_root=/home/ftp #设置本地用户的FTP根目录(默认为用户的宿主目录)
    local_max_rate=0 #限制最大传输速率(字节/秒)
    chroot_local_user=YES  # 本地用户禁锢在宿主目录中
    chroot_list_enable=YES # 是否将系统用户限止在自己的home目录下
    chroot_list_file=/etc/vsftpd.chroot_list # 列出的是不chroot的用户的列表
    chown_upload=YES  # 是否改变上传文件的属主
    chown_username=username # 是否改变上传文件的属主,如果是则需要输入一个系统用户名
    userlist_enable=YES #是否启用user_list列表文件
    userlist_deny=NO 是否禁用user_list中的用户
    deny_email_enable=YES # 是否允许禁止匿名用户使用某些邮件地址
    banned_email_file=/etc/vsftpd.banned_emails # 禁止邮件地址的文件路径
    ftpd_banner=Welcome to FTP service. # 定制欢迎信息
    dirmessage_enable=YES # 是否显示目录说明文件, 需要手工创建.message文件
    message_file= # 设置访问一个目录时获得的目录信息文件的文件名,默认是.message
    xferlog_enable=YES # 是否记录ftp传输过程
    xferlog_file=/var/log/vsftpd.log # ftp传输日志的路径和名字
    xferlog_std_format=YES # 是否使用标准的ftp xferlog模式
    ascii_upload_enable=YES   # 是否使用ascii码方式上传文件
    ascii_download_enable=YES # 是否使用ascii码方式下载文件
    connect_from_port_20=YES # 是否确信端口传输来自20(ftp-data)  
    nopriv_user=ftpsecure # 运行vsftpd需要的非特权系统用户默认是nobody
    async_abor_enable=YES # 是否允许运行特殊的ftp命令async ABOR.
    
    # FTP服务器的资源限制
    idle_session_timeout=600 # 设置session超时时间
    data_connection_timeout=120 # 设置数据传输超时时间
    max_clients=50 # 用户最大连接数 默认是0不限止 
    max_per_ip=5   # 每个IP地址最大连接数
    anon_max_rate=102400  # 匿名的下载速度 KB
    local_max_rate=102400 # 普通用户的下载速度 KB 

    !为执行外部操作系统的命令。

    !为执行外部操作系统的命令。
    ftp> help 列出 ftp 文件传输,可使用的任何命令。
    ftp> !ls 列出本地工作站,目前目录下的所有文件名。
    ftp> !pwd 列出本地工作站,目前所在的工作目录位置。
    ftp> ls 列出远端工作站目前目录下的所有文件名。
    ftp> dir 列出远端工作站目前目录下的所有文件名(略同于 UNIX 的 ls -l 指令).
    ftp> pwd 列出远端工作站目前所在的目录位置。
    ftp> cd dir1 更改远端工作站的工作目录位置至 dir1 下。
    ftp> get file1 将远端工作站的文件 file1 ,拷贝到本地工作站中。
    ftp> put file2 将本地工作站的文件 file2 ,拷贝到远端工作站中。
    ftp> mget *.c 将远端工作站中,文件名后缀为 c 的所有文件,拷贝到本地工作站中。
    ftp> mput *.txt 将本地工作站中,文件名后缀为 txt 的所有文件,拷贝到远端工作站中。
    ftp> bin 以二进制方式传输文件,切记在传送可执行文件时要先执行此命令。
    可以将ASCII文件按二进制方式传输,但决不能将二进制文件按ASCII方式传输,否则二进制文件的内容会遭到破坏而无法使用。
    ftp> asc 以ASCII方式传输文件,只在传输ASCII文件时用,特别是在DOS和Solaris之间传输时用。
    ftp> prompt 使用 mput/mget 时不用每个文件皆询问yes/no
    ftp> quit 结束 ftp 工作。
    ftp> bye 结束 ftp 工作,和quit一样。
    注: 从PC到工作站间的文件传输也可在 PC端WIN95下的 FTP命令进行文件传输,用法与上所述大致相同。

    #配置拥有所有权限的匿名用户

    # yum -y install vsftpd
    # chown ftp /var/ftp/pub/
    # cp -a /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.back
    # vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES     #启用匿名访问
    anon_upload_enable=YES    #允许匿名用户可上传文件
    anon_mkdir_write_enable=YES   #允许匿名用户可创建目录
    anon_other_write_enable=YES   #开放其他写入权比如改名,需要手动添加
    # systemctl restart vsftpd
    #测试
    在Windows上文件里面的地址栏输入ftp://10.11.9.11
    在Linux中匿名登陆FTP服务器需要先yum install ftp软件,然后输入ftp 10.11.9.11,之后输入用户ftp或者anonymous,密码为空回车即可登陆。

    #配置ftp本地用户的访问控制

    # yum -y install vsftpd
    # chown ftp /var/ftp/pub/
    # cp -a /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.back
    # useradd user1
    # useradd user2
    # echo '123456' | passwd --stdin user1
    # echo '123456' | passwd --stdin user2
    # vim /etc/vsftpd/vsftpd.conf
    local_enable=YES      #启用本地系统用户
    local_umask=000      #修改权限掩码为000,用系统的setfacl权限限制即可
    chroot_local_user=YES   #是否将用户禁锢在local_root设置的目录
    local_root=/var/ftp      #设置本地用户的FTP根目录
    chroot_list_enable=YES   #是否启用列表控制,启用后和chroot_list_file配合使用
    chroot_list_file=/etc/vsftpd/chroot_list  #该文件要自己创建,列表中的用户将被禁锢在目录中
    userlist_enable=YES      #是否开启用户列表访问控制
    userlist_deny=YES        #拒绝访问FTP用户列表是否启用

    说明:userlist_enable=YES对应/etc/vsftpd/user_list文件灵活控制用户访问
    1 userlist_enable=YES,userlist_deny=YES 满足这两个条件时,出现在user_list文件里的用户会被拒绝访问FTP服务器
    2 userlist_enable=YES,userlist_deny=NO 满足这两个条件时,只允许出现在user_list文件里的用户登录FTP服务器
    3 只要出现在/etc/vsftpd/ftpusers文件里的用户都禁止登陆FTP服务器,优先级要高于上面的user_list文件

    # service iptables stop //关闭iptables
    # iptables -A INPUT -p tcp –dport 21 -j ACCEPT
    防火墙配置VSFTPD 被动端口开放:
    # iptables -A INPUT -p tcp –dport 30000:30100 -j ACCEPT //端口30000-30100只是举例,可以根据实际情况自定义
    # service iptables save //保存iptables配置
    # service iptables restart //重启防火墙
    SELINUX永久开启FTP支持
    # setsebool -P ftp_home_dir on
    # setsebool -P allow_ftpd_full_access on
    # setsebool -P allow_anon_write_enable on
    关闭selinux
    # /usr/sbin/setenforce 0 #临时
    # sed -i 's/=enforcing/=disabled/' /etc/selinux/config #永久关闭
    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=NO # 禁用匿名用户
    local_enable=YES #是否允许本地用户访问
    write_enable=NO #YES,ftp写的权限
    local_umask=022 ##设置本地用户所上传文件的默认权限掩码值(反掩码)
    dirmessage_enable=YES #连接打印的消息
    xferlog_enable=YES
    connect_from_port_20=YES #20端口 
    xferlog_file=/var/log/xferlog
    xferlog_std_format=YES
    chroot_local_user=YES #是否将FTP本地用户禁锢在宿主目录中
    chroot_list_enable=YES #启动限制用户的列表 
    chroot_list_file=/etc/vsftpd/chroot_list #每行一个用户名
    pam_service_name=vsftpd
    userlist_enable=YES #配置yes之后,user_list的用户不能访问ftp
    tcp_wrappers=YES #是否启用tcp_wrappers主机访问控制
    listen_ipv6=YES
    listen_port=60021
    pasv_enable=YES ##默认允许被动模式连接
    local_root=/home/test ##设置本地用户的FTP根目录(默认为用户的宿主目录)
    allow_writeable_chroot=YES #允许被限制用户的主目录具有写权限
    download_enable=YES  #是否允许下载文件(建立仅限于浏览、上传的FTP服务器时,可将此项设置为“NO”);
    userlist_enable=YES #是否启用userl_ist用户列表文件;
    userlist_deny=YES #是否禁用user_list列表文件中的用户账号;
    max_clients=0 #最多允许多少个客户端同时连接(0为无限制);
    max_per_ip=0 #对来自同一个ip地址的客户端,最多允许多少个并发连接(0为无限制);
    [root@localhost vsftpd]# vim /etc/vsftpd/chroot_list
    #添加用户
    ###useradd ftpuser -s /sbin/nologin
    [root@localhost vsftpd]# useradd -d /home/test/ -s /sbin/nologin test
    [root@localhost vsftpd]# passwd test
    [root@localhost home]# cat /etc/passwd |grep test
    test:x:1000:1000::/home/test/:/sbin/nologin
    [root@localhost vsftpd]# chown -R test /home/test/
    [root@localhost vsftpd]# vim /etc/vsftpd/virtusers #多个ftp用户,可以分别写入
    test
    ***
    [root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
    [root@localhost vsftpd]# chmod 600 /etc/vsftpd/virtusers.db
    [root@localhost vsftpd]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
    [root@localhost vsftpd]# vim /etc/pam.d/vsftpd
    #先将配置文件中原有的 auth 及 account 的所有配置行均注释掉,如果系统为32位,上面lib64改为lib
    auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
    account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
    #用户登录终端设为/bin/false(即:使之不能登录系统)
    [root@localhost vsftpd]# useradd test -d /home/test -s /bin/false
    [root@localhost vsftpd]# echo "t***" | passwd --stdin test
    [root@localhost vsftpd]# chown -R test:test /home/test
    #建立虚拟用户个人配置文件
    [root@localhost vsftpd]# mkdir /etc/vsftpd/vconf
    [root@localhost vsftpd]# cd /etc/vsftpd/vconf
    #这里建立两个虚拟用户配合文件
    [root@localhost vconf]# touch test
    [root@localhost vconf]# vim test
        local_root=/home/test/test/
        write_enable=YES
        anon_world_readable_only=NO
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        anon_other_write_enable=YES
    [root@localhost vconf]# pwd
    /etc/vsftpd/vconf
    [root@localhost vconf]# more test
    local_root=/home/test/
    write_enable=YES
    anon_world_readable_only=NO
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    
    [root@localhost vconf]# mkdir -p /home/test/test/
    [root@localhost vconf]# chmod -R 775 /home/test/test
    #firewall-cmd --permanent --zone=public --add-service=ftp
    #firewall-cmd --reload
    #getsebool -a | grep ftp
    #setsebool -P ftpd_full_access on
    systemctl stop  vsftpd.service
    systemctl start  vsftpd.service
    #测试
    [root@localhost ~]# cd /home/test/test/
    [root@localhost test]# touch 1.txt 2.txt
    [root@localhost vsftpd]# netstat -tuln
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
    tcp6       0      0 :::21                   :::*                    LISTEN     
    tcp6       0      0 :::22                   :::*                    LISTEN     
    tcp6       0      0 ::1:25                  :::*                    LISTEN 
    

    错误:

    500 OOPS: vsftpd: cannot locate user specified in 'guest_username':vsftpd
    #注释配置文件中的guest_username
    500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    500 OOPS: 远程主机关闭连接。

    添加参数 allow_writeable_chroot=YES

    --在cmd中登录ftp
    C:Usersadmin>ftp 10.11.9.11
    连接到 10.11.9.11220 (vsFTPd 3.0.2)
    200 Always in UTF8 mode.
    用户(10.11.9.11:(none)): test
    331 Please specify the password.
    密码:
    230 Login successful.
    ftp> ls

    ---nginx代理ftp

    [root@localhost nginx-1.16.1]# vim /usr/local/nginx/conf/nginx.conf
     35     server {
     36         listen       9060; # Nginx代理的端口
     37         server_name  10.11.9.11; # 服务器IP
     38     
     39         #charset koi8-r;
     40     
     41         #access_log  logs/host.access.log  main;
     42         location / {
     43         location / {
     44             root   /home/test; # 代理的ftp服务器文件夹觉得路径
     45             index  test; # 欢迎页,写上代理ftp服务器的文件夹
     46             autoindex on; # 打开文件目录列表
     47             autoindex_exact_size on; # 显示文件大小 单位字节
     48             autoindex_localtime on;# 显示时间
     49             charset uft-8,gbk;# 设置编码防止中午乱码
     50         }}
    
    ### test   /home/test/userphoto/;为ftp的用户和路径
    /usr/local/nginx/sbin/nginx
    #重启ftp和nginx
    [root@localhost userphoto]# ps -ef|grep nginx
    root      7582  6828  0 14:55 pts/0    00:00:00 grep --color=auto nginx
    root     31218     1  0 11:55 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx

    参考:https://blog.51cto.com/longlei/2068636

  • 相关阅读:
    局部变量和全局变量
    Javascript高级编程学习笔记(26)—— 函数表达式(4)私有变量
    Javascript高级编程学习笔记(25)—— 函数表达式(3)模仿块级作用域
    Javascript高级编程学习笔记(24)—— 函数表达式(2)闭包
    Javascript高级编程学习笔记(23)—— 函数表达式(1)递归
    Javascript高级编程学习笔记(22)—— 对象继承
    Javascript高级编程学习笔记(21)—— 对象原型
    Javascript高级编程学习笔记(20)—— 创建对象
    Javascript高级编程学习笔记(19)—— 对象属性
    Javascript高级编程学习笔记(18)—— 引用类型(7)单体内置对象
  • 原文地址:https://www.cnblogs.com/yhq1314/p/12660233.html
Copyright © 2011-2022 走看看